最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

技術(shù)分享!Python大數(shù)據(jù)分析

2020-12-24 11:36 作者:光耀三十洲  | 我要投稿

對(duì)于Pandas運(yùn)行速度的提升方法,之前已經(jīng)介紹過很多回了,里面經(jīng)常提及Dask,很多朋友沒接觸過可能不太了解,今天就推薦一下這個(gè)神器。

1、什么是Dask?

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

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

官方:https://dask.org/

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

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

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

下面這個(gè)就是Dask進(jìn)行數(shù)據(jù)處理的大致流程。

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

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

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

3、Dask安裝

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

4、Dask如何使用?

Numpy、pandas

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

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

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

Delayed

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

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

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

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

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

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

total.visualize() ?


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

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

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

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

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

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

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

5、總結(jié)

以上就是Dask的簡(jiǎn)單介紹,Dask的功能是非常強(qiáng)大的,且說明文檔也非常全,既有示例又有解釋。感興趣的朋友可以自行去官網(wǎng)或者GitHub學(xué)習(xí),東哥下次分享使用Dask進(jìn)行機(jī)器學(xué)習(xí)的一些實(shí)例。

了解更多,請(qǐng)點(diǎn)擊:https://www.bilibili.com/video/BV1wb411v7dy




原作者:Python數(shù)據(jù)科學(xué)

原出處:掘金

原文鏈接:https://juejin.cn/post/6890186870459006989

技術(shù)分享!Python大數(shù)據(jù)分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
温泉县| 观塘区| 全椒县| 岗巴县| 临汾市| 冷水江市| 保靖县| 汕头市| 磴口县| 定襄县| 南阳市| 柳江县| 乐山市| 永定县| 监利县| 黑河市| 永泰县| 长泰县| 三门峡市| 金门县| 古田县| 旺苍县| 平舆县| 察雅县| 新乡县| 视频| 呼玛县| 乌拉特后旗| 前郭尔| 拜泉县| 西乌珠穆沁旗| 大连市| 鸡西市| 新平| 新兴县| 深州市| 上犹县| 静乐县| 平和县| 永和县| 砀山县|