読者です 読者をやめる 読者になる 読者になる

tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

降水量について調べてみる - その2 - 「Think Stats」第2章

統計 thinkstats python matplotlib

前回5月と6月前半の降水量について意外な結果が出たので友人に聞いたところ5月と6月前半だと5月の方が雨が少ないと思っているようだったのでその原因を考えたい。

  • 仮説1: 6月後半から梅雨に入るのでそのイメージが強すぎる
  • 仮説2: 実際5月にはひどく雨が降る日がなく、降ったことになっていない
  • 仮説3: 6月のほうが湿度は高く、今にも雨が降りそうでただ降っていない

を考えた。今回は仮説2を降水量の分布と外れ値について調べてみる。

とりあえず1995/4/17から2014/4/17の大津市のデータで下調べをすると、

1月 max= 53 rainy= 0.307 mean= 1.702
1月 max= 43 rainy= 0.317 mean= 1.764
2月 max= 35 rainy= 0.469 mean= 2.154
2月 max= 47 rainy= 0.527 mean= 3.367
3月 max= 43 rainy= 0.557 mean= 3.744
3月 max= 41 rainy= 0.652 mean= 3.965
4月 max= 64 rainy= 0.497 mean= 3.823
4月 max= 57 rainy= 0.578 mean= 3.535
5月 max= 143 rainy= 0.508 mean= 5.911
5月 max= 126 rainy= 0.617 mean= 5.368
6月 max= 56 rainy= 0.484 mean= 3.97
6月 max= 154 rainy= 1.127 mean= 10.258
7月 max= 94 rainy= 0.9 mean= 8.765
7月 max= 131 rainy= 0.462 mean= 5.401
8月 max= 106 rainy= 0.383 mean= 3.847
8月 max= 100 rainy= 0.505 mean= 5.296
9月 max= 170 rainy= 0.57 mean= 5.395
9月 max= 157 rainy= 0.541 mean= 6.128
10月 max= 75 rainy= 0.477 mean= 4.626
10月 max= 110 rainy= 0.382 mean= 4.243
11月 max= 67 rainy= 0.39 mean= 2.967
11月 max= 56 rainy= 0.319 mean= 2.542
12月 max= 40 rainy= 0.338 mean= 1.919
12月 max= 45 rainy= 0.345 mean= 1.824

5月も降る日は降っている。外れ値の可能性もあるので一度散布図を描いてみる。今回は1985/4/22から2014/4/22のデータに増やしてみた。

# -*- coding: utf-8 -*-

from __future__ import division
import csv
import numpy as np
import matplotlib.pyplot as plt

#used just to correct data on month
month_have_days = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31])
X = np.empty((10593, 1), dtype=np.float32) #month + date/month_have_days
Y = np.empty((10593, 1), dtype=np.float32) #rain

with open('shiga-rain2.csv','r') as csvfile:
    csvreader = csv.reader(csvfile)
    for ncol, row in enumerate(csvreader):
        #remove the headers and skip the date if nodata
        if ncol < 5 or row[1] == '': continue
        month, date, rain = int(row[0].split('/')[1]),\
                            int(row[0].split('/')[2]),\
                            float(row[1])

        #skip the last feb. day of leap year
        if date > month_have_days[month-1]: continue
        X[ncol-6] = month + date/month_have_days[month-1]
        Y[ncol-6] = rain

#1. Figureインスタンスの生成
fig = plt.figure()
#2. Axesインスタンスの生成
ax = fig.add_subplot(111)
#3. プロット
ax.scatter(X, Y, s=8, c='b', alpha=.3)
#4. 軸の範囲を設定
ax.set_xlim(0.9,13.2)
ax.set_ylim(-5,)
#5. 軸のラベルを設定
ax.set_xlabel('month')
ax.set_ylabel('precipitation(mm)')
#6. 軸の目盛りを設定
ax.set_xticks(np.arange(1, 13)+0.5)
ax.set_xticklabels(range(1,13))

plt.savefig('test.png')

f:id:kuyata:20140423161247p:plain

分布はこんな感じになった。これを見た感じでは外れ値を除いても6月の前半の方が降っていないように見える。第2章はPMF、相対危険度、条件付き確率についても勉強しないといけないのでちょっとここで撤退。