中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python大數據分析神器Dask有什么用

發布時間:2020-12-31 14:00:51 來源:億速云 閱讀:663 作者:小新 欄目:編程語言

這篇文章主要介紹Python大數據分析神器Dask有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1、什么是Dask?

PandasNumpy大家都不陌生了,代碼運行后數據都加載到RAM中,如果數據集特別大,我們就會看到內存飆升。但有時要處理的數據并不適合RAM,這時候Dask來了。

Dask是開源免費的。它是與其他社區項目(如Numpy,Pandas和Scikit-Learn)協調開發的。

官方:https://dask.org/

Dask支持PandasDataFrameNumpyArray的數據結構,并且既可在本地計算機上運行,也可以擴展到在集群上運行。

基本上,只要編寫一次代碼,使用普通的Pythonic語法,就可在本地運行或部署到多節點集群上。這本身就是一個很牛逼的功能了,但這還不是最牛逼的。

我覺得Dask的最牛逼的功能是:它兼容大部分我們已經在用的工具,并且只需改動少量的代碼,就可以利用自己筆記本電腦上已有的處理能力并行運行代碼。而并行處理數據就意味著更少的執行時間,更少的等待時間和更多的分析時間。

下面這個就是Dask進行數據處理的大致流程。
Python大數據分析神器Dask有什么用

2、Dask支持哪些現有工具?

這一點也是我比較看中的,因為Dask可以與Python數據處理和建模的庫包兼容,沿用庫包的API,這對于Python使用者來說學習成本是極低的。而像HadoopSpark這種大數據處理是有很高的學習門檻和時間成本的。

目前,Dask可支持pandasNumpySklearnXGBoostXArrayRAPIDS等等,光是這幾項我覺得就足夠用了,至少對于常用的數據處理、建模分析是完全覆蓋得掉的。
Python大數據分析神器Dask有什么用

3、Dask安裝

可以使用 conda 或者 pip,或從源代碼安裝dask

conda install dask

因為dask有很多依賴,所以為了快速安裝也可用下面代碼,將安裝運行Dask所需的最少依賴關系集。

conda install dask-core

再有就是通過源來安裝。

git clone https://github.com/dask/dask.git
cd dask
python -m pip install .

4、Dask如何使用?

Numpy、pandas

Dask引入了3個并行集合,它們可以存儲大于RAM的數據,這些集合有DataFrameBagsArrays。這些集合類型中的每一個都能夠使用在RAM和硬盤之間分區的數據,以及分布在群集中多個節點上的數據。

Dask的使用是非常清晰的,如果你使用NumPy數組,就從Dask數組開始,如果你使用Pandas DataFrame,就從Dask DataFrame開始,依此類推。

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文檔即可一步步完成。

Delayed

下面說一下DaskDelay 功能,非常強大。

Dask.delayed是一種并行化現有代碼的簡單而強大的方法。之所以被叫做delayed是因為,它沒有立即計算出結果,而是將要作為任務計算的結果記錄在一個圖形中,稍后將在并行硬件上運行。

有時問題用已有的dask.arraydask.dataframe可能都不適合,在這些情況下,我們可以使用更簡單的dask.delayed界面并行化自定義算法。例如下面這個例子。

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函數可修飾incdouble這些函數,以便它們可延遲運行,而不是立即執行函數,它將函數及其參數放入計算任務圖中。

我們簡單修改代碼,用delayed函數包裝一下。

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)

代碼運行后incdoubleaddsum都還沒有發生,而是生成一個計算的任務圖交給了total。然后我們用visualizatize看下任務圖。

total.visualize()

Python大數據分析神器Dask有什么用

上圖明顯看到了并行的可能性,所以毫不猶豫,使用compute進行并行計算,這時才完成了計算。

>>> total.compute()
45

由于數據集較小無法比較時間,這里只介紹下使用方法,具體可自己動手實踐下。

Sklearn機器學習

關于機器學習的并行化執行,由于內容較多,東哥會在另一篇文章展開。這里簡單說下一下dask-learn

dask-learn項目是與Sklearn開發人員協作完成的。現在可實現并行化有Scikit-learnPipelineGridsearchCVRandomSearchCV以及這些的變體,它們可以更好地處理嵌套的并行操作。

因此,如果你將sklearn替換為dklearn,那么速度將會提升很多。

# 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實現。

from dask.distributed import Client
c = Client('scheduler-address:8786')

Python大數據分析神器Dask有什么用

以上是“Python大數據分析神器Dask有什么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄梅县| 宜川县| 隆昌县| 页游| 五家渠市| 巨鹿县| 兴和县| 昆明市| 长宁县| 松阳县| 榆林市| 苏尼特右旗| 清流县| 东乡族自治县| 碌曲县| 巴彦淖尔市| 昌江| 房山区| 法库县| 芜湖县| 泗水县| 周口市| 泸西县| 西昌市| 玉门市| 红原县| 尤溪县| 五原县| 莎车县| 洛南县| 和平县| 昆山市| 任丘市| 兴山县| 西乌珠穆沁旗| 农安县| 丹巴县| 永泰县| 八宿县| 垣曲县| 胶南市|