こしあん
2018-08-26

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

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

Related Posts

pyplotの散布図グラフでマーカーに文字を使う方法... Pythonのグラフ(matplotlib.pyplot)で散布図をプロットする際に、マーカーに「a, b, c」のような文字を用いる方法を解説します。 コード import numpy as np import matplotlib.pyplot as plt np.random.seed...
pandasでグループ別に統計量やヒストグラムを表示する方法... 初投稿です。この記事では、pandasでグループ別に基本統計量(describe)をする方法を紹介します。 テストデータ 以下のようなデータを想定します。ある学校の3つのクラスでテストをしてみました。 A組は40人、平均点は60点、標準偏差は10(分布は正規分布に従うものとする) B組は...
Kernel-PCAのexplained_variance_ratioを求める方法... scikit-learnのPCA(主成分分析)にはexplained_variance_ratio_という、次元を削減したことでどの程度分散(データを説明できる度合い)が落ちたのかを簡単に確認できる値があります。Kernel-PCAではカーネルトリックにより、特徴量の空間が変わってしまうので、ex...
Pythonで画像のカラーヒストグラムを簡単に表示する方法... 画像で赤、緑、青の画素がどのような分布になっているかという「カラーヒストグラム」を見たいことがあります。しかしいざ探すとツールが少ないのです。Pythonならほんの数行で出せます。 PillowとPyplotでとてもお手軽 カラーヒストグラムの原理は単純で、縦横カラーチャンネルの画像を、カラー...
CIFAR-10/100のバイナリを画像ファイルに書き出す方法... CIFAR-10/100は画像分類として頻繁に用いられるデータセットですが、たまに画像ファイルでほしいことがあります。配布ページにはNumpy配列をPickleで固めたものがあり、画像ファイルとしては配布されていないので個々のファイルに書き出す方法を解説していきます。 コード まずは配布ページ...

Add a Comment

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