0.052秒打開100GB數(shù)據(jù),這個(gè)Python開源庫(kù)火爆了再榄!

許多組織都在嘗試收集和利用盡可能多的數(shù)據(jù)狡刘,以改善其經(jīng)營(yíng)方式,增加收入和提升影響力困鸥。因此嗅蔬,數(shù)據(jù)科學(xué)家面對(duì)50GB甚至500GB大小的數(shù)據(jù)集情況變得越來越普遍。

不過疾就,這類數(shù)據(jù)集使用起來不太容易澜术。它們足夠小,可以裝入日常筆記本電腦的硬盤驅(qū)動(dòng)器中猬腰,但同時(shí)大到無法裝入RAM鸟废,導(dǎo)致它們已經(jīng)很難打開和檢查,更不用說探索或分析了姑荷。

處理此類數(shù)據(jù)集時(shí)盒延,通常采用3種策略。

第一種是對(duì)數(shù)據(jù)進(jìn)行二次采樣鼠冕,但缺點(diǎn)很明顯:你可能因?yàn)楹鲆曄嚓P(guān)部分?jǐn)?shù)據(jù)而錯(cuò)過關(guān)鍵洞察添寺,甚至更糟的是,這會(huì)誤解了數(shù)據(jù)所闡釋的含義懈费。

第二種策略是使用分布式計(jì)算计露。在某些情況下這是一種有效的方法,但它需要管理和維護(hù)集群的大量開銷楞捂。

又或者薄坏,你可以租用一個(gè)強(qiáng)大的云實(shí)例,該實(shí)例具有處理相關(guān)數(shù)據(jù)所需的內(nèi)存寨闹。例如,AWS提供具有TB級(jí)RAM的實(shí)例君账。在這種情況下繁堡,你仍然必須管理云數(shù)據(jù)存儲(chǔ)區(qū),每次實(shí)例啟動(dòng)時(shí)乡数,都需要等待數(shù)據(jù)從存儲(chǔ)空間傳輸?shù)綄?shí)例椭蹄,同時(shí),還要考慮將數(shù)據(jù)存儲(chǔ)在云上的合規(guī)性問題净赴,以及在遠(yuǎn)程計(jì)算機(jī)上工作帶來的不便绳矩。更不別說成本,盡管一開始成本很低玖翅,但后續(xù)往往會(huì)增加翼馆。

Vaex是解決這個(gè)問題的新方法割以。它是一種幾乎可以對(duì)任意大小的數(shù)據(jù)進(jìn)行數(shù)據(jù)科學(xué)研究的更快、更安全应媚、更方便的方法严沥,只要數(shù)據(jù)集可以安裝在你的筆記本電腦,臺(tái)式機(jī)或服務(wù)器硬盤上中姜。

什么是Vaex消玄?

Vaex 是一個(gè)開源的 DataFrame 庫(kù)(類似于Pandas),對(duì)和你硬盤空間一樣大小的表格數(shù)據(jù)集丢胚,它可以有效進(jìn)行可視化翩瓜、探索、分析甚至進(jìn)行實(shí)踐機(jī)器學(xué)習(xí)携龟。

它可以在N維網(wǎng)格上計(jì)算每秒超過十億(10^9)個(gè)對(duì)象/行的統(tǒng)計(jì)信息奥溺,例如均值、總和骨宠、計(jì)數(shù)浮定、標(biāo)準(zhǔn)差等?。使用直方圖层亿、密度圖和三維體繪制完成可視化桦卒,從而可以交互式探索大數(shù)據(jù)。Vaex使用內(nèi)存映射匿又、零內(nèi)存復(fù)制策略獲得最佳性能(不浪費(fèi)內(nèi)存)方灾。

為實(shí)現(xiàn)這些功能,Vaex 采用內(nèi)存映射碌更、高效的核外算法和延遲計(jì)算等概念裕偿。所有這些都封裝為類 Pandas 的 API,因此痛单,任何人都能快速上手嘿棘。

十億級(jí)計(jì)程車的數(shù)據(jù)分析

為了說明這一概念,讓我們對(duì)一個(gè)數(shù)據(jù)集進(jìn)行簡(jiǎn)單的探索性數(shù)據(jù)分析旭绒,該數(shù)據(jù)集并不適合典型筆記本電腦的RAM鸟妙。

