数理統計関数statistics
前回、numpyを使って、平均値や中央値など統計で使いそうな関数を解説しました。
今回は数理統計関数のライブラリであるstatisticsを使って、平均値、中央値、標準偏差、分散値の計算をしてみようと思います。
まずはstatisticsをインポートする必要があるのですが、ここで2種類のインポートの仕方を紹介します。
まずはstatisticsのライブラリ全部をインポートしてしまう方法です。
import statistics
今までインポートしてきたのと同じ方法なので分かりやすいでしょう。
次にstatisticsのライブラリの中で使うものだけインポートする方法です。
今回は平均値(mean)、中央値(median)、標準偏差(stdev)、分散値(variance)をインポートしてみます。
from statistics import mean, median, stdev, variance
fromの後にライブラリ名、そしてimportの後にインポートしたい関数名を入力します。
そしてそれぞれに対して、基本となるプログラムを作っておきましょう。
リストの数値は前回と同じものを使って、numpyとstatisticsで値の違いがないか確かめながら進めていきましょう。
import statistics
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(a)
実行結果
[1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
from statistics import mean, median, stdev, variance
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(a)
実行結果
[1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
それでは試していきます。
平均値:mean
まずは平均値の計算方法です。
statisticsライブラリ全部をインポートした場合はこんな感じです。
import statistics
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(statistics.mean(a))
実行結果
4.5
次に使う関数のみインポートした場合はこんな感じです。
from statistics import mean
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(mean(a))
実行結果
4.5
numpyで計算した際も平均値は「4.5」でしたので違いはなさそうです。
中央値:median
次に中央値の計算方法を紹介します。
ライブラリ全体をインポートした場合はこちら。
import statistics
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(statistics.median(a))
実行結果
4.5
使う関数のみインポートした場合はこちら。
from statistics import mean
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(mean(a))
実行結果
4.5
こちらも前回のnumpyの結果と同じになりました。
標準偏差:stdev
次に標準偏差の計算方法です。
ライブラリ全体をインポートした場合はこうなります。
import statistics
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(statistics.stdev(a))
実行結果
3.0276503540974917
使用する関数のみをインポートした場合はこうなります。
from statistics import mean, median, stdev, variance
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(stdev(a))
実行結果
3.0276503540974917
前回、numpyで標準偏差を計算した際は、「2.8722813232690143」となり、今回の値と違っています。
こちらに関してはまた今度、解析していきたいと思います。
とりあえずこのまま進めていきます。
分散値:variance
次に分散値です。
statistics全体をインポートした場合はこんな感じ。
import statistics
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(statistics.variance(a))
実行結果
9.166666666666666
次に使う関数のみインポートした場合はこちら。
from statistics import mean, median, stdev, variance
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(variance(a))
実行結果
9.166666666666666
こちらもnumpyの結果とは違う値になりました。
まとめ
今回、statisticsを使って、平均値、中央値、標準偏差、分散値の計算方法を紹介してきました。
またそこで「ライブラリ全体をインポートする方法」と「使う関数のみインポートする方法」の2種類を紹介しています。
その理由としては、プログラム全体を書いていくのにどちらが楽かということがあります。
プログラムを書いていて、そのプログラムの中の関数を色々と使うのであれば、ライブラリ全体をインポートしてしまった方が後々楽かもしれません。
import statistics
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(statistics.mean(a))
print(statistics.median(a))
print(statistics.stdev(a))
print(statistics.variance(a))
実行結果
4.5
4.5
3.0276503540974917
9.166666666666666
また使う関数が決まっていれば、その関数のみをインポートしてしまった方がその後に記述は楽になります。
from statistics import mean
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(mean(a))
実行結果
4.5
この例だと結果を表示するのに「print(mean(a))」とだけ記述すればよく、ライブラリ全体をインポートした場合の「print(statistics.mean(a))」のstatisticsを省略できます。
しかし他の関数はインポートされないので、そのまま同じライブラリ内の他の関数を使おうとするとエラーになります。
from statistics import mean
a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
print(stdev(a))
実行結果
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-b26703fccbe8> in <module>
3 a = [1, 5, 3, 4, 0, 9, 6, 2, 8, 7]
4
----> 5 print(stdev(a))
NameError: name 'stdev' is not defined
どちらがいいかは個人個人のプログラミングの仕方によるでしょうし、解析するデータによると思うので、その時々で使いやすい方を選んでください。
また今回、標準偏差と分散値がnumpyを使った場合と異なっていました。
統計の値に関しては同じような概念の値がいくつもあり、計算値としてはどちらも正しいけれども、使う場面が違うなんてことが多々あります。
今回もstatisticsとnumpyではほんの少し概念が違って、計算は合っていても値が異なっていると考えられます。
また機会があれば、そのような統計の話もしたいと思いますが、ここではどれを使えばいいか吟味する必要があるくらいに覚えておいてください。
大雑把に言えば、(統計をメインでやっている方には怒られそうですが)個人的には同じ関数を使い続けるのであれば、どちらでもそれほど大きな違いはないのかなと思っています。
ということで今回はこんな感じで。
コメント