【Google Colaboratory / Python】Excelのデータからシャピロ-ウィルクの検定とコルモグオロフス-ミノルフ検定(KS検定)を行う方法
大学の課題で大半がR言語を用いていたが、R言語って環境構築が大変そう(適当)なので、環境構築なしですぐにPythonを使う方法をここに書く。
1. Google Colaboratoryにログインする
Google Colaboratoryにアクセスして、自分のGoogleアカウントでログインしましょう。
2. Google Colabのノートブックを新規作成
「ファイル」>「ノートブックを新規作成」をクリック
3. Excelファイルのアップロード
左側にあるファイルのボタン(青色で囲んであるアイコン)をクリックして、
オレンジ色の範囲にドラッグ&ドロップでExcelファイルをアップロードしてください。
(もしくは赤色のボタンを押してアップロードしてください)
邪魔なのでオレンジ範囲のXボタンを押して非表示にしてください。
4. Excelファイルの読み込みテスト
注意: 以下データ1つ1つに対して実行してあげないと、いい感じになりません。(身長のデータだけとか体重のだけという意味です) あと、しばらくするとExcelファイルは削除されるので注意してください。(仮想環境ごとに削除されるため)
今回のExcelファイルの形式
今回用いるExcelファイルは以下のようになっています。
・Excelファイル名は「data.xlsx」。
・Sheet1の1列目に身長をheaderありで、headerの下にデータを置いています。
・Sheet2の1列目に体重をheaderありで、headerの下にデータを置いています。
ソースコード
import pandas as pd import matplotlib.pyplot as plt df = pd.read_excel("data.xlsx", sheet_name="Sheet1") df.head()
pd.read_excel("data.xlsx", sheet_name="Sheet1")
注意
第一引数にはExcelファイル名, sheet_nameにはシート名を書きます。
もしもExcelファイルが、たとえば次のような形式であれば以下のようにしてください。
(ry)(後で書くかも)
参考: pandasでExcelファイル(xlsx, xls)の読み込み(read_excel)
ソースコードなど参考
【初心者向け】Google ColaboratoryでDataFrameにExcel・CSVファイルを読み込む - Qiita
実行
以下のようにソースコードをコピペして、適切に編集したら三角丸アイコンを押して実行します。
すると以下のように表示されるはずです。
ここで適切に設定できていれば大丈夫ですが、できていなければエラーが出たり、この後で失敗することになってしまいます。
5. シャピロ-ウィルクの検定を行う
やっと本番です。
コードセルの追加
「+コード」ボタンを押して、コードの欄(コードセル)を増やします。
新しくできたコードセルへ、次のソースコードを書き込んでください。
ソースコード
import numpy as np from numpy.random import * from scipy import stats import pandas as pd import matplotlib.pyplot as plt def check_norm(x): plt.title("height") plt.hist(x, bins = 10, ) #ヒストグラム表示 plt.pause(.01) stats.probplot(x, dist = "norm", plot = plt) #QQプロット表示 plt.pause(.01) W, p = stats.shapiro(x) #シャピロウィルク検定 print("シャピロウィルク検定のp値: " + str(p)) print("データ数: " + str(len(x))) df_height = pd.read_excel("data.xlsx", sheet_name="Sheet1") #df_height.head() data_height = df_height["身長"] check_norm(data_height)
先程のように自分のデータと合うように適切に、このソースコードを編集してください。
ソースコード参考
Pythonでデータの正規性を確認するサンプルコード - なろう分析記録
実行
実行結果などは以下のようになります。
6. コルモグオロフス-ミノルフ検定(KS検定)を行う
だいたいシャピロウィルクの検定と同じです。
コードセルの追加
「+コード」ボタンを押して、コードの欄(コードセル)を増やします。
新しくできたコードセルへ、次のソースコードを書き込んでください。
ソースコード
import numpy as np from numpy.random import * from scipy import stats import pandas as pd import matplotlib.pyplot as plt def check_norm(x): plt.title("height") plt.hist(x, bins = 10, ) #ヒストグラム表示 plt.pause(.01) stats.probplot(x, dist = "norm", plot = plt) #QQプロット表示 plt.pause(.01) loc, scale = stats.norm.fit(x) n = stats.norm(loc=loc, scale=scale) value = stats.kstest(x, n.cdf) #コルモグオロフスミノルフ(KS)検定 print("コルモグオロフスミノルフ(KS)検定のp値: " + str(value.pvalue)) print("データ数: " + str(len(x))) df_height = pd.read_excel("data.xlsx", sheet_name="Sheet1") #df_height.head() data_height = df_height["身長"] check_norm(data_height)
先程のように自分のデータと合うように適切に、このソースコードを編集してください。
value = stats.kstest(x, "norm") #コルモグオロフスミノルフ(KS)検定(これは嘘です)
KS検定の場合は5.と違い、このようにします。
平均、標準偏差、サンプル数
loc, scale, size
を適切に設定する必要があるそうです。
ソースコード参考
pythonで正規性の検定【コロモゴロフスミルノフ検定(KS検定)】 - 技術メモ
K-S検定(コルモゴロフ-スミルノフ検定)と、その誤用について - Qiita
p_value is 0 when I use scipy.stats.kstest() for large dataset - Stack Overflow
実行
データを用意していないため、実行結果がありません。
まとめ
以上のようにすることで、シャピロウィルクの検定とKS検定を環境構築せず、Google Colaboratory上のPythonで行うことができます。
お疲れ様でしたー!