こしあん
2018-08-26

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


Pocket
LINEで送る
Delicious にシェア

8.7k{icon} {views}

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

Pocket
LINEで送る



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

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

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