最近,我用pandas处理了一把大数据……

简介: pandas堪称瑞士军刀般的存在,几乎可以胜任数据分析的全过程。如果说有什么缺点的话,那么就是其不支持分布式,所以对于小数据量完全不压力,但面对大数据时却当真有些乏力。近日,自己便用pandas处理了一些大数据场景,现分享几个心得技巧。

640.jpg


首先简单介绍下场景:数据是每个月一份的csv文件,字段数目10个左右,单个文件记录数约6-8亿之间,单个文件体积50G+的样子。表中是一条条的带有时间字段的数据,需求是对数据进行汇总统计和简单分析处理(一般而言,数据量巨大的需求处理逻辑都不会特别复杂)。所以,虽然标题称之为大数据,但实际上也没有特别夸张。


01 大数据读取


pandas自带了常用文件的读取方法,例如csv文件对应的读取函数即为pd.read_csv,这也是日常应用中经常接触的方法。然而对于处理这个50G的csv文件而言,直接使用是肯定不行的,当前个人电脑内存普遍在8G-16G内存之间,笔者的是一台8G内存的工作机,除去系统占用基本留给用于加载数据的空间不到6G,另一方面通过多次试验结果:对于一个2G的文件,读取过程中内存占用会达到4G左右,大概是实际文件体积的两倍,加载完毕之后会有有所回落。所以,就8G内存的工作机而言,读取一个2.5G的大文件本身已经存在一定风险。


为此,pandas开发者专为此设计了两组很有用的参数,分别用于控制行和列信息:

  • skiprows + nrows,前者用于控制跳过多少行记录,后者用于控制读取行数,skiprows默认值为0,nrows缺省读取所有行数,这也是最常用的方式。但合理的设置两个参数,可以实现循环读取特定范围的记录
  • usecols:顾名思义,仅加载文件中特定的列字段,非常适用于列数很多而实际仅需其中部分字段的情况,要求输入的列名实际存在于表中


640.png

pd.read_csv()中相关参数说明


具体到实际需求,个人实现时首先通过循环控制skiprows参数来遍历整个大文件,每次读取后对文件再按天分割,同时仅选取其中需要的3个列字段作为加载数据,如此一来便实现了大表到小表的切分。虽然受限于内存而执行效率有限,但也终究算是一种解决方案。


02 内存管理


仍然是循环读取大文件分表的问题,对于每次循环,读取一个大文件到内存,执行完相应处理流程后,显式执行以下两行代码即可,实测效果很有用。


del xx
gc.collect()


03 时间字段的处理


给定的大文件中,时间字段是一个包含年月日时分秒的字符串列,虽然在read_csv方法中自带了时间解析参数,但对于频繁多次应用时间列进行处理时,其实还有更好的方法:转为时间戳。


例如,在个人的实际处理中主要用到的操作包括:按时间排序、按固定周期进行重采样、分组聚合统计等,这几个操作中无一例外都涉及到时间列的比较,如果是字符串格式或者时间格式的时间列,那么在每次比较中实际要执行多次比较,而如果转换为时间戳后,则参与比较的实际上是一个整数值,毫无疑问这是效率最高的比较类型。进一步地,对于重采样需求而言,还可以通过整除特定的时间间隔,然后执行groupby操作即可。例如,执行每5分钟重采样,则可将所有时间戳(秒级)整除300,然后以相应结果作为groupby字段即可。


这里,补充两种将时间格式转换为时间戳的具体实现方法:


# 假设df['dt']列是时间格式,需将其转换为时间戳格式
# 方法一:
df['dt'] = (pd.to_datetime(df['dt'])-pd.to_datetime('1970-01-01T08:00:00')).total_seconds()
# 方法二:
df['dt'] = (pd.to_datetime(df['dt']).values - np.datetime64('1970-01-01T08:00:00Z')) // np.timedelta64(1, 's')


640.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
3天前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【6月更文挑战第12天】在数字时代,Python因其强大的数据处理能力和易用性成为数据分析首选工具。结合Pandas(用于高效数据处理)和Matplotlib(用于数据可视化),能助你成为数据分析专家。Python处理数据预处理、分析和可视化,Pandas的DataFrame简化表格数据操作,Matplotlib则提供丰富图表展示数据。掌握这三个库,数据分析之路将更加畅通无阻。
|
1月前
|
数据采集 SQL 数据可视化
《Pandas 简易速速上手小册》第5章:Pandas 数据合并与重塑(2024 最新版)
《Pandas 简易速速上手小册》第5章:Pandas 数据合并与重塑(2024 最新版)
31 1
|
9月前
|
数据采集 数据可视化 数据挖掘
利用Python和pandas分析瑞幸和茅台联名咖啡的市场策略
利用Python和pandas分析瑞幸和茅台联名咖啡的市场策略
|
数据处理 索引 Python
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(4)
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(4)
265 0
|
SQL 存储 Java
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(2)
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(2)
248 0
|
Java 数据处理 索引
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(3)
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(3)
153 0
|
SQL Java Go
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)
278 0
|
SQL JSON 数据可视化
Python数据分析大杀器之Pandas基础2万字详解(学pandas基础,这一篇就够啦)
Python数据分析大杀器之Pandas基础2万字详解(学pandas基础,这一篇就够啦)
|
存储 数据采集 SQL
数据分析之Pandas从入门到放弃:代码+实战,9分钟带你推开Pandas大门!!!
数据分析之Pandas从入门到放弃:代码+实战,9分钟带你推开Pandas大门!!!
162 0
数据分析之Pandas从入门到放弃:代码+实战,9分钟带你推开Pandas大门!!!
|
数据挖掘 索引 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十三)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
97 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十三)

热门文章

最新文章