作者:Georgia Deaconu
翻译:陈超
校对:欧阳锦本文约1200字,建议阅读5分钟
本文介绍了Python处理数据集的方法。

作为一名数据科学家,我发现自己处理“大数据”的情况越来越多。我叫做大数据的是那些虽然不是很大,但是却足够让我的电脑处理到崩溃并且拖慢其他程序。

图片来自 Mika Baumeister UNsplash

这个问题并不新鲜,且对于所有问题而言,从来没有一劳永逸的万能公式。最好的方法依赖于你的数据以及你应用的目的。然而,最流行的解决方法通常在以下描述的分类之中。

1. 通过优化数据类型来减少内存使用

当使用Pandas从文件里加载数据的时候,如果不提前设定,通常会自动推断数据类型。

多数情况下这没什么问题,但是推断的数据类型并不一定是最优的。甚至,如果数值型列数据包括了缺失值,推断数据类型就会自动填充为浮点型。

在我处理大部分表征年、月或日的整型数据的时候,我最近通常会使用这种方法进行分析:

使用Pandas加载文件并明确数据类型(图片来自作者)

对于特定的案例,明确数据类型会让使用内存大大减少。请注意上述例子中用到的pandas类型pandas.Int16Dtype来使包含缺失值的列数据强制转换成整型数据。当在处理大型数据集时,需要你拥有对拟处理数据集的一些先验知识,因而会通过在内部使用pandas.NA而非numpy.nan来实现缺失值的最优数据类型。在纯粹探索未知数据集的时候该方法可能并不适用。

2. 将数据分块

当数据太大以至于与内存不相符,你可以使用Pandas的chunksize选项来将数据集分块,而非处理一大整块数据。使用该选项创造迭代器对象用于浏览不同块,并像加载整个数据集时进行过滤或分析。

以下是使用该选项浏览Yelp reviews 数据集的例子,提取每个块里评论日期的最小值和最大值,然后重建评论的完整时间跨度:

reader = pd.read_json(reviews_path, lines=True, orient = "records", chunksize = 100000)    # go through the chunks and extract min/max date    date_limits = []
for chunk in reader:   date_limits.append(max(chunk.date))        date_limits.append(min(chunk.date))   print("Reviews span from {} to {}". format(min(date_limits).strftime('%d-%m-%Y'),   max(date_limits).strftime('%d-%m-%Y')))

分块可用于最初的探索性分析到模型训练,仅需极少的额外启动即可实现。

3. 利用惰性计算

惰性计算指的是仅仅在真正需要执行的时候才计算的表达式。惰性计算是一个重要的概念(尤其在功能编程当中使用),如果你想关于它在python中的不同用法,你可以从这里开始

(https://towardsdatascience.com/what-is-

lazy-evaluation-in-python-9efb1d3bfed0)。

惰性计算是像Spark或者Dask这样的分配计算框架建立的基础。虽然他们设计用于聚类,你仍然可利用它们在你的个人电脑上处理大型数据集。

与Pandas主要的差异是它们不会直接在内存加载数据。相反,在读取命令的时候会扫描数据,推断数据类型并将其分成独立的部分(到目前为止没有新建)。仅仅在需要时独立为这些部分创建计算图形(因此叫做惰性)。

