有哪些让人相见恨晚的Python库(一)
对于我这个经常用python倒腾数据的人来说,下面这个库是真·相见恨晚
记得有一次我在服务器上处理数据时,为了解决Pandas读取超过2000W条数据就内存爆炸的问题,整整用了两天时间来优化。最后通过数据转换,数据类型,迭代读取和GC机制解决了(具体方法在我的博客:Python优化之使用pandas读取和训练千万级数据)
我一直觉得python处理大规模数据是真的不行,除非上Hadoop。直到我看到了一个叫Modin的库,才知道什么叫一行代码,解决所有问题。
先说说为啥pandas这么不好用
Pandas 是Python中常用的程序库,计算机、数据科学领域的应该都经常用。本身它是个高性能、易于使用的数据结构和数据分析工具,可以说非常新手友好了。但是当数据量一旦变大时,单个内核上运行的 Pandas 就会变得力不从心,毕竟现在企业级数据单日数据量可能都是GB或者TB数量级,可能会需要分布式系统来提高性能。在默认设置下,Pandas只使用单个CPU内核,在单进程模式下运行函数,相比之下Tensorflow只需要设置GPU参数就可以多核并行了。
速度慢并不会影响小型数据,我们甚至可能都不会注意到速度的变化。但对于计算量庞大的数据集来说,仅使用单内核会导致运行速度非常缓慢。有些数据集可能有百万条甚至上亿条数据,如果每次都只进行一次运算,只用一个CPU,速度会很慢。
绝大多数现代电脑都有至少两个CPU。但即便是有两个CPU,使用pandas时,受默认设置所限,一半甚至以上的电脑处理能力无法发挥。如果是4核(现代英特尔i5芯片)或者6核(现代英特尔i7芯片),就更浪费了。Pandas本就不是为了高效利用电脑计算能力而设计的。

所以从我们只是想让 Pandas 运行得更快,而不是为了特定的硬件设置而优化其工作流。这意味着我们希望在处理 10KB 的数据集时,可以使用与处理 10TB 数据集时相同的 Pandas 脚本。Modin 提供了一个优化 Pandas 的解决方案,这样数据科学工作者就可以把时间花在从数据中提取价值上,而不是花在提取数据的工具上。
啥是Modin?
Modin 是加州大学伯克利分校 RISELab 的一个早期项目,旨在促进分布式计算在数据科学领域的应用。它是一个多进程的数据帧(Dataframe)库,具有与 Pandas 相同的应用程序接口(API),使用户可以加速他们的 Pandas 工作流。
它是一个多进程的数据帧(Dataframe)库,具有与 Pandas 相同的应用程序接口(API),使用户可以加速他们的 Pandas 工作流。据相关实验表明,在一台 8 核的机器上,用户只需要修改一行代码,Modin 就能将 Pandas 查询任务加速 4 倍。
在Pandas中,给定DataFrame,目标是尽可能以最快速度来进行数据处理。可以使用.mean()来算出每行的平均数,用groupby将数据分类,用drop_duplicates()来删除重复项,还有很多Pandas的其他内置函数以供使用。

之前提到,Pandas只调用一个CPU来进行数据处理。这是一个很大的瓶颈,特别是对体量更大的DataFrames,资源的缺失更加突出。
理论上来讲,并行计算就如同在所有可用CPU内核中的不同数据点中计算一样简单。之于Pandas DataFrame,一个基本想法就是根据不同的CPU内核数量将DataFrame分成几个不同部分,让每个核单独计算。最后再将结果相加,这在计算层面来讲,运行成本比较低。
如何提高多核系统数据处理速度。在单核系统处理过程中(左),所有10个任务都用一个CPU处理。而在双核系统中(右),每个节点处理5个任务,处理速度提高一倍。
这其实也就是Modin的原理,将 DataFrame分割成不同的部分,而每个部分由发送给不同的CPU处理。Modin可以切割DataFrame的横列和纵列,任何形状的DataFrames都能平行处理。

假如拿到的是很有多列但只有几行的DataFrame。一些只能对列进行切割的库,在这个例子中很难发挥效用,因为列比行多。但是由于Modin从两个维度同时切割,对任何形状的DataFrames来说,这个平行结构效率都非常高。不管有多少行,多少列,或者两者都很多,它都能游刃有余地处理。
Pandas DataFrame(左)作为整体储存,只交给一个CPU处理。ModinDataFrame(右)行和列都被切割,每个部分交给不同CPU处理,有多少CPU就能处理多少个任务。
上述图像只是一个简单的例子。Modin通常会用到一个分盘助手(Partition Manager),它能根据操作的种类改变分盘的大小和形状。比如说,可能需要一整行或者一整列(数据)的操作。在这种情况下,分盘助手就能对任务进行切割,再分别交给不同的CPU处理,从而找到任务处理的最优解,灵活方便。

在并行处理时,Modin会从Dask或者Ray工具中任选一个来处理繁杂的数据,这两个工具都是PythonAPI的平行运算库,在运行Modin的时候可以任选一个。目前为止,Ray应该最为安全且最稳定。Dask后端还处在测试阶段。
该系统是为希望程序运行得更快、伸缩性更好,而无需进行重大代码更改的 Pandas 用户设计的。这项工作的最终目标是能够在云环境中使用 Pandas。
读取800M文件、以及对其进行各种PD操作速度对比

