【Pythonと統計学】多変量データの統計量

Pythonを使った機械学習に興味があり、基礎となる統計学を勉強しています。このページはその内容をまとめたものです。

書籍「Pythonで学ぶ新しい統計学の教科書」をメインに勉強を勧めています。もしよろしければぜひ手にとってみてください。

前回ご紹介した1変量データの統計量の続きになります。

今回は変数が2つ以上のデータ、多変量データで用いられる統計量についてまとめていきます。

共分散

使用するデータ

covというデータを使います。データの中身は下記のようになっています。

      x   y
0  18.5  34
1  18.7  39
2  19.1  41
3  19.7  38
4  21.5  45
5  21.7  41
6  21.8  52
7  22.0  44
8  23.4  44
9  23.8  49

共分散は2つの変数の関係性を見る指標で、以下のような特性があります。

  • 共分散が0より大きい場合、片方の変数が大きければ、もう片方の変数も大きくなる
  • 共分散が0より小さい場合、片方の変数が大きければ、もう片方の変数は小さくなる
  • 共分散が0の場合、変数同士に関係性は見られない

計算式は次のとおりです。

$$Cov(x,y) = \frac{1}{n}\sum_{i=1}^{n}{(x_i-\bar{x})(y_i-\bar{y})}$$

cov_data = pd.read_csv('cov.csv')
#計算式
x=cov_data[x]
y=cov_data[y]
n=len(x)

x_bar=np.mean(x)
y_bar=np.mean(y)

cov=np.sum((x-x_bar)*(y-y_bar))/n

ピアソンの積率相関係数

ピアソンの積率相関係数は共分散を1から-1の間に標準化したものです。

一般的に相関係数といえばこれを指します。

計算式は次のとおりです。

$$\rho_xy = \frac{Cov(x,y)}{\sqrt{s^2_x*s^2_y}}$$

関数で求める場合は、numpyのcorrcoef関数を使います

#計算式
s2_x=np.var(x)
s2_y=np.var(y)
rho=cov/np.sqrt(s2_x*s2_y)

#関数
rho=np.corrcoef(x,y)

クロス集計表

  sunlight disease
0      yes     yes
1      yes     yes
2      yes     yes
3      yes      no
4      yes      no

ここからは以下のcrossデータを使います

  sunlight disease
0      yes     yes
1      yes     yes
2      yes     yes
3      yes      no
4      yes      no

まず、クロス集計表の作り方ですが、pandasのcrosstabとpivot_tableの2通りの作り方があります。

crosstabは配列などにも対応していますが、pivot_tableは元のデータがDataFrameであることが想定されています。

引数もほとんど同じですが、pivot_tableではdataが必要になります。crosstabでは不要です。

また、どちらも共通していることですが、変数が2つの場合はvaluesを省略することができます。

crosstabで設定する引数は下のとおりです。

  • index:列にあたる
  • columns:行にあたる
  • values:集計する対象の値
  • aggfunc:集計方法、デフォルトはlen(個数を数える)

pivot_tableの引数は下のとおりです。

  • data:元になるデータ
  • index:行の基準になるカラム名
  • columns:列の基準になるカラム名
  • values:テーブルの値になる
  • aggfunc:集計方法
#crosstabの使い方
pd.crosstab(index=cross['sunlight'],columns=['desease'])

#pivot_tableの使い方
pd.pivot_table(data=cross_data, index='sunlight', columns='disease',values='

関数まとめ

共分散:なし

ピアソンの積率相関係数:corrcoef(x,y)

クロス集計表

  • crosstab(index,columns,values,aggfunc)
  • pivot_table(data,index,columns,values,aggfunc)

Twitterでフォローしよう

おすすめの記事