資訊內容
安利大家一個Python大數據分析神器
ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
推薦(免費):python視頻教程ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
對于Pandas運行速度的提升方法,之前已經介紹過很多回了,里面經常提及Dask,很多朋友沒接觸過可能不太了解,今天就推薦一下這個神器。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
1、什么是Dask?ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
Pandas和Numpy大家都不陌生了,代碼運行后數據都加載到RAM中,如果數據集特別大,我們就會看到內存飆升。但有時要處理的數據并不適合RAM,這時候Dask來了。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
Dask是開源免費的。它是與其他社區項目(如Numpy,Pandas和Scikit-Learn)協調開發的。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
*方:https://dask.org/Dask支持Pandas的DataFrame和NumpyArray的數據結構,并且既可在本地計算機上運行,也可以擴展到在集群上運行。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
基本上,只要編寫一次代碼,使用普通的Pythonic語法,就可在本地運行或部署到多節點集群上。這本身就是一個很牛逼的功能了,但這還不是**牛逼的。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
我覺得Dask的**牛逼的功能是:它兼容大部分我們已經在用的工具,并且只需改動少量的代碼,就可以利用自己筆記本電腦上已有的處理能力并行運行代碼。而并行處理數據就意味著更少的執行時間,更少的等待時間和更多的分析時間。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
下面這個就是Dask進行數據處理的大致流程。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
2、Dask支持哪些現有工具?ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
這一點也是我比較看中的,因為Dask可以與Python數據處理和建模的庫包兼容,沿用庫包的API,這對于Python使用者來說學習成本是極低的。而像Hadoop、Spark這種大數據處理是有很高的學習門檻和時間成本的。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
目前,Dask可支持pandas、Numpy、Sklearn、XGBoost、XArray、RAPIDS等等,光是這幾項我覺得就足夠用了,至少對于常用的數據處理、建模分析是完全覆蓋得掉的。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
3、Dask安裝ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
可以使用 conda 或者 pip,或從源代碼安裝dask 。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
conda install dask因為dask有很多依賴,所以為了快速安裝也可用下面代碼,將安裝運行Dask所需的**少依賴關系集。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
conda install dask-core再有就是通過源來安裝。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
git clone https://github.com/dask/dask.git cd dask python -m pip install .4、Dask如何使用?ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
Numpy、pandasZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
Dask引入了3個并行集合,它們可以存儲大于RAM的數據,這些集合有DataFrame、Bags、Arrays。這些集合類型中的每一個都能夠使用在RAM和硬盤之間分區的數據,以及分布在群集中多個節點上的數據。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
Dask的使用是非常清晰的,如果你使用NumPy數組,就從Dask數組開始,如果你使用Pandas DataFrame,就從Dask DataFrame開始,依此類推。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
import dask.array as da x = da.random.uniform(low=0, high=10, size=(10000, 10000), # normal numpy code chunks=(1000, 1000)) # break into chunks of size 1000x1000 y = x + x.T - x.mean(axis=0) # Use normal syntax for high level algorithms # DataFrames import dask.dataframe as dd df = dd.read_csv('2018-*-*.csv', parse_dates='timestamp', # normal Pandas code blocksize=64000000) # break text into 64MB chunks s = df.groupby('name').balance.mean() # Use normal syntax for high level algorithms # Bags / lists import dask.bag as db b = db.read_text('*.json').map(json.loads) total = (b.filter(lambda d: d['name'] == 'Alice') .map(lambda d: d['balance']) .sum())這些高級接口在略微變化的情況下復制了標準接口。對于原始項目中的大部分API,這些接口會自動為我們并行處理較大的數據集,實現上不是很復雜,對照 Dask的doc文檔即可一步步完成。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
DelayedZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
下面說一下Dask的 Delay 功能,非常強大。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
Dask.delayed是一種并行化現有代碼的簡單而強大的方法。之所以被叫做delayed是因為,它沒有立即計算出結果,而是將要作為任務計算的結果記錄在一個圖形中,稍后將在并行硬件上運行。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
有時問題用已有的dask.array或dask.dataframe可能都不適合,在這些情況下,我們可以使用更簡單的dask.delayed界面并行化自定義算法。例如下面這個例子。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
def inc(x): return x + 1 def double(x): return x * 2 def add(x, y): return x + y data = [1, 2, 3, 4, 5] output = [] for x in data: a = inc(x) b = double(x) c = add(a, b) output.append(c) total = sum(output) 45上面代碼在單個線程中按順序運行。但是,我們看到其中很多可以并行執行。Dask delayed函數可修飾inc、double這些函數,以便它們可延遲運行,而不是立即執行函數,它將函數及其參數放入計算任務圖中。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
我們簡單修改代碼,用delayed函數包裝一下。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
import dask output = [] for x in data: a = dask.delayed(inc)(x) b = dask.delayed(double)(x) c = dask.delayed(add)(a, b) output.append(c) total = dask.delayed(sum)(output)代碼運行后inc、double、add和sum都還沒有發生,而是生成一個計算的任務圖交給了total。然后我們用visualizatize看下任務圖。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
total.visualize()ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
上圖明顯看到了并行的可能性,所以毫不猶豫,使用compute進行并行計算,這時才完成了計算。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
>>> total.compute() 45由于數據集較小無法比較時間,這里只介紹下使用方法,具體可自己動手實踐下。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
Sklearn機器學習ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
關于機器學習的并行化執行,由于內容較多,東哥會在另一篇文章展開。這里簡單說下一下dask-learn。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
dask-learn項目是與Sklearn開發人員協作完成的。現在可實現并行化有Scikit-learn的Pipeline、GridsearchCV和RandomSearchCV以及這些的變體,它們可以更好地處理嵌套的并行操作。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
因此,如果你將sklearn替換為dklearn,那么速度將會提升很多。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
# from sklearn.grid_search import GridSearchCV from dklearn.grid_search import GridSearchCV # from sklearn.pipeline import Pipeline from dklearn.pipeline import Pipeline 下面是一個使用Pipeline的示例,其中應用了PCA和邏輯回歸。 from sklearn.datasets import make_classification X, y = make_classification(n_samples=10000, n_features=500, n_classes=2, n_redundant=250, random_state=42) from sklearn import linear_model, decomposition from sklearn.pipeline import Pipeline from dklearn.pipeline import Pipeline logistic = linear_model.LogisticRegression() pca = decomposition.PCA() pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)]) grid = dict(pca__n_components=[50, 100, 150, 250], logistic__C=[1e-4, 1.0, 10, 1e4], logistic__penalty=['l1', 'l2']) # from sklearn.grid_search import GridSearchCV from dklearn.grid_search import GridSearchCV estimator = GridSearchCV(pipe, grid) estimator.fit(X, y)結果是:sklearn會在40秒鐘左右執行此計算,而dask-learn替代品大約需要10秒鐘。
另外,如果添加以下代碼可以連接到集群,通過Client可以展示整個計算過程的dashboard,由Bokeh實現。ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
5、總結ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺
以上就是Dask的簡單介紹,Dask的功能是非常強大的,且說明文檔也非常全,既有示例又有解釋。感興趣的朋友可以自行去*網或者 GitHub學習,東哥下次分享使用Dask進行機器學習的一些實例。
以上就是安利大家一個Python大數據分析神器的詳細內容,更多請關注少兒編程網其它相關文章!ZiT少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

- 上一篇
python如何輸出2進制數?
簡介python輸出2進制數的方法:在python中使用內置函數bin()將一個整數轉換為二進制數輸出即可。bin() 返回一個整數int或者長整數longint的二進制表示。示例:>>> bin(3)'0b11'>>>
- 下一篇
python的配置文件怎樣寫?
簡介一、創建配置文件在D盤建立一個配置文件,名字為:test.ini內容如下:[baseconf]host=127.0.0.1port=3306user=rootpassword=rootdb_name=gloryroad[test]ip=127.0.0.1int=1float=1.5bool=True