【Python】カテゴリカルなデータの関連性を測る方法

  • URLをコピーしました!

今回は、カテゴリカルなデータ間に対し、関連性を測る方法を紹介します。

連関係数という指標を用いて、カテゴリカルなデータの関連性を測ります。

目次

はじめに

連関係数という指標を使用し、カテゴリカルなデータ間の関連性を測ります。

以下ステップで連関係数を求めます。

STEP
クロス表を作成
STEP
カイ二乗を算出
STEP
カイ二乗を標準化し、連関係数を算出

それぞれのステップを詳しく説明していきます。

クロス表の作成

クロス表とはなにか、Pythonでクロス表を作成する方法を紹介します。

クロス表とは

クロス表とは、以下のような2つ以上のカテゴリカルなデータをマトリックスで表現したものです。

行と列の交点に、それぞれのカテゴリデータに対応するデータ数が記載されています。

以下は年齢層ごとの好きな映画ジャンルです。

年齢層アクションコメディドラマホラー
10-20歳20015050100
21-30歳1801708070
31-40歳16013011050
41歳以上14012013010

Pythonでクロス表を作成する方法

それではPythonでクロス表を作成する方法を紹介します。

クロス表を作成するには、pandasのpd.crosstab()を使用します。

pd.crosstab()の使い方は以下です。

pd.crosstab(index, columns)

index: クロス表の行となる配列またはシリーズ
columns: クロス表の列となる配列またはシリーズ

pd.crosstab()のサンプルコードを紹介します。

今回は、tipsのデータセットを使用します。

tipsは、機械学習の分野でサンプルデータとして使用されるレストランのお会計に関するデータセットです。

tipsのデータフレームからdaytimeのクロス表を作成してみましょう!

import pandas as pd
import seaborn as sns

# データの準備
df = sns.load_dataset('tips')

# 'day'と'time'のクロス表を作成
cross_table = pd.crosstab(df['day'], df['time'])
cross_table

実行結果

indexにday、columnにtimeが入っています。

火曜日はLunchのお客様がメインであることが見て取れますね!

カイ二乗を算出

続いてはカイ二乗とはなにか、Pythonでカイ二乗を算出する方法を紹介します。

カイ二乗とは

\( \chi^2 \)(カイ二乗)とは、観測されたデータが期待したデータとどれくらい離れているかを測定するために使用されます。

2つのデータが関連しているかしていないか、独立性を評価できます。

カイ二乗は以下計算式で表されます。

\[ \chi^2 = \sum_{i=1} \frac{(O_i – E_i)^2}{E_i} \]

\( O_i \): 観測データ
\( E_i \): 期待度数

Pythonでカイ二乗を算出する方法

Pythonでカイ二乗を算出する方法を紹介します。

カイ二乗を算出するにはSciPyのstatsモジュールのstats.chi2_contingency()を使用します。

stats.chi2_contingency()の使い方は以下です。

stats.chi2_contingency(observed, correction)

引数
observed: クロス表(分割表)
correction: 補正の有無
戻り値
chi2: カイ二乗
p: p値
dof: 自由度
expected: 期待度数の行列

stats.chi2_contingency()のサンプルコードは以下の通りです。

先ほど求めたtipsのデータセットのdaytimeのクロス表を使用します。

import pandas as pd
import seaborn as sns
from scipy import stats

# データの準備
df = sns.load_dataset('tips')

# 'day'と'time'のクロス表を作成
cross_table = pd.crosstab(df['day'], df['time'])

# カイ二乗を算出
chi2, p, dof, expected = stats.chi2_contingency(cross_table, correction=False)
print(chi2)

実行結果

217.1126728434853

1つ目の戻り値にカイ二乗が入っています。

これでカイ二乗を算出することができました。

連関係数の算出

連関係数とはなにか、Pythonで連関係数を算出する方法を紹介します。

連関係数とは

連関係数は簡単に言うと、カイ二乗を標準化したものです。

変数間の関係を0〜1の範囲で表現されます。

1に近い場合、変数間の関連が強く、0に近い場合は変数間の関連はほとんどない、といえます。

連関係数を式で表すと以下の通りです。

\[ V = \sqrt{\frac{\chi^2}{(\min(a, b)-1) N}} \]

\(\chi^2 \): カイ二乗
a, b: クロス表の行数、列数
min(a, b): aとbの小さい方の数値
\( N \): 観測データの総数

Pythonで連関係数を算出する方法

最後に連関係数を算出する方法を紹介します。

連関係数を算出するには、実際に計算式を作成する必要があります。

では早速、先ほど求めたカイ二乗を使用し、連関係数を算出してみましょう。

import numpy as np
import pandas as pd
import seaborn as sns
from scipy import stats

# データの準備
df = sns.load_dataset('tips')

# 'day'と'time'のクロス表を作成
cross_table = pd.crosstab(df['day'], df['time'])

# カイ二乗を算出
chi2, p, dof, expected = stats.chi2_contingency(cross_table, correction=False)

# 連関係数の計算式で使用する値の準備
N = len(df['day']) # 観測データ数
min_ab = min(cross_table.shape) - 1 # クロス表の行列数の小さいほうからマイナス1

# 連関係数を算出
V = np.sqrt(chi2 / (min_ab * N))
print(V)

実行結果

0.9432953070188531

連関係数が1に近いので、daytimeは関係性が強いことがわかります。

まとめ

今回は、以下ステップで連関係数を求める方法を紹介しました。

  1. クロス表を作成
  2. \( \chi^2 \)(カイ二乗)を算出
  3. \(\chi^2\)(カイ二乗)を標準化し、連関係数を算出

カテゴリカルデータに対し、関係性を知りたいときに連関係数は使用します。

ここまで読んでくださりありがとうございます。

参考

おすすめ教材

米国データサイエンティストが教える統計学超入門講座【Pythonで実践】 icon 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜 icon

他のUdemyの講座が気になる方はこちら

¥3,630 (2024/04/08 23:55時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次