月別平均気温と降水量

気象庁の過去の気象データ・ダウンロードから,ある年のある地域の月別平均気温・降水量をダウンロードしてみましょう。

これで「CSVファイルをダウンロード」を選びます。次のようなdata.csvというファイルがダウンロードされます。文字コードはCP932(シフトJIS),行末はCRLF(Windowsの行末)になっているので,Excelでも開ますが,ここではテキストエディタで開いて中を見てみましょう:

ダウンロードした時刻:2018/04/08 20:59:25

,,東京,東京,東京
年,月,降水量の合計(mm),降水量の合計(mm),平均気温(℃)
,,,現象なし情報,
2017,1,26.0,0,5.8
2017,2,15.5,0,6.9
2017,3,85.5,0,8.5
2017,4,122.0,0,14.7
2017,5,49.0,0,20.0
2017,6,106.5,0,22.0
2017,7,81.0,0,27.3
2017,8,141.5,0,26.4
2017,9,209.5,0,22.8
2017,10,531.5,0,16.8
2017,11,47.0,0,11.9
2017,12,15.0,0,6.6

最初の5行を除いた部分がデータで,そのすぐ上(4行目)はデータの変数名としての意味を持っていません。したがって,これをRで読むときは,ヘッダなしの指定で,最初の5行は読み飛ばします:

x = read.csv("data.csv", header=FALSE, fileEncoding="CP932", skip=5)

確認します:

x
     V1 V2    V3 V4   V5
1  2017  1  26.0  0  5.8
2  2017  2  15.5  0  6.9
3  2017  3  85.5  0  8.5
4  2017  4 122.0  0 14.7
5  2017  5  49.0  0 20.0
6  2017  6 106.5  0 22.0
7  2017  7  81.0  0 27.3
8  2017  8 141.5  0 26.4
9  2017  9 209.5  0 22.8
10 2017 10 531.5  0 16.8
11 2017 11  47.0  0 11.9
12 2017 12  15.0  0  6.6

V2が月,V3が降水量(mm),V5が平均気温(℃)です。

棒グラフと折れ線グラフを使い分けるとすれば,比例尺度の降水量は棒グラフで,間隔尺度の気温は折れ線グラフで表すのが適当です。まずは降水量を棒グラフで表します:

barplot(x$V3, names.arg=x$V2)

これだけでもいいのですが,パラメータを多少いじってみます:

par(mgp=c(2,0.8,0))     # 軸マージン(デフォルト: c(3,1,0))
par(las=1)              # 文字は回転しない
t = barplot(x$V3, names.arg=x$V2)  # 棒グラフを描き,各棒の中心x座標をtに代入
axis(1, labels="月", at=t[12], tick=FALSE, hadj=-1)  # 12番目の棒の隣に「月」と表示
axis(2, labels="mm", at=500, padj=-1)   # 500の上に「mm」と表示
東京の2017年の各月の降水量

気温を折れ線グラフでプロットします:

plot(x$V2, x$V5, pch=16, type="o", xlab="月", ylab="")
axis(2, labels="℃", at=25, padj=-1)   # 25の上に「℃」と表示
東京の2017年の各月の平均気温

両方重ねてみましょう:

t = barplot(x$V3, names.arg=x$V2)
axis(2, labels="mm", at=500, padj=-1)
axis(1, labels="月", at=t[12], tick=FALSE, hadj=-1)
points(t, 18*x$V5, pch=16, type="o")
axis(4, at=18*c(5,10,15,20,25), labels=c(5,10,15,20,25))
axis(4, labels="℃", at=18*25, padj=-1)
東京の2017年の各月の平均気温と降水量

これでいいのでしょうか。各月の降水量は,28日しかない2月と,31日ある月とでは,単純に月の降水量を比較するのは不公平です。1日あたりの降水量を使うべきでしょう。逆に,棒の幅は,各月の日数に比例した幅にするほうがいいでしょう:

d = c(31,28,31,30,31,30,31,31,30,31,30,31)  # 毎月の日数
t = barplot(x$V3/d, d, 0, names.arg=x$V2)
axis(2, labels="mm", at=15, padj=-1)
axis(1, labels="月", at=t[12], tick=FALSE, hadj=-1)
points(t, 0.6*x$V5, pch=16, type="o", lwd=2)
axis(4, at=0.6*c(5,10,15,20,25), labels=c(5,10,15,20,25))
axis(4, labels="℃", at=0.6*25, padj=-1)
東京の2017年の各月の平均気温と1日あたりの降水量

世界の天候から海外の気温・降水量も調べることができます。