Rでグラフ作成〜気象庁過去の天気データダウンロードを使って

気象庁が過去の気象データをCSV形式でダウンロードできるコンテンツを公開しています。
過去1872年の過去まで遡れる超パワフルなコンテンツです。
今回は私が生まれた年のデータを使って解析をRでのグラフ作成ついてまとめてみようと思います。

ではさっそく過去の天気データのダウンロードから。

気象庁|過去の気象データ・ダウンロード
http://www.data.jma.go.jp/gmd/risk/obsdl/index.php

このサイトから調べたい都道府県を選択していきます。
私が生まれたのは1977年の秋田県ですので、「地点を選ぶ」で「秋田県」を選択します。
続いて、「項目で選ぶ」で取得したい気象データを選択していきます。私の場合は、「日平均気温」「降水量の日合計」「日最深積雪」「日平均雲量」の4項目を選択。
右上に「選択済みのデータ量(地点数×項目数×期間数)」が表示され、一気にダウンロードできるデータの分量が表示されます。選択したデータ量は今回選んだのだけで20%は消費しているので、他都道府県との比較などをするには、項目数を減らすかして容量を減らす必要がありそうです。
続いて「期間を選ぶ」で期間を設定していきます。今回は生まれた一年間の動きを調べたいので1977年一年間を選択してきます。
あらかたデータ項目の選択が出来たら、「CSVファイルのダウンロード」をクリックします。ダウンロードは一瞬です。

ダウンロードできたらRに読み込みやすい形式に整形していきます。

色々項目が付随していますが、「品質情報」と「均質番号」列は削除をしていきます。そのほかにも「現象なし情報」といったちょっと意味がわからない列などもありますが、削除していきます。
項目名が日本語だと読み込みがうまくいきませんので英語化します。

私の場合は以下に設定しました。

順番・・・Seq
年月日・・・Y/M/D
曜日・・・Week
平均気温・・・AvTMP
平年気温・・・YAvTMP
最深積雪・・・SnowDepth
最深積雪(平年)・・・YAvSnowDepth
平均雲量・・・AvCloud
平均降水量・・・AvRain
降水量(平年)・・・YAvRain

さてRで早速グラフを作成していきます。
早速Rコマンダーで整形したCSVファイルを読み込んでいきます。

> library(Rcmdr) #Rコマンダーの起動

変数「data」に格納します。
そして、格納データの確認。

> head(data)
YMD Week AvTMP YAvTMP SnowDepth YAvSnowDepth AvCloud AvRain YAvRain
1 1977/1/1 Sat -4.8 1.2 24 8 9.0 2.0 4.5
2 1977/1/2 Sun -4.2 1.1 32 9 9.0 7.0 4.5
3 1977/1/3 Mon -1.8 1.0 31 9 9.8 0.0 4.4
4 1977/1/4 Tue -4.1 0.9 32 10 10.0 2.0 4.4
5 1977/1/5 Wed -3.9 0.8 31 10 9.3 1.0 4.3
6 1977/1/6 Thu -3.8 0.7 32 10 10.0 2.5 4.2

まずはざっとplot()関数を使ってみます。
時系列データなので、X軸をデータ順に、Y軸を平均気温としてみます。

> plot(data[,1],data[,3])

スクリーンショット 2013-05-04 15.43.45

普通にやると、X軸(日付)がおかしいです。
Rは日付の処理がうまくいかないので加工が必要です。

まずはattach()関数を使って扱いやすくします。

> attach(data)
The following object(s) are masked _by_ ‘.GlobalEnv’:

AvTMP, YMD
The following object(s) are masked from ‘data (position 3)’:

AvCloud, AvRain, AvTMP, SnowDepth, Week, YAvRain, YAvSnowDepth, YAvTMP, YMD
The following object(s) are masked from ‘data (position 4)’:

AvTMP, YMD
The following object(s) are masked from ‘data (position 5)’:

AvCloud, AvRain, AvTMP, SnowDepth, Week, YAvRain, YAvSnowDepth, YAvTMP, YMD
The following object(s) are masked from ‘data (position 6)’:

