Linked Open Data を使って市区町村コード表を作ってみた
統計 LOD(Linked Open Data) の「統計に用いる標準地域コード」を利用した市区町村コード表です。
調べたい都道府県をクリックすると、その都道府県の市区町村コードの一覧が表示されます。
2016年3月31日から、統計 LOD で「統計に用いる標準地域コード」が公開されています。統計 LOD は、最高ランク(5スター)でデータを提供するというのが謳い文句ですが、レスポンスが悪くて直接それを使うのは厳しいので、データを一括で落としてきて使うようにしました。履歴付きの市区町村データやそのデータの取得の仕方については、GitHub の NAreaCode の方にソースコードも含めて公開しているので、興味があればそちらを参考にしてください。
統計 LOD での市区町村コードの取得の仕方
統計 LOD の検索用画面にアクセスします。
検索用画面: http://data.e-stat.go.jp/lod/sparql/
公式版では、試行版と違ってデータセットが事前に定義されていないので以下のように最初に PREFIX(定義)を書いてやる必要があります。
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> PREFIX org:<http://www.w3.org/ns/org#> PREFIX dcterms:<http://purl.org/dc/terms/> PREFIX sacs:<http://data.e-stat.go.jp/lod/terms/sacs#> PREFIX sac:<http://data.e-stat.go.jp/lod/sac/> PREFIX sace:<http://data.e-stat.go.jp/lod/sace/> PREFIX sacr:<http://data.e-stat.go.jp/lod/sacr/> PREFIX owl:<http://www.w3.org/2002/07/owl#>
前橋市の現行標準地域コードを使って現在有効な期間つき標準地域コードを照会してみます。
#PREFIXは省略。以下同じ。
SELECT * WHERE {sac:C10201 ?p ?o.}
期限付きコードが C10201-20090505であることがわかるので、以下でその期間つき標準地域コードを照会してみます。
SELECT * WHERE {sac:C10201-20090505 ?p ?o.}
以下の結果がえられるます。
--------------------------------------------------------------------------------------------------- | p | o | =================================================================================================== | sacs:previousCode | sac:C10201-20090401 | | rdf:type | sacs:StandardAreaCode | | rdfs:label | "前橋市"@ja | | rdfs:label | "Maebashi-shi"@en | | rdfs:label | "まえばしし"@ja-hrkt | | sacs:previousMunicipality | sac:C10303-20090505 | | dcterms:issued | "2009-05-05"^^<http://www.w3.org/2001/XMLSchema#date> | | dcterms:isPartOf | sac:C10000-19700401 | | sacs:administrativeClass | sacs:CoreCity | | org:resultedFrom | sace:C5100 | | dcterms:identifier | "10201" | | <http://imi.ipa.go.jp/ns/core/rdf#市区町村> | "前橋市"@ja | | <http://imi.ipa.go.jp/ns/core/rdf#都道府県> | "群馬県"@ja | | sacs:checkDigit | "6" | ---------------------------------------------------------------------------------------------------
2009-05-05に何かがあったことが分かるので、それを調べるために変更事由を照会します。
SELECT * WHERE {sace:C5100 ?p ?o.}
以下の結果になり、富士見村が前橋市に編入合併したことがわかります。
--------------------------------------------------------------------------------------------------------- | p | o | ========================================================================================================= | rdf:type | sacs:CodeChangeEvent | | org:resultingOrganization | sac:C10201-20090505 | | org:resultingOrganization | sac:C10303-20090505 | | dcterms:description | "富士見村(10303)が前橋市(10201)に編入"@ja | | dcterms:description | "Fujimi-mura(10303) in Seta-gun is absorbed into Maebashi-shi(10201)."@en | | org:originalOrganization | sac:C10201-20090401 | | org:originalOrganization | sac:C10303-19981101 | | dcterms:identifier | "5100" | | sacs:reasonForChange | sacr:absorption | | dcterms:date | "2009-05-05"^^<http://www.w3.org/2001/XMLSchema#date> | ---------------------------------------------------------------------------------------------------------
埼玉県の現在の市町村コードの一覧を取得するコードで、以前試行版で使っていたものを「統計 LOD」用に修正したものです。答えが返ってくるまで1分ぐらいかかります。
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> PREFIX org:<http://www.w3.org/ns/org#> PREFIX dcterms:<http://purl.org/dc/terms/> PREFIX sacs:<http://data.e-stat.go.jp/lod/terms/sacs#> PREFIX sac:<http://data.e-stat.go.jp/lod/sac/> PREFIX sace:<http://data.e-stat.go.jp/lod/sace/> PREFIX sacr:<http://data.e-stat.go.jp/lod/sacr/> SELECT ?s ?name ?kana ?cd ?ad WHERE { GRAPH ?g {?s ?p ?o . ?s rdf:type sacs:CurrentStandardAreaCode. { ?o dcterms:isPartOf sac:C11000-19700401. }UNION{ ?o dcterms:isPartOf ?district. ?district dcterms:isPartOf sac:C11000-19700401. OPTIONAL {?district dcterms:valid ?valid.} } ?o sacs:administrativeClass ?ad. ?o rdfs:label ?name. ?o rdfs:label ?kana. ?o sacs:checkDigit ?cd. } FILTER( lang(?name) = "ja") FILTER( lang(?kana) = "ja-hrkt") FILTER(?ad = sacs:DesignatedCity || ?ad = sacs:CoreCity || ?ad = sacs:SpecialCity || ?ad = sacs:SpecialWard || ?ad = sacs:Ward || ?ad = sacs:City || ?ad = sacs:Town || ?ad = sacs:Village) FILTER (!BOUND(?valid)) }
次世代統計利用システムでの試行版での市町村コードの取得
そのうち停止されると思いますが、現時点では試行版の方も動いているので試すことができます。こちらだと県別の市区町村コードの一覧1秒ぐらいで取得できます。
試行版の検索用画面: http://statdb.nstac.go.jp/lod/sparql
市町村コードを取得するSPARQLについての解説は、creativeweb.jpの市区町村コード情報がLODで公開されたので使ってみたにあります。以前使用していたコードは以下のとおりで、C11000は埼玉県の場合で東京都の場合はC13000になります。
SELECT ?s ?name ?kana ?cd ?ad WHERE { GRAPH ?g { ?s ?p ?o . ?s rdf:type sacs:CurrentStandardAreaCode. { ?o dcterms:isPartOf sac:C11000-19700401. }UNION{ ?o dcterms:isPartOf ?district. ?district dcterms:isPartOf sac:C11000-19700401. OPTIONAL {?district dcterms:valid ?valid.} } ?o sacs:administrativeClass ?ad. ?o rdfs:label ?name. ?o rdfs:label ?kana. ?o sacs:checkDigit ?cd. } FILTER( lang(?name) = "ja") FILTER( lang(?kana) = "ja-hrkt") FILTER(?ad = sacs:DesignatedCity || ?ad = sacs:CoreCity || ?ad = sacs:SpecialCity || ?ad = sacs:SpecialWard || ?ad = sacs:Ward || ?ad = sacs:City || ?ad = sacs:Town || ?ad = sacs:Village) FILTER (!BOUND(?valid)) }