python

【pythonで統計学】データのばらつきを示す分散と標準偏差・平均偏差について〜サンプルコードつき〜

python 統計学 データのばらつき 分散と標準偏差

統計処理を行う際に、ノンパラかパラメトリックかどうかを把握する必要がありました

これを正規分布している・していない、と表現しますが、正規分布していない場合には、データが両端にバラついている度合いが大きくなるということになります

正規分布の場合でも、多少はデータは散らばります

このようにデータがばらついていることを散布度と呼びます

前回は四分位範囲や四分位偏差について解説をしましたが、今回は分散と標準偏差・平均偏差について解説をしていきたいと思います

分散と標準偏差は頻繁に使用する散布度なので、覚えておくと後々役に立ちます

pythonで統計学を順序立てて学びたい方は、こちらの記事を参考に進めてみてください

python 統計学
pythonで統計学を学ぶメリット〜実際の学習手順を紹介〜近年、データサイエンティストの需要が高まってきていますが、データサイエンティスト必須能力として、「プログラミング言語」「統計学」が挙げられています。pythonで統計学を扱えれば、データサイエンティストとしての道も開けるでしょう。今回はpythonで統計学を学ぶメリットや実際にどのように学習していくべきかを解説していきたいと思います。...

平均偏差とは

平均偏差とは、データの偏差の絶対値をとり、それを平均した値をいいます

絶対値を取ることから、絶対偏差とも呼ばれています

平均偏差もデータのばらつきを表す散布度の一つです

そもそも偏差というのは、平均値との差のことを示しています
(※中央値を用いる場合もある)

そして偏差を足していくと0になります

架空のデータを作って、それを元に考えていきましょう

以下のようなデータがあります

17 13 5 8 1 9

平均値=(17+13+5+8+1+9)/6=8.83

それぞれの偏差を求めていきます

17-8.83=8.17
13-8.83=4.17
5-8.83=-3.83
8-8.83=-0.83
1-8.83=-7.83
9-8.83=0.17

ここから偏差の平均を求めます

(8.17+4.17+(-3.83)+(-0.83)+(-7.83)+0.17)=0.02/6=0.00333…

小数点をあまり気にせず計算しているので、「0.00333..」になってしまいましたが、限りなく0に近づくということは理解いただけるかと思います

偏差の平均を求めようとすると、0になってしまうため、平均を求めることができません

そこで出てくるのが、「絶対値」というものです

絶対値であれば、符号は関係なくなるため、平均値を算出することができます

(8.17+4.17+3.83+0.83+7.83+0.17)/6=4.16…となります

この時に算出された「4.16」が平均偏差と呼ばれます

データの散らばりを知りたいので、それぞれの値が平均値からどれだけ離れているのかさえわかればOKです

なので絶対値が出てきます

各データのばらつきが大きければ大きいほど、平均偏差は大きくなり、各データのばらつきが小さければ小さいほど、平均偏差は小さくなります

分散と標準偏差

平均偏差は全ての値を網羅しており、散布度として問題ないように思えますが、正負の変換が面倒というデメリットがあります

そこで出てくるのが、分散という項目です

分散は各データを2乗し、平均を求めることで算出することができます

2乗しているため、全てが正の値になります

17 13 5 8 1 9

17*2=289
13*2=169
5*2=25
8*2=64
1*2=1
9*2=81

289+169+25+64+1+81/6=104.8…

標準偏差

しかし、各データを2乗しているため、単位も変わります(cmだった場合cm*2、gだった場合g*2)

そのため単位を揃えるために分散の平方根をとる必要が出てきます

この分散の平方根が標準偏差ということになります

平均偏差も分散もデータのばらつきを表す散布度ですが、実際には標準偏差が頻繁に使われています

これは、単位や正負の値などの関係から、用いやすいためだと思います

pythonで分散・標準偏差を算出する

ここからはpythonで分散・標準偏差を算出していきたいと思います

先ほど計算したように、平均偏差は限りなく0に近づいてしまうので、割愛します

分散を算出する

分散を算出するコードは以下になります

import numpy as np

sample=[17,18,8,5,1,9]

#平均値を算出
mean=np.mean(sample)
print("平均値は",mean)
#偏差を算出
deviations=sample-mean
print("偏差は",deviations)
#偏差の2乗
square_deviations=deviations*deviations
print("偏差の2乗は",square_deviations)
#偏差の2乗の合計
sum_square_deviations=sum(square_deviations)
print("偏差の2乗の合計は",sum_square_deviations)
#分散を算出
variance = sum_square_deviations/len(sample)
print("分散は",variance)
分散の算出

標準偏差の算出

import numpy as np

sample=[17,18,8,5,1,9]

#平均値を算出
mean=np.mean(sample)
print("平均値は",mean)
#偏差を算出
deviations=sample-mean
print("偏差は",deviations)
#偏差の2乗
square_deviations=deviations*deviations
print("偏差の2乗は",square_deviations)
#偏差の2乗の合計
sum_square_deviations=sum(square_deviations)
print("偏差の2乗の合計は",sum_square_deviations)
#分散を算出
variance = sum_square_deviations/len(sample)
print("分散は",variance)

#標準偏差
print("標準偏差は",np.std(sample))
標準偏差の算出

まとめ

  • 平均偏差は限りなく0に近づく
  • 分散は各データを2乗した平均。単位も変わってしまう
  • 標準偏差は分散の正の平方根。単位は変わらず符号だけ変わる

pythonで統計学を学ぶ上で必須書籍

スクールに通わずにpythonを学習するためには?

Python学習を進めていく上で、

「ひとまず何かしらの書籍に目を通したい」

「webで調べても全くわからない」

という状況が何度も何度でも出てくるかと思います。

そういう時に便利なのが、kindleとテラテイルです。

Kindleはご存知の通り、電子書籍です。

Kindleには多くのpython学習本が用意されており、無料で読むことができます。

(たまに有料もあります)

ひとまずどういった書籍があるのか?

もしものために、書籍に目を通しておこう

という場合には、kindleの利用がおすすめです。

kindleでpythonの書籍を無料で読んでみる