(数据科学学习手札86)全平台支持的pandas运算加速神器

本文示例代码已上传至个人Github仓库https://github.com/CNFeffery/DataScienceStudyNoteshtml

1 简介

  随着其功能的不断优化与扩充,pandas已然成为数据分析领域最受欢迎的工具之一,但其仍然有着一个不容忽视的短板——难以快速处理大型数据集,这是因为pandas中的工做流每每是创建在单进程的基础上,使得其只能利用单个处理器核心来实现各类计算操做,这就使得pandas在处理百万级、千万级甚至更大数据量时,出现了明显的性能瓶颈。git

  本文要介绍的工具modin就是一个致力于在改变代码量最少的前提下,调用起多核计算资源,对pandas的计算过程进行并行化改造的Python库,而且随着其近期的一系列内容更新,modin基于Dask开始对Windows系统一样进行了支持,使得咱们只须要改变一行代码,就能够在全部平台上得到部分pandas功能可观的计算效率提高。github

图1

2 基于modin的pandas运算加速

  modin支持WindowsLinux以及Mac系统,其中LinuxMac平台版本的modin工做时可基于并行运算框架RayDask,而Windows平台版本目前只支持Dask做为计算后端(由于Ray没有Win版本),安装起来十分方便,能够用以下3种命令来安装具备不一样后端的modinwindows

pip install modin[dask] # 安装dask后端
pip install modin[ray] # 安装ray后端(windows不支持)
pip install modin[all] # 推荐方式,自动安装当前系统支持的全部后端

  本文在Win10系统上演示modin的功能,执行命令:后端

pip install modin[all]

  成功安装modin+dask以后,在使用modin时,只须要将咱们习惯的import pandas as pd变动为import modin.pandas as pd便可,接下来咱们来看一下在一些常见功能上,pandasVSmodin性能差别状况,首先咱们分别使用pandasmodin读入一个大小为1.1G的csv文件esea_master_dmg_demos.part1.csv,来自kagglehttps://www.kaggle.com/skihikingkevin/csgo-matchmaking-damage/data),记录了关于热门游戏CS:GO的一些玩家行为数据,由于体积过大,请感兴趣的读者朋友自行去下载:api

图2

  为了区分他们,在导入时暂时将modin.pandas命名为mpdbash

图3

  能够看到由于是Win平台,因此使用的计算后端为Dask,首先咱们来分别读入文件查看耗时:框架

图4

  借助jupyter notebook记录计算时间的插件,能够看到原生的pandas耗时14.8秒,而modin只用了5.32秒,接着咱们再来试试concat操做:工具

图5

  能够看到在pandas花了8.78秒才完成任务的状况下,modin仅用了0.174秒,取得了惊人的效率提高。接下来咱们再来执行常见的检查每列缺失状况的任务:性能

图6

  这时耗时差距虽然不如concat操做时那么巨大,也是比较可观的,可是modin毕竟是一个处理快速开发迭代阶段的工具,其针对pandas的并行化改造还没有覆盖所有的功能,譬如分组聚合功能。对于这部分功能,modin会在执行代码时检查本身是否支持,对于还没有支持的功能modin会自动切换到pandas单核后端来执行运算,但因为modin中组织数据的形式与pandas不相同,因此中间须要经历转换:

图7

  这种时候modin的运算反而会比pandas慢不少:

图8

  所以我对modin持有的态度是在处理大型数据集时,部分应用场景能够用其替换pandas,即其已经完成可靠并行化改造的pandas功能,你能够在官网对应界面(https://modin.readthedocs.io/en/latest/supported_apis/index.html )查看其已经支持及还没有良好支持的功能,,由于modin还处于快速开发阶段,不少目前没法支持的功能也许将来不久就会被加入modin

图9

  以上就是本文的所有内容,若有疑问欢迎在评论区与我讨论。

相关文章
相关标签/搜索