更高效地利用 Jupyter+pandas 進行數據分析,6 種常用數據格式效率對比!

2021-01-14 CSDN

來源 | 早起Python(ID:zaoqi-python)

編譯 | 劉早起(有刪改)

在使用 Python 進行數據分析時,Jupyter Notebook 是一個非常強力的工具,在數據集不是很大的情況下,我們可以使用 pandas 輕鬆對 txt 或 csv 等純文本格式數據進行讀寫。然而當數據集的維度或者體積很大時,將數據保存並加載回內存的過程就會變慢,並且每次啟動 Jupyter Notebook 時都需要等待一段時間直到數據重新加載, 這樣 csv 格式或任何其他純文本格式數據都失去了吸引力。本文將對 pandas 支持的多種格式數據在處理數據的不同方面進行比較,包含 I/O速度、內存消耗、磁碟佔用空間等指標,試圖找出如何為我們的數據找到一個合適的格式的辦法!Pickle:用於序列化和反序列化Python對象結構MessagePack:類似於json,但是更小更塊Parquet:Apache Hadoop的列式存儲格式為了找到格式來存儲數據,本文選擇以下指標進行對比。load_time:將先前轉儲的數據幀加載到內存所需的時間save_ram_delta_mb:在數據幀保存過程中最大的內存消耗增長load_ram_delta_mb:數據幀加載過程中最大的內存消耗增長注意,當我們使用有效壓縮的二進位數據格式(例如Parquet)時,最後兩個指標變得非常重要。它們可以幫助我們估算加載串行化數據所需的RAM數量,以及數據大小本身。我們將在下一部分中更詳細地討論這個問題。現在開始對前文介紹的5種數據格式進行比較,為了更好地控制序列化的數據結構和屬性我們將使用自己生成的數據集。下面是生成測試數據的代碼,我們隨機生成具有數字和分類特徵的數據集。數值特徵取自標準正態分布。分類特徵以基數為C的uuid4隨機字符串生成,其中2 <= C <= max_cat_size。
def generate_dataset(n_rows, num_count, cat_count, max_nan=0.1, max_cat_size=100):
dataset, types = {}, {}
def generate_categories(): from uuid import uuid4 category_size = np.random.randint(2, max_cat_size) return [str(uuid4()) for _ in range(category_size)]
for col in range(num_count): name = f'n{col}' values = np.random.normal(0, 1, n_rows) nan_cnt = np.random.randint(1, int(max_nan*n_rows)) index = np.random.choice(n_rows, nan_cnt, replace=False) values[index] = np.nan dataset[name] = values types[name] = 'float32'
for col in range(cat_count): name = f'c{col}' cats = generate_categories() values = np.array(np.random.choice(cats, n_rows, replace=True), dtype=object) nan_cnt = np.random.randint(1, int(max_nan*n_rows)) index = np.random.choice(n_rows, nan_cnt, replace=False) values[index] = np.nan dataset[name] = values types[name] = 'object'
return pd.DataFrame(dataset), types

現在我們以 CSV 文件保存和加載的性能作為基準。將五個隨機生成的具有百萬個觀測值的數據集轉儲到 CSV 中,然後讀回內存以獲取平均指標。並且針對具有相同行數的20個隨機生成的數據集測試了每種二進位格式。2.在執行任何 I/O 之前將其轉換為 pandas.Categorical 數據類型1、以字符串作為分類特徵下圖顯示了每種數據格式的平均 I/O 時間。這裡有趣的發現是 hdf 的加載速度比 csv 更低,而其他二進位格式的性能明顯更好,而 feather 和 parquet 則表現的非常好。保存數據並從磁碟讀取數據時的內存消耗如何?下一張圖片向我們展示了 hdf 的性能再次不那麼好。但可以肯定的是,csv 不需要太多額外的內存來保存/加載純文本字符串,而 feather 和 parquet 則非常接近。最後,讓我們看一下文件大小的對比。這次 parquet 顯示出非常好的結果,考慮到這種格式是為有效存儲大量數據而開發的,也是理所當然。2、對特徵進行轉換在上一節中,我們沒有嘗試有效地存儲分類特徵,而是使用純字符串,接下來我們使用專用的 pandas.Categorical 類型再次進行比較。從上圖可以看到,與純文本 csv 相比,所有二進位格式都可以顯示其真強大功能,效率遠超過 csv,因此我們將其刪除以更清楚地看到各種二進位格式之間的差異。可以看到 feather 和 pickle 擁有最快的 I/O 速度,接下來該比較數據加載過程中的內存消耗了。下面的條形圖顯示了我們之前提到的有關 parquet 格式的情況。為什麼parquet內存消耗這麼高?因為只要在磁碟上佔用一點空間,就需要額外的資源才能將數據解壓縮回數據幀。即使文件在持久性存儲磁碟上需要適度的容量,也可能無法將其加載到內存中。最後我們看下不同格式的文件大小比較。所有格式都顯示出良好的效果,除了hdf仍然需要比其他格式更多的空間。正如我們的上面的測試結果所示,feather 格式似乎是在多個 Jupyter 之間存儲數據的理想選擇。它顯示出很高的 I/O 速度,不佔用磁碟上過多的內存,並且在裝回 RAM 時不需要任何拆包。當然這種比較並不意味著我們應該在每種情況下都使用這種格式。例如,不希望將 feather 格式用作長期文件存儲。此外,當其他格式發揮最佳效果時,它並未考慮所有可能的情況。所以我們也需要根據具體情況進行選擇!

