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)

 

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

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

リスト1を実行すると、まず入力データファイル名の設定を求めるダイアログウィンドウが表示される(図1)。

図1

 

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

図2 Excelファイル(temper.xlsx

 

図2では、1行目に変量名が設定され、1列目はデータの識別値、図2では通し番号が設定されている。識別値は文字列でもよい。また、同じものを複数回用いてもよい。データ値は2列目に書く。図1のダイアログウィンドウに入力データファイル名(図1では、図2のファイル名temper.xlsxが設定されている)を設定して、「開く」ボタンをクリックすると、出力テキストファイル名の設定を求めるダイアログウィンドウが表示される(図3)。

図3

 

適当なテキストファイル名を設定して、「保存」ボタンをクリックする。

「保存」ボタンのクリックで、データが読み込みと計算が始まる。最後に、出力テキストファイル名がフルパスで表示されて、プログラムの実行終了となる(図4)。

図4

 

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

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

図5

 

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

図6

 

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

 

入力データファイル:D:/yasuharu/www/LaCoocan/Python/IntroPyStat/StatOneVar/filesStatOneVar/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 tkinter as tk

import tkinter.filedialog as fd

import pandas as pd

import numpy as np

import scipy.stats as ss

 

def askinfilename(msg = None, types = [('', '*.*')]):

    """

            入力用ファイル名の設定用ダイアログウィンドウ

    """

    rt = tk.Tk()

    rt.withdraw()

    flnm = fd.askopenfilename(title = msg, filetypes = types)

    rt.destroy()

    return flnm

 

def askoutfilename(msg = None, types = [('', '*.*')], deftype = '.txt'):

    """

            出力用ファイル名の設定用ダイアログウィンドウ

    """

    rt = tk.Tk()

    rt.withdraw()

    flnm = fd.asksaveasfilename(title = msg, filetypes = types,

                                           defaultextension = deftype)

    rt.destroy()

    return flnm

 

 

finnm = askinfilename('入力データExcelファイル', types = [('Excel(*.xlsx)', '*.xlsx')])

foutnm = askoutfilename(msg = '出力用テキスト', types = [('Text (*.txt)', '*.txt')],

                       deftype = '.txt')

 

fout = open(foutnm, 'w')

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

#   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{}\n'.format(foutnm))

 

 

Up