Python

【5分で分かる】実データで学ぶPythonのSeabornの使い方まとめ!

seaborn
ウマたん
ウマたん
本記事では、Pythonでの可視化に非常によく利用されるSeabornの使い方について見ていきます!Matplotlibをベースにより細かくて鮮やかな描画をすることのできるSeabornの威力を実感して使いこなせるようになりましょう!

こんにちは!

消費財メーカーでデータ分析・デジタルマーケティングをやっているウマたん(@statistics1012)です!

この記事では、Pythonで頻出するデータ可視化のためのライブラリSeabornの使い方についてまとめていきたいと思います!

ロボたん
ロボたん
データ可視化の工程はデータ分析において非常に重要だよねー!
ウマたん
ウマたん
そうなんだよー!データ可視化を侮ってはいけないよ!ぜひMatplotlibだけではなくSeabornをしっかり使えるようになっておこう!

ぜひSeabornの基本についてしっかりおさえて扱えるようになっておきましょう!

Seabornとは

Seaborn

まずは、Seabornとは何なのか見ていきましょう!

Seabornの内部ではMatplotlibが動いているのですが、Seabornを使うことでよりきれいなグラフを簡単に描画することが可能なんです!

ただグラフの調整の仕方やルールはMatplotlibと一緒なので、Matplotlibと同時にSeabornを使えるようになりデータの可視化をおこなっていきましょう!

Seabornを使うにはMatplotlibと合わせて以下のようにSeabornのライブラリをインポートしていきます。

この時、sns.set()と記載しないとSeabornの描画が反映されないので注意しましょう!

MatplotlibとSeabornの違いについては以下の記事でまとめていますのでチェックしてみてください!

Matplotlib Seaborn
実データで学ぶMatplotlibとSeabornの違いと描画方法!当サイト【スタビジ】の本記事では、Pythonでの可視化に非常によく利用されるMatplotlibとSeabornの違いについて見ていきます!それぞれの違いを理解するためにも実データを用いて可視化を行っていきますよ!MatplotlibとSeabornを使いこなしてデータの可視化を進めよう!...

タイタニックのデータセットを題材にSeabornを使って可視化!

stories Data-pana

まずはタイタニックのデータセットを題材にMatplotlibを使っていきましょう!

まずは各種ライブラリをインポートしていきます。

今回Pandasも一緒にインポートしています。

Pandasはデータフレームの処理に非常に長けているのでPythonにおいて必ず使うと言っても過言ではありません。

Seabornを使ってタイタニックのデータをインポートしていきましょう!

タイタニックのデータはタイタニック号事件の乗客の生死が様々な特徴量と共に入っている有名なデータセットです。

pandas

Seabornでヒストグラムを描画

まずは、Seabornでヒストグラムを描画していきます!

このように記述するだけで以下のように綺麗なヒストグラムを描画することが出来ちゃうんです!

Seaborn

Seabornで棒グラフを描画

続いて棒グラフを描画していきます!

pclassという乗船クラス別にどのくらいの乗客がいたのかが分かります。

この時、catplotとやってkindの引数にcountとしてあげてもいいですし、countplotを使ってあげても問題ありません。

以下のように3つのクラス別の集計値が表示されます!

Seaborn

続いてbarplotという棒グラフの作成方法を見ていきます。

Seaborn

この場合は生死のデータで分けた上で年齢の平均値を棒グラフで算出しています。

さらにそれを性別で層別しています。

黒い線は95%の信頼区間を表しています。

Seabornで箱ひげ図を描画

続いて箱ひげ図を描画していきます!

箱ひげ図とは統計量をざっくり把握することの出来る便利なグラフです。

boxplotとするだけで描画を行うことが出来るんです!

ここでは、生死別の性別別の年齢の箱ひげ図を見ていきます!

Seaborn

棒の一番下が最小値、一番上が最大値、そして箱の一番上が75%点、箱の真ん中の線が50%点、箱の一番下が25%点となっています!

亡くなってしまった場合と生き残った場合で男女の年齢分布がひっくり返っていることが分かりますねー!

Seabornでバイオリンプロットを描画

続いて箱ひげ図を進化させたバイオリンプロットというグラフを見ていきましょう!

violinplotとするだけで簡単にキレイなグラフが描画されます。

Seaborn

バイオリンプロットでは箱ひげ図にプラスしてサンプルの分布を表した密度関数が表示されます。

Seabornでヒストグラムと散布図を合わせたjointplot

続いてjointpotについて見ていきましょう!

jointplotを使えば散布図とヒストグラムを同時に見ることができるんです!

Seaborn

Seabornで各種変数のpairplot

続いてpairpotについて見ていきましょう!

Seaborn

こんな感じでjointplotとほぼ同じように見えますが、これ実は変数が多くても問題ないんです。

タイタニックのデータだと量的変数が少ないのでirisのデータを利用して見てみましょう!

Seaborn

こんな感じになります!

ウマたん
ウマたん
すごい便利だよなー!!

Seabornでヒートマップを描画

続いてヒートマップを描画していきます!

今回はirisデータよりもさらに量的変数の量が多いボストンの住宅価格のデータを扱っていきます!

df.corr()で簡単に各変数の相関係数を表示することができ、それをSeabornで簡単にヒートマップとして表示することが出来るんです!

