6
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python:seabornで可視化

Last updated at Posted at 2020-02-11

Explanatory Data Analysis(略してEDA):探索的データ解析
正直、Pythonには便利なライブラリがたくさんあるため、つい軽視してましたが、

やはり分布は大事

最近そう思うことが多々ありました。

そこでPythonのヴィジュアライゼーションライブラリのseabornを自分用に簡単に纏めてみます。
データセットはTitanic。簡単なデータ前処理を行って早速、データの可視化を進めてまいりましょう。

参考↓↓

[Python: seaborn を使った可視化を試してみる]
(https://blog.amedama.jp/entry/seaborn-plot)
[Seabornの全メソッドを解説(その1:グラフ一覧)]
(https://own-search-and-study.xyz/2017/05/02/seaborn%E3%81%AE%E5%85%A8%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E8%A7%A3%E8%AA%AC%EF%BC%88%E3%81%9D%E3%81%AE%EF%BC%91%EF%BC%9A%E3%82%B0%E3%83%A9%E3%83%95%E4%B8%80%E8%A6%A7%EF%BC%89/)
[seabornの細かい見た目調整をあきらめない]
(https://qiita.com/skotaro/items/7fee4dd35c6d42e0ebae)

import

#matplotlibはpltで読み込むことが多く、seabornはsnsで読み込むことが多いです
import seaborn as sns
import matplotlib.pyplot as plt
#下記によりグラフ内文字の日本語が正常に表示されます。
import japanize_matplotlib

Relational Plot

Scatterplot(散布図)

sns.scatterplotで散布図を描画することが可能です。
オプションとしてhue=色分け、style=プロットの形変える size=プロットの大きさ変えることができます

#下記で表示グラフのサイズ調整が出来ます
plt.figure(figsize=(20, 10))
sns.scatterplot(data=train_x, x="Age" ,y="Fare",hue="Sex",style="Sex",size="Pclass")

スクリーンショット 2020-01-29 8.17.17.png

年齢と運賃にはあまり相関はなさそう。
↓試しに相関を表示したらやはり全くない↓

res = train_x["Age"].corr(train_x["Fare"])
print(res)
0.09668842218036484

lineplot(折れ線グラフ)

#下記でサイズの調整が可能。
plt.figure(figsize=(30,5))
sns.lineplot(data=line_plot_test[line_plot_test["month"]=="February"],x="year",y="passengers")

スクリーンショット 2020-01-29 8.30.50.png

#replotを使うことで、複数の折れ線グラフを表示することができます
sns.relplot(data=line_plot_test,kind="line",x="year",y="passengers",col="month",col_wrap=5)

スクリーンショット 2020-01-31 18.30.23.png

Categorical Plot

Scatterplot(ストリップチャート)

sns.stripplot(data=titanic,x="pclass",y="age",hue="sex",dodge=True)

スクリーンショット 2020-02-01 17.41.23.png

↓dodge = Falseを選択するとcol毎に分枯れていたグラフが統一される↓

sns.stripplot(data=titanic,x="pclass",y="age",hue="sex",dodge=False)

スクリーンショット 2020-02-01 17.43.35.png

↓catplotでオプションcolを指定すると複数のグラフに分けることができる↓


sns.catplot(data=titanic,kind="strip",x="pclass",y="age",hue="sex",col="survived",dodge=True)

スクリーンショット 2020-02-01 17.44.21.png

Swarmplot(スワムチャート)

ストリップチャートは要素が重なっていたけど、重なりを除外したものがこちら。 swarmplot() 関数を使うことで描画できる。

sns.swarmplot(data=titanic,x="pclass",y="age")

スクリーンショット 2020-02-02 13.22.54.png

Boxplot(箱ひげ図)

sns.boxplot(data=titanic,x="pclass",y="age")

スクリーンショット 2020-02-02 13.25.15.png’’

#stripchartと同様、catplotを利用するが(kind="box")を指定する
sns.catplot(data=titanic,kind="box",x="pclass",y="age",hue="survived",col="sex")

スクリーンショット 2020-02-03 6.50.44.png

violinplot(バイオリン図)

#"inner"を指定すると内部を編集できる
sns.violinplot(data=titanic,x="pclass",y="age",inner="stick")

スクリーンショット 2020-02-03 7.06.11.png

#グラフを重ね合わせることも可能
ax=sns.violinplot(data=titanic,x="pclass",y="age",inner="stick")
sns.stripplot(data=titanic,x="pclass",y="age",color="k",ax=ax)

スクリーンショット 2020-02-03 7.06.53.png

#hueを指定することでグラフの色を分けて表示することも可能
sns.violinplot(data=titanic,x="pclass",y="age",hue="survived",split=True)

スクリーンショット 2020-02-03 7.07.46.png

#複数表示する時は、同様にcatplotを利用
sns.catplot(data=titanic,x="pclass",y="age",kind="violin",hue="survived",col="sex",split=True)

スクリーンショット 2020-02-03 7.08.33.png

boxen plot(箱ひげ図改良グラフ)


sns.boxenplot(data=titanic,x="pclass",y="age",hue="survived")

スクリーンショット 2020-02-04 8.15.55.png

#こちらもcatplotで複数グラフの表示が可能。kind="boxen"
sns.catplot(data=titanic,x="pclass",y="age",kind="boxen",col="sex")

Point Plot

#平均値と信頼区間だけの表示に絞られたシンプルなグラフ。
sns.pointplot(data=titanic,x="pclass",y="age",hue="sex")

スクリーンショット 2020-02-05 20.32.39.png

#複数表示させる時はcatplotにして、kind=pointとする
sns.catplot(data=titanic,x="pclass",y="age",kind="point",hue="survived",col="sex",color="b")

スクリーンショット 2020-02-05 20.35.39.png

barplot(棒グラフ)

sns.barplot(data=titanic,x="pclass",y="age",color="b",hue="sex")

ヒゲはブートストラップ信頼区間らしいのですが、いまいちよく分からないので調べます。
あと棒グラフの値は平均値を表しています。これもestimaterという引数で変更できそう。

スクリーンショット 2020-02-06 18.55.08.png

#複数グラフを描く時は、kind="bar"を指定する
sns.catplot(data=titanic,kind="bar",x="pclass",y="age",col="sex",hue="survived",color="b")

スクリーンショット 2020-02-06 18.58.41.png

countplot

sns.countplot(data=titanic,x="pclass",hue="sex",color="b")

スクリーンショット 2020-02-06 19.48.06.png

sns.countplot(data=titanic,y="pclass",hue="sex",color="b")

スクリーンショット 2020-02-06 19.48.42.png

sns.catplot(data=titanic,kind="count",y="pclass",col="sex",hue="survived",color="b")

スクリーンショット 2020-02-06 19.50.43.png

Distribution Plot

displot(ヒストグラム)

iris = sns.load_dataset("iris")
iris.head()
#階級の数はbinsで指定できる
sns.distplot(iris.petal_length,bins=20)
#kdeオプションで確率密度関数を削除できる
sns.distplot(iris.petal_length,bins=20,kde=False)
#heightやaspectで大きさ調整
sns.distplot(iris.petal_length,,bins=10,height=5,aspect=2)

スクリーンショット 2020-02-07 21.28.29.png

kdeplot

KDE (Kernel Density Estimation) はカーネル密度推定という。 分布から確率密度関数を推定するのに用いる。
確率密度関数についてはもっとよく勉強しますが、単純なヒストグラフを連続にしたイメージ?


sns.kdeplot(iris.sepal_length)

スクリーンショット 2020-02-07 21.31.45.png

sns.kdeplot(iris.petal_length,iris.sepal_length,shade=True)

スクリーンショット 2020-02-07 21.32.17.png

rugplot

値の登場する位置に特化したグラフ。

sns.rugplot(iris.petal_length)

スクリーンショット 2020-02-08 15.11.48.png

#重ね合わせて使うと値の出現とその個数の関連性が見える?
ax = sns.distplot(iris.petal_length)
sns.rugplot(iris.petal_length,ax=ax)

スクリーンショット 2020-02-08 15.13.21.png

joint plot

joint plot は二つのグラフの組み合わせ。 デフォルトでは散布図とヒストグラムが同時に見られる。

sns.jointplot(data=iris,x="petal_length",y="petal_width")

スクリーンショット 2020-02-09 10.26.33.png

#kind = "kde"を指定すると確率密度関数になります
sns.jointplot(data=iris,x="petal_length",y="petal_width",kind="kde")

スクリーンショット 2020-02-09 10.33.50.png

#kind="hex"にすると特徴的なグラフになります
sns.jointplot(data=iris,x="petal_length",y="petal_width",kind="hex")

スクリーンショット 2020-02-09 10.51.37.png

parplot

sns.pairplot(data=iris)

ダウンロード.png

表示する次元を絞る時はvarsオプションで指定

sns.pairplot(data=iris,hue="species",vars=["petal_length","petal_width"])

スクリーンショット 2020-02-11 0.20.00.png

kind="reg"を指定すると一次回帰直線も表示できる

sns.pairplot(data=iris,kind="reg")

ダウンロード (1).png

Matrix Plot

heat map

#annot=Trueをつけることで実際の値を表示することも可能
sns.heatmap(data=iris.corr(),annot=True)

スクリーンショット 2020-02-11 9.27.44.png

6
28
0

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
6
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?