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

27
~AITCクラウドテクノロジー活用部会~ 気象庁XMLのSPARQL APIを 利用してデータを俯瞰しよう - SPARQLとRによる可視化 - 2014/04/22 菅井康之

description

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

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

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

~AITCクラウドテクノロジー活用部会~

気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう

- SPARQLとRによる可視化 -

2014/04/22菅井康之

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

• 気象庁XMLのデータをAPIで公開しているけど、ただ公開するだけじゃなくて、もう少し特色を出して行きたいと思う今日この頃• せっかくSPARQLのエンドポイントも公開しているので、通常のAPIでは簡単に出来ない、統計情報や俯瞰したデータを可視化し、公開してはどうだろう?

というわけで、今回はSPARQLのクエリ発行から可視化までを

行ってみます

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

3Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ1 季節や月によるデータの傾向を見たい

3

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

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

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

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)

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ1 季節や月によるデータの傾向を見たい

• SPARQLクエリの発行、結果取得をRで行うには?→RのSPARQLライブラリを利用します• Rで以下のコマンドを実行し、ライブラリをインストール&ロードします

> install.packages("SPARQL")> library(SPARQL)

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

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")

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ1 季節や月によるデータの傾向を見たい

• 取得結果はこんな感じ

> View(result$result)

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

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,]

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

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)

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

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

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ1 季節や月によるデータの傾向を見たい

• こんな感じで可視化出来ました• これをフィルタリングしていくと・・・

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ1 季節や月によるデータの傾向を見たい

• 気象警報・注意報は夏場に多かったり

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ1 季節や月によるデータの傾向を見たい

• 竜巻注意情報も夏場に多い事が分かったりします

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

15Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ2 気象台や情報毎の細かいデータの傾向を見たい

15

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ2 気象台や情報毎の細かいデータの傾向を見たい

-大体の流れ-•SPARQLクエリがちょっと違うくらいで、やってる事は同じ

ちなみに、再現性が大事と教わったので、このスライドは細かく書くようにしています

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

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)

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

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")

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

• 取得結果はこんな感じ

テーマ2 気象台や情報毎の細かいデータの傾向を見たい

> View(result$result)

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

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)

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

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

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ2 気象台や情報毎の細かいデータの傾向を見たい

• 高温注意情報が出たり、4月にも気象警報・注意報が夏並みに出てたりなど。。

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

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

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ2 気象台や情報毎の細かいデータの傾向を見たい

• やはり沖縄が一番多く、また石垣島では5月から発令されているなど。。

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

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

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

テーマ2 気象台や情報毎の細かいデータの傾向を見たい

• 9月の岐阜が最も多く、福島では4月に一度発令されているなど。。。

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

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

•Let’s have Fun!! :)