pandasとseabornで数値データ間の相関係数をヒートマップを用いて描画する

seaborn matplotlib&seaborn
スポンサーリンク

こんにちは。カルークです。

今回は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はグラフなどを美しく描画するのに強力なツールなので、ぜひ使い方をマスターしましょう。

タイトルとURLをコピーしました