Posted at

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

More than 3 years have passed since last update.


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)


同じ食事でも、朝食と夕食では大分金額が違いそうなので、前回も使った"hue"を使って

LunchとDinnerを分けて見てみましょう。


stripplot.py

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


この店は土日にはランチをやっていないようですね。

オフィス街の飲食店と何でしょうか?..


箱ひげプロット

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


stripplot.py

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


ちょっとここではグラフのパレットの色を変更してみました。

やりかたはこんな感じです


stripplot.py

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

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


詳しくはこちらをご覧ください。

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軸に使われる数字は各レコードの平均値になります。

そして、全レコードの値を表現するために、平均値からのエラーバーが付与されます。

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

もし、平均ではなく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)



棒グラフ(カウント)

Y軸の数値を、X軸に該当するデータのカウントにしたいときはCountplotをつかます。

ヒストグラムと同様に、x軸だけ定義すればOKです。

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


countplot.py

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