数値カラムを一括集計する

Prep

数値カラムを一括集計する

作成日: 最終更新: 読了時間: 1 分

狙い #

定例レポートや監視では「平均・中央値・標準偏差・前年比差分」など複数の指標を一括で計算したい場面が多いです。pandas の agg / describe / groupby を組み合わせると、集計表をテンプレ化できます。

import pandas as pd

df = pd.read_csv("../data/processed/soumu-gdp-clean.csv")
value_cols = df.columns.drop("カテゴリ")

1. agg で複数集計 #

summary = (
    df[value_cols]
    .agg(["count", "mean", "median", "std", "min", "max"])
    .T.round(2)
)
summary.head()
  • 行列を転置すると “列ごとの統計量” を見やすくできる
  • .round() で桁数を制御してレポートにそのまま貼り付け可能

KPI を追加 #

def cv(x):
    return x.std() / x.mean()

summary["cv"] = df[value_cols].apply(cv)
summary.sort_values("cv", ascending=False).head()

独自関数を apply で渡すだけでカスタム KPI も一覧化できます。


2. groupby + agg でカテゴリ別集計 #

agg_by_category = (
    df.melt(id_vars="カテゴリ", var_name="year", value_name="value")
      .assign(period=lambda x: x["year"].str.extract(r"([HR]\d+)"))
      .groupby(["カテゴリ"])
      .agg(
          latest = ("value", "last"),
          avg    = ("value", "mean"),
          y1_y10 = ("value", lambda s: s.iloc[-1] - s.iloc[0])
      )
      .round(2)
)
agg_by_category.head()

agg では (列名, 集計関数) のタプルで任意の集計を組み合わせられます。
lambda を使えば差分や比率なども一発で算出できます。


3. Aggregation Report を DataFrame にまとめる #

report = (
    summary
    .assign(metric="overall", column=summary.index)
    .reset_index(drop=True)
    .loc[:, ["metric", "column", "mean", "median", "std", "cv"]]
)
report.head()

この report を CSV / Markdown に書き出しておくと、タスク管理ツールや BI へ反映しやすくなります。

report.to_markdown("../reports/numerical-summary.md", index=False)

可視化でトレンド確認 #

import seaborn as sns
import matplotlib.pyplot as plt
import japanize_matplotlib

tidy = df.melt(id_vars="カテゴリ", var_name="year", value_name="value")

plt.figure(figsize=(12, 4))
sns.lineplot(
    data=tidy,
    x="year",
    y="value",
    hue="カテゴリ",
    palette="tab10"
)
plt.xticks(rotation=45)
plt.grid(alpha=.3)
plt.tight_layout()

agg で概況を掴んだあとに、ラインチャートでトレンドを確かめると精度の高いインサイトにつながります。


チェックリスト #

  • agg の結果をテンプレ DataFrame にまとめ、レポート出力を自動化した
  • カスタム KPI(CV、前年比差分など)も lambda で定義した
  • groupby と組み合わせ、カテゴリ別の増減を可視化できる状態にした
  • Markdown / CSV 出力を整備し、ナレッジ共有しやすくした

このテンプレートを他プロジェクトでも再利用できるよう GitHub gist や Snippet 管理に登録しておくと便利です。