Modin 项目仍处于早期阶段,但对 Pandas 来说是一个非常有发展前景的补充库。Modin 为用户处理所有的数据分区和重组任务,这样我们就可以集中精力处理工作流。Modin 的基本目标是让用户能够在小数据和大数据上使用相同的工具,而不用考虑改变 API 来适应不同的数据规模。
在这个示例中,我们通过使用Modin,读取这个800M文件大约节省了22秒,相当于节省了74%的时间。试想一下如果有100个这样的文件需要读取,光读取文件就可以节省半个小时的时间。
安装方法
pip install 大法(记得装RAY)
使用方法
import modin.pandas as pd
更多python技能、机器学习、AI知识,欢迎关注我的公众号「图灵的猫」,后台回复SSR有机场节点相送哦~
有哪些让人相见恨晚的Python库(一)的更多相关文章
- 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库
		我是 环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环 ... 
- 推荐一些相见恨晚的 Python 库 「一」
		扯淡 首先说明下,这篇文章篇幅过长并且大部分是链接,因此非常适合在电脑端打开访问. 本文内容摘自 Github 上有名的 Awesome Python.这是由 vinta 在 14 年发起并持续维护的 ... 
- 哪些 Python 库让你相见恨晚?
		知乎用户,A European Swallow. 苇叶.Aran He.jerry等人赞同 补充三个有助于自动化日常工作的: sh:sh 1.08 — sh v1.08 documentation可以 ... 
- 哪些 Python 库让你相见恨晚?【转】
		原文链接:https://www.zhihu.com/question/24590883/answer/92420471 原文链接:Python 资源大全 ---------------- 这又是一个 ... 
- Python库,让你相见恨晚的第三方库
		环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具.pyenv – 简单的 Python 版本管理工具.Vex – 可以在虚拟环境中执行命令.virt ... 
- 【转】【Python学习】之哪些 Python 库让你相见恨晚?
		感谢作者:赖明星 文章链接地址:<哪些 Python 库让你相见恨晚?> 
- python 库资源大全
		偶然的机会翻到这篇文章,很全面,来源: Python 资源大全中文版 哪些 Python 库让你相见恨晚? 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 pyth ... 
- 11个并不广为人知,但值得了解的Python库
		这是一篇译文,文中提及了一些不常见但是有用的Python库 原文地址:http://blog.yhathq.com/posts/11-python-libraries-you-might-not-kn ... 
- python自动化测试(4)-使用第三方python库技术实现
		python自动化测试(4)-使用第三方python库技术实现 1 概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ... 
随机推荐
- CodeForces 1204E"Natasha, Sasha and the Prefix Sums"(动态规划 or 组合数学--卡特兰数的应用)
			传送门 •参考资料 [1]:CF1204E Natasha, Sasha and the Prefix Sums(动态规划+组合数) •题意 由 n 个 1 和 m 个 -1 组成的 $C_{n+m} ... 
- Spring Cloud探路(一) Erueka服务器的建立
			组件名:Netflix Eureka 作用:支撑微服务的自注册.自发现,提供负载均衡能力 开发环境使用IDEA 1.新建Eureka Server,新建maven项目,配置pom.xml <p ... 
- QQ三方登录
			申请了十天,最终通过了审核,能够上线了,事实上申请的第一天,站点的qq登录已经做好了,而且能够用測试帐号登录,但提交审核后,总是通只是,提示:您的站点审核未通过.原因是"未放置QQ登录but ... 
- Linux 内核 标准 PCI 配置寄存器
			一些 PCI 配置寄存器是要求的, 一些是可选的. 每个 PCI 设备必须包含有意 义的值在被要求的寄存器中, 而可选寄存器的内容依赖外设的实际功能. 可选的字段不被 使用, 除非被要求的字段的内容指 ... 
- vue-learning:25 - component - 概念-定义-注册-使用-命名
			概念 Vue遵循Web Component规范,提供了自己的组件系统.组件是一段独立的代码,代表页面中某个功能块,拥有自己的数据.JS.样式,以及标签.组件的独立性是指形成自己独立的作用域,不会对其它 ... 
- CodeForces  Goodbye 2017
			传送门 A - New Year and Counting Cards •题意 有n张牌,正面有字母,反面有数字 其中元音字母$a,e,o,i,u$的另一面必须对应$0,2,4,6,8$的偶数 其他字 ... 
- 2018-8-10-win10-uwp-Window.Current.Dispatcher中Current为null
			title author date CreateTime categories win10 uwp Window.Current.Dispatcher中Current为null lindexi 201 ... 
- Java 学习笔记(10)——容器
			之前学习了java中从语法到常用类的部分.在编程中有这样一类需求,就是要保存批量的相同数据类型.针对这种需求一般都是使用容器来存储.之前说过Java中的数组,但是数组不能改变长度.Java中提供了另一 ... 
- KAFKA报错:COMMIT CANNOT BE COMPLETED SINCE THE GROUP HAS ALREADY REBALANCED AND ASSIGNED THE PARTITIONS TO ANOTHER MEMBER
			转载:https://www.greenhtml.com/archives/Commit-cannot-be-completed-since-the-group-has-already-rebalan ... 
- IDE、Cmake、makefile、make
			makefile :就是一个类似脚本的文件,根据一系列规则用于决定哪些文件先编译,哪些文件重新编译等等.甚至于进行更复杂的功能操作,而且还可以执行操作系统的命令.makefile带来的好处就是——“自 ... 
