RでJSONを読む

はじめに

ここではRの jsonlite というパッケージを使う(この中で curl というパッケージも呼び出される)。次のようにしてインストールしておく。

install.packages("jsonlite")
install.packages("curl")

例:放射線モニタリング

例として,原子力規制委員会の東日本大震災関連情報 放射線モニタリング測定結果等をとりあげる。

まずは http://radioactivity.nsr.go.jp/data/ja/master/prefectures.json にアクセスしてみる。三重県は http://radioactivity.nsr.go.jp/data/ja/master/prefecture_24.json であることがわかる。同様にして,http://radioactivity.nsr.go.jp/data/ja/master/area_24000.json に行き,四日市市の県保健環境研究所(緯度34.991940,経度136.485000,高さ1860.000000cm)の実データが http://radioactivity.nsr.go.jp/data/ja/real/area_24000/2401_trend.json にあることがわかる。

library(jsonlite)
x = fromJSON("http://radioactivity.nsr.go.jp/data/ja/real/area_24000/2401_trend.json")

これで x$last$airF$time に最終時刻(例:"2015/04/15 16:30"),x$last$airF$value に値(例:0.062,単位μSv/h)が入る。

現在時刻 x$time を最終時刻とする10分刻みの24時間の実測値(6×24=144個)が x$day$airF$value に入る。ただし 0 は欠測値。

airF ではなく airM や単なる air の地点もある。固定型モニタリングポスト(fixed),可搬型モニタリングポスト(mobile?),それ以外(リアルタイム線量測定システム)の違いかと思われる。地点によっては地上1mの推定値が est に入る。

24時間の実測値をプロットする例(Rでは単に air とすれば,なければ airFairM を拾う):

v = x$day$air$value
v = ifelse(v == 0, NA, v)
t = seq(from=as.POSIXct(x$time)-24*3600+600, by=600, length.out=24*6)
plot(t, v, type="o", pch=16, las=1, xlab="", ylab="", ylim=range(c(0,v),na.rm=TRUE))

福島県は次のように分類されている:

上の一覧で例えば福島市については,次の三つのファイルがある。

例:Google標高API

RでJSONデータを処理する (rjson) - DiaryException の例である(若干改変した)。

library(jsonlite)
m = fromJSON("http://maps.google.com/maps/api/elevation/json?path=43.0,141.4|26.2,127.7&samples=500&sensor=false")
e = m$results$elevation
l = m$results$location$lng
plot(l, e, type="l", xlab="経度", ylab="標高(m)")

(……続く……)

参考