Pandasのピボットテーブルを使って簡単に横並びの棒グラフを作る方法
Posted On 2019-05-23
Pandasのピボットテーブルを使うと横並びのグラフを数行のコードで作成することができます。matplotlib単体でもできますが、Pandasのほうがより楽にできます。その方法を解説します。
目次
作りたいもの
こんなグラフを作りたい
使用頻度高いなのに毎回やり方忘れそうになるのでメモ代わりに。「matplotlib 棒グラフ 並べる」で検索すると、横幅を指定する変数を与えて、人力で横位置を調整している例が結構あったので、Pandasのピボットテーブルを使って面倒な処理を省いてやります。
想定例とデータ
アリスとボブ、キャロルの3人のテストの得点を1枚の棒グラフで表示します。横軸には名前、縦軸は得点として、教科ごとに棒グラフを並べます。
データは以下のように、教科ごとに集計されていない状態で入力されるものとします。トランザクションデータとでも思ってください。
Name Subject Point
0 Alice English 50
1 Alice Math 80
2 Alice Japanese 80
3 Bob English 70
4 Bob Math 50
5 Bob Japanese 50
6 Carol English 80
7 Carol Math 60
8 Carol Japanese 70
データを作る
PandasのDataFrameを定義します。説明のためのコードです。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# データを作る(集計されていない状態)
name = ["Alice", "Alice", "Alice", "Bob", "Bob", "Bob", "Carol", "Carol", "Carol"]
subject = ["English", "Math", "Japanese", "English", "Math", "Japanese", "English", "Math", "Japanese"]
point = [50, 80, 80, 70, 50, 50, 80, 60, 70]
df = pd.DataFrame({"Name":name, "Subject":subject, "Point":point})
print(df)
この結果は先程の出力となります。
ピボットで棒グラフを描く
たった3行でグラフができます。
# 縦軸を点数、横軸を人、教科で横並びにした棒グラフを作りたい
# ピボットにする
pivot = df.pivot_table(values="Point", index="Name", columns="Subject")
pivot.plot.bar()
plt.show()
冒頭のグラフが出てきます。
Pandasのピボット便利!
Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内
技術書コーナー
北海道の駅巡りコーナー