LoginSignup
224

More than 5 years have passed since last update.

pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その2

Posted at

Pythonでのグラフ描画

Pythonチャートを描く場合の定番は「matplotlib」ですが、その見た目のやや野暮ったい感じと、表記法のややこしさが指摘されています。
そこで、この記事ではMatplotlibの機能をより美しく、またより簡単に実現するためのラッパー的存在である、「Seaborn」の使い方を取り上げます。

詳しくは下記リンクをご覧ください。
本記事では下記記事でのSeaborn、及びiris,tip,titanicのデータがインポートされている前提で進めます。

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

分布プロット

ここではtipデータを使ってみます。
曜日ごとに、お客さんの会計(total_bill)がどう分布しているかを見てみましょう。
stripplotというメソッドを使います。

stripplot.py
sns.stripplot(x="day", y="total_bill", data=tips)

stripplot.png

同じ食事でも、朝食と夕食では大分金額が違いそうなので、前回も使った"hue"を使って
LunchとDinnerを分けて見てみましょう。

stripplot.py
sns.stripplot(x="day", y="total_bill", data=tips, hue='time')

stripplot2.png

この店は土日にはランチをやっていないようですね。
オフィス街の飲食店と何でしょうか?..

箱ひげプロット

boxplotというメソッドを使います。

stripplot.py
sns.boxplot(x="size", y="tip", data=tips.sort('size'))

boxplot.png

ちょっとここではグラフのパレットの色を変更してみました。
やりかたはこんな感じです

stripplot.py
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]

sns.palplot(sns.color_palette(flatui))
sns.set_palette(flatui)

color.png

詳しくはこちらをご覧ください。
http://stanford.edu/~mwaskom/software/seaborn/tutorial/color_palettes.html

棒グラフ

ここではtitanicのデータを使ってやってみます。
グラフの描画にはboxplotというメソッドを使います。

barplot.py
sns.barplot(x='sex', y='survived', data=titanic, hue='class')

x軸に性別、y軸には survived つまり生存者か死者かが1と0で入っているデータ列を選択しています。
この場合、例えば性別=maleのレコードが沢山存在するので、Y軸に使われる数字は各レコードの平均値になります。
そして、全レコードの値を表現するために、平均値からのエラーバーが付与されます。

このあたりはちょっと注意して使う必要があるかもしれません。

barplot.png

もし、平均ではなくSurvivedの合計値が欲しい場合は、一旦Pandasで集計してやってからグラフ化するのがベストでしょうか。もしかしたら他にもやり方があるかもしれません。

barplot2.py
titanic_grpby = titanic.groupby( ['sex', 'class'])
titanic_data_for_graph = titanic_grpby['survived'].aggregate(sum).reset_index()

sns.barplot(x='sex', y='survived', hue= 'class', data=titanic_data_for_graph)

boxplot2.png

棒グラフ(カウント)

Y軸の数値を、X軸に該当するデータのカウントにしたいときはCountplotをつかます。
ヒストグラムと同様に、x軸だけ定義すればOKです。

ちなみにグラフの色は、paletteというオプションでも指定可能です。

countplot.py
sns.countplot(x='sex', hue='embarked', data=titanic, palette='Greens_d')

countplot.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
224