データの可視化はデータ分析の基本ですが意外と大変だと思います。
そこで今回はPythonのSeabornを使って可視化する方法を整理しました。
初歩的な部分は割愛してますので気になる方は文末の参考リンクよりご確認ください。
Seabornのインストール
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
データセットのダウンロード
Seabornからデータセットをダウンロードすることができます。
・titanic(タイタニック号の生存データ)
・iris(アヤメの分類データ)
・tips(チップと食事代のデータ) など有名なデータが選択可能です。
titanic = sns.load_dataset('titanic') # 二値分類
iris = sns.load_dataset('iris') # 複数分類
tips = sns.load_dataset('tips') # 数値予測
titanic.head()
学習用データセット – seaborn【Python】 https://biotech-lab.org/articles/1408
事前設定
描画する前に設定しておいたほうが良い内容です。
darkgrid(デフォルト), whitegrid , dark , white , ticks などが指定可。
sns.set_style("white")
散布図
plt.figure(figsize=(6,3)) # サイズの指定
sns.scatterplot(x='age',y='fare',data = titanic,hue = 'survived')
plt.show() # グラフの前に設定情報が表示されなくなる
散布図行列
数値型を自動で選択してそれぞれ対応する散布図を作成してくれます。
sns.pairplot(data=iris, hue="species")
ヒストグラム
通常のヒストグラムはわざわざ書かず、ちょっと変わったパターンのみ4つ載せています。
複数グラフを載せるやり方も覚えておくと良さそう。
# 2行2列のグラフ枠
fig,axes = plt.subplots(2,2,figsize=(15, 10))
# axで位置を指定する
sns.histplot(x='age', data=titanic, bins=20,ax=axes[0,0],kde=True) # 通常 + カーネル密度推定
sns.histplot(x='age', data=titanic, hue='survived', alpha = 0.5,ax=axes[1,0]) # 透過
sns.histplot(x='age', data=titanic, hue='survived', multiple='stack',ax=axes[0,1]) # 積み上げ
sns.histplot(x='age', data=titanic, hue='survived', multiple='dodge',shrink=0.8,ax=axes[1,1]) # 並立
for ax in axes.flatten():
ax.tick_params(labelbottom=False) # xラベル非表示
ax.set_xticklabels(ax.get_xticklabels(), rotation=90) # xラベルを90度回転
# plt.xticks(rotation=90) # 日付が見づらくなるので90度回転
※ 複数グラフの場合、plt.xticks()ではラベルを回すことができないので、上記のfor文を使うこと
散布図 + ヒストグラム
同時に作成できますがhueが使えないので注意が必要です。
sns.jointplot(x='sepal_width', y='sepal_length', data=iris[iris['species']=='setosa'])
箱ひげ図・ヴァイオリンプロット
fig,axes = plt.subplots(1,2,figsize=(15, 10))
sns.boxplot(x="survived", y="age", data=titanic,hue = 'sex',ax=axes[0])
sns.violinplot(x="survived", y="age", data=titanic,hue = 'sex',ax=axes[1])
折れ線グラフ
サンプルが適当ではない気がしますがご容赦ください。
下記のようにsns.***plotをオブジェクトに代入してからplt.show()で表示させる手法もある。
(細かく応用が効きそう)
ts = sns.lineplot(x="age", y="fare", data=titanic,ci =None)
ts.set_title("hoge")
plt.xticks(rotation=90) # 日付が見づらくなるので90度回す
plt.show()
棒グラフ
データの平均値とエラーバーをグラフにします。
sns.barplot(x="day", y="total_bill", data=tips ,errorbar = None)
参考にさせて頂いたサイト
- PythonのライブラリSeabornの使い方 https://obgynai.com/python-seaborn-exercise2/
- 【seaborn】グラフの作成方法と主な使い方【まとめ】 https://self-methods.com/seaborn-graph-howtouse/#toc24
コメント