data-python について
data-pythonは、pandas、polars、pysparkを使うPythonデータ処理向けのスキルです。ベクトル化、スキーマ検証、メモリを意識した型選択など、規模の大きなデータにも対応するDataFrameの実践方法を扱います。
主な機能
- 01ベクトル化DataFrame操作
- 02スキーマ検証
- 03明示的な型指定
- 04メモリ効率の高い処理
- 05メソッドチェーン
- 06データパイプラインのエラー処理
活用シーン
- 01行ループをDataFrame操作に置き換える場面
- 02入力データのスキーマを検証する場面
- 03大規模データのメモリ使用量を抑える場面
- 04読みやすい変換パイプラインを作る場面
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ alexanderstephenthompson/ claude-hub --skill data-pythonインストール後、Claude Code で/data-pythonを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/pandas-cheatsheet.mdreferences/memory-optimization.mdvectorization.md詳細
データ Python スキル
バージョン: 1.0 スタック: Python(pandas、polars、pyspark)
Python では、サンプルデータでは動作しても、実データでは失敗するデータ処理コードを簡単に書けてしまいます。10K 行で 30 秒かかる iterrows() は、10M 行では 30 分かかります。明示的なデータ型を指定しない DataFrame は、必要なメモリの 8 倍を使用します。連鎖インデックスは、変更が反映されないコピーをひそかに作成します。これらは特殊なケースではなく、通常の Python と同じように pandas を書いたときの標準的な動作です。
ベクトル化演算、明示的なスキーマ、適切なデータ型を使えば、書き直すことなく、プロトタイプから本番環境までコードをスケールできます。
対象範囲と境界
このスキルの対象:
- DataFrame のパターン(pandas、polars、pyspark)
- データ型の処理と検証
- メモリ効率の高い処理
- ループの代わりにベクトル化演算を使用
- メソッドチェーンのパターン
- データパイプラインのエラー処理
他のスキルに委ねる内容:
code-quality:一般的なコード構造、テスト、命名data-sql:SQL インターフェース使用時のクエリパターンdata-pipelines:オーケストレーションと ETL アーキテクチャ
このスキルを使う場面: データを処理する Python コードを書くとき。
基本原則
- ループせず、ベクトル化する — 行の反復ではなく、DataFrame の演算を使用します。
- 不正なデータを即座に検出する — 早い段階で検証し、境界で無効なデータを拒否します。
- メモリを意識する — データサイズを把握し、適切なデータ型を使用します。
- 不変な変換を行う — 演算をチェーンし、インプレースで変更しません。
- スキーマを明示する — 期待する列と型をあらかじめ定義します。
パターン
メソッドチェーン
# Good - readable pipeline
result = (
df
.query("status == 'active'")
.assign(total=lambda x: x["quantity"] * x["price"])
.groupby("category")
.agg({"total": "sum"})
.sort_values("total", ascending=False)
)
# Bad - intermediate variables obscure flow
filtered = df[df["status"] == "active"]
filtered["total"] = filtered["quantity"] * filtered["price"]
grouped = filtered.groupby("category")
result = grouped.agg({"total": "sum"})
result = result.sort_values("total", ascending=False)
スキーマ検証
EXPECTED_COLUMNS = {"id", "name", "value", "timestamp"}
REQUIRED_COLUMNS = {"id", "value"}
def validate_schema(df: pd.DataFrame) -> pd.DataFrame:
missing = REQUIRED_COLUMNS - set(df.columns)
if missing:
raise ValueError(f"Missing required columns: {missing}")
return df[list(EXPECTED_COLUMNS & set(df.columns))]
型の最適化
def optimize_dtypes(df: pd.DataFrame) -> pd.DataFrame:
"""Downcast numeric types to reduce memory."""
for col in df.select_dtypes(include=["int"]).columns:
df[col] = pd.to_numeric(df[col], downcast="integer")
for col in df.select_dtypes(include=["float"]).columns:
df[col] = pd.to_numeric(df[col], downcast="float")
return df
アンチパターン
| アンチパターン | 問題 | 修正方法 |
|---|---|---|
for row in df.iterrows() | 遅く、ベクトル化の利点を損ないます | ベクトル化演算を使用します |
df["col"] = df.apply(...) | 通常、ベクトル化演算より遅くなります | np.where または df.assign を使用します |
連鎖インデックス df["a"]["b"] | SettingWithCopyWarning が発生します | df.loc[:, "a"] を使用します |
| スキーマ確認のためにファイル全体を読み込む | メモリを無駄に消費します | nrows=100 またはチャンク処理を使用します |
| 読み込み時にデータ型を無視する | メモリ使用量が膨らみます | dtype= パラメーターを指定します |
チェックリスト
- 計算に
iterrows()やitertuples()を使用していない - ファイル読み込み時にデータ型を明示している
- 境界でスキーマを検証している
- 変換にメソッドチェーンを使用している
- 大規模なデータセットのメモリ使用量をプロファイルしている
参考資料
references/vectorization.md— ベクトル化演算とパフォーマンスreferences/memory-optimization.md— メモリ最適化の手法
アセット
assets/pandas-cheatsheet.md— pandas 演算のクイックリファレンス
コメント
Markdown 対応