Contenu connexe
Similaire à 気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化- (20)
Plus de Yasuyuki Sugai (17)
気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-
- 2. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• 気象庁XMLのデータをAPIで公開しているけ
ど、ただ公開するだけじゃなくて、もう少し
特色を出して行きたいと思う今日この頃
• せっかくSPARQLのエンドポイントも公開し
ているので、通常のAPIでは簡単に出来な
い、統計情報や俯瞰したデータを可視化
し、公開してはどうだろう?
というわけで、今回はSPARQLの
クエリ発行から可視化までを
行ってみます
- 3. 3Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
3
- 4. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
-大体の流れ-
•月毎に気象庁XMLの情報を集計する
SPARQLクエリを発行
•SPARQLの結果をRで読み込み、若干の補正
•種類が多いので、可視化部分はrChartsを
利用してインタラクティブに
※rChartsについては下記スライドを参照ください
http://www.slideshare.net/yasuyukisugai/r-charts
- 5. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• SPARQLクエリはこんな感じにしました
※日付として処理したいので、末尾を1日固定にしています
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX atom: <http://www.w3.org/2005/Atom#>
PREFIX jma: <http://cloud.projectla.jp/jma/>
PREFIX area: <http://cloud.projectla.jp/jma/area#>
PREFIX link2: <http://cloud.projectla.jp/jma/link2/>
SELECT ?title ?mon (COUNT(?id) as ?c)
WHERE {
?id atom:title ?title .
?id atom:updated ?updated
} GROUP BY ?title
(CONCAT(STR(YEAR(xsd:dateTime(?updated))), '/',
STR(MONTH(xsd:dateTime(?updated))), '/01') AS ?mon)
- 6. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• SPARQLクエリの発行、結果取得をRで行
うには?→RのSPARQLライブラリを利用しま
す
• Rで以下のコマンドを実行し、ライブラリを
インストール&ロードします
> install.packages("SPARQL")
> library(SPARQL)
- 7. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• RでSPARQLクエリを発行し、結果を取得
します
• デフォルトのXML形式だと日本語が文字
化けするので、CSV形式で取得しています
• →Fusekiと相性が悪い??
• →XMLにUTF-8が付いてないのが原因
> endpoint="http://api.aitc.jp/ds/sparql"
> query="前のスライドのクエリを見てね!"
> result<-SPARQL(url=endpoint, query=query,
extra=list(output="csv"), format="csv")
- 8. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• 取得結果はこんな感じ
> View(result$result)
- 9. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• データをソートしたり、不要なデータを除去
したり・・・
※2012/12のデータは、気象庁XMLの公開が
開始された月のため、1ヶ月に満たない
データしか存在しません
そのため、今回の対象データからは除去
しています
> result2<-result$result
> result2<-transform(result2, date=as.Date(mon))
> result2<-result2[order(result2$title, result2$date),]
> result2<-result2[as.Date("2013/01/01")<=result2$date,]
- 10. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• 可視化部分はrChartsを利用します
• Rで以下のコマンドを実行し、ライブラリを
インストール&ロードします
> install.packages("devtools")
> library(devtools)
> install_github("rCharts", "ramnathv")
> library(rCharts)
- 11. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• 今回はあまり凝った事をしないので、
HighChartsで単純に可視化します
※rChartsは日付処理がややめんどい
> result2 = transform(result2 ,
date2 = as.numeric(as.POSIXct(date))*1000)
> p2<-hPlot(c date2, data=result2, group="title")
> p2$xAxis(type = 'datetime', labels = list(
format = '{value:%Y-%m}'
))
> p2$set(width=1200, height=800)
> p2
- 12. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• こんな感じで可視化出来ました
• これをフィルタリングしていくと・・・
- 13. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• 気象警報・注意報は夏場に多かったり
- 14. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ1 季節や月によるデータの傾向を見たい
• 竜巻注意情報も夏場に多い事が分かっ
たりします
- 15. 15Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
15
- 16. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ2 気象台や情報毎の細かいデータの傾
向を見たい
-大体の流れ-
•SPARQLクエリがちょっと違うくらいで、やって
る事は同じ
ちなみに、再現性が大事と教わったので、この
スライドは細かく書くようにしています
- 17. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• SPARQLクエリはこんな感じで
※authorとname(リテラル)を追加しただけです・・・はい・・・
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX atom: <http://www.w3.org/2005/Atom#>
PREFIX jma: <http://cloud.projectla.jp/jma/>
PREFIX area: <http://cloud.projectla.jp/jma/area#>
PREFIX link2: <http://cloud.projectla.jp/jma/link2/>
SELECT ?title ?name ?mon (COUNT(?id) as ?c) WHERE {
?id atom:title ?title .
?id atom:updated ?updated .
?id atom:author ?author .
?author link2:name ?name
} GROUP BY ?title ?name
(CONCAT(STR(YEAR(xsd:dateTime(?updated))), '/',
STR(MONTH(xsd:dateTime(?updated))), '/01') AS ?mon)
- 18. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• 前回同様に、RでSPARQLクエリを発行
し、結果を取得します
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
> endpoint="http://api.aitc.jp/ds/sparql"
> query="前のスライドのクエリを見てね!"
> result<-SPARQL(url=endpoint, query=query,
extra=list(output="csv"), format="csv")
- 19. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• 取得結果はこんな感じ
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
> View(result$result)
- 20. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• データをソートしたり、不要なデータを除去
したり・・・
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
> result2_2<-result$result
> result2_2<-transform(result2_2, date=as.Date(mon))
> result2_2<-result2_2[order(result2_2$name,
result2_2$title, result2_2$date),]
> result2_2<-result2_2[as.Date("2013/01/01")<=result2_2$date,]
> result2_2 = transform(result2_2 ,
date2 = as.numeric(as.POSIXct(date))*1000)
- 21. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• 試しに山口県の気象台の気象情報を可
視化してみます
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
> result2_2_yamaguchi<- result2_2[result2_2$name=="下関地方気象台", ]
> p2<-hPlot(c date2, data=result2_2_yamaguchi, group="title")
> p2$xAxis(type = 'datetime', labels = list(
format = '{value:%Y-%m}'
))
> p2$set(width=1200, height=800)
> p2
- 22. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
• 高温注意情報が出たり、4月にも気象警
報・注意報が夏並みに出てたりなど。。
- 23. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• 高温注意情報の頻度を気象台毎に見て
みます
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
> result2_2_kouon<-result2_2[result2_2$title=="府県高温注意情報", ]
> p2<-hPlot(c date2, data=result2_2_kouon,
group="name", type = "scatter")
> p2$xAxis(type = 'datetime', labels = list(
format = '{value:%Y-%m-%d}'
))
> p2$set(width=1200, height=600)
> p2
- 24. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
• やはり沖縄が一番多く、また石垣島では
5月から発令されているなど。。
- 25. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
• 記録的短時間大雨情報の頻度を気象
台毎に見てみます
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
> result2_2_kiroku<- result2_2[result2_2$title=="記録的短時間大雨情報", ]
> p2<-hPlot(c date2, data=result2_2_kiroku,
group="name", type = "scatter")
> p2$xAxis(type = 'datetime', labels = list(
format = '{value:%Y-%m-%d}'
))
> p2$set(width=1200, height=600)
> p2
- 26. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
テーマ2 気象台や情報毎の細かいデータの
傾向を見たい
• 9月の岐阜が最も多く、福島では4月に
一度発令されているなど。。。
- 27. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
•Let’s have Fun!! :)