亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python數(shù)據(jù)集庫(kù)Vaex秒開(kāi)100GB加數(shù)據(jù)

 更新時(shí)間:2022年06月13日 14:48:35   作者:量化投資與機(jī)器學(xué)習(xí)  
這篇文章主要為大家介紹了Python數(shù)據(jù)集庫(kù)Vaex秒開(kāi)100GB加數(shù)據(jù)實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

如果你50GB甚至500GB的數(shù)據(jù)集,打開(kāi)他們都很困難了,更別說(shuō)分析了。

在處理這樣的數(shù)據(jù)集時(shí),我們通常采用3種方法。

第一種對(duì)數(shù)據(jù)進(jìn)抽樣:這里的缺點(diǎn)是顯而易見(jiàn)的,樣本數(shù)據(jù)能否代表整個(gè)數(shù)據(jù)。

第二種使用分布式計(jì)算:雖然在某些情況下這是一種有效的方法,但是它帶來(lái)了管理和維護(hù)集群的巨大開(kāi)銷。想象一下,必須為一個(gè)剛好超出RAM范圍的數(shù)據(jù)集設(shè)置一個(gè)集群,比如在30-50GB范圍內(nèi)。這有點(diǎn)過(guò)分了。

第三種租用一個(gè)強(qiáng)大的云服務(wù):例如,AWS提供了具有TB內(nèi)存的實(shí)例。在這種情況下,你仍然需要管理云數(shù)據(jù),每次啟動(dòng)時(shí)都要等待一個(gè)個(gè)的數(shù)據(jù)傳輸。處理將數(shù)據(jù)放到云上所帶來(lái)的遵從性問(wèn)題,以及處理在遠(yuǎn)程機(jī)器上工作所帶來(lái)的所有不便。更不用說(shuō)成本了,盡管開(kāi)始時(shí)成本很低,但隨著時(shí)間的推移,成本往往會(huì)越來(lái)越高。

在本文中,我們將向你展示一種新的方法:一種更快、更安全、總體上更方便的方法,可以使用幾乎任意大小的數(shù)據(jù)進(jìn)行數(shù)據(jù)研究分析,只要它能夠適用于筆記本電腦、臺(tái)式機(jī)或服務(wù)器的硬盤驅(qū)動(dòng)器。

Vaex

Vaex是一個(gè)開(kāi)源的DataFrame庫(kù),它可以對(duì)表格數(shù)據(jù)集進(jìn)行可視化、探索、分析,甚至機(jī)器學(xué)習(xí),這些數(shù)據(jù)集和你的硬盤驅(qū)動(dòng)器一樣大。它可以在一個(gè)n維網(wǎng)格上每秒計(jì)算超過(guò)10億(10^9)個(gè)對(duì)象的平均值、和、計(jì)數(shù)、標(biāo)準(zhǔn)差等統(tǒng)計(jì)信息??梢暬褂弥狈綀D、使用直方圖、密度圖和3D立體渲染進(jìn)行可視化。為此,Vaex采用了內(nèi)存映射、高效的外核算法和延遲計(jì)算等概念來(lái)獲得最佳性能(不浪費(fèi)內(nèi)存)。所有這些都封裝在一個(gè)類似Pandas的API中。

GitHub:https://github.com/vaexio/vaex

為了說(shuō)明Vaex的性能,我們?yōu)榇蠹遗e個(gè)例子。

數(shù)據(jù)準(zhǔn)備

我們使用紐約市出租車的數(shù)據(jù)集,該數(shù)據(jù)集包含了出租車在2009年至2015年間超過(guò)10億次出租車出行的信息。數(shù)據(jù)可從下面的網(wǎng)站下載,并以 CSV 格式提供:

https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page

數(shù)據(jù)清洗

第一步將數(shù)據(jù)轉(zhuǎn)換為內(nèi)存映射文件格式,如Apache Arrow、Apache Parque 或HDF5。一旦數(shù)據(jù)成為內(nèi)存映射格式,使用Vaex打開(kāi)它是瞬間的(數(shù)據(jù)的磁盤大小超過(guò)100GB)。有多塊?

0.052秒!

將CSV數(shù)據(jù)轉(zhuǎn)換為HDF5的代碼如下:

為什么這么快?