Seaborn

これで多変数の相関関係も一目瞭然ですね!

ヒートマップは相関関係だけでなく多変量時系列データなどの値の強弱を見るのに使ったりします!

データコンペのデータを題材にSeabornを使って可視化!

Charts

続いてより実践的なデータ分析コンペのデータを使ってSeabornによる可視化を行っていきます。

Nishikaというデータコンペプラットフォームの中の一部のデータセットを使います。

データコンペのデータから不動産価格データというデータを選びそこからtrain.zipをダウンロードしてください。

train.zipを開くと中には以下のように複数のCSVファイルが入っています。

Matplotlib

今回はこれらをデータフレームとして結合させるところからデータの確認・可視化をおこなっていきます。

そのためにSeaborn以外のライブラリも必要になるのでImportしてあげましょう!

globはディレクトリに格納されたファイル名を抽出するのに便利なライブラリで、今回は複数のファイルがtrainフォルダ内にデータとして格納されているのでそれらのファイル名を抽出するのに必要になります。

現在trainというフォルダにファイルが入っているとすると、以下のように記述することでtrain内のファイル名を全て抽出することができます。

この時、*はワイルドカードと呼ばれ、このようにワイルドカードを指定することで全てのファイル名を該当させることができます。

filesを見てみると以下のようになっていることが分かります。

[‘train/40.csv’,
‘train/41.csv’,
‘train/43.csv’,
‘train/42.csv’,
‘train/46.csv’,
‘train/47.csv’,
‘train/45.csv’,
‘train/44.csv’,
‘train/37.csv’,
‘train/23.csv’,
‘train/22.csv’,
・・・

各ファイル名がリスト形式で格納されていることが分かります。

このデータフレームの中身を見てみると・・・

以下のようになっていることが分かります。

Nishika data

各ファイルそれぞれの格納されているサンプル数は違いますが、全て同じカラムになっています。

そのため、これらのデータをfor文で回して結合させ1つのデータフレームにしていきましょう!

これにて使うデータの準備が完了です。

データが結構汚いので詳細は割愛しますが、前処理をおこなっていきます。

Nishika data2

全てが欠損値になっているカラムを削除して、「最寄り駅・面積・建築年・取引時点」に関して変換をおこなっています。

これでデータがだいぶ綺麗になりました!

時系列でcountplotして変化を見る

先ほどタイタニックのデータで扱った処理を一部おこなっていきましょう!

時系列でデータ数にどのくらいの変化があるのかcountplotで見ていきましょう!

Seabornのcountplotを使ってデータ量を綺麗に描画して見ていきます。

複数プロットの場合はsubplotsを使って描画することが可能です。

そしてseabornで描画する場合は引数axを指定してあげて描画の箱を制御します。

Nishika カウントプロット

この時、取引時点をそのまま描画しているものと、取引時点の4半期データを年単位に丸めたデータを描画しています。

データが見やすく並んでいることが分かります。

2005年から2010年までは取引量が線形で伸びていて、それ以降は横ばいであることが分かります。

変数間の相関をヒートマップで見てみる

続いて先ほど使ったヒートマップを適用させてみましょう!

実際にどのくらい関係があるかは相関係数を算出して見ることができます!

相関係数には負の相関と正の相関があり、-1から+1の範囲で見ることが出来ます。

以下のように記述することで各変数の相関係数を算出することが出来ます。

Nishika 相関係数

corrは相関(correlation)を表しています。

このそれぞれの相関関係をヒートマップで見てみましょう。

ここでSeabornの出番です。

Nishika ヒートマップ

このケースでは変数が少ないのでヒートマップにしなくても問題ないですが、変数がものすごい量になってくるとヒートマップを描画してあげることで見やすくなります。

また引数cmapを指定してあげることでカラーレイアウトを変更することも可能です。

Nishika ヒートマップ

この場合、cmapにRedsを指定してあげています。

ぜひヒートマップを駆使していきましょう!

ちなみに日本語だと上手く表示されないので事前にMatplotlibの内部フォントを以下のように変更しておいてあげるとよいでしょう!

他にも色んなことができるので実際にデータコンペのデータを使って色々とSeabornを試してみてください!

Seabornの使い方 まとめ

ここまででSeabornの使い方についてまとめてきました。

Seabornので様々なグラフが綺麗に描画が出来るということが少しでも理解いただけたと思います。

データを可視化する際にはMatplotlibも重要ですが、さらにSeabornも使えるようになっておきましょう!

他にもPythonで出来ることはたくさんあります。

Pythonについて詳しく学びたい方は以下のUdemyの講座で僕自身が講師を務めていますので是非チェックしてみてください!

また、Pythonで出来ることを知りたい場合は以下の記事でまとめていますので!

Pythonでできること7つをコード例をまじえてまとめておく!当サイト【スタビジ】本記事では、Pythonでできることを7つまとめていきます!!Pythonで何ができるのか分からない状況から深い理解にもっていきますよー!実際にPythonでの実装例や勉強方法も取り上げているのでぜひご自分の環境で手を動かして実装してみてくださいね!...

また、Pythonの勉強法については以下の記事で詳しくまとめています!

Python 勉強
【入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【スタビジ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。Pythonをマスターして価値を生み出していきましょう!...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!