本文中將使用紐約市(NYC)出租車數(shù)據(jù)集,其中包含標(biāo)志性的黃色出租車在2009年至2015年之間進(jìn)行的超過10億次出行的信息挥吵。數(shù)據(jù)可以從網(wǎng)站(*www1.nyc.gov/site/tlc/ab…?*)下載重父,并且為CSV格式。完整的分析可以在此Jupyter筆記本中單獨(dú)查看(*nbviewer.jupyter.org/github/vaex…?*)忽匈。

為什么要選擇vaex

性能:處理海量表格數(shù)據(jù)房午,每秒處理超過十億行

虛擬列:動(dòng)態(tài)計(jì)算,不浪費(fèi)內(nèi)存

高效的內(nèi)存在執(zhí)行過濾/選擇/子集時(shí)沒有內(nèi)存副本丹允。

可視化:直接支持郭厌,單線通常就足夠了袋倔。

用戶友好的API:只需處理一個(gè)數(shù)據(jù)集對(duì)象,制表符補(bǔ)全和docstring可以幫助你:ds.mean沪曙,類似于Pandas奕污。

精益:分成多個(gè)包

Jupyter集成:vaex-jupyter將在Jupyter筆記本和Jupyter實(shí)驗(yàn)室中提供交互式可視化和選擇。

打開100GB數(shù)據(jù)集只需0.052秒

第一步是將數(shù)據(jù)轉(zhuǎn)換為內(nèi)存可映射文件格式液走,例如Apache Arrow碳默,Apache Parquet或HDF5。在此處也可以找到如何將CSV數(shù)據(jù)轉(zhuǎn)換為HDF5的示例缘眶。數(shù)據(jù)變?yōu)閮?nèi)存可映射格式后嘱根,即使在磁盤上的大小超過100GB,也可以使用Vaex即時(shí)打開(只需0.052秒O镄浮):

為什么這么快该抒?當(dāng)使用Vaex打開內(nèi)存映射文件時(shí),實(shí)際上沒有進(jìn)行任何數(shù)據(jù)讀取顶燕。Vaex僅讀取文件的元數(shù)據(jù)凑保,例如磁盤上數(shù)據(jù)的位置,數(shù)據(jù)結(jié)構(gòu)(行數(shù)涌攻、列數(shù)欧引、列名和類型),文件說明等恳谎。那么芝此,如果我們要檢查數(shù)據(jù)或與數(shù)據(jù)交互怎么辦?打開數(shù)據(jù)集會(huì)生成一個(gè)標(biāo)準(zhǔn)的DataFrame并對(duì)其進(jìn)行快速檢查:

注意因痛,單元執(zhí)行時(shí)間太短了婚苹。這是因?yàn)轱@示Vaex DataFrame或列僅需要從磁盤讀取前后5行數(shù)據(jù)。這將我們引向另一個(gè)重點(diǎn):Vaex只會(huì)在需要時(shí)遍歷整個(gè)數(shù)據(jù)集鸵膏,并且會(huì)嘗試通過盡可能少的數(shù)據(jù)傳遞來做到這一點(diǎn)膊升。

無論如何,讓我們從極端異常值或錯(cuò)誤數(shù)據(jù)輸入值開始清除此數(shù)據(jù)集较性。一個(gè)很好的方法是使用describe方法對(duì)數(shù)據(jù)進(jìn)行高級(jí)概述用僧,其中顯示了樣本數(shù)、缺失值數(shù)和每一列的數(shù)據(jù)類型赞咙。如果列的數(shù)據(jù)類型為數(shù)字,則還將顯示平均值糟港、標(biāo)準(zhǔn)偏差以及最小值和最大值攀操。所有這些統(tǒng)計(jì)信息都是通過對(duì)數(shù)據(jù)的一次傳遞來計(jì)算的。

使用describe方法獲得 DataFrame 的高級(jí)概覽秸抚,注意這個(gè) DataFrame 包含 18 列數(shù)據(jù)速和,不過截圖只展示了前 7 列歹垫。