當(dāng)你使用Vaex打開(kāi)內(nèi)存映射文件時(shí),實(shí)際上沒(méi)有數(shù)據(jù)讀取。Vaex只讀取文件元數(shù)據(jù),比如磁盤上數(shù)據(jù)的位置、數(shù)據(jù)結(jié)構(gòu)(行數(shù)、列數(shù)、列名和類型)、文件描述等等。那么,如果我們想要檢查或與數(shù)據(jù)交互呢?打開(kāi)一個(gè)數(shù)據(jù)集會(huì)得到一個(gè)標(biāo)準(zhǔn)的DataFrame:

再次注意,單元執(zhí)行時(shí)間非常短。這是因?yàn)轱@示Vaex DataFrame或列只需要從磁盤讀取前5行和后5行。這就引出了另一個(gè)重要的問(wèn)題:Vaex只會(huì)在必要時(shí)遍歷整個(gè)數(shù)據(jù)集,而且它會(huì)盡可能少地遍歷數(shù)據(jù)。

現(xiàn)在開(kāi)始清理數(shù)據(jù)集。一個(gè)好的開(kāi)始方法是使用describe方法獲得數(shù)據(jù)的概覽:

describe方法很好地說(shuō)明了Vaex的性能和效率:所有這些統(tǒng)計(jì)數(shù)據(jù)都是在MacBook Pro(15英寸,2018年,2.6GHz Intel Core i7,32GB RAM)上用不到3分鐘計(jì)算出來(lái)的。其他庫(kù)或方法需要分布式計(jì)算或超過(guò)100GB的云才能預(yù)先相同的計(jì)算。有了Vaex,你所需要的只是數(shù)據(jù),以及只有幾GB內(nèi)存的筆記本電腦。

查看description的輸出,很容易注意到數(shù)據(jù)包含一些嚴(yán)重的異常值。由于我們使用的是如此龐大的數(shù)據(jù)集,直方圖是最有效的可視化方法。用Vaex創(chuàng)建和顯示柱狀圖和熱圖是如此的快,這樣的圖可又是交互式的!

df.plot_widget(df.pickup_longitude,
               df.pickup_latitude,
               shape=512,
               limits='minmax',
               f='log1p',
               colormap='plasma')

一旦我們決定了想要關(guān)注紐約的哪個(gè)區(qū)域,我們就可以簡(jiǎn)單地創(chuàng)建一個(gè)過(guò)濾后的 DataFrame:

上面的代碼塊的優(yōu)點(diǎn)在于:它所需要的內(nèi)存可以忽略不計(jì)!在過(guò)濾Vaex DataFrame時(shí),不會(huì)生成數(shù)據(jù)副本。相反,只創(chuàng)建對(duì)原始對(duì)象的引用,并在其上應(yīng)用二進(jìn)制掩碼。掩碼選擇顯示哪些行并用于將來(lái)的計(jì)算。這為我們節(jié)省了100GB的RAM,如果要復(fù)制數(shù)據(jù),就需要這樣做,就像現(xiàn)在許多標(biāo)準(zhǔn)的數(shù)據(jù)分析所做的那樣。

現(xiàn)在,讓我們檢查一下passenger_count列。單次乘坐出租車的最高記錄是255人,這似乎有點(diǎn)極端。讓我們數(shù)一數(shù)每一名乘客的出行次數(shù)。使用value_counts方法很容易做到這一點(diǎn):

應(yīng)用10億行的“value_counts”方法只需要20秒!

從上圖中我們可以看出,乘客超過(guò)6人的出行很可能是罕見(jiàn)的異常值,或者是數(shù)據(jù)輸入錯(cuò)誤。也有大量的出現(xiàn),沒(méi)有(0名)乘客。既然現(xiàn)在我們還不知道這些旅行是否合法,那就讓我們把它們過(guò)濾掉吧。

讓我們做一個(gè)關(guān)于類似出行距離的操作。由于這是一個(gè)連續(xù)的變量,我們可以畫出出行距離的分布??纯醋钚『妥畲蟮木嚯x,讓我們用一個(gè)更合理的范圍來(lái)繪制直方圖。

從上圖中我們可以看到,出行次數(shù)隨著距離的增加而減少。在大約100英里的距離上,分布有很大的下降。現(xiàn)在,我們用這個(gè)作為分界點(diǎn),來(lái)消除基于行程距離的極端異常值:

出行距離列中存在的極端離群值是調(diào)查出租車出行時(shí)間和平均速度的原因。這些特征在數(shù)據(jù)集中是不容易獲得的,但是計(jì)算起來(lái)很簡(jiǎn)單:

