Python

実データで学ぶPythonのMatplotlibとSeabornの使い方まとめ!データを可視化していこう!

Matplotlib Seaborn
ウマたん
ウマたん
本記事では、Pythonでの可視化に非常によく利用されるMatplotlibとSeabornを使って実データを可視化していきます。データ分析においては愚直にデータを眺める作業が非常に重要なんです!

こんにちは!

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

この記事では、Pythonで頻出するデータ可視化のためのライブラリMatplotlibとSeabornについて自分の備忘録も兼ねてまとめていきたいと思います!

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

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

MatplotlibとSeabornの基本情報と利用方法

Matplotlib

Pythonでよく使うライブラリの中でも必ず名前があがるMatplotlib

PandasNumpy、MatplotlibあたりはPythonを扱う上で必須なライブラリです。

Matplotlibは2003年にリリースされ現在も開発がされているデータ分析の可視化に必須のライブラリ。

データ分析においては探索的データ分析(EDA)と呼ばれる工程が非常に重要で、その工程においてMatplotlibによる可視化は非常に便利です。

Jupyter labやJupyter notebookには最初から入っているので、そのままImportすることで利用することができます。

以下のように記述してあげましょう!

2行目はJupyter環境でグラフを描画する上で必要なおまじないであるとおぼえておきましょう。

ただMatplotlibは若干描画がダサいという弱点があります。

R言語のggplot2などと比べるとどうしても見劣りしてしまうんですね。

そこで登場するのがSeaborn

Seaborn

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

Matplotlibと同時にSeabornを使えるようになりデータの可視化をおこなっていきましょう!

Matplotlib&Seabornで可視化をする上でのデータ準備

Charts

それでは早速MatplotlibやSeabornを使って可視化をおこなっていくための実データの準備をおこなっていきましょう!

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

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

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

Matplotlib

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

そのために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

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

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

Matplotlibでヒストグラムを描画

stories Data-pana

さてここからMatplotlibやSeabornを使ったデータの可視化をおこなっていきます。

まずはヒストグラムを描画してみましょう!

 

このように1行記述するだけで以下のようにヒストグラムを描画することができます。

Nishika ヒストグラム 最寄り駅からの距離

この時、グラフの上にデータが表示されてしまうので以下のように1行追加してあげることでグラフだけを描画させることが出来ます。

また、binsのパラメータで階級の数を調整することができ、ここを増やすことで細かいヒストグラムを作成することができます。

例えば、binsを100にすると・・・

Nishika ヒストグラム 最寄り駅からの距離

こんな感じで階級数が増えて細かいヒストグラムになっていることが分かります。

この時、rangeというパラメータでデータの範囲を指定してあげることができます。

x軸が0~30の範囲に絞られていることが分かります。

Nishika ヒストグラム 最寄り駅からの距離

また、描画されるグラフの大きさを調節したい時は以下のようにあげます。

 

見づらい場合はこちらでグラフを調節してあげましょう!

Matplotlibで複数のグラフを描画してみよう!

python

続いて、複数のグラフを描画してみましょう!

複数のグラフを描画する方法はいくつかあるのですが、ここではsubplotsを使います。

まずは、以下のようにグラフを描画する箱を作ってあげます。

この場合、最初の引数に2 , 2を指定しているので、2行×2列の箱が出来上がります。

そして、それぞれの箱に対してグラフを描画していきます。

このように4つの箱に対してそれぞれのヒストグラムを表示させることが出来ます。

Nishika 複数ヒストグラム 最寄り駅からの距離

axes[0][0]であれば1行目1列目の左上の箱を指定しています。

この時、右上の面積のグラフが見づらくなっているので、X軸の範囲を指定してあげましょう!

複数プロットにおいて軸の範囲を指定する場合は以下のように記述してあげます。

 

Nishika 複数ヒストグラム 最寄り駅からの距離

だいぶ見やすくなりました!axes[0][0].set_xlim(0,250)でx軸の範囲を指定しています。

Matplotlibで散布図を描画

続いて散布図を描画していきましょう!

散布図はある変数と変数の間の関係を見るのに非常に便利です。

例えば今回の例では中古マンションの価格に対して面積や最寄り駅からの距離は相関関係があるかどうかを見ることができます。

先程学んだ、複数プロットの方法を使って複数の散布図を描画してみましょう!

散布図を描画するのにはscatterという関数を使います。

Nishika 複数散布図

それぞれの変数間の関係を散布図によって見ることができました。

Seabornでヒートマップを描画

先程の散布図をながめてみると、なんとなくそれぞれ関係がありそうな気がします。

ただ、どれくらい関係があるのかは分からない。

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

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

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

Nishika 相関係数

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

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

ここでSeabornの出番です。

Nishika ヒートマップ

このように1行だけ記述してあげるだけでヒートマップを描画することが出来るんです!

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

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

Nishika ヒートマップ

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

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

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

seabornで時系列棒グラフを描画

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

countplotを使うことで、棒グラフを見やすく描画することが出来るんです!

今まで同様に複数プロットの場合はsubplotsを使います。

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

Nishika カウントプロット

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

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

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

MatplotlibとSeaborn まとめ

ここまででMatplotlibとSeabornについてまとめてきました。

データを可視化する際にはこの2つのライブラリをしっかりおさえておきましょう!

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

Pythonで出来ることを知りたい場合は以下の記事でまとめていますので是非チェックしてみてください!

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

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

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

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

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