Pythonで統計分析の勉強をするには、一度スプレッドシート (エクセルなど)で試してみると理解が早いと思います。
今回は無料で使えるGoogleスプレッドシートで説明します。
相関分析
データの準備
用意したデータはある店舗のある月の20代男性の来店人数とA社ミントタブレット購入数です。
(注)データは架空の数字です。
データの開閉はここをclick
日 | 人数 | 販売数 |
---|---|---|
1日 | 74 | 16 |
2日 | 67 | 11 |
3日 | 78 | 16 |
4日 | 58 | 18 |
5日 | 91 | 13 |
6日 | 48 | 7 |
7日 | 55 | 10 |
8日 | 71 | 14 |
9日 | 96 | 16 |
10日 | 81 | 19 |
11日 | 88 | 21 |
12日 | 112 | 28 |
13日 | 79 | 12 |
14日 | 62 | 14 |
15日 | 78 | 16 |
16日 | 87 | 20 |
17日 | 125 | 24 |
18日 | 99 | 19 |
19日 | 87 | 17 |
20日 | 78 | 14 |
21日 | 89 | 12 |
22日 | 71 | 15 |
23日 | 76 | 18 |
24日 | 97 | 24 |
25日 | 132 | 28 |
26日 | 105 | 24 |
27日 | 94 | 22 |
28日 | 78 | 12 |
29日 | 98 | 21 |
30日 | 135 | 31 |
散布図の作成
2種類のデータの相関関係をみるには、散布図を作ります。
Googleスプレッドシートでの散布図の作り方の手順は次の通りです。
- 2種類のデータの項目を含めて全て選択します。
- メニューの「挿入」から「グラフ」を選択、またはツールバーのグラフのアイコンをクリック
- グラフエディッタで散布図を選択
- グラフのサイズが正方形になるように調整する
- トレンド線を引くにはグラフエディッタのカスタムタブを選択して、系列の中のトレンドラインにチェックを入れる
相関関係と因果関係
相関関係
相関は2つの量の直線的な関係であり、その関係の原因については考慮されていません。
2種類の観測値について、一方の値が大きくなるともう一方の値も大きくなる傾向があるとき、つまり散布図で右上がりの傾向があるとき、正の相関があるといいます。
また一方の値が大きくなるとともに、もう一方の値が小さくなる傾向があるとき、つまり散布図で右下がりの傾向があるとき負の相関があるといいます。
相関関係の具体例
- 交番の数が多い地域ほど、犯罪件数も多い
- 猫が顔を洗うと雨が降る
- 趣味が盆栽という人ほど、お金持ちである
- ネットが普及するにつれ、地球温暖化が進む
因果関係
ある事象Aが原因となり、その結果として事象Bが発生するとき事象Aと事象Bが因果関係にあるといいます。
因果関係があれば相関関係があるが、相関関係があっても因果関係があるとは限らないことに注意する必要があります。
- インフルエンザの予防接種をすると、インフルエンザにかかる確率が減る
- 道路に水をまくと周辺の気温が下がる
- 人口が増えると商店数が増える
相関係数の求め方
相関係数とはある2つのデータの関連性の強さを図る指標です。
そ値は-1〜1の間の値となります。
スプレッドシートで相関係数を求めるにはCORREL関数を使います。
CORREL関数はデータセットに対するピアソンの積率相関係数 r を計算するものです。
データ_y – 依存データの配列または行列を表す範囲
データ_x – 独立データの配列または行列を表す範囲
スプレッドシートでCORREL関数を使う方法
ツールバーのシグマのアイコンから統計を選択してCORREL関数を選択します。
データyとデータxに適当なデータ範囲を選択します。
相関係数の目安
相関係数 | 目安 |
---|---|
〜0.3未満 | ほぼ無相関 |
03〜0.5未満 | 非常に弱い相関 |
05〜0.7未満 | 相関がある |
07〜0.9未満 | 強い相関 |
09以上 | 非常に強い相関 |
相関係数の数学的求め方
相関係数は-1〜+1の間の値をとり±1に近くほど、二つの値の間に関連が見られます。
ただし、相関関係は因果関係を証明するものではないので注意してください。
相関係数の数学公式は次の通りです。シグマ記号が出てくると難しく感じますが、プログラム的には単なるループ文です。
分散を求めるには、それぞれの数値と平均値の差の二乗平均で求められます。
$$ \displaystyle
r = \frac{S_{xy}}{S_x \times S_y} = \frac{\frac{1}{n}\displaystyle \sum_{i=1}^n (x_i – \overline{x})(y_i – \overline{y})}{ \sqrt{\frac{1}{n}\displaystyle \sum_{i=1}^n (y_i – \overline{y})^2} \times \sqrt{\frac{1}{n}\displaystyle \sum_{i=1}^n (x_i – \overline{x})^2}}
$$
記号 | 意味 |
---|---|
$$ r $$ | x,yの相関係数 |
$$S_{xy}$$ | x, yの共分散 |
$$ S_x $$ | xの標準偏差 |
$$ S_y $$ | yの標準偏差 |
$$ n $$ | データの総数 |
$$ (x_i,y_i) $$ | i番目のデータ値 |
$$ \overline{x} $$ | xの平均 |
$$ \overline{y} $$ | yの平均 |
標準偏差について
標準偏差とは、データのばらつきの大きさを表わす指標です。
標準偏差を求めるには、分散(それぞれの数値と平均値の差の二乗平均)の正の平方根を取ります。 データが平均値の周りに集中していれば標準偏差は小さくなり、逆に平均値から広がっていれば標準偏差は大きくなります。
$$ \displaystyle
S = \sqrt{\frac{1}{n}\displaystyle \sum_{i=1}^n (y_i – \overline{y})^2}
$$
Pythonで相関係数を求める
Pythonで相関係数を求めるには、「numpy」,「pandas」のライブラリが必要になります。また、散布図を描くには「matplotlib」が必要です。
プログラムを書く時には、まずこの3つのライブラリをインポートしておきます。
import numpy as np import pandas as pd import matplotlib.pyplot as plt
データの読み込みはpandasを使うと簡単な1文で済みます。
# CSVファイル読み込み df = pd.read_csv('pos1.csv')
読み込んだデータの記述を確認するには以下のように5件だけ確認をしてみます。
# 5件だけ表示 df.head(5)
必要なデータの抽出は次のようにします。
# データの抽出 x = df['20代男性人数'] y = df['ミントタブレット購入数']
散布図の描画は次のとおりです。
# 散布図作成 横軸x,縦軸y plt.scatter(x,y) plt.show()
相関係数は次の関数で算出します。
# 相関係数 correlation = np.corrcoef(x, y) print(correlation[0,1])
結果
0.8474945433388763
スプレッドシートで求めた値と同じです。
要約統計量
「describe()」を使うと、各列ごとに平均や標準偏差、最大値、最小値、最頻値などの要約統計量を取得できます。
基本統計データーをサクッと確認できる優れものです。
# describe出力 df.describe()
項目名 | 意味 |
---|---|
count | そのカラムの件数 |
mean | 平均 |
std | 標準偏差 |
min | 最小値 |
25% | 第一四分位数 |
50% | 第二四分位数 |
75% | 第三四分位数 |
max | 最大値 |
コメントを投稿するにはログインしてください。