いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【統計学】分散・歪度・尖度(R・Python)

有斐閣の「統計学」をもとに統計学を復習中。

今回は分散・歪度・尖度の実装。上記書籍の第1章SECTION2・3に該当。

分散・歪度・尖度

  • 分散 データの広がり具合を示す。
  • 標準偏差 分散の平方根。分散は2乗しているので、平方根をとることでもとのデータと単位をそろえることができる。
  • 歪度(わいど) データの分布の左右へのゆがみを表す。 ・分布が左右対称  →(歪度)=0 ・右にすそが長い分布 →(歪度)>0 ・左にすそが長い分布→(歪度)<0
  • 尖度(せんど) データの分布の尖がり具合を表す。 尖度が大きいほど尖った形になる。

Rで実装

x <- c(0, 1 ,1, 2, 2 ,3 ,3 ,3, 4, 5, 6, 7, 8, 9)
# 分散
var(x) # ただし、不偏分散
## [1] 7.67033

# 標準偏差
sd(x) # 不偏標準偏差
## [1] 2.769536

# 歪度
x_frequency <- table(x) #出現回数を求める
#x
#0 1 2 3 4 5 6 7 8 9 
#1 2 2 3 1 1 1 1 1 1 
max(x_frequency)#↑の最大値を求める
#[1] 3

Pythonで実装

分散・標準偏差はnumpyを、歪度・尖度はscipyを使用。

import numpy as np
import scipy
x = [0, 1 ,1, 2, 2 ,3 ,3 ,3, 4, 5, 6, 7, 8, 9]

# 分散
var = np.var(x ddof = 1) # ddof:自由度。ddof = 1のときは不偏分散。
# 標準偏差
std = np.std(x, ddof =1) # ddof:自由度。ddof = 1のときは不偏標準偏差。
# 歪度
skew = scipy.stats.skew(x)
# 尖度
kurtosis = scipy.stats.kurtosis(x)

#表示
print('分散: {0:.2f}'.format(var))
print('標準偏差 {0:.2f}'.format(std))
print('歪度: {0:.2f}'.format(skew))
print('尖度: {0:.2f}'.format(kurtosis))

おまけ(追記6/12)

Pythonの場合、statisticsパッケージでも平均、分散等計算できるらしい。

from statistics import mean, median,variance,stdev

x = [0, 1 ,1, 2, 2 ,3 ,3 ,3, 4, 5, 6, 7, 8, 9]

#平均
mean(x)
#Out[13]: 3.857142857142857
#中央値
median(x)
#Out[14]: 3.0
#分散
variance(x)
#Out[15]: 7.67032967032967
#標準偏差
stdev(x)
#Out[16]: 2.7695360027141134

こちらのほうが型変換しなくていいので便利かも。