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