グラフ表示ライブラリseaborn
前回、ダミーデータ作成プログラムをアップデートして、機械学習のデータっぽいデータを出力できるようにしました。
ということで今、3PySciがどこに向かっているのか分かってもらえた前回の記事だと思います。
そう今目指しているのはPythonで機械学習をすること。
そのためのPandasを色々いじってきたわけです。
ということで今回も機械学習を目指して行くわけですが、今回はグラフ表示でこれまでとは違うライブラリseabornを使ってみようと思っています。
前にmatplotlibの解説をして、さらにPandasの.plot()なんかを解説してきたのですが、どいうやらseabornではもっと楽にそしてもっと綺麗にグラフ表示ができるらしいです。
ということでものは試し、まずは使ってみようということです。
データは前回アップデートしたダミーデータ作成プログラムで作成したこちらのデータ。
まずはPandasで読み込んで、表示してみましょう。
import pandas as pd
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
df
実行結果
今回はこのデータを元にseabornライブラリでどんなグラフが描けるのか紹介していきます。
そしてまた別の機会にmatplotlibと比較していくということをやっていきましょう。
seabornのインポート
seabornを使うにはインポートする必要があります。
import seaborn as sns
seabornはsnsとしてインポートするのが慣例らしいので、とりあえず「as sns」をつけておきます。
またjupyter notebookでグラフを表示するのにマジックコマンドを足しておきましょう。
%matplotlib inline
ここであれ?っと思った方もいるかもしれません。
そうseabornはmatplotlibを元としてさらに見やすいとか使いやすいといった改良を加えたライブラリなのです。
また前はマジックコマンドとして「%matplotlib notebook」としていました。
「%matplotlib notebook」では拡大縮小できて便利なのですが、どうもseabornとは相性が悪いのか、かなり動作が重くなってしまいました。
ということで今回は単にグラフを表示する「%matplotlib inline」を使っていきたいと思います。
ということで先ほどのPandasを加えて、インポートするライブラリはこんな感じになります。
import pandas as pd
import seaborn as sns
%matplotlib inline
それではseabornを使っていきましょう。
pairplot
一番最初に紹介したいのは、pairplot。
なんとデータの二つの列からなる散布図を全ての組み合わせに対して自動で作ってくれる機能なのです。
これを紹介したいがためにseabornの記事を書いているといってもいいかもしれません。
コマンドは「sns.pairplot(データ)」だけです。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.pairplot(df)
実行結果
たった1行のコマンドだけで、これだけ複雑なグラフが描けるのはかなり便利ですよね。
さらにオプション「hue=”列名”」を追加することで、その列のデータで分類することができます。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.pairplot(df, hue="target")
実行結果
「target」の列の「0」が青色に「1」が橙色に分類されました。
さらに斜めのラインのグラフが棒グラフから線グラフに変わっていますが、こちらは意図したものではありません。
コマンドが簡単になった分、こういった中で自動で調整する部分が出てきてしまうのは仕方がない。
データをぱっと見て解析するという目的なので、多少のことは気にしないようにしましょう。
lmplot
次はlmgplotというコマンドです。
こちらは散布図をプロットし、その回帰直線を自動で計算して表示してくれるコマンドです。
使い方は「sns.lmplot(x=”X値のデータ”, y=”Y値のデータ”, data=データ)」です。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.lmplot(x="value_1", y="value_2", data=df)
実行結果
斜めの線が回帰直線、その周りにある青いエリアが95%信頼区間です。
信頼区間に関してはちょっと正確には説明できませんが、95%の確率でデータの分布がその領域に入ってくると考えていいと思います。
こちらも「hue=”データ列”」をオプションに追加することで、データを分類して表示することができます。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.lmplot(x="value_1", y="value_2", hue="target", data=df)
実行結果
jointplot
次はjointplotです。
こちらは散布図と合わせて、X軸、Y軸に対してヒストグラムを表示できるコマンドです。
使い方は「sns.jointplot(x=”X値のデータ”, y=”Y値のデータ”, data=データセット)」です。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.jointplot(x="value_1", y="value_2", data=df)
実行結果
catplot
ここまでは一つのコマンドで複雑なグラフを描くコマンドでした。
次のcatplotは単純なグラフを描くコマンドですが、オプションで違う形式のグラフに変えることができます。
基本の使い方としては「sns.catplot(x=”X値のデータ”, y=”Y値のデータ”, data=データセット)」です。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.catplot(x="target", y="value_1", data=df)
実行結果
これは何というグラフと言えばいいか分かりませんが、X軸側が分類項目になっているときに使えそうです。
boxplot
catplotのオプションとして「kind=”box”」を追加することで箱ひげ図にすることができます。
ということでコマンドは「sns.catplot(x=”X値のデータ”, y=”Y値のデータ”, kind=”box”, data=データセット)」という感じです。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.catplot(x="target", y="value_1", kind="box", data=df)
実行結果
bar plot
次はbar plot、つまり棒グラフです。
catplotを棒グラフとして使うには、オプションで「kind=”bar”」を追加します。
つまり「sns.catplot(x=”X値のデータ”, y=”Y値のデータ”, kind=”bar”, data=データセット)」ということです。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.catplot(x="target", y="value_1", kind="bar", data=df)
実行結果
エラーバーまで出してくれるのでかなり楽にデータを眺められますね。
point plot
次は線グラフです。
線グラフの場合は「kind=”point”」とします。
つまり「sns.catplot(x=”X値のデータ”, y=”Y値のデータ”, kind=”point”, data=データセット)」となります。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.catplot(x="target", y="value_1", kind="point", data=df)
実行結果
こちらもエラーバーまで出してくれるので感覚を掴むのに楽でいいです。
まだまだ他にも描けるグラフはあるのですが、使いそうなもののみピックアップしてみました。
特にpairplotはそれぞれの値の相関を見るのにすごく役立ちます。
ただその分、データの処理や描写に時間がかかってしまうという難点があります。
そんな場合はデータを保存してしまう方が、後でじっくり解析できます。
データを描写と同時に保存するには「.savefig(“保存する場所+保存する名前”)」をpairplotのコマンドの最後に追加します。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
sns.pairplot(df, hue="target").savefig("pairplot.png")
もしくは一度グラフを変数に格納して、先ほどの.savefig()で保存するという手もあります。
import pandas as pd
import seaborn as sns
%matplotlib inline
df = pd.read_csv("python-seaborn-1_data1.txt", index_col = 0)
figure = sns.pairplot(df, hue="target")
figure.savefig("pairplot.png")
どちらも実行すると下のグラフがプログラムがあるフォルダに「pairplot.png」という名前で保存されます。
maplotlibでX軸やY軸、凡例なんかを自分で追加していくよりも、簡単にグラフが描けるのがいいですね。
特に列名や行名がしっかり入っているPandasと相性が良いので、Pandasを使っているときには積極的にseabornを使っていきたいものです。
ということで次回はそろそろ機械学習への勉強に入っていきたいと思います。
ではでは今回はこんな感じで。
コメント