上面的代碼塊需要零內(nèi)存,不需要執(zhí)行時(shí)間!這是因?yàn)榇a會(huì)創(chuàng)建虛擬列。這些列只包含數(shù)學(xué)表達(dá)式,僅在需要時(shí)才計(jì)算它們。否則,虛列的行為與任何其他常規(guī)列一樣。注意,其他標(biāo)準(zhǔn)庫(kù)需要10s的GB內(nèi)存來(lái)完成相同的操作。

讓我們畫出行程時(shí)間的分布圖:

從上圖我們可以看到,95% 的出租車行程花費(fèi)不到30分鐘到達(dá)目的地,盡管有些行程花費(fèi)了4-5個(gè)小時(shí)。你能想象在紐約被困在出租車?yán)锍^(guò)3個(gè)小時(shí)的情景嗎?考慮所有總共不超過(guò)3小時(shí)的行程:

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

根據(jù)分布趨平的地方,我們可以推斷出合理的出租車平均速度在每小時(shí)1到60英里之間,因此我們可以更新過(guò)濾后的dataframe:

讓我們把焦點(diǎn)轉(zhuǎn)移到出租車的費(fèi)用上。從describe方法的輸出中,我們可以看到在fare_amount、total_amount和tip_amount列中存在一些異常值。對(duì)于初學(xué)者來(lái)說(shuō),這些列中的任何值都不應(yīng)該是負(fù)值。讓我們看看這些數(shù)據(jù)的分布在一個(gè)相對(duì)合理的范圍內(nèi):

我們看到上面的三個(gè)分布都有相當(dāng)長(zhǎng)的尾部。尾部的一些值可能是正確的,而其他值可能是錯(cuò)誤的數(shù)據(jù)輸入。無(wú)論如何,讓我們現(xiàn)在保守一點(diǎn),只考慮票價(jià)為fare_amount、total_amount和tip_amount低于200美元的乘客。我們還要求fare_amount、total_amount的值大于0。

最后,在所有初始數(shù)據(jù)清理之后,讓我們看看還剩下多少出租車次數(shù)供我們分析:

超過(guò)11億次的出行! 

具體分析

假設(shè)我們使用這個(gè)數(shù)據(jù)集來(lái)學(xué)習(xí)如何最大化利潤(rùn),最小化成本。

讓我們從找出從平均值而言,能帶來(lái)較好收入的載客地點(diǎn)開(kāi)始。我們只需繪制一張熱點(diǎn)地區(qū)接送地點(diǎn)的熱圖,對(duì)平均票價(jià)進(jìn)行顏色編碼,然后查看熱點(diǎn)地區(qū)。然而,出租車司機(jī)也有自己的成本。例如,燃料費(fèi)用。因此,把乘客帶到很遠(yuǎn)的地方可能會(huì)導(dǎo)致更高的票價(jià),但這也意味著更大的燃料消耗和時(shí)間損失。此外,從偏遠(yuǎn)的地方載一個(gè)乘客去市中心可能不那么容易,因此在沒(méi)有乘客的情況下開(kāi)車回去可能會(huì)很貴。一種解釋的方法是,用票價(jià)金額與出行距離之比的平均值來(lái)表示熱圖的顏色。讓我們考慮一下這兩種方法:

出租車司機(jī)是一份相當(dāng)靈活的工作。除了知道應(yīng)該去哪里,如果讓他們知道什么時(shí)候開(kāi)車最賺錢也是很有用的。為了回答這個(gè)問(wèn)題,讓我們制作一個(gè)圖表,顯示每天和每小時(shí)的平均票價(jià)與行程的比率:

上面的數(shù)字是合理的,最好的收入發(fā)生在高峰時(shí)間,特別是中午,在工作日。作為一名出租車司機(jī),我們收入的一部分給了出租車公司,所以我們可能會(huì)對(duì)哪一天、哪段時(shí)間顧客給的小費(fèi)最多感興趣。讓我們制作一個(gè)類似的圖,這次顯示的是平均小費(fèi)的比例:

上面的結(jié)論很有趣。它告訴我們,乘客在早上7點(diǎn)到10點(diǎn)之間給出租車司機(jī)的小費(fèi)最多,如果你在凌晨3點(diǎn)或4點(diǎn)接乘客,不要指望會(huì)有大額小費(fèi)。

更深入的分析

