Up

1変量統計量

 

平均値、分散、標準偏差、不偏分散、歪度、尖度を求める。

データの配列をXで表すとき、これらの統計量はnumpyあるいはscipy.statsに用意されている関数を用いると以下のように得ることができる。

 

平均値

numpy.mean(X)

 

分散

numpy.var(X)

 

標準偏差

numpy.std(X)

 

不偏分散

numpy.var(X) * len(X) / (len(X) - 1)

 

歪度

scipy.stats.skew(X)

 

尖度

scipy.stats.kurtosis(X)

 

上の関数の使用例を本ウェブサイト後半のリスに示す。スクリプトファイルとデータファイルは圧縮ファイルfilesStatOneVar_nfd.zipにまとめたので、ダウンロード解凍すれば自由に利用できる。

リスト1の前半は、入出力ファイル名の設定とExcelデータファイルからのデータの読み込みである。読み込んだデータは変数Xで表されている。

リスト1を実行すると、まず入力データファイル名の設定が求められる(図1)。

図1

入力データファイルは、図2に示す形式のExcelファイルとして用意する。

図2 Excelファイル(temper.xlsx

 

図2では、1行目に変量名が設定され、1列目はデータの識別値、図2では通し番号が設定されている。識別値は文字列でもよい。また、同じものを複数回用いてもよい。データ値は2列目に書く。入力データファイル名(図1では、図2のファイル名temper.xlsxが設定されている)を設定して、「Enter」キーを押すと、次に出力テキストファイル名の設定が求められる(図1)。

適当なテキストファイル名を設定して、「Enter」キーを押すと、データが読み込まれて計算が始まる。最後に、出力テキストファイル名が表示されて、プログラムの実行終了となる(図3)。

図3

 

図3において、「Squeezed text (50 lines)」とある部分は、マウスの右ボタンクリックで開くことができる。

実行終了後、出力テキストファイル名を開くことができる。

出力テキストファイルをPython IDLEで開くときに、図4のようなダイアログボックスが表示されることがある。

図4

 

utf-8」を「s-jis」に変更して「OK」ボタンをクリックすればよい(図5)。

図5

 

出力ファイルを開くと、以下のような内容になっている。

 

入力データファイル:temper.xlsx

 

変量: 気温

 

データ値:

[30.1 30.7 25.2 26 30.5 25.3 28.1 31.4 30.5 29.1 28.5 30.7 28.3 26.3 29.5

 31.2 32 30.1 26.4 29 28.2 29.4 29.6 29.6 27.7 26.9 30.2 28.3 31.3 28 31.1

 27 30 29.2 29.8 28.1 29.5 28.4 28.5 28.6 27.6 29.3 30.5 28.4 30.3 28.3

 26.4 28.7 29.7]

 

平均値 = 28.929

 

分散 = 2.591

 

標準偏差 = 1.610

 

不偏分散 = 2.645

 

歪度 = -0.416

 

尖度 = -0.368

 

 

 

リスト1 1変量統計量の計算

 

import pandas as pd

import numpy as np

import scipy.stats as ss

 

finnm = input('入力データファイル(*.xlsx= ')

foutnm = input('出力用テキストファイル(*.txt= ')

 

fout = open(foutnm, 'w')

fout.write('\n入力データファイル:{}\n'.format(finnm))

#

#           Excelファイルの読み込み

#

#   ExcelデータファイルからExcelFile型のオブジェクトの生成

xlsx_fl = pd.ExcelFile(finnm)

#   ExcelFile型のオブジェクトからDataFrame型のオブジェクトの生成

data_xlsx = pd.read_excel(xlsx_fl,  header = None)

#   DataFrame型のオブジェクトからndarray型のオブジェクトの生成

data = data_xlsx.values

print('\n', data)

var_name = data[0,1]                                #   変量名

X = data[1:, 1]                                     #   データ値、numpy.ndarray

 

print(X)

fout.write('\n変量: {}\n'.format(var_name))

fout.write('\nデータ値:\n{}\n'.format(X))

 

X_mean = np.mean(X)                                 #   平均値

print('平均値 = ', X_mean)

fout.write('\n平均値 = {0:.3f}\n'.format(X_mean))

X_var  = np.var(X)                                  #   分散

print('分散 = ', X_var)

fout.write('\n分散 = {0:.3f}\n'.format(X_var))

X_sd   = np.std(X)                                  #   標準偏差

print('標準偏差 = ', X_sd)

fout.write('\n標準偏差 = {0:.3f}\n'.format(X_sd))

X_uvar = X_var * len(X) / (len(X) - 1)              #   不偏分散

print('不偏分散 = ', X_uvar)

fout.write('\n不偏分散 = {0:.3f}\n'.format(X_uvar))

X_skewness = ss.skew(X)                             #   歪度

print('歪度 = ', X_skewness)

fout.write('\n歪度 = {0:.3f}\n'.format(X_skewness))

X_kurtosis = ss.kurtosis(X)                         #   尖度

print('尖度 = ', X_kurtosis)

fout.write('\n尖度 = {0:.3f}\n'.format(X_kurtosis))

 

fout.close()

print('\n出力テキストファイル: {}\n'.format(foutnm))

 

 

Up