RでHTMLのデータを使ってみよう〜非オープンデータ化を突っきれ〜(2)
前回はRでWeb上でHTMLのTABLEタグで書かれたデータを扱う方法を書きました。
色々な疑問があるかと思います。
まず、「非オープンデータ化」って見られるということは、オープンデータなんじゃないの?と。その通りなのですが、オープンデータを狭義にいえば、再利用可能な状態に置いておくという意味もございます、そういう観点からいうと、HTMLのTABLEタグで存在するデータは、再利用しづらいので、厳密なオープンデータではないと言えます。そういうデータを使えるようにという意味でのタイトルでした。
もう一つ、そもそも結構面倒だったので、これなら、カットアンドペーストしてきた方が速いのではないか?と。その通りかもしれませんが、世の中には形式がそのままで毎日更新されるHTMLのTABLEタグで書かれたデータというものが存在します。前回扱ったデータもそうなのです。
では、今回もRはインストールされている、"XML"と"ggplot2"というパッケージがインストールされていることを前提に進めます。早速、昨日のようにアクセスしてみましょう。
> library("XML")
> library("ggplot2")
> today <- readHTMLTable('http://www.jma.go.jp/jp/amedas_h/today-44132.html?areaCode=000&groupCode=30')$tbl_list[2:25,]
> today$時刻<-as.numeric(as.character(today$時刻))
> today$気温<-as.numeric(as.character(today$気温))
> today$降水量<-as.numeric(as.character(today$降水量))
> today$風向<-as.character(today$風向)
> today$風速<-as.numeric(as.character(today$風速))
> today$日照時間<-as.numeric(as.character(today$日照時間))
> today$積雪深<-as.numeric(as.character(today$積雪深))
> today$湿度<-as.numeric(as.character(today$湿度))
> today$気圧<-as.numeric(as.character(today$気圧))
> today
時刻 気温 降水量 風向 風速 日照時間 積雪深 湿度 気圧
2 1 4.2 0.0 東北東 2.6 NA 0 64 1017.8
3 2 3.9 0.0 北東 2.8 NA 0 67 1017.6
4 3 4.4 0.0 北北東 2.5 NA 0 67 1017.2
5 4 3.8 0.0 北 1.6 0 0 70 1016.0
6 5 3.6 0.0 北北西 2.8 0 0 72 1016.3
7 6 3.5 0.0 北北東 1.7 0 0 72 1016.5
8 7 3.3 0.0 北北東 2.3 0 0 76 1016.5
9 8 2.7 0.0 北北東 2.1 0 0 86 1016.1
10 9 2.3 0.5 北北東 1.4 0 0 92 1016.3
11 10 1.6 1.5 北西 2.7 0 0 94 1016.1
12 11 1.3 1.5 北北西 2.7 0 0 95 1015.0
13 12 1.6 1.0 北西 3.1 0 0 95 1013.7
14 13 NA NA NA NA NA NA NA
15 14 NA NA NA NA NA NA NA
16 15 NA NA NA NA NA NA NA
17 16 NA NA NA NA NA NA NA
18 17 NA NA NA NA NA NA NA
19 18 NA NA NA NA NA NA NA
20 19 NA NA NA NA NA NA NA
21 20 NA NA NA NA NA NA NA
22 21 NA NA NA NA NA NA NA
23 22 NA NA NA NA NA NA NA
24 23 NA NA NA NA NA NA NA
25 24 NA NA NA NA NA NA NA
ほら、今日の情報がアクセスできたでしょう。ではggplot2を用いて、気温の移り変わりを折れ線グラフで見てみましょう。
> p <- ggplot(today, aes(x=時刻, y=気温))+geom_line()
> p
警告メッセージ:
Removed 12 rows containing missing values (geom_path).
>
まぁ、警告メッセージが出されていますが、まだ13時以降のデータが入っていないからでしょう。と、安心していてはいけません。グラフ上の日本語が化けている!実はtheme_bw()関数のbase_familyでどの文字スタイルを使うかを指定してあげれば解決します。例えば、小職はMacOS環境なので、"HiraKakuProN-W3"というフォントを指定します。
> p <- ggplot(today, aes(x=時刻, y=気温))+geom_line()+theme_bw(base_family = "HiraKakuProN-W3")
> p
警告メッセージ:
Removed 12 rows containing missing values (geom_path).
>
同様に、警告メッセージが出ますが13時以降の値が出ていないだけなので気にしません。無事、日本語を出すことができました。これは東京の気温を表していますが、それにしても今日は寒いですね。
次に、x軸に時刻、y軸に風速、風向を色で表すグラフを作ってみましょう。まぁ、12時までしかデータがないので、x軸を12時までにするようにしてみましょう。
> p <- ggplot(today[1:12,], aes(x=時刻, y=風速, colour=風向))+geom_point()+theme_bw(base_family = "HiraKakuProN-W3")
> p
>
あらま、強い時には2.5m〜3mの風が吹いていて、だいたい北あたりから風が吹いていることが分かりますね。
ということでどうせなので、getwd()と打ち込んで表示されるディレクトリ(フォルダ)へ下記をエディタ(テキストエディタ、メモ帳)で書き「weather.R」という名前で保存しましょう。
library("XML")
library("ggplot2")
library("gridExtra")
today <- readHTMLTable('http://www.jma.go.jp/jp/amedas_h/today-44132.html?areaCode=000&groupCode=30')$tbl_list[2:25,]
today$時刻<-as.numeric(as.character(today$時刻))
today$気温<-as.numeric(as.character(today$気温))
today$降水量<-as.numeric(as.character(today$降水量))
today$風向<-as.character(today$風向)
today$風速<-as.numeric(as.character(today$風速))
today$日照時間<-as.numeric(as.character(today$日照時間))
today$積雪深<-as.numeric(as.character(today$積雪深))
today$湿度<-as.numeric(as.character(today$湿度))
today$気圧<-as.numeric(as.character(today$気圧))
p1 <- ggplot(today, aes(x=時刻, y=気温))+geom_line()+theme_bw(base_family = "HiraKakuProN-W3")
p2 <- ggplot(today, aes(x=時刻, y=風速, colour=風向))+geom_point()+theme_bw(base_family = "HiraKakuProN-W3")
p3 <- ggplot(today, aes(x=時刻, y=日照時間))+geom_line()+theme_bw(base_family = "HiraKakuProN-W3")
p4 <- ggplot(today, aes(x=時刻, y=積雪深))+geom_line()+theme_bw(base_family = "HiraKakuProN-W3")
p5 <- ggplot(today, aes(x=時刻, y=湿度))+geom_line()+theme_bw(base_family = "HiraKakuProN-W3")
p6 <- ggplot(today, aes(x=時刻, y=気圧))+geom_line()+theme_bw(base_family = "HiraKakuProN-W3")
grid.arrange(p1,p2,p3,p4,p5,p6,nrow = 3)
そうしておけば、Rを立ち上げて、次のように打ち込むだけで、今日の気温、風、日照時間、積雪深、湿度、気圧の変化を表すグラフを一覧することができます。
> source("weather.R")
警告メッセージ:
1: Removed 11 rows containing missing values (geom_path).
2: Removed 11 rows containing missing values (geom_point).
3: Removed 14 rows containing missing values (geom_path).
4: Removed 11 rows containing missing values (geom_path).
5: Removed 11 rows containing missing values (geom_path).
6: Removed 11 rows containing missing values (geom_path).
>
つまり、Rを立ち上げて、「source(weather.R)」と打ち込むだけで、いつでも、天気状況を調べられるようになりました。
こんな感じで、データサイエンスで遊んでみるのも楽しいのではないでしょうか。