プログラミングを学ぶ人「seabornってどうやって使うの?」
こんな方に向けた記事です。
今回はPython機械学習でデータ分析をする上で重要なデータの可視化について一緒に勉強していきましょう。
データ分析をする上でデータの可視化は非常に重要です。なぜならデータを可視化することで直感的にデータの特徴を捉えることができるからです。
復習になりますが、Python機械学習でのデータ分析の流れを簡単に表すと次のようになります。
データ分析の流れ
- データの読み込み
- データの把握
- データの前処理
- 機械学習予測モデル作成
- 予測モデルの評価
今回勉強するseabornを用いたデータの可視化は2. データの把握で登場します。
それでは早速見てまいりましょう。
本記事の学習目標
- データの可視化について理解する。
- seabornの使い方を理解する。
目次
【Python】seabornの使い方
seabornはPythonでグラフを作るためのライブラリです。
Pythonでグラフを作るライブラリには代表的なmatplotlibがあります。seabornはこのmatplotlibで作成したグラフもさらに洗練したものへと進化させてくれます。
非常に簡単にきれいで見やすいグラフを作ることができるので、機械学習をしない人にも非常に有用です。
pip install seaborn
conda install seaborn
anacondaでプログラミングをしている方はこのコードでseabornをダウンロードすることができます。
import seaborn as sns
google colaboratoryを使っている方はこのコードでseabornをダウンロードすることができます。
本記事で使用するデータ
Seabornにはデータセットを読み込む機能があります。
今回は有名なアヤメのデータを用いてSeabornの作図をしてみましょう。
# irisを読み込み iris = sns.load_dataset("iris")
iris.head()
たったこれだけであやめのデータを読み込むことができました。
ちなみにあやめのデータ以外にもこのような様々なデータを使うことができます。
今回はあやめのデータを用いて作図をします。
今回はgoogle colaboratoryでグラフ作成を行いました。
Seabornを実際に使用する
Pairplot
Seabornの一番の見所はpairplotで全ての変数の組み合わせごとにデータの散布図を作成できるところです。
さっそく見てまいりましょう。
sns.pairplot(iris)
これだけでSeabornの素晴らしさをわかっていただけると思います。
# hueに指定したcolumnを基準にデータを色分け
sns.pairplot(iris, hue="species")
hue関数にクラスを指定するだけで色分けすることができます。
今回はアヤメの種別(species)に色分けを行いました。
barplot
sns.barplot(x='species', y ='sepal_length', data=iris)
plt.show()
X:横軸の値
Y:縦軸の値
data:使用するデータセット
みなさん一度は見たことがある棒グラフです。
Seabornではx軸、y軸、datasetを指定するだけで簡単に棒グラフと作ることができます。
sns.set()
sns.set_style("dark") #背景の色を変える
sns.barplot(x='species', y ='sepal_length', data=iris)
plt.show()
Seabornでは5種類のプリセット(背景の色など)が用意されており、sns.set_styleで自在に選ぶことが出来ます。
dark、white、ticks、darkgrid、whitegridの5種類で、デフォルトではdarkgridが使用されます。
Seabornの5つのプリセット
・dark
・white
・ticks
・darkgrid: デフォルト
・whitegrid
※darkgrid、whitegridは背景に線あり。ticksは軸のみあり。
distplot
sns.distplot(a = iris['sepal_length'])
plt.show()
distplotでヒストグラムを作成することができます。
デフォルトではヒストグラムの領域を1に正規化して確率分布の近似値が表示されます。
a : Pandas Series, 一次元のndarray, 一次元のlist
bin:ヒストグラムの一つ一つの棒
hist:ヒストグラム(棒グラフの集合)
kde : 確率密度関数の表示(Trueの場合表示する)
norm_hist : ヒストグラムの正規化(Trueの場合正規化する)
変更したい場合は引数を指定します。
sns.distplot(a = iris['sepal_length'], kde=False, norm_hist=False) plt.show()
jointplot
sns.jointplot(x='sepal_width', y='sepal_length', data=iris, alpha=0.3)
plt.show()
jointplotでは散布図を作成することができます。
x:横軸
y:縦軸
data:使用するデータセット
alpha:透明度
boxplot
sns.boxplot(x='species', y='sepal_width', data=iris)
plt.show()
boxplotでは箱ひげ図を作図することができます。
x:横軸
y:縦軸
data:使用するデータセット
violinplot
sns.violinplot(x='species', y='sepal_width', data=iris)
plt.show()
バイオリンプロットでは箱ひげ図よりより曲線的で実際の分布に近い図になります。
x:横軸
y:縦軸
data:使用するデータセット
swarmplot
sns.swarmplot(x='species', y='sepal_width', data=iris)
plt.show()
swarmplotはviolin plotを少しアナログ的に表示することができます。
x:横軸
y:縦軸
data:使用するデータセット
ヒートマップ
sns.set()
iris = sns.load_dataset("iris")
sns.heatmap(iris.corr(), vmin=-5.0, vmax=5.0, annot=True, fmt=".1f")
ヒートマップはマトリックス図の値を色で値の高低を表現することができます。
vmin:色の下限
vmax:色の上限
data:使用するデータセット
center:カラーマップを中央に配置する値
cmap:色の種類
annot:図に値を表示(Trueで表示、Falseで非表示)
fmt:annot=Trueの時に表示するデータのフォーマット
sns.set()
iris = sns.load_dataset("iris")
sns.heatmap(iris.corr(), vmin=-1.0, vmax=1.0, annot=False)
vmin、vmaxをそれぞれ-1、1へ変更しannot=Falseと再度出力してみます。
ヒートマップの色が薄くなり、マップ上に値が表示されなくなりました。
Seabornのグラフをカスタマイズする
Axesを使用することで複数のグラフを一度で表すことができます。
ここで出てくるAxesとFigureの区別をしっかりとしましょう。
Figureは図全体のこと、Axesは図の中の一つ一つのグラフのことです。
具体例を見ていきまいょう。
ポイント
subplots(行, 列, figsize=(幅, 高さ))
sns.set()
# subplots(行, 列, figsize=(幅, 高さ))
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
sns.countplot(x='species', data=iris, ax=axes[0,0])
sns.swarmplot(x='species', y='sepal_length',data=iris, ax=axes[0,1])
sns.barplot(x='species', y='sepal_length', data=iris, ax=axes[1,0])
sns.violinplot(x='species', y='sepal_length',data=iris, ax=axes[1,1])
plt.show()
このように図全体をFigure、その中の一つ一つのグラフをAxesと呼びます。
axesはこのように番号付けされています。
さいごに
今回はPython機械学習のSeabornの使い方を一緒に勉強しました。
機械学習はプログラミング言語のPythonを用いれば、今持っている自分のパソコンですぐに実践することができます。
英語論文になっている手法もしっかりと勉強すれば、自分のパソコンで出来ます。
このサイトでは、プログラミングに興味のある医学生、医師のための情報を発信しております。
プログラミングの学習方法には大きく分けて、「独学」と「プログラミングスクール」の2つがあります。
当サイトでは一貫してプログラミングスクールを利用することをおすすめしています。
なぜなら、独学で勉強した私が非常に苦労したからです。
また私はプログラミングを学習するにあたり、師匠・メンターのような存在がいました。
わからないところは教えてもらっていました。
そのような環境でなければ0から独学で勉強するのはとても効率が悪いと思います。
詳しくは、プログラミングの独学は難しいです【私の失敗談】で紹介しています。
この記事が一人でも多くのプログラミングに興味のある方のお役に立てば幸いです。