こしあん
2019-05-23

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

Pocket
LINEで送る
Delicious にシェア

557{icon} {views}

新刊情報

技術書典8の新刊『モザイク除去から学ぶ 最先端のディープラーニング』(A4・195ページ)好評通販中です! 機械学習の入門からGANの最先端までを書いたおすすめの本となっています! Boothで試し読みできます。情報まとめ・質問用GitHub



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


新刊情報

技術書典8の新刊『モザイク除去から学ぶ 最先端のディープラーニング』好評通販中(A4・195ページ)です! Boothで試し読みもできるのでよろしくね!


Pocket
Delicious にシェア

Add a Comment

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