在本文的前一部分中,我們簡(jiǎn)要地集中討論了trip_distance列,在去除異常值時(shí),我們保留了所有值小于100英里的行程。但這仍然是一個(gè)相當(dāng)大的臨界值,尤其是考慮到Y(jié)ellow Taxi公司主要在曼哈頓運(yùn)營(yíng)。trip_distance列描述出租車從上客點(diǎn)到下客點(diǎn)的距離。然而,人們經(jīng)常可以選擇不同的路線,在兩個(gè)確切的上落地點(diǎn)之間有不同的距離,例如為了避免交通堵塞或道路工程。因此,作為trip_distance列的一個(gè)對(duì)應(yīng)項(xiàng),讓我們計(jì)算接送位置之間可能的最短距離,我們稱之為arc_distance:

對(duì)于用Numpy編寫的復(fù)雜表達(dá)式,vaex可以在Numba、Pythran甚至CUDA(如果你有NVIDIA GPU的話)的幫助下使用即時(shí)編譯來(lái)極大地提高你的計(jì)算速度。

arc_distance的計(jì)算公式非常復(fù)雜,它包含了大量的三角函數(shù)和算術(shù)知識(shí),特別是在處理大數(shù)據(jù)集的情況下,計(jì)算量很大。如果表達(dá)式或函數(shù)僅使用來(lái)自Numpy包的Python操作和方法編寫,Vaex將使用計(jì)算機(jī)的所有核心并行地計(jì)算它。除此之外,Vaex通過(guò)Numba(使用LLVM)或Pythran(通過(guò)C++加速)支持即時(shí)編譯,從而提供更好的性能。如果你有NVIDIA顯卡,你可以通過(guò)jit_cuda方法使用CUDA來(lái)獲得更快的性能。

無(wú)論如何,我們來(lái)畫一下trip_distance和arc_distance的分布:

有趣的是,arc_distance從未超過(guò)21英里,但出租車實(shí)際行駛的距離可能是它的5倍。事實(shí)上,在數(shù)百萬(wàn)次的出租車行程中,落客點(diǎn)距離接客點(diǎn)只有100米(0.06英里)。

我們這次試用的數(shù)據(jù)集跨越了7年。我們可以看看在這段時(shí)間里,人們對(duì)某些東西的興趣是如何演變的,可能會(huì)很有趣。使用Vaex,我們可以進(jìn)行out-of-core group-by和aggregation操作。讓我們來(lái)看看這7年中票價(jià)和旅行距離的變化:

在擁有四核處理器的筆記本電腦上,對(duì)一個(gè)擁有超過(guò)10億個(gè)樣本的Vaex DataFrame進(jìn)行8個(gè)聚合的分組操作只需不到2分鐘。

在上面的單元格格中,我們執(zhí)行g(shù)roupby操作,然后執(zhí)行8個(gè)聚合,其中2個(gè)位于虛擬列上。上面的單元格在我們的筆記本電腦上執(zhí)行不到2分鐘。考慮到我們使用的數(shù)據(jù)包含超過(guò)10億個(gè)樣本,這是相當(dāng)令人印象深刻的。不管怎樣,讓我們看看結(jié)果。以下是多年來(lái)乘坐出租車的費(fèi)用是如何演變的:

我們看到,隨著時(shí)間的流逝,出租車費(fèi)和小費(fèi)都在上漲?,F(xiàn)在讓我們看看出租車的trip_distance 和arc_distance作為年的函數(shù):

上圖顯示,trip_distance和arc_distance都有一個(gè)小的增長(zhǎng),這意味著,平均而言,人們傾向于每年走得更遠(yuǎn)一點(diǎn)。

