Python でデータ可視化 - "Facet"で属性別グラフを一気に描く方法が便利すぎる

  • 113
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Pythonでのグラフ描画

Pythonチャートを描く場合の定番は「matplotlib」ですが、その見た目のやや野暮ったい感じと、
表記法のややこしさが指摘されています。

そこで、この記事ではMatplotlibの機能をより美しく、またより簡単に実現するためのラッパー的存在である、「Seaborn」の使い方を取り上げます。
Seabornについてと、初歩的な使い方については下記リンクをご覧ください。

◆pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その1
http://qiita.com/hik0107/items/3dc541158fceb3156ee0

たくさんのグラフを一気に書く

本記事ではデータから属性の異なる複数のグラフを一気に描く方法について解説します。
例えば下記にようなイメージです。
『Walk』という属性ごとに x-step, y-positionの関係性を一気にグラフ化しています。

image

参考)
http://stanford.edu/~mwaskom/software/seaborn/examples/many_facets.html

わりとデータ分析の実務でも使いたいことが多く、かなり便利なテクニックです。
・『顧客セグメント』ごとの違いを見たい
・『事業部』ごとの売上推移を見たい
・『地域』ごとの顧客動向の変化を見たい

などなど、活用の場面はいくらでも考えられます。

『Facet』

このように属性ごとに一気にグラフ化を行う手法は『Facet』と呼ばれます。
seabornでも、"Facetgrid"という名前の関数として実装されていますし、
RやPythonの著名なグラフ描画パッケージ『ggplot』にも『Facet』という機能があります。

やり方

ではやり方を説明していきます。
必要な下記のライブラリをインポートしておきます

prepare.py
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

データを用意します。
seabornにはいくつかのデータセットがデフォルトでバンドルされているのでそれを使っていきましょう。
今回は『flights』というデータを使ってみます

data.py
df_flights = sns.load_dataset('flights')
df_flights.head(5)

headでみてみると、yearとmonthでひたすら縦に伸びたデータであることがわかります。
また、数値としては乗客数の推移が見れるデータであることが見て取れます。

data.py
    year    month       passengers
0   1949    January     112
1   1949    February    118
2   1949    March       132
3   1949    April       129
4   1949    May         121

なお、同じデータを使ったヒートマップ分析もあります。
http://qiita.com/hik0107/items/67ad4cfbc9e84032fc6b

次に、下記のようにして描画を実行します。

draw.py
grid = sns.FacetGrid(df_flights, col="year", hue="year", col_wrap=4, size=5)
grid.map(sns.pointplot, 'month', 'passengers')

sns.FacetGridで、どのような分割でいくつのグラフを描くかをまず定義します。
今回は df_flightsというデータの 'year'という属性ごとにグラフを描くと宣言しています。(col='year' の部分)

yearは12年分(12種類)で、col_wrap=4 によって、4x3 マスで描画されます。
hue='year' は色をオシャレにするためのオプションです。無くても問題ありません。

実行結果は以下のようになります。

年々乗客数が増えているのと、徐々に7~8月くらいのピークシーズンが顕在化してきているのが
見てわかります。

image

こちらの記事も

pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その1
http://qiita.com/hik0107/items/3dc541158fceb3156ee0

pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その2
http://qiita.com/hik0107/items/7233ca334b2a5e1ca924

データサイエンティストに興味があるならまずこの辺りを見ておきな、って文献・動画のまとめ
http://qiita.com/hik0107/items/ef5e044d2f47940ba712