筋肉で解決しないために。

日々出会うモノに対する考察をしたり、主に以下のテーマに関して書いています。 データサイエンス/人工知能/AI/機械学習/DeepLearning/Python//数学/統計学/統計処理

seaborn入門_「様々なデータの可視化手法」

こんにちは、ワタルです。

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

pandas入門第1回目、「様々なデータの可視化手法」です。

はじめに

このエントリでは、以下の関数を学習することができます。

pyplot.hist(data)
seaborn.jointplot(data1,data2)
seaborn.distplot(data)
seaborn.boxplot(data)
seaborn.violinplot(data)

おまじない

import numpy as np
from numpy.random import randn
import pandas as pd

#描画のためのライブラリです。
import matplotlib.pyplot as plt
import seaborn as sns

# ブラウザ内に画像を埋め込むための命令です
%matplotlib inline

ヒストグラムをプロットする

ヒストグラムを描くことで、データの概要をつかむことができます。

#正規分布に従う乱数を作ります。
dataset1 = randn(100)

plt.hist(dataset1)
#デフォルトは、bins=10
#binsというのは、ヒストグラムの棒の数

>>>
(array([ 2.,  2.,  6., 19., 16., 23., 16.,  9.,  4.,  3.]),
 array([-2.4821785 , -1.99590527, -1.50963205, -1.02335882, -0.5370856 ,
        -0.05081237,  0.43546086,  0.92173408,  1.40800731,  1.89428053,
         2.38055376]),

f:id:watarumon:20180630182347p:plain

引数color

#データセットをもう一つ作ります。
dataset2 = randn(80)

#引数colorで色を指定することができます
plt.hist(dataset2,color='indianred')

>>>
(array([ 3.,  6., 10., 15., 25., 11.,  8.,  1.,  0.,  1.]),
 array([-2.53975366, -1.9111417 , -1.28252975, -0.65391779, -0.02530583,
         0.60330612,  1.23191808,  1.86053004,  2.48914199,  3.11775395,
         3.7463659 ]),

f:id:watarumon:20180630182400p:plain

引数normed

plt.hist(dataset1, normed=True)

>>>
(array([ 0.24336855,  0.2704095 ,  0.2163276 ,  0.2163276 ,  0.40561425,
         0.40561425,  0.3244914 ,  0.29745045,  0.18928665,  0.13520475]),
 array([-1.7284242 , -1.35861471, -0.98880522, -0.61899573, -0.24918624,
         0.12062325,  0.49043274,  0.86024223,  1.23005172,  1.59986121,
         1.9696707 ]),
 <a list of 10 Patch objects>)

f:id:watarumon:20180630182424p:plain

2つのヒストグラムを同時にプロットする

複数のヒストグラムを同時にプロットすることもできます。

plt.hist(dataset1,normed=True,alpha=0.5,bins=20)
plt.hist(dataset2,normed=True,alpha=0.5,bins=20, color='indianred')

>>>
(array([0.03977016, 0.07954033, 0.03977016, 0.19885082, 0.07954033,
        0.3181613 , 0.35793147, 0.23862098, 0.47724196, 0.51701212,
        0.23862098, 0.19885082, 0.07954033, 0.23862098, 0.03977016,
        0.        , 0.        , 0.        , 0.        , 0.03977016]),
 array([-2.53975366, -2.22544768, -1.9111417 , -1.59683573, -1.28252975,
        -0.96822377, -0.65391779, -0.33961181, -0.02530583,  0.28900014,
         0.60330612,  0.9176121 ,  1.23191808,  1.54622406,  1.86053004,
         2.17483601,  2.48914199,  2.80344797,  3.11775395,  3.43205993,
         3.7463659 ]),
 <a list of 20 Patch objects>)

f:id:watarumon:20180630183332p:plain

sns.jointplot(data1,data2)結合分布表示

先ほどよりデータ点を増やして、それぞれをx軸、y軸におき、同時にプロットすることもできます。 これによって、データの粗密を感じることができます。

data1 = randn(1000)
data2 = randn(1000)

# 同時分布(結合分布)
sns.jointplot(data1,data2)

>>>
<seaborn.axisgrid.JointGrid at 0x1a1d155cc0>

f:id:watarumon:20180630183343p:plain

引数kind

引数にkind='hex'を与えると、六角形で表示されます。

sns.jointplot(data1,data2,kind='hex')

>>>

f:id:watarumon:20180630183354p:plain

カーネル密度推定のプロット

カーネル密度推定 - Wikipedia

ここでは、ヒストグラムカーネル密度推定を同時にプロットしてみます。 引数で色やラベルを指定することもできます。

sns.distplot(data1,
             kde_kws={'color':'indianred','label':'KDE PLOT'},
             hist_kws={'color':'blue','label':"HISTOGRAM"})
>>>

f:id:watarumon:20180630183451p:plain

seaborn.boxplot(data)箱ひげ図のプロット

boxplotというメソッドでは、日本語でいう箱ひげ図を描くことができます。

箱ひげ図 - Wikipedia

sns.boxplot(data1)

>>>

f:id:watarumon:20180630183504p:plain

seaborn.violinplot(data)バイオリン図を描く

violinplotは、boxplotの様な外形をしつつ、カーネル密度推定の情報量を兼ね備えたものになります。

バイオリン図 - Wikipedia

sns.violinplot(data1)

>>>

f:id:watarumon:20180630183515p:plain

終わりに

今回は、様々なデータの可視化方法について学びました。

お疲れ様でした!

次回はこちら

watarumon.hatenablog.com

それじゃー、また。