LoginSignup
3
4

More than 3 years have passed since last update.

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

Posted at
1 / 20

はじめに

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

前回


今回やること

Jupyter Notebookを使って様々な統計量を計算する。

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


今回使うライブラリ

import numpy as np
import scipy as sp

サンプルデータ

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

合計値を計算する

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

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までの数値を
全て足すことを課したところ
ものの数十秒で計算して結果を出したという。

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


標本数を計算する

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

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 メソッドで計算できる。

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)

標本分散を計算する

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

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 を使うと簡単に標本分散を計算できる。

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)

不偏分散を計算する

分散の値を過少に見積もってしまうバイアスがない分散

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 を使うと簡単に不偏分散を計算できる。

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)

標準偏差を計算する

「○○さんって偏差値いくつよ~」
「え、偏差値低い!!?」の偏差値ですね。

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


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 を使うと簡単に標準偏差を計算できる。


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 を使うと簡単に最小値を計算できる。
一番ちっさい数値のこと


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 を使うと簡単に中央値を計算できる。
中央値はサンプルの中でちょうど真ん中に位置する数値のこと


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 を使うと簡単に最大値を計算できる。
一番大きい数値のこと


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が扱えれば
記述統計でよく使う統計量はおおよそいける。
だけれども、統計量それぞれの求め方は把握しておきましょう。


おわり

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4