【統計学】ふつうのエンジニアが統計学の勉強を始めてみた- part2


# はじめに
数学がちょっとデキル
ふつうのバックエンドエンジニアが
統計学を勉強してみたという話

[前回](https://qiita.com/ymd65536/items/dc0eff97e8fe86ac2c1d)

---
# 今回やること
Jupyter Notebookを使って様々な統計量を計算する。

・合計値
・平均値
・標本分散
・不偏分散
・標準偏差
・最小値
・中央値
・最大値

---

# 今回使うライブラリ

``` python
import numpy as np
import scipy as sp
```

---
# サンプルデータ

``` python
# 魚のデータをテーマに記述統計を試してみる
fish_data = np.array([2,3,3,4,4,4,4,5,5,6])
```

---

# 合計値を計算する

配列 fish_dataをscipy モジュールのsumメソッドに渡す。
結果をsum_valueに格納

``` python
import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])
# 合計値(sum_value)を出す
sum_value = sp.sum(fish_data)

```
---

# 合計値に関する逸話(コラム)

雨の日で体育ができない為、教師が
少年に対して1～100までの数値を
全て足すことを課したところ
ものの数十秒で計算して結果を出したという。

この少年は皆さんご存知
のちに数学と物理学の分野で偉人となるガウスさんです。

---

# 標本数を計算する

配列の長さを測ることで計算できる。

``` python
import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

# 標本の数 N を数える
N = len(fish_data)
```

---

# 平均値を計算する

合計値 / 標本数で計算できる。
scipy を使うとmean メソッドで計算できる。

``` python
import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

# 平均を出す sum_value / N
avg = sp.mean(fish_data)
```

---

# 標本分散を計算する
「データが平均値からどれだけ離れているか」を表す指標

``` python
import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

# 平均を出す sum_value / N
avg = sp.mean(fish_data)

# 標本分散は英語で「Sample variance」
sigma = sp.sum((fish_data - avg)**2) / N
```

---

# 標本分散を計算する(2)
scipy を使うと簡単に標本分散を計算できる。

``` python
import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

# 標本分散 sigma を計算する
# (scipy の varメソッドを使うと一発で計算できる)
sigma = sp.var(fish_data , ddof = 0)
```

---

# 不偏分散を計算する
分散の値を過少に見積もってしまうバイアスがない分散

``` python
import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

# 平均を出す sum_value / N
avg = sp.mean(fish_data)

# 標本の数 N を数える
N = len(fish_data)

# 英語で「Unbiased distribution」
unb_dist = sp.sum((fish_data - avg)**2) / (N-1)

```


---

# 不偏分散を計算する(2)
scipy を使うと簡単に不偏分散を計算できる。

``` python
import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

unb_dist = sp.var(fish_data , ddof = 1)
``` 

---

# 標準偏差を計算する

「○○さんって偏差値いくつよ～」
「え、偏差値低い！！？」の偏差値ですね。

不偏分散を平方することで求めることができます。

``` python

import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

# 平均を出す sum_value / N
avg = sp.mean(fish_data)

# 標本の数 N を数える
N = len(fish_data)

# 英語で「Unbiased distribution」
unb_dist = sp.sum((fish_data - avg)**2) / (N-1)

# 標準偏差 英語で「standard deviation」
std_dev = sp.sqrt(unb_dist)
```

---

# 標準偏差を計算する(2)

scipy を使うと簡単に標準偏差を計算できる。

``` python

import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])

# 不偏分散 を利用して標準偏差を計算する(ddof = 1)
sp.std(fish_data,ddof = 1)


```

---
# 最小値
scipy を使うと簡単に最小値を計算できる。
一番ちっさい数値のこと

``` python

import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])
sp.amin(fish_data)


```

---
# 中央値

scipy を使うと簡単に中央値を計算できる。
中央値はサンプルの中でちょうど真ん中に位置する数値のこと

``` python

import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])
sp.median(fish_data)


```

---

# 最大値

scipy を使うと簡単に最大値を計算できる。
一番大きい数値のこと

``` python

import numpy as np
import scipy as sp

fish_data = np.array([2,3,3,4,4,4,4,5,5,6])
sp.amax(fish_data)

```

---

# まとめ

numpy と scipyが扱えれば
記述統計でよく使う統計量はおおよそいける。
だけれども、統計量それぞれの求め方は把握しておきましょう。


---

# おわり