federleicht
v0.1.0
federleicht 、軽量で効率的なpyarrow Featherファイル形式を利用して、 pandas.DataFrame用のキャッシュデコレータを提供するPythonパッケージです。
federleicht.cache_dataframe pandas.DataFrameオブジェクトを返す機能を飾るように設計されています。デコレーターは、最初の呼び出しでデータフレームをフェザーファイルに保存し、ファイルが存在する場合に後続の呼び出しで自動的にロードします。
pandas.DataFrameを簡単に使用して、その速度とシンプルさで知られています。Cache Expiryを実装するには、 federleichtでは、装飾された関数のすべての引数がシリアル化可能であることが必要です。キャッシュは次の条件下で期限切れになります。
args / kwargs )が変化すると、キャッシュが期限切れになります。os.PathLikeオブジェクトが引数として渡されると、ファイルサイズおよび /または変更時間が変更されると、キャッシュが期限切れになります。timedeltaよりも古い場合に失効します。os.PathLikepandas.DataFramepandas.Seriesnumpy.ndarraydatetime.datetimetypes.FunctionType PypiからFederleichtをインストールします。
pip install federleicht通常、 md5引数のハッシュに使用されますが、さらに速いハッシュのために、オプションの依存関係としてxxhash試すことができます。
pip install federleicht[xxhash]簡単な例があります:
import pandas as pd
from federleicht import cache_dataframe
@ cache_dataframe
def generate_large_dataframe ():
# Simulate a heavy computation
return pd . DataFrame ({ "col1" : range ( 10000 ), "col2" : range ( 10000 )})
df = generate_large_dataframe () cache_dataframeデコレータのパフォーマンスをベンチマークするために使用される関数。
def read_data ( file : str , ** kwargs ) -> pd . DataFrame :
"""
Read the earthquake dataset from a CSV file to Benchmark cache.
Perform some data type conversions and return the DataFrame.
"""
df = pd . read_csv (
file ,
header = 0 ,
dtype = {
"status" : "category" ,
"tsunami" : "boolean" ,
"data_type" : "category" ,
"state" : "category" ,
},
** kwargs ,
)
df [ "time" ] = pd . to_datetime ( df [ "time" ], unit = "ms" )
df [ "date" ] = pd . to_datetime ( df [ "date" ], format = "mixed" )
return df attrs DICTIONARYのないpandas.DataFrame .pandas_cacheディレクトリでキャッシュされ、ファイルが変更された場合にのみ期限切れになります。詳細については、キャッシュの有効期限を参照してください。
@ cache_dataframe
def read_cache ( file : pathlib . Path , ** kwargs ) -> pd . DataFrame :
return read_data ( file , ** kwargs )結果は、システム構成とファイルシステムに大きく依存します。次の結果が得られます。
| nrows | read_data [s] | build_cache [s] | read_cache [s] |
|---|---|---|---|
| 10000 | 0.060 | 0.076 | 0.037 |
| 32170 | 0.172 | 0.193 | 0.033 |
| 103493 | 0.536 | 0.569 | 0.067 |
| 332943 | 1.658 | 1.791 | 0.143 |
| 1071093 | 5.383 | 5.465 | 0.366 |
| 3445752 | 16.750 | 17.720 | 1.141 |