Kaggle(16) - 相関分析

2変数間のデータ分析や相関を分析するために散布図が使われます。

散布図の特徴としましては、データ1点ごとの位置や分布、相関関係を視覚的に把握できるということになります。

デメリットとしては、2変数間の分析しか行えないこと、相関の強さを視覚的にだいたい確認することしかできず、相関係数といった数値で確認できないことです。

データの読み込み

今回はチップのデータセットを読み込みます。

1
2
3
4
5
import seaborn as sns
from matplotlib import pyplot as plt
sns.set(style='darkgrid')
tips = sns.load_dataset('tips')
tips

散布図の表示

支払総額(total_bill)とチップ(tip)の散布図を表示します。

1
sns.scatterplot(data=tips, x='total_bill', y='tip')

ざっくりですが、正の相関がありそうだということが見てとれます。

相関係数を表示します。

1
tips.corr()

相関係数は0.67となり、やや相関があるようです。

(相関係数は一般的に1に近いほど正の相関が強く、-1に近いほど負の相関が強いということになります。)

さらに喫煙者と非喫煙者に絞り込んで相関を見てみます。

1
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='smoker')

1つのグラフだと見づらいため、2つのグラフに分けてみます。

1
sns.relplot(data=tips, kind='scatter', x='total_bill', y='tip', col='smoker')

右図の非喫煙者の方が正の相関が強いように見えます。

非喫煙者の相関係数を見てみます。

1
tips[tips.smoker=='No'].corr()

0.82とより強い相関があることが確認できました。

さらに食事の時間帯に絞り込んで相関を確認していきます。

1
2
g = sns.FacetGrid(tips, height=5, col='time', row='smoker')
g = g.map(plt.scatter, 'total_bill', 'tip', edgecolor='w')

下側の2つの図(非喫煙者のグラフ)が上図よりも相関が強いようです。

ランチ(左)と夕食(右)を比較した場合では、どちらも同じ程度の相関があるように見えます。

そこでそれぞれの相関係数を確認します。

まず非喫煙者のランチ帯の相関係数を確認します。

1
tips[(tips.smoker=='No') & (tips.time == 'Lunch')].corr()

次に非喫煙者の夕食帯の相関係数を確認します。

1
tips[(tips.smoker=='No') & (tips.time == 'Dinner')].corr()

ランチ帯の相関係数が0.83、夕食帯の相関係数が0.81と、ややランチ帯の方が相関が強いことが分かりました。

(実行環境としてGoogleさんのColaboratoryを使用ています。)

次回は、ヒートマップを使って大量データの相関を見ていきます。