はじめに
数学がちょっとデキル
ふつうのバックエンドエンジニアが
統計学を勉強してみたという話
今回やること
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が扱えれば
記述統計でよく使う統計量はおおよそいける。
だけれども、統計量それぞれの求め方は把握しておきましょう。