<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          愛了愛了!0.052 秒打開 100GB 數(shù)據(jù),這個 Python 開源庫火爆了!

          共 4381字,需瀏覽 9分鐘

           ·

          2021-01-09 11:26

          閱讀本文大概需要 3 分鐘。


          編譯?|?AI 科技大本營(ID:rgznai100)
          許多組織都在嘗試收集和利用盡可能多的數(shù)據(jù),以改善其經(jīng)營方式,增加收入和提升影響力。因此,數(shù)據(jù)科學(xué)家面對 50GB 甚至 500GB 大小的數(shù)據(jù)集情況變得越來越普遍。
          ?
          不過,這類數(shù)據(jù)集使用起來不太容易。它們足夠小,可以裝入日常筆記本電腦的硬盤驅(qū)動器中,但同時大到無法裝入 RAM,導(dǎo)致它們已經(jīng)很難打開和檢查,更不用說探索或分析了。
          ?
          處理此類數(shù)據(jù)集時,通常采用 3 種策略。
          ?
          第一種是對數(shù)據(jù)進(jìn)行二次采樣,但缺點很明顯:你可能因為忽視相關(guān)部分?jǐn)?shù)據(jù)而錯過關(guān)鍵洞察,甚至更糟的是,這會誤解了數(shù)據(jù)所闡釋的含義。
          ?
          第二種策略是使用分布式計算。在某些情況下這是一種有效的方法,但它需要管理和維護(hù)集群的大量開銷。
          ?
          又或者,你可以租用一個強(qiáng)大的云實例,該實例具有處理相關(guān)數(shù)據(jù)所需的內(nèi)存。例如,AWS 提供具有 TB 級 RAM 的實例。在這種情況下,你仍然必須管理云數(shù)據(jù)存儲區(qū),每次實例啟動時,都需要等待數(shù)據(jù)從存儲空間傳輸?shù)綄嵗?,同時,還要考慮將數(shù)據(jù)存儲在云上的合規(guī)性問題,以及在遠(yuǎn)程計算機(jī)上工作帶來的不便。更不別說成本,盡管一開始成本很低,但后續(xù)往往會增加。
          ?
          Vaex 是解決這個問題的新方法。它是一種幾乎可以對任意大小的數(shù)據(jù)進(jìn)行數(shù)據(jù)科學(xué)研究的更快、更安全、更方便的方法,只要數(shù)據(jù)集可以安裝在你的筆記本電腦,臺式機(jī)或服務(wù)器硬盤上。

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

          它可以在 N 維網(wǎng)格上計算每秒超過十億(10^9)個對象 / 行的統(tǒng)計信息,例如均值、總和、計數(shù)、標(biāo)準(zhǔn)差等?。使用直方圖、密度圖和三維體繪制完成可視化,從而可以交互式探索大數(shù)據(jù)。Vaex 使用內(nèi)存映射、零內(nèi)存復(fù)制策略獲得最佳性能(不浪費內(nèi)存)。
          ?
          為實現(xiàn)這些功能,Vaex 采用內(nèi)存映射、高效的核外算法和延遲計算等概念。所有這些都封裝為類 Pandas 的 API,因此,任何人都能快速上手。
          ?
          十億級計程車的數(shù)據(jù)分析

          為了說明這一概念,讓我們對一個數(shù)據(jù)集進(jìn)行簡單的探索性數(shù)據(jù)分析,該數(shù)據(jù)集并不適合典型筆記本電腦的 RAM。
          ?
          本文中將使用紐約市(NYC)出租車數(shù)據(jù)集,其中包含標(biāo)志性的黃色出租車在 2009 年至 2015 年之間進(jìn)行的超過 10 億次出行的信息。數(shù)據(jù)可以從網(wǎng)站(https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page)下載,并且為 CSV 格式。完整的分析可以在此 Jupyter 筆記本中單獨查看(https://nbviewer.jupyter.org/github/vaexio/vaex-examples/blob/master/medium-nyc-taxi-data-eda/vaex-taxi-article.ipynb)。

          為什么要選擇 vaex?

          • 性能:處理海量表格數(shù)據(jù),每秒處理超過十億行
          • 虛擬列:動態(tài)計算,不浪費內(nèi)存
          • 高效的內(nèi)存在執(zhí)行過濾 / 選擇 / 子集時沒有內(nèi)存副本。
          • 可視化:直接支持,單線通常就足夠了。
          • 用戶友好的 API:只需處理一個數(shù)據(jù)集對象,制表符補(bǔ)全和 docstring 可以幫助你:ds.mean,類似于 Pandas。
          • 精益:分成多個包
          • Jupyter 集成:vaex-jupyter 將在 Jupyter 筆記本和 Jupyter 實驗室中提供交互式可視化和選擇。
          ?

          第一步是將數(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 即時打開(只需 0.052 秒?。?/span>
          為什么這么快?當(dāng)使用 Vaex 打開內(nèi)存映射文件時,實際上沒有進(jìn)行任何數(shù)據(jù)讀取。Vaex 僅讀取文件的元數(shù)據(jù),例如磁盤上數(shù)據(jù)的位置,數(shù)據(jù)結(jié)構(gòu)(行數(shù)、列數(shù)、列名和類型),文件說明等。那么,如果我們要檢查數(shù)據(jù)或與數(shù)據(jù)交互怎么辦?打開數(shù)據(jù)集會生成一個標(biāo)準(zhǔn)的 DataFrame 并對其進(jìn)行快速檢查:
          注意,單元執(zhí)行時間太短了。這是因為顯示 Vaex DataFrame 或列僅需要從磁盤讀取前后 5 行數(shù)據(jù)。這將我們引向另一個重點:Vaex 只會在需要時遍歷整個數(shù)據(jù)集,并且會嘗試通過盡可能少的數(shù)據(jù)傳遞來做到這一點。
          無論如何,讓我們從極端異常值或錯誤數(shù)據(jù)輸入值開始清除此數(shù)據(jù)集。一個很好的方法是使用 describe 方法對數(shù)據(jù)進(jìn)行高級概述,其中顯示了樣本數(shù)、缺失值數(shù)和每一列的數(shù)據(jù)類型。如果列的數(shù)據(jù)類型為數(shù)字,則還將顯示平均值、標(biāo)準(zhǔn)偏差以及最小值和最大值。所有這些統(tǒng)計信息都是通過對數(shù)據(jù)的一次傳遞來計算的。
          使用 describe 方法獲得 DataFrame 的高級概覽,注意這個 DataFrame 包含 18 列數(shù)據(jù),不過截圖只展示了前 7 列。
          該 describe 方法很好地體現(xiàn)了 Vaex 的功能和效率:所有這些統(tǒng)計數(shù)據(jù)都是在我的 MacBook Pro(2018 款 15 英寸,2.6GHz Intel Core i7,32GB RAM)上用不到 3 分鐘的時間計算出來的。其他庫或方法都需要分布式計算或擁有超過 100GB 的云實例來執(zhí)行相同的計算。而使用 Vaex,你所需要的只是數(shù)據(jù),以及只有幾 GB RAM 的筆記本電腦。
          查看 describe 的輸出,很容易注意到數(shù)據(jù)包含一些嚴(yán)重的異常值。
          首先開始檢查上車地點。消除異常值的最簡單方法是簡單地繪制上下車地點的位置,并直觀地定義我們要集中分析的 NYC 區(qū)域。由于我們正在使用如此大的數(shù)據(jù)集,因此直方圖是最有效的可視化效果。使用 Vaex 創(chuàng)建和顯示直方圖和熱力圖的速度很快,而且圖表可以交互!
          一旦我們通過交互決定要關(guān)注的 NYC 區(qū)域,就可以簡單地創(chuàng)建一個篩選后的 DataFrame:?
          關(guān)于上面的代碼,最酷的事情是它需要執(zhí)行的內(nèi)存量可以忽略不計!在篩選 Vaex DataFrame 時不會復(fù)制數(shù)據(jù),而是僅創(chuàng)建對原始對象的引用,在該引用上應(yīng)用二進(jìn)制掩碼。用掩碼選擇要顯示的行,并將其用于將來的計算。這將為我們節(jié)省 100GB 的 RAM,而像今天許多標(biāo)準(zhǔn)數(shù)據(jù)科學(xué)工具卻要復(fù)制數(shù)據(jù)。
          現(xiàn)在,檢查一下該 passenger_count 列。單次出租車行程記錄的最大乘客數(shù)為 255,這似乎有些夸張。計算每次行程的乘客人數(shù),使用以下 value_counts 方法很容易做到這一點:
          在 10 億行數(shù)據(jù)上使用 value_counts 方法只需要 20 秒
          從上圖可以看出,載客超過 6 人的行程可能是罕見的異常值,或者僅僅是錯誤的數(shù)據(jù)輸入,還有大量的 0 位乘客的行程。由于目前我們尚不了解這些行程是否合法,因此我們也將其過濾掉。??
          讓我們對行程距離進(jìn)行類似的練習(xí)。由于這是一個連續(xù)變量,因此我們可以繪制行程距離的分布圖。讓我們繪制一個更合理范圍的直方圖。
          紐約出租車數(shù)據(jù)行程距離直方圖
          從上圖可以看出,出行次數(shù)隨著距離的增加而減少。在距離約 100 英里處,分布有明顯下降。目前,我們將以此為起點,根據(jù)行程距離消除極端離群值:
          出行距離一列中存在極端異常值,這也是研究出行時間和出租車平均速度的動機(jī)。這些功能在數(shù)據(jù)集中尚不可用,但計算起來很簡單:
          上面的代碼塊無需內(nèi)存,無需花費時間即可執(zhí)行!這是因為代碼只會創(chuàng)建虛擬列。這些列僅包含數(shù)學(xué)表達(dá)式,并且僅在需要時才進(jìn)行評估。此外,虛擬列的行為與任何其他常規(guī)列都相同。注意,其他標(biāo)準(zhǔn)庫將需要 10 GB 的 RAM 才能進(jìn)行相同的操作。
          好了,讓我們來繪制行程耗費時間的分布:
          紐約超過 10 億次出租車行程耗費時間的直方圖
          從上面的圖中可以看出,盡管有一些行程可能需要花費 4 至 5 個小時,但 95%的出租車花費不到 30 分鐘即可到達(dá)目的地。你能想象在紐約市被困出租車中超過 3 個小時嗎?無論如何,我們要保持開放的態(tài)度,并考慮所有花費時間少于 3 小時的行程:
          現(xiàn)在,讓我們研究出租車的平均速度,同時選擇一個合理的數(shù)據(jù)范圍:
          出租車平均速度分布
          根據(jù)分布趨平的位置,我們可以推斷出在每小時 1 到 60 英里之間合理的平均滑行速度,因此可以更新篩選后的 DataFrame:
          將重點轉(zhuǎn)移到出租車費用上。從 describe 方法的輸出中,我們可以看到在 fare_amount,total_amount 和 tip_amount 列中有一些瘋狂的異常值。對于初學(xué)者,任何這些列中的任何值都不應(yīng)為負(fù)。同時數(shù)字表明,一些幸運(yùn)的司機(jī)僅憑開一次出租車便幾乎成為了百萬富翁。讓我們看一下在相對合理的范圍內(nèi)這些數(shù)量的分布:
          紐約超過 10 億次出租車行程的車費、總額和小費的分布。在筆記本上繪制這些圖表只用了 31 秒!
          我們看到上述所有三個分布都有相當(dāng)長的尾部。尾部的某些值可能是合法的,而其他值可能是錯誤的數(shù)據(jù)輸入。無論如何,讓我們先保守下,只考慮 fare_amount,total_amount 和 tip_amount 少于 $200 的行程。我們還要求 fare_amount,total_amount 值大于 $0。
          最后,在初步清理完所有數(shù)據(jù)之后,讓我們看看有多少出租車數(shù)據(jù)需要進(jìn)行分析:
          還有超過 11 億次旅行!大量的數(shù)據(jù)可以使你深入了解出租車行程背后的信息。

          后記
          此外,作者還從出租車司機(jī)最大化利潤等角度利用 Vaex 進(jìn)行分析數(shù)據(jù)??傊?,Vaex 會幫你緩解可能面臨的一些數(shù)據(jù)挑戰(zhàn)的問題。
          有了 Vaex,你可以在短短幾秒內(nèi)遍歷超過 10 億行數(shù)據(jù),計算各種統(tǒng)計、聚合并產(chǎn)出信息圖表,這一切都能在你的筆記本電腦上完成。它免費且開源。
          如果你對探索本文中用到的數(shù)據(jù)集感興趣,可以直接在 S3 中配合 Vaex 使用它,請參閱完整的 Jupyter notebook 了解如何實現(xiàn)。
          Vaex 官方網(wǎng)站:https://vaex.io/??
          文檔:https://docs.vaex.io/?
          GitHub:https :?//github.com/vaexio/vaex?
          PyPi:https://pypi.python.org/pypi/vaex/


          好文和朋友一起看~
          瀏覽 47
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人片AV免费看FreeSex | 国产乱人乱偷精品视频 | 人人看人人摸人人操天天看天天摸天天操 | 中文字幕 亚洲 日本 欧美 | 日日夜夜草 |