該describe方法很好地體現(xiàn)了Vaex的功能和效率:所有這些統(tǒng)計(jì)數(shù)據(jù)都是在我的MacBook Pro(2018款15英寸,2.6GHz Intel Core i7颠放,32GB RAM)上用不到3分鐘的時(shí)間計(jì)算出來的排惨。其他庫(kù)或方法都需要分布式計(jì)算或擁有超過100GB的云實(shí)例來執(zhí)行相同的計(jì)算。而使用Vaex碰凶,你所需要的只是數(shù)據(jù)暮芭,以及只有幾GB RAM的筆記本電腦。

查看describe的輸出欲低,很容易注意到數(shù)據(jù)包含一些嚴(yán)重的異常值辕宏。

首先開始檢查上車地點(diǎn)。消除異常值的最簡(jiǎn)單方法是簡(jiǎn)單地繪制上下車地點(diǎn)的位置砾莱,并直觀地定義我們要集中分析的NYC區(qū)域瑞筐。由于我們正在使用如此大的數(shù)據(jù)集,因此直方圖是最有效的可視化效果腊瑟。使用Vaex創(chuàng)建和顯示直方圖和熱力圖的速度很快聚假,而且圖表可以交互!

一旦我們通過交互決定要關(guān)注的NYC區(qū)域闰非,就可以簡(jiǎn)單地創(chuàng)建一個(gè)篩選后的DataFrame:?

關(guān)于上面的代碼膘格,最酷的事情是它需要執(zhí)行的內(nèi)存量可以忽略不計(jì)!在篩選Vaex DataFrame時(shí)不會(huì)復(fù)制數(shù)據(jù)河胎,而是僅創(chuàng)建對(duì)原始對(duì)象的引用闯袒,在該引用上應(yīng)用二進(jìn)制掩碼。用掩碼選擇要顯示的行游岳,并將其用于將來的計(jì)算政敢。這將為我們節(jié)省100GB的RAM,而像今天許多標(biāo)準(zhǔn)數(shù)據(jù)科學(xué)工具卻要復(fù)制數(shù)據(jù)胚迫。

現(xiàn)在喷户,檢查一下該passenger_count列。單次出租車行程記錄的最大乘客數(shù)為255访锻,這似乎有些夸張褪尝。計(jì)算每次行程的乘客人數(shù),使用以下value_counts方法很容易做到這一點(diǎn):

在 10 億行數(shù)據(jù)上使用 value_counts 方法只需要 20 秒

從上圖可以看出期犬,載客超過6人的行程可能是罕見的異常值河哑,或者僅僅是錯(cuò)誤的數(shù)據(jù)輸入,還有大量的0位乘客的行程龟虎。由于目前我們尚不了解這些行程是否合法璃谨,因此我們也將其過濾掉。?


讓我們對(duì)行程距離進(jìn)行類似的練習(xí)。由于這是一個(gè)連續(xù)變量佳吞,因此我們可以繪制行程距離的分布圖拱雏。讓我們繪制一個(gè)更合理范圍的直方圖。


紐約出租車數(shù)據(jù)行程距離直方圖

從上圖可以看出底扳,出行次數(shù)隨著距離的增加而減少铸抑。在距離約100英里處,分布有明顯下降衷模。目前鹊汛,我們將以此為起點(diǎn),根據(jù)行程距離消除極端離群值:

出行距離一列中存在極端異常值算芯,這也是研究出行時(shí)間和出租車平均速度的動(dòng)機(jī)柒昏。這些功能在數(shù)據(jù)集中尚不可用,但計(jì)算起來很簡(jiǎn)單:

上面的代碼塊無需內(nèi)存熙揍,無需花費(fèi)時(shí)間即可執(zhí)行职祷!這是因?yàn)榇a只會(huì)創(chuàng)建虛擬列。這些列僅包含數(shù)學(xué)表達(dá)式届囚,并且僅在需要時(shí)才進(jìn)行評(píng)估有梆。此外,虛擬列的行為與任何其他常規(guī)列都相同意系。注意泥耀,其他標(biāo)準(zhǔn)庫(kù)將需要10 GB的RAM才能進(jìn)行相同的操作。

好了蛔添,讓我們來繪制行程耗費(fèi)時(shí)間的分布:

紐約超過 10 億次出租車行程耗費(fèi)時(shí)間的直方圖

從上面的圖中可以看出痰催,盡管有一些行程可能需要花費(fèi)4至5個(gè)小時(shí),但95%的出租車花費(fèi)不到30分鐘即可到達(dá)目的地迎瞧。你能想象在紐約市被困出租車中超過3個(gè)小時(shí)嗎夸溶?無論如何,我們要保持開放的態(tài)度凶硅,并考慮所有花費(fèi)時(shí)間少于3小時(shí)的行程:

