統計検定2級合格への道　〜その①〜

### はじめに

データ分析や機械学習を学ぶにあたり、統計学に関する知識が不足していることを痛感した。
データサイエンティストになるためには統計学に関する知識が不可欠！気合入れて勉強しよう！

データサイエンティストとして活躍するには、どの程度の知識があればいいのだろうか？
世には[統計検定](http://www.toukei-kentei.jp)というものがあるらしい。
その基準を参考に考えよう。

統計検定の試験内容は以下の通り。

| 試験の種別 | 試験内容 |
|:--|:--|
| 統計検定　1級 | 実社会の様々な分野でのデータ解析を遂行する統計専門力 |
| 統計検定　準1級 | 統計学の活用力 ─ データサイエンスの基礎 |
| 統計検定　2級 | 大学基礎統計学の知識と問題解決力 |
| 統計検定　3級 | データの分析において重要な概念を身に付け、身近な問題に活かす力 |
| 統計検定　4級 | データや表・グラフ、確率に関する基本的な知識と具体的な文脈の中での活用力 |

これを見る限り、最終的には1級が取れるレベルにならなあかんらしい。けど内容が難しくてはじめからこれの勉強は無理っぽい。
3級は簡単すぎて勉強してて飽きそう。もうちょっと歯応えが欲しい。
よって2級レベルの勉強をすることに決定。
これ以上はとりあえず2級に合格してから考えよう。

#### この記事について

この記事は「[改訂版 日本統計学会公式認定 統計検定2級対応 統計学基礎](https://www.amazon.co.jp/改訂版-日本統計学会公式認定-統計検定2級対応-統計学基礎-田中豊/dp/4489022271)」を参考に、私が学んだ内容をまとめたものです。

ほぼ自分の勉強用。同じ検定を受ける人の助力になれたら儲けもんの精神で書き連ねていきます。

### 変数の定義

変数とは**調査される項目**を指し、人の身長や体重などのデータが変数に該当する。
一方、IDなどの個体を識別するために設定する値は変数では無い。

変数には、**質的変数**と**量的変数**がある。
また、質的変数は**名義尺度**と**順序尺度**に、量的変数は**間隔尺度**と**比例尺度**に更に細分化される。

変数の定義を以下にまとめる。

- 変数
    - 質的変数
        - 名義尺度
            - 同じ値かどうかのみ意味がある
            - 例：性別、好きな色、職業
        - 順序尺度
            - 値の大小関係に意味がある
            - 例：好みの評価、成績評価
    - 量的変数
        - 間隔尺度
            - 値の大小関係と値の差の大きさに意味がある。値0は相対的な意味しか持たない
            - 例：気温、偏差値
        - 比例尺度
            - 値の大小関係と値の大きさに加え、比に意味がある。値0が絶対的な意味を持つ
            - 例：身長、体重、年齢

### 分布

ヒストグラム、累積分布、ローレンツ曲線の分布を図示する。
各分布は以下のデータをmatplotlibで図示したものである。

- 分布に用いたデータ
    - 乱数（一様分布）を用いて作成されたデータ
    - 100人の給料データ（のつもり）。100人の中での最高月収は969,442円、最低は6,518円

- ヒストグラム

<img width="397" alt="スクリーンショット 2020-03-20 19.35.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546595/d17e5831-a511-0b9c-ef74-e5476ba11ad9.png">

ヒストグラムは、データをいくつかの**階級**に分け、それぞれの階級に含まれる**度数**を数え上げて作成する。
データの全体の特徴（どこにピークがあるのか、ピークは1つor複数なのか、テールの長さはどの程度か、など）を把握するために用いる。

ヒストグラムをプロットするために用いたコードは以下の通り。

```python
import matplotlib.pyplot as plt

fig, ax = plt.subplots(facecolor="w")

ax.hist(salary, bins=10, ec='black')

ax.set_xlabel("salary")
ax.set_ylabel("frequency")
ax.set_title("histogram")

plt.show()
```

- 累積分布

<img width="408" alt="スクリーンショット 2020-03-20 20.48.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546595/80569186-c6dc-e8f2-4ce3-ba49acc04b0b.png">

累積分布は、データを昇順に並び替え、各階級の度数を足し上げて作成する。
データが全体としてどのように増加しているかを把握し、分布間の比較を行うために用いられる。
今回は一様分布からデータを作成したため、全体的に線形に累積度数が増加している。これが例えば、「月給30万〜50万の人が大多数のデータ」の場合は、30万〜50万の辺りで急激に変化する分布となる。

累積分布をプロットするために用いたコードは以下の通り。

```python
import matplotlib.pyplot as plt

salary.sort()

fig, ax = plt.subplots(facecolor="w")

ax.hist(salary, bins=100, ec='black', cumulative=True)

ax.set_xlabel("salary")
ax.set_ylabel("cumulative frequency")
ax.set_title("Cumulative distribution")

plt.show()
```

- ローレンツ曲線

<img width="395" alt="スクリーンショット 2020-03-20 20.33.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546595/f01580be-1d86-db9c-e6aa-8daa8fe67671.png">

ローレンツ曲線は2つの変数（上の図では人数と月給）の累積相対度数をプロットした分布である。
ローレンツ曲線は**分配の不平等さ**を表すグラフであり、
完全に平等な場合（100人が全く同じ給料）は、座標(0,0)と座標(1,1)を結ぶ直線(図中の点線)と一致し、
完全に不平等な場合（1人が全ての給料を独り占めし、99人は0円）は、ローレンツ曲線はy=0とx=1に沿う直線になる。

完全に平等な場合の直線とローレンツ曲線の間の面積の2倍を**ジニ係数**と呼び、分布の平等・不平等の指標に用いる。（ジニ係数が0の場合は完全平等、1の場合は完全不平等となる）

ローレンツ曲線をプロットするために用いたコードは以下の通り。

```python
import matplotlib.pyplot as plt

fig, ax = plt.subplots(facecolor="w")

ax.set_xlabel("population cumulative frequency")
ax.set_ylabel("salary cumulative frequency")
ax.set_title("Lorentz curve")

ax.plot(population_cumulative_rf, salary_cumulative_rf)
ax.plot([0, 0.2, 0.4, 0.6, 0.8, 1.0], [0, 0.2, 0.4, 0.6, 0.8, 1.0], linestyle="dashed", color="black")

plt.xlim(0, 1)
plt.ylim(0, 1)

plt.show()
```

### おわりに

はじめに紹介したテキスト「[改訂版 日本統計学会公式認定 統計検定2級対応 統計学基礎](https://www.amazon.co.jp/改訂版-日本統計学会公式認定-統計検定2級対応-統計学基礎-田中豊/dp/4489022271)」のほんの10ページ程度しか進んでいない。。
先は長いがコツコツやっていこう。。