大規模データ・メモリ最適化
ダウンキャスト・チャンク読み込み・Polars/Dask で、大規模データを限られたメモリで扱う方法を学びます。
メモリは有限#
Kaggle Notebook のメモリには上限があり、大規模データは読み込むだけで枯渇します。 型の最適化・分割読み込み・高速ライブラリでやりくりするのが上級者の必須スキルです。
型のダウンキャスト#
pandas は既定で大きな型(int64/float64)を使います。値域に応じて小さい型へ落とすと、 メモリを半分以下にできることがあります。
import numpy as np
def reduce_mem(df):
for col in df.select_dtypes(include=["int", "float"]).columns:
c_min, c_max = df[col].min(), df[col].max()
if df[col].dtype.kind == "i":
if c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
df[col] = df[col].astype("int32")
else:
df[col] = df[col].astype("float32")
return dfカテゴリ列は astype("category") でさらに削減できます。
チャンク読み込み#
一度に読めないファイルは、分割(チャンク)して処理します。
chunks = pd.read_csv("big.csv", chunksize=1_000_000)
agg = sum(chunk.groupby("id")["y"].sum() for chunk in chunks)高速ライブラリ#
- Polars:Rust 製の高速・省メモリな DataFrame。遅延評価で大規模に強い
- Dask:pandas 風 API で分散/コア外処理。メモリに乗らないデータを扱える
import polars as pl
df = pl.scan_csv("big.csv") # 遅延読み込み
out = df.group_by("id").agg(pl.col("y").mean()).collect()ヒント
まず reduce_mem と必要な列だけの読み込み(usecols)で乗り切れることも多いです。
それでも足りないときに Polars/Dask やチャンク処理へ進みましょう。
理解度チェック#
次のステップ#
次は、チーム戦略(マージ・役割分担・提出管理)を学びます。