
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)