福野泰介の一日一創 - create every day

600万円、これは世界一高い参議院選挙立候補に必要な供託金(市議選は30万円)。
第25回参議院選挙の投票日は7/21。 前回投票日の2016年7月10日の投票所と人の流れをTellusで見てみました。


Tellus ver 1.1 によって追加された、位置情報データ「Profile Passport」を使って、投票日7/10の10時時点(日本時間はUTC+9時間)を品川区の5つ星オープンデータ、投票所と組み合わせて表示した図。 もう一歩分解能がほしいところですが、投票所への人の流れがわかるかも?通常の日曜日との比較なども可能です。


鯖江市の選挙ポスター掲示場、オープンデータと宇宙データ、だいち(ALOS)のセンサーAVRIR-2による植物活性度を重ねたもの。鯖江市の東側、自然豊かな場所にあることが一目瞭然。


Tellusを使った分析は、Jupyter Notebookや、後継サービスJupyter Lab上のPythonで行います。
5つ星オープンデータを集約する opendata.cc のAPI、SPARQLを呼び出し、GeoJSONにしてpostするとTellus上の「取り込みマップ」として表示できます。

API_TOKEN = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # Tellus マイページ、APIアクセス設定で生成したトークン import json, requests, urllib.parse URL = "https://api.tellusxdp.com/v1/geojson-files" def get(id = ""): return requests.get(URL + "/" + id , headers = { "Authorization": "Bearer " + API_TOKEN }).json() def post(data): headers = { "Authorization": "Bearer " + API_TOKEN, "Content-Type": "application/json" } return requests.post(URL, headers = headers, json = data).json() def delete(id): return requests.delete(URL + "/" + id, headers = { "Authorization": "Bearer " + API_TOKEN }).json() SPARQL_ENDPOINT = "https://sparql.opendata.cc/data/sparql?output=json&query=" def sparql(query): url = SPARQL_ENDPOINT + urllib.parse.quote(query) return requests.get(url).json() def toGeoJSON(res): fs = [] for d in res["results"]["bindings"]: f = { "type": "Feature", "geometry": { "type": "Point", "coordinates": [ d["lng"]["value"], d["lat"]["value"] ] } } if "name" in d: f["properties"] = { "name": d["name"]["value"] } fs.append(f) return { "type": "FeatureCollection", "features": fs } def addLayer(rdftype, layername): gj = toGeoJSON(sparql(""" select ?uri ?name ?lat ?lng { ?uri <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <""" + rdftype + """>. optional { ?uri <http://www.w3.org/2000/01/rdf-schema#label> ?name. } ?uri <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat. ?uri <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?lng. } """)) #print(gj) post({ "originalName": layername, "transparency": 1, "windowNumber": 1, "data": gj }) addLayer("http://odp.jig.jp/odp/1.0#Polls", "odp 投票所") addLayer("http://odp.jig.jp/odp/1.0#PosterPlace", "odp 選挙ポスター掲示場") print("ok")

rdftypeに設定するデータ種別と対応地区は「5つ星オープンデータ対応一覧表」をご参照ください。


Tellus x オープンデータ、いろいろ遊んでみましょう!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像