こしあん
2019-05-23

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

Pocket
LINEで送る


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

Related Posts

Pythonで画像のカラーヒストグラムを簡単に表示する方法... 画像で赤、緑、青の画素がどのような分布になっているかという「カラーヒストグラム」を見たいことがあります。しかしいざ探すとツールが少ないのです。Pythonならほんの数行で出せます。 PillowとPyplotでとてもお手軽 カラーヒストグラムの原理は単純で、縦横カラーチャンネルの画像を、カラー...
PandasのDataFrameでグループ別にサンプルをN個抜き出す方法... 「PandasでGroupbyでグルーピングしたはいんだけど、そこからグループ別にサンプルを1個、2個…と抜き出す、SQLでよくやるやつってどうやるんだっけ?」ということが気になったので、調べました。ちゃんとした方法があります。 例題 今、中国地方と四国地方の県と面積をDataFrameにして...
Kernel-PCAのexplained_variance_ratioを求める方法... scikit-learnのPCA(主成分分析)にはexplained_variance_ratio_という、次元を削減したことでどの程度分散(データを説明できる度合い)が落ちたのかを簡単に確認できる値があります。Kernel-PCAではカーネルトリックにより、特徴量の空間が変わってしまうので、ex...
Pandasのpivotを使ってデータを集計し、横並びの棒グラフで表示する方法... Pandasのデータフレームを集計して、横並びの棒グラフで表示したいときがあります。その方法を紹介していきます。Pivotを使うと簡単にできます。 データ例 以下のようなデータ(rain.txt)があったとします。都市別(那覇、東京、札幌)の月別の平年降水量のデータを取ったものです(気象庁よ...
Pandasで複数の列を値をもとに、新しい列を任意の関数で定義する方法... Pandasで、「列A(文字列)と列B(数字)」を文字列として結合し、新しい列を定義するという操作をしたかったのですが、思ったよりも情報がなくハマったので解説していきたいと思います。 サンプルデータ 次のようなデータを定義しました。コミケのサークルスペースのデータを模したものです。 impo...
Pocket
LINEで送る

Add a Comment

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