在之前的文章(https://towardsdatascience.com/a-pyspark-example-for-dealing-with-larger-than-memory-datasets-70dbc82b0e98)里,我提供了一个Pyspark的例子,对一个大于内存的数据集做探索性分析。Dask也很流行,并且例子也不难找(你可以查看两者比较https://docs.dask.org/en/latest/spark.html)。Dask语法仿照Pandas的语法,所以看起来很相似,然而Dask仅限于Python使用,但Spark可以在Java或Scala中使用。

其他库例如Vaex或Modin也提供了相似的功能,但是我本人还没有尝试过。

原文标题:

3 ways to deal with large datasets in Python

原文链接:

https://towardsdatascience.com/5-ways-to-deal-with-large-datasets-in-python-9a80786c4182

编辑:于腾凯

校对:林亦霖

译者简介

陈超,北京大学应用心理硕士在读。本科曾混迹于计算机专业,后又在心理学的道路上不懈求索。越来越发现数据分析和编程已然成为了两门必修的生存技能,因此在日常生活中尽一切努力更好地去接触和了解相关知识,但前路漫漫,我仍在路上。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | Python处理海量数据集的三种方法相关推荐

  1. python下载方法-python实现下载文件的三种方法_python

    本篇文章主要介绍了python实现下载文件的三种方法,最常用的方法就是通过Http利用urllib或者urllib2模块还有requests,有兴趣的可以了解一下. Python开发中时长遇到要下载文 ...

  2. python下载的文件放在哪里的-python实现下载文件的三种方法

    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...

  3. python 下载文件-python实现下载文件的三种方法_python

    本篇文章主要介绍了python实现下载文件的三种方法,最常用的方法就是通过Http利用urllib或者urllib2模块还有requests,有兴趣的可以了解一下. Python开发中时长遇到要下载文 ...

  4. python记录程序运行时间的三种方法

    这里提供了python记录程序运行时间的三种方法,并附有实现代码,最后进行比较,大家参考下: 方法1 import datetime starttime = datetime.datetime.now ...

  5. python 网站文件下载-python实现下载文件的三种方法

    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...

  6. python 随机生成汉字的三种方法

    第一种方法:Unicode码 在unicode码中,汉字的范围是(0x4E00, 9FBF) 这个方法比较简单,但是有个小问题,unicode码中收录了2万多个汉字,包含很多生僻的繁体字. 第二种方法 ...

  7. python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法

    0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...

  8. python合并ts视频(三种方法)

    前言:最近在爬取某个网站的视频,但是里面的视频数据是以ts文件的形式给出的.一个大的视频被切分成了很多小的ts视频,所以,合并这些ts视频就成为必要的了.我在网上搜到了三种方法,现在整理出来分享给大家 ...

  9. 独家 | 使EfficientNet更有效率的三种方法(附链接)

    作者:Dominic Masters翻译:王可汗校对:欧阳锦本文约3300字,建议阅读5分钟本文为大家介绍了提升EffcientNet效率和性能的三个策略. 在实践中有更好性能的EfficientNe ...

最新文章

  1. [Vue CLI 3] 插件编写实战和源码分析
  2. 对比激光SLAM与视觉SLAM:谁会成为未来主流趋势?
  3. 2020 云原生 7 大趋势预测
  4. 活得太累,只因为你索求的太多
  5. Visual Studio各个版本对应关系
  6. 前端学习(1607):跨域请求
  7. F5设备中存在一个Ticketbleed漏洞,可被远程攻击者利用
  8. 2017.10.10 狼和羊的故事 思考记录
  9. php二分法实力,php常见的几种排序以及二分法查找
  10. 如何衡量研发效能?阿里资深技术专家提出了5组指标 1
  11. android 标题名字,说说 Android 的 Material Design 设计(五)——可折叠式标题栏
  12. 《Android框架揭秘》——2.1节主机环境构成
  13. android 互传文件,堪比隔空投送!iPhone和安卓、PC互传文件的3种方法,建议收藏...
  14. 全网最全的人类图解析(下)——类型、人生角色、定义等
  15. 深入理解Instrument
  16. 【计算社会科学01】为何病菌屡屡将人类推向死神?人类该如何应对
  17. 阿里云人机验证(无痕)完整流程以及注意事项
  18. windows 7 32bit安装 python3.5.0 安装错误 0x80240017 -未指定错误
  19. 快速打开Yahoo邮箱的 POP3/SMTP 服务功能
  20. BestMPRBaseVtk-003-修改工程,搬运官方代码并尝试理解-2

热门文章

  1. mysql 存储过程月单拆天单_MySQL之存储过程按月创建表
  2. awk,sed,grep基本用法列举
  3. Java数据类型缓存池
  4. 深入理解ReactRedux
  5. MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
  6. OGG学习笔记04-OGG复制部署快速参考
  7. 在linux终端远程登陆linux服务器
  8. Audio Streamer
  9. 从命令行修改你的Mac DNS(主要在在线恢复mac系统不能上网时候使用)
  10. [ruby] wxRuby安装