背景
オープンに使える選挙データベースが(単にまだ)無いのが困ったなというところから「Code for 選挙」(github)というプロジェクトが立ち上がった。実は世界に目を移すとデータ化の流れは存在しているそうだ。
複数の団体が合流してできている Popolo という政治関連のデータモデル仕様があり、事実上の国際標準になっている。
Open Civic Data での活動成果の popolo 仕様関連ツール類が充実している。Sunlight Foundation もこれらのツールを使っているそうだ。
mySociety という団体が運営する Every Politician というデータベースプロジェクトでも、Popolo 仕様を使ってデータをメンテナンスしている。Every Politician は現状、世界中の国のトップレベルの議会についてのみ取り扱っている。次の48回衆議院議員選挙は、日本の国のトップレベルの議会なので、Every Politician としてもデータ化するよい機会ではある。46回衆議院議員は登録されているので、眺めてみると面白い。本家は長大な json なので、エッセンスを抜粋したものを眺めると掴みやすい。
Popolo 仕様
さてその Popolo 仕様だけれども、仕様自体はコンパクトに記述されているけれど、背景の説明が無いので補足がいるだろう。こんな順番で定義されている。
- 最初はクラス定義のみがされている(ここでは popolo 語彙と呼ぶ)
- それは JSON でシリアライズして表現できる(ここでは popolo json と呼ぶ)
other_names
のように若干変換規則が追加されていることがある - popolo json は JSON-Schema で構造検査できるように準備されている。
- RDF へのシリアライズは、popolo 語彙と既存の各種標準語彙とのマッピングを行う。
- マッピング後の語彙で RDF turtle でシリアライズして表現できる(popolo RDF と呼ぶ)
- popolo RDF の別表現として RDF json-ld での表現方法もできる
- 上記の流れが混然一体となって仕様に書かれている ^^
EveryPolitician は WikiMedia としてGrantされていて、wikidata と相互に連携しているらしい。
- https://www.wikidata.org/wiki/Wikidata:EveryPolitician
- http://docs.everypolitician.org/data_summary.html の "IDs to other data sets, including Wikidata"
さらに補足:
- 仕様改定も随時行われているようなので、記述が更新されていない部分がたまにあるのは、ご愛敬。
- Database としての popolo json dump 形式は互換性 の部分を参照するべし、のように見える。クラス定義まではされていない様子。
- open civic data に、実務的なノウハウがあったりするので、探してみると意外と見つかったりする。
- 実は Popolo は選挙よりも選挙結果である体制をモデル化することが主軸だったので、議論がある。例えば Voting Information Project という選挙に特化したデータモデルのプロジェクトもあるので、必要に応じて使い分ける手もある。
- EveryPolitician では、おそらく入力の簡単のため、CSV 形式を使ってデータを揃えて、json に変換している模様。ID を最初に採番して、結合できるように準備していると思われる。
- ID の採番方法は OCDID = Open Civic Data ID が参考になる。
EveryPolitician
everypolitician_legacy
というキーが見かけられるように、移行している様子。基本的には wikidata との連携を強めようとしているようだ。
wikidata からデータを膨らませている部分が相当ある。まだ載せきれていない部分は主に「政治家自体の登録」といった単純なものと、「議会と議員の関係性」といった、国ごとの事情が絡むものに大きく分かれる。
選挙どうする
選挙のデータを popolo に入れる際には Event を使って、次のようにするのでいいんじゃなかろうか。
-
parent event
で「第48回衆議院議員選挙」と「第48回衆議院議員選挙 東京1区」で紐づける。 -
attendee
を候補者と扱って紐づける。(ここは若干特殊な意味づけかもしれない) - 仕様上 Event と Area が紐づいていないのがイマイチな点
あるいは proposal draft を許すなら、Election クラスを使うか。