用Python進(jìn)行抽樣的步驟:
第1部分:導(dǎo)入需要的庫(kù)
importrandom#導(dǎo)入標(biāo)準(zhǔn)庫(kù)
importnumpyasnp#導(dǎo)入第三方庫(kù)
這里用到了Python內(nèi)置標(biāo)準(zhǔn)庫(kù)random以及第三方庫(kù)Numpy,前者用于做隨機(jī)抽樣,后者用于讀取文件并做數(shù)據(jù)切片使用。
第2部分:實(shí)現(xiàn)簡(jiǎn)單隨機(jī)抽樣
data=np.loadtxt('data3.txt')#導(dǎo)入普通數(shù)據(jù)文件
data_sample=data[random.sample([iforiinrange(len(data))],2000)]
#隨機(jī)抽取2000個(gè)樣本
print(data_sample[:2])#打印輸出前2條數(shù)據(jù)
print(len(data_sample))#打印輸出抽樣樣本量
首先通過(guò)Numpy的loadtxt方法讀取數(shù)據(jù)文件。
然后使用Random庫(kù)中的sample方法做數(shù)據(jù)抽樣。
由于sample庫(kù)要求抽取的對(duì)象是一個(gè)序列或set,因此這里使用了一個(gè)列表推導(dǎo)式直接基于data數(shù)據(jù)集的記錄數(shù)生成索引列表,
然后再返回給sample隨機(jī)抽樣,抽樣數(shù)量為2000;最后從data中直接基于索引獲得隨機(jī)抽樣后的結(jié)果。
打印輸出前2條數(shù)據(jù)和總抽樣樣本量。返回結(jié)果如下:
[[-4.595013488.827416534.400965993.40332532-6.54589933]
[-7.23173404-8.926925196.828308733.03780054.64450399]]
2000
第3部分:傳統(tǒng)方法
ind=[]
foriinrange(len(data)):
ind.append(i)
而這里的列表推導(dǎo)式的寫法[iforiinrange(len(data))]除了在語(yǔ)法上更加簡(jiǎn)潔和優(yōu)雅外,在性能上同樣會(huì)有提升。
我們通過(guò)如下實(shí)驗(yàn)做簡(jiǎn)單測(cè)試,對(duì)從0到1000000的每個(gè)數(shù)求平方然后添加到列表。兩種方法如下:
#方法1:傳統(tǒng)方法
importtime
t0=time.time()#開(kāi)始時(shí)間
ind=[]
foriinrange(1000000):
sqr_values=i*i
ind.append(sqr_values)
t1=time.time()#結(jié)束時(shí)間
print(t1-t0)#打印時(shí)間
#方法2:列表推導(dǎo)式
importtime
t0=time.time()#開(kāi)始時(shí)間
sqr_values=[i*iforiinrange(1000000)]
t1=time.time()#結(jié)束時(shí)間
print(t1-t0)#打印時(shí)間
上述代碼執(zhí)行后的輸出結(jié)果分別是:
0.39202237129211426
0.12700724601745605
上面只是簡(jiǎn)單的計(jì)算邏輯并且數(shù)據(jù)量也不大,
如果配合大數(shù)據(jù)量以及更復(fù)雜的運(yùn)算,
那么效率提升會(huì)非常明顯。
以上內(nèi)容為大家介紹了如何用Python進(jìn)行抽樣?希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。