Python大數(shù)據(jù)分析神器Dask有什么用-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),饒河企業(yè)網(wǎng)站建設(shè),饒河品牌網(wǎng)站建設(shè),網(wǎng)站定制,饒河網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,饒河網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

1、什么是Dask?

PandasNumpy大家都不陌生了,代碼運(yùn)行后數(shù)據(jù)都加載到RAM中,如果數(shù)據(jù)集特別大,我們就會(huì)看到內(nèi)存飆升。但有時(shí)要處理的數(shù)據(jù)并不適合RAM,這時(shí)候Dask來(lái)了。

Dask是開(kāi)源免費(fèi)的。它是與其他社區(qū)項(xiàng)目(如Numpy,Pandas和Scikit-Learn)協(xié)調(diào)開(kāi)發(fā)的。

官方:https://dask.org/

Dask支持PandasDataFrameNumpyArray的數(shù)據(jù)結(jié)構(gòu),并且既可在本地計(jì)算機(jī)上運(yùn)行,也可以擴(kuò)展到在集群上運(yùn)行。

基本上,只要編寫(xiě)一次代碼,使用普通的Pythonic語(yǔ)法,就可在本地運(yùn)行或部署到多節(jié)點(diǎn)集群上。這本身就是一個(gè)很牛逼的功能了,但這還不是最牛逼的。

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

下面這個(gè)就是Dask進(jìn)行數(shù)據(jù)處理的大致流程。
Python大數(shù)據(jù)分析神器Dask有什么用

2、Dask支持哪些現(xiàn)有工具?

這一點(diǎn)也是我比較看中的,因?yàn)?code>Dask可以與Python數(shù)據(jù)處理和建模的庫(kù)包兼容,沿用庫(kù)包的API,這對(duì)于Python使用者來(lái)說(shuō)學(xué)習(xí)成本是極低的。而像Hadoop、Spark這種大數(shù)據(jù)處理是有很高的學(xué)習(xí)門(mén)檻和時(shí)間成本的。

目前,Dask可支持pandas、NumpySklearn、XGBoostXArray、RAPIDS等等,光是這幾項(xiàng)我覺(jué)得就足夠用了,至少對(duì)于常用的數(shù)據(jù)處理、建模分析是完全覆蓋得掉的。
Python大數(shù)據(jù)分析神器Dask有什么用

3、Dask安裝

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

conda install dask

因?yàn)?code>dask有很多依賴(lài),所以為了快速安裝也可用下面代碼,將安裝運(yùn)行Dask所需的最少依賴(lài)關(guān)系集。

conda install dask-core

再有就是通過(guò)源來(lái)安裝。

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

4、Dask如何使用?

Numpy、pandas

Dask引入了3個(gè)并行集合,它們可以存儲(chǔ)大于RAM的數(shù)據(jù),這些集合有DataFrameBags、Arrays。這些集合類(lèi)型中的每一個(gè)都能夠使用在RAM和硬盤(pán)之間分區(qū)的數(shù)據(jù),以及分布在群集中多個(gè)節(jié)點(diǎn)上的數(shù)據(jù)。

Dask的使用是非常清晰的,如果你使用NumPy數(shù)組,就從Dask數(shù)組開(kāi)始,如果你使用Pandas DataFrame,就從Dask DataFrame開(kāi)始,依此類(lèi)推。

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())

這些高級(jí)接口在略微變化的情況下復(fù)制了標(biāo)準(zhǔn)接口。對(duì)于原始項(xiàng)目中的大部分API,這些接口會(huì)自動(dòng)為我們并行處理較大的數(shù)據(jù)集,實(shí)現(xiàn)上不是很復(fù)雜,對(duì)照Dask的doc文檔即可一步步完成。

Delayed

下面說(shuō)一下DaskDelay 功能,非常強(qiáng)大。

Dask.delayed是一種并行化現(xiàn)有代碼的簡(jiǎn)單而強(qiáng)大的方法。之所以被叫做delayed是因?yàn)?,它沒(méi)有立即計(jì)算出結(jié)果,而是將要作為任務(wù)計(jì)算的結(jié)果記錄在一個(gè)圖形中,稍后將在并行硬件上運(yùn)行。

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

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

上面代碼在單個(gè)線(xiàn)程中按順序運(yùn)行。但是,我們看到其中很多可以并行執(zhí)行。Dask delayed函數(shù)可修飾inc、double這些函數(shù),以便它們可延遲運(yùn)行,而不是立即執(zhí)行函數(shù),它將函數(shù)及其參數(shù)放入計(jì)算任務(wù)圖中。

我們簡(jiǎn)單修改代碼,用delayed函數(shù)包裝一下。

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)

代碼運(yùn)行后incdouble、addsum都還沒(méi)有發(fā)生,而是生成一個(gè)計(jì)算的任務(wù)圖交給了total。然后我們用visualizatize看下任務(wù)圖。

total.visualize()

Python大數(shù)據(jù)分析神器Dask有什么用

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

>>> total.compute()
45

由于數(shù)據(jù)集較小無(wú)法比較時(shí)間,這里只介紹下使用方法,具體可自己動(dòng)手實(shí)踐下。

Sklearn機(jī)器學(xué)習(xí)

關(guān)于機(jī)器學(xué)習(xí)的并行化執(zhí)行,由于內(nèi)容較多,東哥會(huì)在另一篇文章展開(kāi)。這里簡(jiǎn)單說(shuō)下一下dask-learn。

dask-learn項(xiàng)目是與Sklearn開(kāi)發(fā)人員協(xié)作完成的?,F(xiàn)在可實(shí)現(xiàn)并行化有Scikit-learnPipeline、GridsearchCVRandomSearchCV以及這些的變體,它們可以更好地處理嵌套的并行操作。

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

# from sklearn.grid_search import GridSearchCV
  from dklearn.grid_search import GridSearchCV
# from sklearn.pipeline import Pipeline
  from dklearn.pipeline import Pipeline
下面是一個(gè)使用Pipeline的示例,其中應(yīng)用了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)

結(jié)果是:sklearn會(huì)在40秒鐘左右執(zhí)行此計(jì)算,而dask-learn替代品大約需要10秒鐘。
另外,如果添加以下代碼可以連接到集群,通過(guò)Client可以展示整個(gè)計(jì)算過(guò)程的dashboard,由Bokeh實(shí)現(xiàn)。

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

Python大數(shù)據(jù)分析神器Dask有什么用

以上是“Python大數(shù)據(jù)分析神器Dask有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

名稱(chēng)欄目:Python大數(shù)據(jù)分析神器Dask有什么用-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article16/dcpcdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、企業(yè)網(wǎng)站制作、網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)