現(xiàn)在缝裁,讓我們研究出租車的平均速度,同時(shí)選擇一個(gè)合理的數(shù)據(jù)范圍:

出租車平均速度分布

根據(jù)分布趨平的位置足绅,我們可以推斷出在每小時(shí)1到60英里之間合理的平均滑行速度捷绑,因此可以更新篩選后的DataFrame:


將重點(diǎn)轉(zhuǎn)移到出租車費(fèi)用上。從describe方法的輸出中氢妈,我們可以看到在fare_amount粹污,total_amount和tip_amount列中有一些瘋狂的異常值。對(duì)于初學(xué)者首量,任何這些列中的任何值都不應(yīng)為負(fù)厕怜。同時(shí)數(shù)字表明,一些幸運(yùn)的司機(jī)僅憑開一次出租車便幾乎成為了百萬(wàn)富翁蕾总。讓我們看一下在相對(duì)合理的范圍內(nèi)這些數(shù)量的分布:

紐約超過 10 億次出租車行程的車費(fèi)粥航、總額和小費(fèi)的分布。在筆記本上繪制這些圖表只用了 31 秒生百!

我們看到上述所有三個(gè)分布都有相當(dāng)長(zhǎng)的尾部递雀。尾部的某些值可能是合法的,而其他值可能是錯(cuò)誤的數(shù)據(jù)輸入蚀浆。無論如何缀程,讓我們先保守下,只考慮fare_amount市俊,total_amount和tip_amount少于200的行程杨凑。我們還要求fare_amount,total_amount值大于200的行程摆昧。我們還要求fareamount撩满,totalamount值大于0。


最后绅你,在初步清理完所有數(shù)據(jù)之后伺帘,讓我們看看有多少出租車數(shù)據(jù)需要進(jìn)行分析:


還有超過11億次旅行!大量的數(shù)據(jù)可以使你深入了解出租車行程背后的信息忌锯。

后記

此外伪嫁,作者還從出租車司機(jī)最大化利潤(rùn)等角度利用Vaex進(jìn)行分析數(shù)據(jù)∨伎澹總之张咳,Vaex會(huì)幫你緩解可能面臨的一些數(shù)據(jù)挑戰(zhàn)的問題。

有了 Vaex似舵,你可以在短短幾秒內(nèi)遍歷超過 10 億行數(shù)據(jù)脚猾,計(jì)算各種統(tǒng)計(jì)、聚合并產(chǎn)出信息圖表啄枕,這一切都能在你的筆記本電腦上完成婚陪。它免費(fèi)且開源。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末频祝,一起剝皮案震驚了整個(gè)濱河市泌参,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌常空,老刑警劉巖沽一,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漓糙,居然都是意外死亡铣缠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗蛙,“玉大人蝇庭,你說我怎么就攤上這事〖窆瑁” “怎么了哮内?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)壮韭。 經(jīng)常有香客問我北发,道長(zhǎng),這世上最難降的妖魔是什么喷屋? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任琳拨,我火速辦了婚禮,結(jié)果婚禮上屯曹,老公的妹妹穿的比我還像新娘狱庇。我一直安慰自己,他們只是感情好是牢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布僵井。 她就那樣靜靜地躺著,像睡著了一般驳棱。 火紅的嫁衣襯著肌膚如雪批什。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天社搅,我揣著相機(jī)與錄音驻债,去河邊找鬼。 笑死形葬,一個(gè)胖子當(dāng)著我的面吹牛合呐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笙以,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼淌实,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了猖腕?” 一聲冷哼從身側(cè)響起拆祈,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倘感,沒想到半個(gè)月后放坏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡老玛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年淤年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钧敞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡麸粮,死狀恐怖溉苛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豹休,我是刑警寧澤炊昆,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站威根,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏视乐。R本人自食惡果不足惜洛搀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佑淀。 院中可真熱鬧留美,春花似錦、人聲如沸伸刃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捧颅。三九已至景图,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碉哑,已是汗流浹背挚币。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扣典,地道東北人妆毕。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贮尖,于是被迫代替她去往敵國(guó)和親笛粘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容