本文へスキップ
BecomeCoder

Pythonデータ分析コース · 第6章 ミニ実践 ― 分析の一連の流れ · レッスン23

集計して傾向を見る ― groupby × 可視化

ブラウザで完結

導入

整えたデータを groupby で集計し、その結果をそのままグラフにする――分析でもっとも使う組み合わせです。

説明

店舗×カテゴリの売上データを、カテゴリごとに集計して棒グラフにします。

import pandas as pd
import matplotlib.pyplot as plt
import io

csv_text = """shop,category,sales
Tokyo,food,320
Osaka,book,150
Tokyo,book,180
Osaka,food,410
Tokyo,toy,90
Osaka,food,270
Tokyo,food,200"""

df = pd.read_csv(io.StringIO(csv_text))

# カテゴリごとの売上合計
by_cat = df.groupby("category")["sales"].sum().sort_values(ascending=False)
print(by_cat)

plt.bar(by_cat.index, by_cat.values, color="teal")
plt.title("Sales by Category")
plt.ylabel("total sales")
plt.show()

groupby("category")["sales"].sum() で集計し、sort_values で大きい順に並べ、その indexvaluesbar に渡す――第4章と第5章がひとつながりになりました。

店舗ごとの集計に変えるのも、グループ化する列を差し替えるだけです。

import pandas as pd
import io

csv_text = "shop,sales\nTokyo,320\nOsaka,150\nTokyo,180\nOsaka,410"
df = pd.read_csv(io.StringIO(csv_text))
print(df.groupby("shop")["sales"].mean())   # 店舗ごとの平均

やってみよう

groupby("category")groupby("shop") に変えて、店舗ごとの売上合計を棒グラフにしてみましょう。

演習

上の shop×category の表で、店舗(shop)ごとの売上合計groupby で求めて表示してください。

ヒント1を見る

df.groupby("shop")["sales"].sum()

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、numpy・pandas・matplotlib が使える本物のPython(Pyodide)で出力とグラフが表示されます。初回だけ読み込みに少し時間がかかります。本文の例をそのまま試したり、書き換えたりしてみましょう(グラフ内の文字は日本語だと表示が崩れるため英字で書きます)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。