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)
上の関数の使用例を本ウェブサイト後半のリスト1に示す。スクリプトファイルとデータファイルは圧縮ファイル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
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))