【Python数据处理】读取数据进行抽样

在进行数据读取的时候,有时候遇到大文件的数据,例如几百万或者上千万的数据,这个时候直接读取文件数据,需要等待一段时间才能将数据读取出来。有没有办法只随机抽样一部分数据,然后我们快速进行数据探索,到真正的系统部署的时候,才读取所有数据进行处理。

对于这个问题,使用 Pandas 的 skiprows 和 概率知识,就能实现读取数据时候进行随机抽样。

首先,我们现在有一份数据:tianchi_fresh_comp_train_user.csv

该数据来自阿里数据天池的数据。现在需要对该数据进行快速数据探索,应该怎样才是最好?

首先,我们读取全量数据,代码如下:

# 随机抽样
import pandas as pd
import numpy as np
import os
os.chdir('D:/阿里移动推荐算法/fresh_comp_offline/')
user_table = pd.read_csv('tianchi_fresh_comp_train_user.csv',engine='python',encoding ='utf-8')
print('数据行和列为: ',user_table.shape)

突然发现读取了半天,数据依然没法跑出来。

现在我又想抽样一部分数据进行探索,怎样能够快速满足我这个需求。

我们查看了一下read_csv函数,发现其 skiprows 参数能够满足我的需求,于是我写了这一段代码:

# 随机抽样
import pandas as pd
import numpy as np
import os
os.chdir('D:/阿里移动推荐算法/fresh_comp_offline/')
user_table_sample = pd.read_csv('tianchi_fresh_comp_train_user.csv',
skiprows = lambda x: x>0 and 
np.random.rand() > 0.1)
print('数据行和列为: ',user_table_sample.shape)

得到结果为:

数据行和列为:  (2327275, 6)

一下子抽取了232.7万的数据,这只是里面的10%的数据量。

我们看看是哪个参数这么神奇:原来是skiprows 参数。

使用 skiprows 参数,其中里面的x > 0 确保首行读入,而np.random.rand() > 0.1 表示 90% 的数据都会被随机过滤掉。那么,只有全部数据的 10% 才有机会选入内存中。

使用这个方法,读取的数量是随机抽样的,相当于随机抽取了原来的10%,对快速进行数据分析和数据探索有很好的帮助。

好的,这个小技巧,大家学会了么?

学会的话,感觉使用一个大数据样本进行测试。

THE END
分享
二维码
海报
【Python数据处理】读取数据进行抽样
在进行数据读取的时候,有时候遇到大文件的数据,例如几百万或者上千万的数据,这个时候直接读取文件数据,需要等待一段时间才能将数据读取出来。有没有办法只……
<<上一篇
下一篇>>