統計学の基礎をまとめてみた（平均・中央値・最頻値）

## 目標
統計学の基礎的な部分をPythonを使用してデータを扱いながらお勉強する。

## データ準備
こちらのサイトからデータを取得をします。
33個の項目で学生のデータを記録しているデータセットです。
https://archive.ics.uci.edu/ml/machine-learning-databases/00320/

## お勉強開始！！

### データを眺めてみよう
どんなデータなのかを確認してみましょう。

```python
import pandas as pd

# csvファイルを読み込み
sample_data_set = pd.read_csv("student/student-mat.csv", sep=";")

# 先頭5行を表示
print(sample_data_set.head(5))
```

```bash
  school sex  age address famsize Pstatus  Medu  Fedu     Mjob      Fjob  reason  ... romantic  famrel  freetime  goout Dalc Walc health absences  G1  G2  G3     
0     GP   F   18       U     GT3       A     4     4  at_home   teacher  course  ...       no       4         3      4    1    1      3        6   5   6   6     
1     GP   F   17       U     GT3       T     1     1  at_home     other  course  ...       no       5         3      3    1    1      3        4   5   5   6     
2     GP   F   15       U     LE3       T     1     1  at_home     other   other  ...       no       4         3      2    2    3      3       10   7   8  10     
3     GP   F   15       U     GT3       T     4     2   health  services    home  ...      yes       3         2      2    1    1      5        2  15  14  15     
4     GP   F   16       U     GT3       T     3     3    other     other    home  ...       no       4         3      2    1    2      5        4   6  10  10
```

### 平均 中央値 最頻値
#### 平均
データの中に`age`があるので、平均年齢を算出してみましょう。
平均とはデータを平らに均（なら）すと出てくる数値です。
平均は式で表すとこんな感じ

```math
\frac{データの合計}{データの個数}
```

平均年齢と自分の年齢を比べる事で、全体と比べて自分が若いのかを判定できる一つの目安になります。

#### 中央値

中央値はデータを並べて丁度真ん中にあるデータの数値です。

#### 最頻値

最頻値はデータの中で一番個数が多いデータの数値です。

#### pythonで計算とグラフ化をしてみよう
```python
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

# csvファイルを読み込み
sample_data_set = pd.read_csv("student/student-mat.csv", sep=";")

# 年齢の平均を見てみよう
average_age = sample_data_set["age"].mean()

print("平均", average_age)

# 年齢の中央値を見てみよう
median_age = sample_data_set["age"].median()

print("中央値", median_age)

# 最頻値を見てみよう
mode_age = sample_data_set["age"].mode()

print("最頻値", mode_age)

# グラフ化してみよう
plt.hist(sample_data_set['age'])

# 縦軸と横軸に名前を付ける
plt.xlabel('age')
plt.ylabel('count')

# グラフ表示
plt.show()
```

```bash
平均 16.696202531645568
中央値 17.0
最頻値 0    16
dtype: int64
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190554/19b6ab33-62e8-86a0-d294-437d8beada37.png)

#### どう使うの？
平均・中央値・最頻値と3つの指標が出てきましたが、どの様に使うのがいいのでしょうか？


##### 平均値のメリット・デメリット 
平均値のメリットは
データ全体を考慮した値なので、全体の特徴を掴むのに便利な値です。

平均値のデメリットは
データの中に極端な値（外れ値）が多く含まれてしまうと影響が大きく出てきます。

以下のようなデータとすると
（街コンとかで男性10人がいるとか考えてみてください。。。）

* 年収300万円　 9人
* 年収1億円　　 1人

平均値を算出すると平均年収は1270万円になります。
単純に平均値がデータの特徴を表わしているとは言い難い状況ですよね？
（300万の人が口説く為に『俺たちの平均年収は1270万円』とか言っても嘘ではないのですな・・）

そこで、出てくるのが中央値です。

##### 中央値のメリット・デメリット 
中央値のメリットは
外れ値の影響を受けないところです。

上の年収のデータでは中央値が300万円になるので、極端な外れ値を含むデータの中では
平均よりも集団の特徴を捉えている数値と言えそうです。
（少し統計的な知識な女性がいれば『年収の中央値？』みたいにして男性陣がお通夜状態になりそう・・）

中央値のデメリットは
全てのデータを考慮できない点です。

以下のデータでも中央値は300万になってしまいます。

* 年収300万の人　6人
* 年収1億円の人　4人

##### 最頻値のメリット・デメリット
最頻値のメリットは
中央値と同じく外れ値の影響を受けないところです。

* 年収300万円　 9人
* 年収1億円　　 1人

では最頻値は300万になります。極端なデータの影響を受けにくいと言えます。

最頻値のデメリットは

* データ数が多い場合でしか使えない
* データの区切り方によって最頻値は変わってしまう

そもそものデータが多くないと
* 年収300万円から年収500万円        1人
* 年収500万円から年収1000万円       1人
* 年収1000万円以上                 1人

とかだと最頻値による分析はできなくなってしまいます。
また、データの幅を以下のように変えると

* 年収300万円から年収1000万円        2人
* 年収1000万円以上                 1人

今度は最頻値が出て来ます。データを適切に区切らないと最頻値は様相をコロコロ変えてしまうので注意が必要です。


## まとめ
今回は統計を勉強し始めると必ず出てくる『平均』『中央値』『最頻値』についてまとめてみました。
以下のサイトで色々な例で解説してくれています。
どれもわかりやすく。大変勉強になりました。

* https://math.nakaken88.com/textbook/basic-mean-median-mode/

* https://mathtrain.jp/daihyochi

* http://from-g-to-r.com/2017/08/18/mean-median-mode/

次回は書くとしたら、分散や標準偏差、変動係数、共分散などを纏めようと思います。