狙い #
定例レポートや監視では「平均・中央値・標準偏差・前年比差分」など複数の指標を一括で計算したい場面が多いです。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 管理に登録しておくと便利です。