こしあん
2019-05-23

Pandasのピボットテーブルを使って簡単に横並びの棒グラフを作る方法


Pocket
LINEで送る
Delicious にシェア

2.9k{icon} {views}


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のピボット便利!

Pocket
Delicious にシェア



Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です