Pandas で corr()
関数を使うと DataFrame と Series で「相関係数 (correlation coefficient)」を計算できる.今回は DataFrame の corr()
関数と Seaborn を使った可視化を試す.
相関係数 (correlation coefficient) 📊
まず「相関係数」とは「2種類のデータ (x, y)
の線形的な関係性を表現する指標」で,値は -1 ~ 1
の範囲となる.大きく3種類あり「正の相関(x
が増えると y
が増える)」と「負の相関(x
が増えると y
が減る)」と「無相関」がある.相関係数が 1
に近いほど「正の相関」で,-1
に近いほど「負の相関」になる.例えば「勉強時間 x
が長いと学力 y
が高い」など💡
データセット 📊
今回の検証では,GitHub リポジトリ chendaniely/pandas_for_everyone に含まれているデータセット housing.csv
を使う.これは「住宅情報をまとめたデータセット(コンドミニアム🏢)」となり,今回は以下の「3カラム」に限定して関係性を見ていく.
Total.Units
: 部屋数Year.Built
: 建設年Full.Market.Value
: 市場価値
housing = pd.read_csv('./housing.csv').loc[:, ['Total.Units', 'Year.Built', 'Full.Market.Value']] housing
よって,今回は以下の組み合わせで「相関係数」を計算する.
Total.Units
とYear.Built
(部屋数と建設年には相関はある?)Total.Units
とFull.Market.Value
(部屋数と市場価値には相関はある?)Year.Built
とFull.Market.Value
(建設年と市場価値には相関はある?)
ペアプロット図(散布図行列)📊
まず DataFrame の関係性を「ペアプロット図(散布図行列)」で可視化する.Seaborn の pairplot()
関数を使えば簡単に描画できる.散布図をザッと見ると Total.Units
と Full.Market.Value
には緩やかな「正の相関」があるように見える.そして Total.Units
と Year.Built
や Year.Built
と Full.Market.Value
は「無相関」のように見える.
figure = sns.pairplot(housing, plot_kws = {'alpha': 0.5}) figure.fig.set_figheight(10) figure.fig.set_figwidth(10)
なお「散布図」は Pandas の DataFrame.plot.scatter()
関数や plotting.scatter_matrix()
関数を使って描画することもできるけど,今回は「Pandas ライブラリ活用入門」にも載っていた Seaborn を試したくて使った.
- pandas.DataFrame.plot.scatter — pandas 1.2.4 documentation
- pandas.plotting.scatter_matrix — pandas 1.2.4 documentation
Pythonデータ分析/機械学習のための基本コーディング! pandasライブラリ活用入門 (impress top gear)
- 作者:Daniel Y. Chen
- 発売日: 2019/02/22
- メディア: 単行本(ソフトカバー)
相関係数 : corr()
関数 📊
次に Pandas の corr()
関数を使って相関係数を計算する.散布図を見て判断した通り,Total.Units
と Full.Market.Value
の相関係数は 0.661639
となり,ある程度「正の相関」があると確認できる.
corr = housing.corr() corr
相関係数とヒートマップ 📊
最後は corr()
関数を使って計算した相関係数をヒートマップで可視化する.Seaborn の heatmap()
関数を使えば簡単に描画できる.色は設定で変えられるけど,今回の設定だと「正の相関」だと赤くなり「無相関」だと黒くなる.もっとカラム(特徴量)が多くても関係性を見極めることができそう.
sns.heatmap(corr, vmax=1, vmin=-1, center=0)
まとめ 📊
Pandas の corr()
関数を使って「相関係数 (correlation coefficient)」を計算して,Seaborn の heatmap()
関数を使って可視化した.「相関係数」に関しては,最近並行して読んでいる「Python によるあたらしいデータ分析の教科書」にも載っていた.正確には「ピアソンの積率相関係数」と「スピアマンの順位相関係数」と「ケンドールの順位相関係数」という指標があり,corr()
関数は method
パラメータでそれぞれの指標をサポートしていることも確認できた.
df.corr(method='pearson') df.corr(method='kendall') df.corr(method='spearman')