10.Pythonでデータ分析を始めよう!初心者向けガイド-相関分析編-

PR表記

※アフィリエイト広告を利用しています

どうもニコイチです。前回の記事で、基礎統計量やグラフに関する見方を活用して、実際に仮説1を検証してみました。今回は、前回に引き引き続きデータを分析する際の基本的なステップとして、「仮説を立てること」の重要性とその検証方法を学びます。データをただ眺めるだけでは意味を見出すのが難しいため、具体的な仮説を立てながら進めていきます。

以下は、定期預金契約に関するデモデータを使った仮説の例です。

目次

仮説の例

  1. 前回のキャンペーンで成功した人は、再度申し込む可能性が高いのではないか?
  2. 収入が高いほど定期預金を申し込む可能性が高いのではないか?
    • 相関係数を使って、収入(balance)と定期預金申し込み有無(y)の関係を確認します。
    • 具体的には、次のコードを使用して計算します: correlation = df[['balance', 'y_numeric']].corr() print(correlation)
      • 実行結果例: balance y_numeric balance 1.000 0.521 y_numeric 0.521 1.000 この場合、相関係数は約0.52であり、収入が高い人ほど定期預金を申し込む可能性があることを示唆しています。
  3. 既婚者は未婚者よりも定期預金を申し込む傾向があるのではないか?
    • 相関係数を使って、婚姻状況(marital)と定期預金申し込み有無(y)の関係を確認します。
    • maritalを数値化し、次のように計算します: df['marital_numeric'] = df['marital'].map({'married': 1, 'single': 0, 'divorced': 0}) correlation = df[['marital_numeric', 'y_numeric']].corr() print(correlation) 実行結果例: marital_numeric y_numeric marital_numeric 1.000 0.315 y_numeric 0.315 1.000 この場合、相関係数は約0.31であり、既婚者は定期預金を申し込む傾向が少し高いことがわかります。

今回は、仮説1を基に「前回キャンペーンの成果(poutcome)と定期預金申し込み有無(y)」の関係性を調べます。


相関係数を使った仮説2と仮説3の解説

相関係数とは?

相関係数は、2つの変数間の関係性を数値で表した指標です。値の範囲は-1から1までで、以下のように解釈します:

  • 1に近い:強い正の相関(片方が増えるともう片方も増える)
  • 0に近い:相関がない
  • -1に近い:強い負の相関(片方が増えるともう片方が減る)

相関係数を計算するには、Pythonのpandasライブラリを使用します。

仮説2:収入と定期預金申し込みの関係

仮説「収入が高いほど定期預金を申し込む可能性が高い」を検証するために、以下のコードを使用して相関係数を計算しました。

correlation = df[['balance', 'y_numeric']].corr()
print(correlation)

実行結果例:

            balance  y_numeric
balance      1.000       0.521
y_numeric    0.521       1.000
  • 相関係数が0.521であることから、収入と定期預金申し込みには中程度の正の相関があることがわかります。
  • 具体的には、収入が高いほど定期預金を申し込む傾向がある可能性が示唆されます。

仮説3:婚姻状況と定期預金申し込みの関係

仮説「既婚者は未婚者よりも定期預金を申し込む傾向がある」を検証するために、婚姻状況を数値化して相関係数を計算しました。

df['marital_numeric'] = df['marital'].map({'married': 1, 'single': 0, 'divorced': 0})
correlation = df[['marital_numeric', 'y_numeric']].corr()
print(correlation)

実行結果例:

                  marital_numeric  y_numeric
marital_numeric          1.000      0.315
y_numeric                0.315      1.000
  • 相関係数が0.315であることから、既婚者であることと定期預金申し込みには弱い正の相関があることがわかります。
  • これは、既婚者が定期預金を申し込む傾向が若干高いことを示していますが、相関はそれほど強くありません。

データ解析の基本:クロス集計

仮説検証の第一歩として、pandas.crosstab関数を使用したクロス集計を行います。この関数は、カテゴリーデータの分布や関連性を簡単に確認するのに便利です。

import pandas as pd

# データ読み込み
df = pd.read_csv('demo_data.csv')

# クロス集計
cross_tab = pd.crosstab(df['poutcome'], df['y'], margins=True)
print(cross_tab)

実行結果例

y           no   yes  All
poutcome                   
failure     300    50  350
success     150   200  350
unknown     400    50  450
All         850   300 1150
  • 縦軸:前回のキャンペーン結果(poutcome
  • 横軸:定期預金申し込み有無(y
  • 合計:margins=Trueオプションで全体の合計値を表示

申込率の計算

出現数の絶対値だけでは比較が難しいため、申込率(yesの割合)を算出します。

# 各カテゴリの申込率を計算
cross_tab['rate'] = cross_tab['yes'] / cross_tab['All']
print(cross_tab)

実行結果例

y           no   yes  All     rate
poutcome                          
failure     300    50  350  0.1429
success     150   200  350  0.5714
unknown     400    50  450  0.1111
All         850   300 1150      -
  • successの申込率が最も高く、約57%となっています。

データ操作の基本:カラムの値変更と新規追加

  1. カラムの値を変更する例 数値型のカラムすべてに1を足したい場合: df['balance'] = df['balance'] + 1
  2. 新しいカラムを追加する例 各行のbalanceを基にした新しい指標を計算して追加: df['balance_ratio'] = df['balance'] / df['balance'].sum()

データの可視化

データの傾向を視覚的に確認するために、以下の手法を使います。

1. 棒グラフ

カテゴリーデータの頻度を確認。

import matplotlib.pyplot as plt

df['poutcome'].value_counts().plot(kind='bar')
plt.xlabel('Poutcome')
plt.ylabel('Frequency')
plt.title('Distribution of Poutcome')
plt.show()

2. ヒートマップ

クロス集計結果を視覚化。

import seaborn as sns
sns.heatmap(cross_tab.iloc[:-1, :-1], annot=True, fmt='d', cmap='Blues')
plt.title('Poutcome vs Subscription')
plt.show()

まとめ

  • 仮説を立てることで、データ分析が効率的に進められます。
  • クロス集計や申込率の計算は、カテゴリーデータの関連性を調べる基本的な手法です。
  • 可視化を組み合わせることで、データの傾向をより直感的に理解できます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次