気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-

3,057 views

Published on

2014年4月のAITCクラウドテクノロジー活用部会のネタです

Published in: Technology
0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,057
On SlideShare
0
From Embeds
0
Number of Embeds
146
Actions
Shares
0
Downloads
33
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-

  1. 1. ~AITCクラウドテクノロジー活用部会~ 気象庁XMLのSPARQL APIを 利用してデータを俯瞰しよう - SPARQLとRによる可視化 - 2014/04/22 菅井康之
  2. 2. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. • 気象庁XMLのデータをAPIで公開しているけ ど、ただ公開するだけじゃなくて、もう少し 特色を出して行きたいと思う今日この頃 • せっかくSPARQLのエンドポイントも公開し ているので、通常のAPIでは簡単に出来な い、統計情報や俯瞰したデータを可視化 し、公開してはどうだろう? というわけで、今回はSPARQLの クエリ発行から可視化までを 行ってみます
  3. 3. 3Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ1 季節や月によるデータの傾向を見たい 3
  4. 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. 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. 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. 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. 8. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ1 季節や月によるデータの傾向を見たい • 取得結果はこんな感じ > View(result$result)
  9. 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. 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. 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. 12. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ1 季節や月によるデータの傾向を見たい • こんな感じで可視化出来ました • これをフィルタリングしていくと・・・
  13. 13. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ1 季節や月によるデータの傾向を見たい • 気象警報・注意報は夏場に多かったり
  14. 14. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ1 季節や月によるデータの傾向を見たい • 竜巻注意情報も夏場に多い事が分かっ たりします
  15. 15. 15Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ2 気象台や情報毎の細かいデータの 傾向を見たい 15
  16. 16. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ2 気象台や情報毎の細かいデータの傾 向を見たい -大体の流れ- •SPARQLクエリがちょっと違うくらいで、やって る事は同じ ちなみに、再現性が大事と教わったので、この スライドは細かく書くようにしています
  17. 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. 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. 19. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. • 取得結果はこんな感じ テーマ2 気象台や情報毎の細かいデータの 傾向を見たい > View(result$result)
  20. 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. 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. 22. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ2 気象台や情報毎の細かいデータの 傾向を見たい • 高温注意情報が出たり、4月にも気象警 報・注意報が夏並みに出てたりなど。。
  23. 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. 24. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ2 気象台や情報毎の細かいデータの 傾向を見たい • やはり沖縄が一番多く、また石垣島では 5月から発令されているなど。。
  25. 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. 26. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. テーマ2 気象台や情報毎の細かいデータの 傾向を見たい • 9月の岐阜が最も多く、福島では4月に 一度発令されているなど。。。
  27. 27. Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. •Let’s have Fun!! :)

×