其他
软件应用丨多快好省地使用pandas分析大型数据集
The following article is from Python大数据分析 Author 费弗里
数据seminar每天18:00与您准时见面!
本文转载自公众号Python大数据分析
一、简介
图1
二、pandas多快好省策略
import pandas as pd
raw = pd.read_csv('train.csv')
# 查看数据框内存使用情况
raw.memory_usage(deep=True)
图2
这样一来我们后续想要开展进一步的分析可是说是不可能的,因为随便一个小操作就有可能会因为中间过程大量的临时变量而撑爆内存,导致死机蓝屏,所以我们第一步要做的是降低数据框所占的内存:
指定数据类型以节省内存
raw = pd.read_csv('train.csv', nrows=1000)
raw.info()
图3
raw = pd.read_csv('train.csv', nrows=1000,
dtype={
'ip': 'int32',
'app': 'int16',
'device': 'int16',
'os': 'int16',
'channel': 'int16',
'is_attributed': 'int8'
})
raw.info()
图4
图5
(
raw
# 按照app和os分组计数
.groupby(['app', 'os'])
.agg({'ip': 'count'})
)
图6
只读取需要的列
raw = pd.read_csv('train.csv', usecols=['ip', 'app', 'os'])
raw.info()
图7
图8
分块读取分析数据
from tqdm.notebook import tqdm
# 在降低数据精度及筛选指定列的情况下,以1千万行为块大小
raw = pd.read_csv('train.csv',
dtype={
'ip': 'int32',
'app': 'int16',
'os': 'int16'
},
usecols=['ip', 'app', 'os'],
chunksize=10000000)
# 从raw中循环提取每个块并进行分组聚合,最后再汇总结果
result = \
(
pd
.concat([chunk
.groupby(['app', 'os'], as_index=False)
.agg({'ip': 'count'}) for chunk in tqdm(raw)])
.groupby(['app', 'os'])
.agg({'ip': 'sum'})
)
result
图9
利用dask替代pandas进行数据分析
图10
图11
(
raw
#按照app和os分组计数
.groupby(['app', 'os'])
.agg({'ip': 'count'})
.compute() # 激活计算图
)
图12
关于dask的更多知识可以移步官网自行学习:
https://docs.dask.org/en/latest/
图13
点击阅读原文,进入CCAD数据库
长按识别,添加小客服企业微信~
·END·
星标⭐我们不迷路!
想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文丨Python大数据分析
推荐丨青酱
排版编辑丨青酱
欢迎扫描👇二维码添加关注