自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

別再用Pandas處理大數(shù)據(jù)了!現(xiàn)在你擁有更好的選擇

大數(shù)據(jù) 數(shù)據(jù)分析
眾所周知,Pandas是最好的探索性數(shù)據(jù)分析工具之一。但它并非對于每個工作來說都是最佳選擇,大數(shù)據(jù)處理就與它“氣場不合”。

本文轉(zhuǎn)載自公眾號“讀芯術”(ID:AI_Discovery)

眾所周知,Pandas是最好的探索性數(shù)據(jù)分析工具之一。但它并非對于每個工作來說都是最佳選擇,大數(shù)據(jù)處理就與它“氣場不合”。

[[326711]]

Pandas并不具備多處理器,并且處理較大的數(shù)據(jù)集速度很慢。筆者消耗在等待Pandas讀取一堆文件或?qū)ζ溥M行匯總計算上的時間太多太多了。最近,筆者發(fā)現(xiàn)了一個更好的工具可以更新數(shù)據(jù)處理管道,使這些CPU內(nèi)核正常工作!

筆者使用該工具進行繁重的數(shù)據(jù)處理,例如讀取包含10 G數(shù)據(jù)的多個文件,對其進行過濾并匯總。數(shù)據(jù)處理工作結(jié)束之后,再將結(jié)果保存到一個較小的適用于Pandas的CSV文件中,然后繼續(xù)對Pandas進行探索性數(shù)據(jù)分析。這就方便許多啦,一起來認識認識這個新工具吧!

認識Dask 

別再用Pandas處理大數(shù)據(jù)了!現(xiàn)在你擁有更好的選擇

Dask提供了高級并行性的分析功能,得以擁有大規(guī)模處理數(shù)據(jù)的性能。適用于Dask的算法工具包有numpy, pandas和sklearn。

Dask是一個開源且免費的工具。它使用現(xiàn)有的PythonAPI和數(shù)據(jù)結(jié)構來簡化在Dask支持的等效項之間的切換。它使簡單的事情變得更容易,讓復雜的事情變得可能。

Pandas vs Dask

來看一個實際的例子。在工作中,我們通常會得到一堆需要分析的文件。下面模擬筆者的工作日,并創(chuàng)建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,因此需要循環(huán)讀取文件。

  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可以處理無法讀入內(nèi)存的數(shù)據(jù),它會將數(shù)據(jù)分成多個塊并指定任務鏈?,F(xiàn)在我們來計算一下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延遲了執(zhí)行模式。它僅在需要時才進行計算。定義執(zhí)行圖,Dask得以優(yōu)化任務的執(zhí)行,并重復該實驗。此外,Dask的read_csv函數(shù)在本機使用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返回結(jié)果,Dask讀取文件的速度是Pandas的兩倍。

Pandas vs Dask CPU使用率

Dask是否用到了所提供的所有CPU核心功能?比較一下讀取文件時Pandas和Dask之間的CPU使用率就知道了,看看代碼是否與上面的相同。 

別再用Pandas處理大數(shù)據(jù)了!現(xiàn)在你擁有更好的選擇
讀取文件時Pandas的CPU使用情況
別再用Pandas處理大數(shù)據(jù)了!現(xiàn)在你擁有更好的選擇
讀取文件時Dask的CPU使用情況

我們可以看到,Pandas和Dask在讀取文件時的多處理差異很明顯。

究竟發(fā)生了什么?

Dask的數(shù)據(jù)框架由多個Pandas的數(shù)據(jù)框架組成,按索引劃分。當使用Dask執(zhí)行read_csv函數(shù)時,多個進程將讀取一個文件,甚至能夠被可視化為執(zhí)行圖。

  1. exec_graphdd.read_csv('trainset_*.csv') 
  2. exec_graph.visualize() 
別再用Pandas處理大數(shù)據(jù)了!現(xiàn)在你擁有更好的選擇

讀取多個文件時,Dask執(zhí)行速度較慢。

安裝方法

要安裝Dask,只需運行:

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

Dask的缺點

既然Dask這么出色,我們能否直接用它取代Pandas呢?哪有這么簡單的事兒。只有來自Pandas的某些特定功能,才能被遷移到Dask。其中一些功能很難并行化,例如排序值和在未排序的列上設置索引。

Dask也并非是萬能的,用于不適合主內(nèi)存的數(shù)據(jù)集是最適合它的“舞臺”。Dask是建立在Pandas之上的,Pandas運行緩慢,Dask則同樣運行緩慢。Dask在數(shù)據(jù)管道過程中僅僅是一個好用的工具,它不能替代其他庫。 

[[326715]]
圖源:unsplash

為你的工作挑選合適的工具,為你的工具尋找匹配的“舞臺”,這樣它才能夠盡情“表演”。

 

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2020-07-17 07:15:38

數(shù)據(jù)庫ID代碼

2020-12-02 11:18:50

print調(diào)試代碼Python

2020-12-04 10:05:00

Pythonprint代碼

2021-06-09 06:41:11

OFFSETLIMIT分頁

2016-11-07 12:30:59

大數(shù)據(jù)互聯(lián)網(wǎng)

2021-01-29 11:05:50

PrintPython代碼

2020-12-03 09:05:38

SQL代碼方案

2020-12-15 08:06:45

waitnotifyCondition

2023-10-26 16:33:59

float 布局前段CSS

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2019-03-12 14:48:29

路由器XBOXPS4

2022-01-27 07:48:37

虛擬項目Django

2024-12-26 07:47:20

2022-03-01 07:37:30

MySQL場景框架

2022-12-30 15:29:35

數(shù)據(jù)分析工具Pandas

2024-06-12 13:54:37

編程語言字符串代碼

2022-10-27 21:34:28

數(shù)據(jù)庫機器學習架構

2022-03-10 10:12:04

自動化腳本Bash

2024-01-11 11:14:57

WaylandShutter

2017-02-28 10:54:40

Pandas
點贊
收藏

51CTO技術棧公眾號