こんにちは。カルークです。
今回はpandasとseabornを使い、テーブルデータにおける数値データ間の相関係数を、ヒートマップを使って描画する方法について記載します。
数値型カラム間の相関係数をヒートマップで可視化するのは、データ概要を調査する探索的データ分析(Exploratory Data Analysis: EDA)のフェーズではよく使う手法です。
データの概要を調査する方法についても過去にまとめましたので、こちらの記事と合わせてお読み頂く事をおすすめ致します。
seabornとは
seabornは、matplotlibをベースにしたPythonのデータ可視化ライブラリです。単にmatplotlibを用いるよりもカッコよくグラフを描く事ができるので、プレゼン映えするのは間違いないです。(もちろん中身がなにより大事です…笑)
詳しくは公式ドキュメントをご覧ください。
実行環境
今回の実行環境は以下になります。
- OS: Windows 10 Pro (64-bit)
- Anaconda: conda version 4.9.2
- Python: 3.8
- 実行環境: jupyter notebook
- pandas: 1.2.3
- seaborn: 0.11.0
今回用いるデータセット
今回は気象庁のホームページから入手可能な気象情報のデータセットを例に用いたいと思います。
事前に東京のお天気データの幾つかの項目をcsvで取得後、扱いやすい形に整形しました。
整形済みのcsvデータを以下に置きます。
前準備(pandasとseabornのインストール)
pandas、seabornがインストールされていない場合は事前にインストールする必要があります。
Anacondaを利用している方は、Anaconda promptを起動して以下のコマンドを入力します。
pandasのインストール:
conda install -c anaconda pandas
seabornのインストール:
conda install -c anaconda seaborn
Anaconda以外をお使いの方は、以下のコマンドを入力します。
pandasのインストール:
pip install pandas
seabornのインストール:
pip install seaborn
必要なライブラリのインポート
まずはpandas、seabornをインポートします。
import pandas as pd
import seaborn as sns
データの確認
csvデータをデータフレームとして読み込み、データの中身を確認します。
df_weather = pd.read_csv("./data/weather_tokyo.csv")
df_weather.head()
念の為、info()を使って、データの型や欠損値情報なども見ておきます。
df_weather.info()
# 出力
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 31 entries, 0 to 30
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 31 non-null object
1 Average temperature (℃) 31 non-null float64
2 Maximum temperature (℃) 31 non-null float64
3 Minimum temperature (℃) 31 non-null float64
4 Total precipitation (mm) 31 non-null float64
5 Daylight hours (hours) 31 non-null float64
6 Average wind speed (m / s) 31 non-null float64
7 Maximum wind speed (m / s) 31 non-null float64
8 Wind direction 31 non-null object
9 Maximum instantaneous wind speed (m / s) 31 non-null float64
10 Average vapor pressure (hPa) 31 non-null float64
11 Average humidity (%) 31 non-null int64
12 Weather overview (noon: 06:00 to 18:00) 31 non-null object
13 Weather overview (night: 18:00 to 06:00 the next day) 31 non-null object
dtypes: float64(9), int64(1), object(4)
memory usage: 3.5+ KB
今回のデータは、カラム数14個、数値型(float64型やint型)のカラムが10個である事が分かります。(以下で求める相関係数は、数値型のカラムのみが対象となります)
数値型のカラム間の相関係数を求める
以下のコマンドでカラム間の相関係数を求める事が出来ます。
df_weather_corr = df_weather.corr()
df_weather_corrの中身を見てみると、カラム同士の相関係数が入っている事が確認出来ます。
また、(当然ですが)対角線上にある同じカラム名同士の相関係数は全て1になっているのも分かります。
seabornで相関係数のヒートマップを描く
以下のコマンド(一行!)で、先程求めた相関係数をヒートマップとして描画することが出来ます。
sns.heatmap(df_weather_corr)
明るい色(白)になるほど相関係数が高い、暗い色(黒)になるほど相関係数が低いというのが分かります。
ちなみに、sns.heatmap()には色々とオプションがあって、例えば、マップ上にアノテートしたりも出来ます。
sns.heatmap(df_weather_corr, annot=True)
他にもsns.heatmapでは様々な装飾を加える事が出来ます。詳しくは公式ドキュメントをご覧ください。
まとめ
今回はPandasとseabornを使い、テーブルデータにおける数値データ間の相関係数を、ヒートマップを使って描画する方法について記載しました。seabornはグラフなどを美しく描画するのに強力なツールなので、ぜひ使い方をマスターしましょう。