相關焦點

  • 花式導數據、合併、壓縮,數據分析更高效
    作者:Roman Orac魚羊 編譯整理量子位 報導 | 公眾號 QbitAI數據分析,如何能錯過 Pandas。現在,數據科學家 Roman Orac 分享了他在工作中相見恨晚的 Pandas 使用技巧。了解了這些技巧,能讓你在學習、使用 Pandas 的時候更加高效。
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • 多維遙感數據分析系統MARS:讓時空譜數據的存儲與分析更便捷
    採用四維立方體存儲結構,可以通過從不同維度上快速地提取數據,進行包括空間與光譜關聯分析、空間與時間關聯分析,以及空間、光譜和時間三者之間的多特徵關聯分析,另外,除了可以選擇從不同維度提取數據直接顯示,還可以抽取若干維度的數據做進一步處理提取特徵數據,通過展示更有利於發現其中有價值的信息。
  • 數據處理必看:如何讓你的 pandas 循環加快 71803 倍
    雷鋒網 AI 開發者按,如果你使用 python 和 pandas 進行數據分析,那麼不久你就會第一次使用循環了。然而,即使是對小型數據集,使用標準循環也很費時,你很快就會意識到大型數據幀可能需要很長的時間。當我第一次等了半個多小時來執行代碼時,我找到了接下來想與你共享的替代方案。標準循環數據幀是具有行和列的 pandas 對象。
  • 不容錯過的Pandas小技巧:萬能轉格式、輕鬆合併、壓縮數據,讓數據...
    現在,數據科學家 Roman Orac 分享了他在工作中相見恨晚的 Pandas 使用技巧。了解了這些技巧,能讓你在學習、使用 Pandas 的時候更加高效。話不多說,一起學習一下~Pandas實用技巧用 Pandas 做數據分析,最大的亮點當屬 DataFrame。不過,在展示成果的時候,常常需要把 DataFrame 轉成另一種格式。Pandas 在這一點上其實十分友好,只需添加一行代碼。
  • 快速提升效率,這6個 Pandas 技巧一定要知道
    pandas是python中常用的數據分析庫,出現頻率非常高,而且pandas功能之多讓人咋舌,即使pandas老手也沒法保證能高效使用pandas做數據分析。這篇文章目的梳理幾個高效實用的pandas小技巧,供大家參考。1.
  • 這麼用MatPlotLib視覺化呈現數據,你值得擁有!
    圖片來源:pexels.com/@divinetechygir在現代數字世界中,數據就像空氣一樣重要。人們每天都會自覺或不自覺地消費和產生大量數據。近來,許多商家試圖利用這些數據來進行營銷和吸引消費者。
  • 如何優化Jupyter? - CDA數據分析師
    CDA數據分析師 出品1. 介紹Jupyter Notebook是當下解決Python中的機器學習/數據科學任務的最常用的環境之一。簡單來說,Jupyter Notebook是一個客戶端-伺服器應用程式,用於在瀏覽器中運行能夠同時包含代碼和富文本元素(如段落,方程式等)的文檔。
  • 想成為高效數據科學家?不會Pandas怎麼行
    選自 towardsdatascience作者:Félix Revert機器之心編譯參與:Nurhachu Null、張倩Pandas 是為了解決數據分析任務而創建的一種基於 NumPy 的工具包,囊括了許多其他工具包的功能,具有易用、直觀、快速等優點。
  • 五種常用大數據分析方法
    漏鬥分析法  漏鬥分析模型是業務分析中的重要方法,最常見的是應用於營銷分析中,由於營銷過程中的每個關鍵節點都會影響到最終的結果,所以在精細化運營應用廣泛的今天,漏鬥分析方法可以幫助我們把握每個轉化節點的效率,從而優化整個業務流程。  其中,我們往往關注三個要點:  第一,從開始到結尾,整體的轉化效率是多少?
  • 提高數據處理效率,一行代碼開啟Pandas四倍速!
    快來了解新庫Modin,可以分割pandas的計算量,提高數據處理效率,一行代碼即刻開啟Pandas四倍速。首先了解一些基礎知識:Pandas作為Python中用於處理數據的庫,能簡單且靈活地處理不同種類、大小的數據。除此之外,Pandas還有許多函數有助於輕鬆處理不同數據。
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    關於Python的數據分析,當我們遇到的數據量小、數據結構簡單時,可以通過字典、列表等Python常見的數據結構來處理。但是當我們面對的大量數據以及複雜數據的局面時,就需要用一些專門用於數據分析的擴展庫來處理數據了。今天給大家介紹一個Python裡專門用來做數據分析和處理的擴展庫。
  • 數據分析的6種常用方法
    原標題:數據分析的6種常用方法 醫學工作者做完醫學實驗後,少不了要對收集的實驗數據進行數據分析。通常來說,常用的數據分析方法有以下六種:聚類分析、因子分析、相關分析、對應分析、回歸分析、方差分析。
  • Jupyter Notebooks嵌入Excel並使用Python替代VBA宏
    好了,現在你可以使用Excel處理數據,並使用Python處理相同的數據。 將Excel用作用於組織和可視化數據的交互式操作,無縫切換到Python以使用更複雜的功能。  將Jupyter筆記本用作草稿板,以使用Python代碼。在Jupyter筆記本上完全用Python編寫Excel函數,並進行實時測試。
  • Jupyter Notebooks三大附加功能,好用到飛起!
    然後,利用這個軟體包可以獲得許多拓展功能。呈現頁面如下:2. 自動導入自動化是未來的趨勢。令人煩惱的是,每當在數據科學項目中打開一個新的Jupyter Notebooks時,都需要為其中一些項目複製粘貼許多庫和默認選項。
  • 數據分析的幾種常用方法概覽
    數據分析常用方法概覽(之一) 對數據進行分析的方法很多,常用的有對比分析法、分組分析法、結構分析法、交叉分析法、漏鬥圖分析法、矩陣分析法、綜合評價分析法、5W1H分析法、相關分析法、回歸分析法、 聚類分析法、判別分析法、主成分分析法、因子分析法、時間序列、方差分析等等。
  • 如何用pandas更快地進行數據可視化?
    作者:劉早起來源:早起Python(公眾號)如果你經常使用Python進行數據分析,那麼對於pandas一定不會陌生,但是Pandas除了在數據處理上大放異彩,隨著版本的不斷更新,Pandas的繪圖功能在某些情況下甚至要比matplotlib更加適用,本文就將介紹如何用
  • SEM優化常用的幾種數據分析方法
    SEM優化工作少不了做分析報表,而數據分析不僅僅是為了發現問題,為解決問題提供參考數據,也是對推廣效果的直觀展現方式,善用工具,能事半功倍地掌握工作,並及時作出調整。簡而言之,數據分析就是為了幫助我們對工作做到心中有數。
  • Pandas 必知必會的使用技巧,值得收藏!
    本期的主題是關於python的一個數據分析工具pandas的,歸納整理了一些工作中常用到的pandas使用技巧,方便更高效地實現數據分析。 df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]}) df df.iloc
  • Pandas GUI:如何輕鬆獲取Pandas數據幀?
    全文共2071字,預計學習時長6分鐘Pandas庫目前已經成為用Python進行探索性數據分析的絕佳伴侶。它功能豐富,靈活易用,成為了當今許多數據科學家的首選。Pandas庫的社區也很完善,這讓它能夠一直積極發展和改進。提到Pandas,就不得不提到這兩種工具:· 可以用簡短的代碼執行基本EDA的工具。