AvTMP, YMD
The following object(s) are masked from ‘data (position 7)’:

AvTMP, YMD
The following object(s) are masked from ‘data (position 8)’:

AvTMP, YMD
The following object(s) are masked from ‘data (position 10)’:

続いて、strptime()関数を使って、指定の文字列をPOSIXltオブジェクトへ変換。
今回は変数「YMD」をPOSIXltオブジェクトにしていきます。
POSIXltオブジェクトとは、日付・時間データとして扱うためのオブジェクト。

変数「YMD」を変数「x」に格納します。

> x <- strptime(data[,1], "%Y/%m/%d", tz="") これで準備が整ったので、plot()関数を使ってグラフに書き出します。 Y軸はAvTMP(平均気温)とします。 > plot(x, AvTMP, type=”l”, xlab=”日付”, xaxt=”n”, ylab=”平均気温”)
スクリーンショット 2013-05-04 15.56.45

しかしこれだけだと日付が表示されていないのでさらに日付を足していきます。
グラフを表示させたままの状態で、以下のコマンドを打っていきます。

> r <- as.POSIXct(round(range(x), "days")) > axis.POSIXct(1, at=seq(r[1],r[2], by=”1 week”), format=”%m/%d”)

スクリーンショット 2013-05-04 15.59.56

超メンドクセー。
時系列データを時系列として扱うためには、時系列データのオブジェクトとして定義し直さないといけないだなんて。
エクセルは時系列っぽいデータを時系列として扱うもんで楽なんだろうなぁ。
ざっくしが良いか、神経質が良いのか。どちらが良いのかはなぞですが、私は後者の方がなんとなく親しみを覚えます。

平年気温を重ね書き。
グラフの重ね書きをする際には、par(new=T)を挟む必要があります。
さらに、普通にグラフを書くと軸名、項目名が重なってしまうのでパラメータを下記のようにして消します(空白にします)。
xlab=””
ylab=””
xaxt=”n”
yaxt=”n”

平年気温はわかりやすいように赤いラインを入れます。

> plot(x, AvTMP, type=”l”, xlab=”日付”, xaxt=”n”, ylab=”平均気温”)
> r <- as.POSIXct(round(range(x), "days")) > axis.POSIXct(1, at=seq(r[1],r[2], by=”1 week”), format=”%m/%d”)
> par(new=T)
> plot(x, YAvTMP, type=”l”, xlab=””, ylab=””, col=”red”, xaxt=”n”, yaxt=”n”)

スクリーンショット 2013-05-04 17.10.21

続けて降雪量についてもグラフ化
> plot(x, SnowDepth, type=”l”, xlab=”日付”, xaxt=”n”, ylab=”降雪量”)
> r <- as.POSIXct(round(range(x), "days")) > axis.POSIXct(1, at=seq(r[1],r[2], by=”1 week”), format=”%m/%d”)
> par(new=T)
> plot(x, YAvSnowDepth, type=”l”, xlab=””, ylab=””, col=”red”, xaxt=”n”, yaxt=”n”)

スクリーンショット 2013-05-04 17.21.02

続いて降雨量。

> plot(x, AvRain, type=”l”, xlab=”日付”, xaxt=”n”, ylab=”降雨量”)
> r <- as.POSIXct(round(range(x), "days")) > axis.POSIXct(1, at=seq(r[1],r[2], by=”1 week”), format=”%m/%d”)
> par(new=T)
> plot(x, YAvRain, type=”l”, xlab=””, ylab=””, col=”red”, xaxt=”n”, yaxt=”n”)

スクリーンショット 2013-05-04 17.24.08

うーん。
私の生まれた年は、どうやら気温は低めの割に雨も雪も平年とくらべて少ない年だったようですね。

にしても、グラフ処理は正直エクセルの方が万倍楽。
解析するならともかく、ただグラフを描画するだけならエクセルを使えってことですな。

Leave a Reply

%d人のブロガーが「いいね」をつけました。