Python實現分層抽樣

2021-09-23 08:00:06 字數 1001 閱讀 5435

首先說明一下我的需求。result_33.txt的檔案中有一些號碼標籤及分類的標記。具體如下

中國農業銀行 銀行

招商銀行信用卡 信用卡

門窗 無關

我想做的是從每乙個類標記中隨機抽出1000個標籤。如果該類標籤下的樣本數不足1000,則全部抽取。然後將抽取的結果儲存到另乙個檔案中。

具體**如下(盡可能減少記憶體佔用量,但是檔案掃瞄次數太多):

import random

if __name__ == '__main__':

data={}

with open("result_33.txt",'r',encoding='utf-8-sig') as r_dict,\

open('check_result_33.txt','w',encoding='utf-8') as w_dict:

for line in r_dict:

items=line.strip('\n').split()

data[items[1]]=data.get(items[1],0)+1

for key,value in data.items():

r_dict.seek(0) # 返回檔案開始位置

if value<1000:

for line in r_dict:

if key==line.strip('\n').split()[1]:

w_dict.write(line)

else:

rand_list=list(range(value))

random.shuffle(rand_list)

rand_list=iter(rand_list)

for line in r_dict:

if key==line.strip('\n').split()[1] and next(rand_list)<1000:

w_dict.write(line)

python分層抽樣 抽樣方法 分層抽樣

接著上文說,簡單隨機抽樣法和分層抽樣法的對比有過乙個經典的例子。1936年美國 文學文摘 雜誌對結果進行了調查 他們根據當時的 號碼簿及該雜誌訂戶俱樂部會員名單,郵寄一千萬份問卷調查表,約240萬份,結論是蘭登取勝,而蓋洛普也組織了抽樣調查,進行民意測試。他的 與 文學文摘 截然相反,認為羅斯福必勝...

分層抽樣原理及Oracle實現

在實際的資料探勘應用中,我們往往會從各方收集很多的資料,這些資料每分每秒都在增加,但我們如果用所有的這些資料並無益處。一是資料量過大,處理起來難度會大非常多,要求你的基礎計算平台效能很好,甚至需要用到平行計算,有時是沒有必要的 二是資料都是基於人及人的行為所產生的影響的,而人是會發生變化的,所以久遠...

記錄抽取及隨機抽樣及分層抽樣

單條件抽取 bc.columns id comments title 將字元型轉成整數型 bc id bc id astype int bc comments bc comments astype int bc title bc title astype str 抽取comments大於10000的...