こしあん
2018-08-26

Pandasのpivotを使ってデータを集計し、横並びの棒グラフで表示する方法

Pocket
LINEで送る
Delicious にシェア

2.5k{icon} {views}

新刊情報

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


Pandasのデータフレームを集計して、横並びの棒グラフで表示したいときがあります。その方法を紹介していきます。Pivotを使うと簡単にできます。

データ例

以下のようなデータ(rain.txt)があったとします。都市別(那覇、東京、札幌)の月別の平年降水量のデータを取ったものです(気象庁より)。タブ区切りテキストです。こちらからダウンロードできます。

City    Month   Rain
Naha    1   107
Naha    2   119.7
(中略)
Tokyo   1   52.3
Tokyo   2   56.1
(中略)
Sapporo 1   113.6
Sapporo 2   94
(中略)

これをrain.txtと保存しておきます。これを、月を横軸、降水量を縦軸として、都市別の横並びの棒グラフで表示します。

Pivotを使おう

ピボットというとExcelを思い出して頭が痛くなってくる方もいらっしゃるかもしれませんが、Pandasの場合明瞭でわかりやすいです。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("rain.txt", sep="\t")
pivot = df.pivot(index="Month", columns="City")["Rain"]
pivot.plot.bar(figsize=(10,5), title="Rainfall in Japan")
plt.ylabel("mm")
plt.show()

このdf.pivotのところがポイント。indexが表の縦軸、columnsが表の横軸となります。項目が複数あるときはスライスで表示したい項目を選びましょう(ここでは”Rain”)。内部的にはこのような表を作っていることになっています。

print(pivot)
City    Naha  Sapporo  Tokyo
Month
1      107.0    113.6   52.3
2      119.7     94.0   56.1
3      161.4     77.8  117.5
4      165.7     56.8  124.5
5      231.6     53.1  137.8
6      247.2     46.8  167.7
7      141.4     81.0  153.5
8      240.5    123.8  168.2
9      260.5    135.2  209.9
10     152.9    108.7  197.8
11     110.2    104.1   92.5
12     102.8    111.7   51.0

indexが縦、columnsが横」と覚えればとても直感的でわかりやすいですね。このようなグラフができます。

「plot.bar」の引数でpyplot側のパラメーターも操作できます。例えばfigsize(グラフサイズ)や、title(グラフタイトル)がそうです。ylabelは引数として与えようとするとエラーが出てしまったので、後から「plt.ylabel」で与えています。

以上です。Pivotを怖がらずに上手く使ってグラフを素早く書いてみてくださいね。

参考

pandas.DataFrame.pivot


新刊情報

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


Pocket
LINEで送る

Add a Comment

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