導入
整えたデータを 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 で大きい順に並べ、その index と values を bar に渡す――第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()。