别再用Pandas处理大数据了!现在你拥有更好的选择

大数据 数据分析
众所周知,Pandas是最好的探索性数据分析工具之一。但它并非对于每个工作来说都是最佳选择,大数据处理就与它“气场不合”。

本文转载自公众号“读芯术”(ID:AI_Discovery)

众所周知,Pandas是最好的探索性数据分析工具之一。但它并非对于每个工作来说都是最佳选择,大数据处理就与它“气场不合”。

[[326711]]

Pandas并不具备多处理器,并且处理较大的数据集速度很慢。笔者消耗在等待Pandas读取一堆文件或对其进行汇总计算上的时间太多太多了。最近,笔者发现了一个更好的工具可以更新数据处理管道,使这些CPU内核正常工作!

笔者使用该工具进行繁重的数据处理,例如读取包含10 G数据的多个文件,对其进行过滤并汇总。数据处理工作结束之后,再将结果保存到一个较小的适用于Pandas的CSV文件中,然后继续对Pandas进行探索性数据分析。这就方便许多啦,一起来认识认识这个新工具吧!

认识Dask 

别再用Pandas处理大数据了!现在你拥有更好的选择

Dask提供了高级并行性的分析功能,得以拥有大规模处理数据的性能。适用于Dask的算法工具包有numpy, pandas和sklearn。

Dask是一个开源且免费的工具。它使用现有的PythonAPI和数据结构来简化在Dask支持的等效项之间的切换。它使简单的事情变得更容易,让复杂的事情变得可能。

Pandas vs Dask

来看一个实际的例子。在工作中,我们通常会得到一堆需要分析的文件。下面模拟笔者的工作日,并创建10个具有100K条目的文件(每个文件有196 MB)。

  1. fromsklearn.datasets import make_classification 
  2. import pandas as pdfor i in range(1, 11): 
  3.     print('Generating trainset %d' % i) 
  4.     x, y =make_classification(n_samples=100_000n_features=100
  5.     df = pd.DataFrame(data=x
  6.     df['y'] = y 
  7.     df.to_csv('trainset_%d.csv' % i,index=False

先用Pandas读取这些文件并测算时间。Pandas不支持本地glob,因此需要循环读取文件。

  1. %%timeimport globdf_list = [] 
  2. for filename in glob.glob('trainset_*.csv'): 
  3.     df_ = pd.read_csv(filename) 
  4.     df_list.append(df_) 
  5. df = pd.concat(df_list) 
  6. df.shape 

Pandas花了16秒读取文件。

  1. CPU times: user 14.6 s, sys:1.29 s, total: 15.9 s 
  2. Wall time: 16 s 

想象一下如果文件扩大100倍,Pandas可能就无能为力了,你甚至无法用Pandas读取它们。 

[[326713]] 
图源:unsplash

而Dask可以处理无法读入内存的数据,它会将数据分成多个块并指定任务链。现在我们来计算一下Dask加载这些文件需要多长时间。

  1. importdask.dataframe as dd%%time 
  2. df = dd.read_csv('trainset_*.csv')CPU times: user 154 ms, sys: 58.6 ms, total:212 ms 
  3. Wall time: 212 ms 

只要154 ms! 这是怎么做到的?事实上,这个时间是不准确的。Dask延迟了执行模式。它仅在需要时才进行计算。定义执行图,Dask得以优化任务的执行,并重复该实验。此外,Dask的read_csv函数在本机使用glob。

  1. %%timedfdd.read_csv('trainset_*.csv').compute()CPU times: user 39.5 s, sys: 5.3 s,total: 44.8 s 
  2. Wall time: 8.21 s 

计算功能强制Dask返回结果,Dask读取文件的速度是Pandas的两倍。

Pandas vs Dask CPU使用率

Dask是否用到了所提供的所有CPU核心功能?比较一下读取文件时Pandas和Dask之间的CPU使用率就知道了,看看代码是否与上面的相同。 

别再用Pandas处理大数据了!现在你拥有更好的选择
读取文件时Pandas的CPU使用情况
别再用Pandas处理大数据了!现在你拥有更好的选择
读取文件时Dask的CPU使用情况

我们可以看到,Pandas和Dask在读取文件时的多处理差异很明显。

究竟发生了什么?

Dask的数据框架由多个Pandas的数据框架组成,按索引划分。当使用Dask执行read_csv函数时,多个进程将读取一个文件,甚至能够被可视化为执行图。

  1. exec_graphdd.read_csv('trainset_*.csv') 
  2. exec_graph.visualize() 
别再用Pandas处理大数据了!现在你拥有更好的选择

读取多个文件时,Dask执行速度较慢。

安装方法

要安装Dask,只需运行:

  1. python-m pip install "dask[complete]" 

Dask的缺点

既然Dask这么出色,我们能否直接用它取代Pandas呢?哪有这么简单的事儿。只有来自Pandas的某些特定功能,才能被迁移到Dask。其中一些功能很难并行化,例如排序值和在未排序的列上设置索引。

Dask也并非是万能的,用于不适合主内存的数据集是最适合它的“舞台”。Dask是建立在Pandas之上的,Pandas运行缓慢,Dask则同样运行缓慢。Dask在数据管道过程中仅仅是一个好用的工具,它不能替代其他库。 

[[326715]]
图源:unsplash

为你的工作挑选合适的工具,为你的工具寻找匹配的“舞台”,这样它才能够尽情“表演”。

 

责任编辑:赵宁宁 来源: 读芯术
相关推荐

2020-07-17 07:15:38

数据库ID代码

2020-12-04 10:05:00

Pythonprint代码

2020-12-02 11:18:50

print调试代码Python

2021-06-09 06:41:11

OFFSETLIMIT分页

2016-11-07 12:30:59

大数据互联网

2023-10-26 16:33:59

float 布局前段CSS

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2020-12-15 08:06:45

waitnotifyCondition

2021-01-29 11:05:50

PrintPython代码

2020-12-03 09:05:38

SQL代码方案

2019-03-12 14:48:29

路由器XBOXPS4

2022-01-27 07:48:37

虚拟项目Django

2022-03-01 07:37:30

MySQL场景框架

2022-12-30 15:29:35

数据分析工具Pandas

2022-03-10 10:12:04

自动化脚本Bash

2024-06-12 13:54:37

编程语言字符串代码

2022-10-27 21:34:28

数据库机器学习架构

2024-01-11 11:14:57

WaylandShutter

2017-02-28 10:54:40

Pandas

2023-06-26 08:20:02

openapi格式注解
点赞
收藏

51CTO技术栈公众号