我有一个大小为1.27gb的数据集。虽然我可以将它全部放入内存中,但是需要花费大量时间来进行数据分析。我的想法是随机抽取部分数据进行分析。
我使用的语言是python。我首先将所有数据放入hdf5:
的形式import pandas as pd
import numpy as np
import time
store = pd.HDFStore('train.h5', mode='w')
data_reader = pd.read_csv('./train.csv', chunksize=1e8)
for i, chuck in enumerate(data_reader):
store.append('all_train', chuck)
store.close()
执行此操作并不需要很长时间,生成的文件大小为1.64gb:
<class 'pandas.io.pytables.HDFStore'>
File path: train.h5
/all_train frame_table (typ->appendable,nrows->29118021,ncols->6,indexers->[index])
然后我尝试通过索引随机抽样一些数据:
store = pd.HDFStore('train.h5')
nrows = store.get_storer('all_train').nrows
r = np.random.randint(0,nrows,size=20)
now = time.time()
print_type(pd.read_hdf('train.h5', 'all_train', where="index=r"))
print 'Time Cost : %f' % (time.time() - now)
当样本量非常小时,比如20,采样数据需要0.2秒。但是,当我将大小增加到35时,需要2分钟以上。那么为什么时间成本增加如此之快?
有关大数据采样的建议吗?