mcpField
D
data-python

data-python

github.com/alexanderstephenthompsonデータ・データベース48 回インストール
リポジトリ

data-python について

data-pythonは、pandas、polars、pysparkを使うPythonデータ処理向けのスキルです。ベクトル化、スキーマ検証、メモリを意識した型選択など、規模の大きなデータにも対応するDataFrameの実践方法を扱います。

主な機能

  1. 01ベクトル化DataFrame操作
  2. 02スキーマ検証
  3. 03明示的な型指定
  4. 04メモリ効率の高い処理
  5. 05メソッドチェーン
  6. 06データパイプラインのエラー処理

活用シーン

  1. 01行ループをDataFrame操作に置き換える場面
  2. 02入力データのスキーマを検証する場面
  3. 03大規模データのメモリ使用量を抑える場面
  4. 04読みやすい変換パイプラインを作る場面

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alexanderstephenthompson/claude-hub --skill data-python

インストール後、Claude Code で/data-pythonを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
pandas-cheatsheet.md
references/
memory-optimization.md
vectorization.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 コードを書くとき。


基本原則

  1. ループせず、ベクトル化する — 行の反復ではなく、DataFrame の演算を使用します。
  2. 不正なデータを即座に検出する — 早い段階で検証し、境界で無効なデータを拒否します。
  3. メモリを意識する — データサイズを把握し、適切なデータ型を使用します。
  4. 不変な変換を行う — 演算をチェーンし、インプレースで変更しません。
  5. スキーマを明示する — 期待する列と型をあらかじめ定義します。

パターン

メソッドチェーン
# 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 演算のクイックリファレンス

コメント