Python
で平均とか求める.
統計量全て一度に算出するメソッドもあるけど,一個ずつやります.
とはいえ,最初のはnumpy
のメソッドでラクして出しますけども...
まず最初にnumpy
のインポートと例題として以下のリストを定義.
>>> import numpy as np >>> a=[1,2,3]
では求めます.
# 平均 >>> np.mean(a) 2.0 # 標準偏差の算出 >>> np.std(a) 0.816496580927726 # 平均偏差の算出 >>> def md(x:list)->float: ... md = sum([abs(i-np.mean(x)) for i in x])/len(x) ... return md ... >>> md(a) 0.6666666666666666 # 分散の算出 >>> np.var(a) 0.6666666666666666 # 不偏分散の算出 >>> def nvar(x:list)->float: ... return sum([(i-np.mean(x))**2 for i in x])/(len(x)-1) ... >>> nvar(a) 1.0
例題のリストならば手計算は容易ですので以上の算出された値が 正しい(コンピュータによる計算故誤差はある程度あると思うが)ことが 分かるかと思います.
numpy
のメソッドを使う際,
>>> np.array(a).mean()
っというようにnumpy
配列にしてからメソッドを呼び出して算出するという書き方もできる.
この後の処理でnumpy
配列として使う際は事前にnumpy
配列に変換してから算出するのがいいでしょうね.
ただ,以上のような書き方ならば特にメリットはないかな.
ここで,ndarray
ではサイズに限界があるので,
データが多い場合は以上のようなarray
かmatrix
(制限あるかもしれないけど)で変換した方が良いです.
sum
・max
・min
は標準のメソッドとして用意されているのでnumpy
のを使わなくても
出せますが,numpy
で統一して行った方が良いかも.
あと,中央値に関してはnumpy
のメソッドnp.median
で.
あえて,自作するならば,
>>> np.median(a) 2.0 >>> np.median([1,4,5,8]) 4.5 # メソッドを自作してみる >>> def median(x:list)->float: ... if len(x)%2 == 0: ... return (x[int(len(x)/2)-1]+x[int(len(x)/2)])/2.0 ... else: ... return x[int(len(x)/2)] ... >>> median(a) 2 >>> median([1,4,5,8]) 4.5
っという感じかな.
参考
- 作者:園子, 石村
- 発売日: 2006/06/30
- メディア: 単行本
- 以上の60ページにまとめ有.
Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習
- 作者:Jake VanderPlas
- 発売日: 2018/05/26
- メディア: 単行本(ソフトカバー)