再見 CSV,速度提升 150 倍!

大家好,我是小五🧐

先介紹下爲什麼要和 CSV再見。其實也談不上徹底再見吧,日常還是要用的,這裏再介紹一個更加高效的數據格式。
Python處理數據時保存和加載文件屬於日常操作了,尤其面對大數據量時我們一般都會保存成 CSV格式,而不是 Excel。一是因爲 Excel有最大行數1048576的限制,二是文件佔用空間更大,保存和加載速度很慢。
雖然用 CSV沒有行數限制,相對輕便,但是面對大數據量時還是略顯拉誇,百萬數據量儲存加載時也要等好久。。不過很多同學都藉此機會抻抻懶腰、摸摸魚,充分利用時間也不錯
其實, CSV 並不是唯一的數據存儲格式。今天和大家介紹一個速度超快、更加輕量級的二進制格式保存格式: feather

Feather是什麼?

Feather 是一種用於存儲數據幀的數據格式。它最初是爲了 PythonR 之間快速交互而設計的,初衷很簡單,就是儘可能高效地完成數據在內存中轉換的效率。
現在 Feather 也不僅限於 PythonR 了,基本每種主流的編程語言中都可以用 Feather 文件。不過,要說明下,它的數據格式並不是爲長期存儲而設計的,一般的短期存儲。

如何在Python中操作Feather?

Python 中,可以通過 pandasFeather 兩種方式操作。首先需要安裝 feather-format
# pip 
pip install feather -format 

# Anaconda 
conda install -c conda-forgefeather-format
只需要上面一行安裝即可,很簡單。
我們通過一個較大的數據集舉例,需要 FeatherNumpypandas 來一起配合。數據集有 5 列和 1000 萬行隨機數。
import feather
import numpy as np
import pandas as pd

np.random.seed = 42
df_size = 10000000

df = pd.DataFrame({
    'a': np.random.rand(df_size),
    'b': np.random.rand(df_size),
    'c': np.random.rand(df_size),
    'd': np.random.rand(df_size),
    'e': np.random.rand(df_size)
})
df.head()
它的用法和之前 csv的操作難度一個水平線,非常簡單。
保存
兩種方式,一是 DataFrame 直接 to_featherFeather 格式:
df.to_feather('1M.feather')
二是用 Feather 庫執行相同操作的方法:
feather.write_dataframe(df, '1M.feather')
加載
加載也是一樣的,同樣還是兩種方式。一是通過 pandas加載:
df = pd.read_feather('1M.feather')
二是用 Feather 加載:
df =feather.read_dataframe('1M.feather')
操作習慣一樣,難度完全沒有。

和CSV的區別

對比產生美。下面來看下 feathercsv的差距有多大。下圖顯示了上面本地保存 DataFrame 所需的時間:
差距巨大,有木有!原生 Feather(圖中的 Native Feather)比 CSV 快了將近 150 倍左右。如果使用 pandas 處理 Feather 文件並沒有太大關係,但與 CSV 相比,速度的提高是非常顯著的。
然後再看下讀取不同格式的相同數據集需要多長時間。
同樣,差異也很明顯。 CSV 的讀取速度要慢得多。並且 CSV佔用的磁盤空間也更大。
CSV 文件佔用的空間是 Feather 文件佔用的空間的兩倍多。假如我們每天存儲千兆字節的數據,那麼選擇正確的文件格式至關重要。 Feather 在這方面完全碾壓了 CSV
當然,如果追求更多的壓縮空間,也可以試試 Parquet,也是一個可以替代 CSV 的格式。

結語

說了這麼多,可能很多同學還是甩出一句話: 謝謝,我選CSV 這個東西怎麼說呢 ,當你需要它時,它就有用,如果日常沒有速度和空間的強烈需求,還是老老實實 CSV吧。 CSV已經用慣了,改變使用習慣還是挺難的。

最近有啥書?

Python機器學習一本通:結合了Python和機器學習兩個熱門領域,通過易於理解的知識講解,幫助讀者學習和掌握機器學習。本書還包括項目實戰篇,主要講述了社交好友分析、電商點擊率預估等。點擊即可查看詳情!👇



點擊這裏,閱讀更多數據文章!

本文分享自微信公衆號 - 凹凸數據(alltodata)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章