讓我們?cè)僬{(diào)查一下乘客是如何支付他們的車費(fèi)的:payment_type列,讓我們看看它包含的值:

從數(shù)據(jù)集中,我們可以看到只有6個(gè)有效的條目:

  • 1=信用卡支付
  • 2=現(xiàn)金支付
  • 3=不收費(fèi)
  • 4=糾紛
  • 5=未知
  • 6=無(wú)效行程

因此,我們可以簡(jiǎn)單地將payment_type列中的條目映射到整數(shù):

現(xiàn)在我們可以根據(jù)每年的數(shù)據(jù)進(jìn)行分組,看看紐約人在支付打車費(fèi)用方面的習(xí)慣是如何改變的:

我們發(fā)現(xiàn),隨著時(shí)間的推移,信用卡支付慢慢變得比現(xiàn)金支付更頻繁。在上面的代碼塊中,一旦我們聚合了數(shù)據(jù),小型的Vaex dataframe就可以很容易地轉(zhuǎn)換為Pandas DataFrame,將其傳遞給Seaborn。

最后,讓我們通過(guò)繪制現(xiàn)金支付與信用卡支付之間的比率來(lái)查看付款方法是否取決于當(dāng)天的時(shí)間或星期幾。為此,我們將首先創(chuàng)建一個(gè)過(guò)濾器,它只選擇用現(xiàn)金或信用卡支付。下一步是具有Vaex特色功能的操作:帶有選擇的聚合。其他庫(kù)要求對(duì)每個(gè)支付方法進(jìn)行聚合,然后將這些支付方法后來(lái)合并為一個(gè)支付方法。 另一方面,我們可以通過(guò)在聚合函數(shù)中提供的參數(shù),一步完成這個(gè)操作。 這非常方便,只需要傳遞一次數(shù)據(jù),就可以獲得更好的性能。 然后,我們可以用標(biāo)準(zhǔn)的方式繪制出最終的DataFrame:

從上面的圖可以看出,顯示的小費(fèi)百分比可以作為一周的某天或一天的某時(shí)段的函數(shù)。從這兩個(gè)圖中表明,用信用卡支付的乘客比用現(xiàn)金支付的乘客更傾向于給小費(fèi)??纯捶植迹?/p>

乘客多久付一次小費(fèi)?

但是讓我們看看_fareamount和_totalamount的分布,這取決于支付方式是刷卡還是現(xiàn)金。

結(jié)論

有了Vaex,你可以在短短幾秒鐘內(nèi)瀏覽超過(guò)10億行數(shù)據(jù),計(jì)算各種統(tǒng)計(jì)數(shù)據(jù)、聚合信息,并生成信息圖表,而這一切都是在你自己的筆記本電腦上完成的。而且它是免費(fèi)和開(kāi)源的!

以上就是Python數(shù)據(jù)集庫(kù)Vaex秒開(kāi)100GB加數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于Python庫(kù)Vaex秒開(kāi)100GB數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • pytorch中實(shí)現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道)

    pytorch中實(shí)現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道)

    這篇文章主要介紹了pytorch中實(shí)現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 超實(shí)用的 30 段 Python 案例

    超實(shí)用的 30 段 Python 案例

    Python是目前最流行的語(yǔ)言之一,它在數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、web開(kāi)發(fā)、腳本編寫、自動(dòng)化方面被許多人廣泛使用。這篇文章主要介紹了超實(shí)用的 30 段 Python 案例,需要的朋友可以參考下
    2019-10-10
  • python創(chuàng)建文件備份的腳本

    python創(chuàng)建文件備份的腳本

    這篇文章主要介紹了python創(chuàng)建文件備份的腳本,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Python 高級(jí)變量之字典和字符串詳解

    Python 高級(jí)變量之字典和字符串詳解

    這篇文章主要為大家介紹了Python 字典和字符串,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • python 函數(shù)進(jìn)階之閉包函數(shù)

    python 函數(shù)進(jìn)階之閉包函數(shù)

    這篇文章主要介紹了python 函數(shù)進(jìn)階之閉包函數(shù),內(nèi)函數(shù)使用了外函數(shù)的局部變量,并且外函數(shù)把內(nèi)函數(shù)返回出來(lái)的過(guò)程叫做閉包,里面的內(nèi)函數(shù)是閉包函數(shù),下文相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • 詳解Python map函數(shù)及Python map()函數(shù)的用法

    詳解Python map函數(shù)及Python map()函數(shù)的用法

    map() 會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射。下面通過(guò)本文給大家介紹Python map函數(shù)及Python map()函數(shù)的用法,需要的朋友參考下吧
    2017-11-11
  • Python中Numpy ndarray的使用詳解

    Python中Numpy ndarray的使用詳解

    這篇文章主要介紹了Python中Numpy ndarray的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 在Python中進(jìn)行自動(dòng)化單元測(cè)試的教程

    在Python中進(jìn)行自動(dòng)化單元測(cè)試的教程

    這篇文章主要介紹了在Python中進(jìn)行自動(dòng)化單元測(cè)試的教程,本文來(lái)自于IBM官方文檔,需要的朋友可以參考下
    2015-04-04
  • Python身份運(yùn)算符is與is?not區(qū)別用法基礎(chǔ)教程

    Python身份運(yùn)算符is與is?not區(qū)別用法基礎(chǔ)教程

    這篇文章主要為大家介紹了Python身份運(yùn)算符is與is?not區(qū)別用法基礎(chǔ)教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • django使用多個(gè)數(shù)據(jù)庫(kù)的方法實(shí)例

    django使用多個(gè)數(shù)據(jù)庫(kù)的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于django使用多個(gè)數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論