※後述のクエリの「大学の一覧を判定する」部分を?univ wdt:P31 wd:Q3918.から?univ wdt:P31/wdt:P279* wd:Q3918.へ変更しました.この変更により,wd:Q3918(University)の下位クラスも考慮するようになります.
東京でLODのワークショップでSPARQLのハンズオンを行った翌日,Twitterで,
といったツィートを見かけた.新内閣の顔ぶれを見ていて、最終学歴にやっぱり地方大学の人いないなあと思って、少し調べてみたら、全員東京都内の大学出身で、京大さえいないことに驚いた
— Norihiko Matsumura (@nmatsu150) 2017年8月3日
これって,ちょうどSPARQLのハンズオンでやった「Wikidataを使った大学の卒業生ランキング」の例を使ったら近いことが調べらのでは...と思ったので,試した結果を共有します.
Wikidataとは
Wikidataとは,Wikipediaと同じウィキメディア財団が運営している「誰でも編集可能なフリーの知識ベース」で,現在は,Wikipediaの各記事からも該当するデータへのリンクがされています(メニューの「ウィキデータ項目」というリンクから行けます).
この知識ベースは,https://query.wikidata.org/ で様々なクエリを実行できるサービスがあり,SPARQLというクエリ言語を用いた問い合わせが行えます.
Wikidataの解説は,こちらの記事をはじめ,Qiitaでもwikidata
で検索すると,様々な解説がされていますので,そちらをご参照ください.
ランキング用のクエリ
さて本題の**「Wikidataを使った日本の政治家の出身大学ランキング」**は,こちらとなります.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>
select ?univ ?univl (count(?s) As ?c) where{
?univ wdt:P31/wdt:P279* wd:Q3918.
?s  wdt:P27  wd:Q17;
    wdt:P106 wd:Q82955;
    wdt:P69  ?univ.
OPTIONAL{
    ?s  rdfs:label  ?name.
    FILTER(lang(?name)="ja")
    ?univ rdfs:label ?univl .
    FILTER (lang(?univl) = "ja") .
  }
}
GROUP BY ?univ ?univl
ORDER BY DESC(?c)
LIMIT 100
実行結果はこちらから確認できます.
これをWikidataのクエリサービスが用意しているグラフ可視化機能でみると下記のようになります.

予想通り,東京大学の出身者が多数ですね.
この結果から,上位10大学を抜き出すとこんな感じ(2018/7/19,14:50時点).
| 大学 | その大学出身の日本の政治家の数 | 
|---|---|
| 東京大学 | 1924 | 
| 早稲田大学 | 446 | 
| 慶應義塾大学 | 426 | 
| 京都大学 | 235 | 
| 中央大学 | 232 | 
| 大阪大学 | 185 | 
| 日本大学 | 160 | 
| 明治大学 | 144 | 
| 一橋大学 | 110 | 
| 東北大学 | 106 | 
個人的には意外だったのですが,うちの母校もTOP10に入ってました.
なお,このクエリに少し手を加えてやると,いろいろと調べることができます.
例えば,下記のようにwdt:P39  wd:Q274948;の一文を加えてやると,**「Wikidataを使った日本の総理大臣の出身大学ランキング」**となります.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>
select ?univ ?univl (count(?s) As ?c) where{
?univ wdt:P31/wdt:P279* wd:Q3918.
?s  wdt:P27  wd:Q17;
    wdt:P106 wd:Q82955;
    wdt:P39  wd:Q274948;
    wdt:P69  ?univ.
OPTIONAL{
    ?s  rdfs:label  ?name.
    FILTER(lang(?name)="ja")
    ?univ rdfs:label ?univl .
    FILTER (lang(?univl) = "ja") .
  }
}
GROUP BY ?univ ?univl
ORDER BY DESC(?c)
LIMIT 100
結果は下記の通り.
(Wikidataのサイトで見たい場合はこちら)
| 大学 | その大学出身の日本の総理大臣の数 | 
|---|---|
| 東京大学 | 30 | 
| 早稲田大学 | 6 | 
| 京都大学 | 6 | 
| スタンフォード大学 | 4 | 
| 南カリフォルニア大学 | 4 | 
| 慶應義塾大学 | 3 | 
| 上智大学 | 3 | 
| ロンドン・スクール・オブ・エコノミクス | 2 | 
| 学習院大学 | 2 | 
| 明治大学 | 2 | 
| 一橋大学 | 2 | 
| 埼玉大学 | 2 | 
| 東京工業大学 | 1 | 
| 成蹊大学 | 1 | 
| 東京帝国大学 | 1 | 
| パリ大学 | 1 | 
| 中央大学 | 1 | 
| 東京海洋大学 | 1 | 
| 大阪大学 | 1 | 
| 成城大学 | 1 | 
| 神戸大学 | 1 | 
1位が東京大学なのは変わりませんが,それ以下はずいぶん変わってきます.
なお,これらのクエリを作るのに要した時間は,合わせて15分程度.(最初のクエリは10分強で書きました)
このように,いろいろお手軽に調べることができることが,面白いところ.
注意点
上記のランキングですが,あくまでもWikidataに登録されているデータを元にしている点に,ご注意ください.
Wikidataは,Wikipediaと同じようにコミュニティベースで構築されていますので,必ずしも正しい情報が入っているとは限りません.
また,今回作成したクエリでは,1人の人が複数の大学で教育を受けていた場合,その分は重複してカウントされてしまいます.
この点は,クエリをもう少し工夫すれば何とかなるかもしれません(最終学歴でカウントするなど)が,データがどこまで入っているかにも依ります.
ただ,Wikidataでは,Wikipediaの記事になっているような項目については,相当数のデータがカバーされていますので,何気なく感じたことを,データに基づいて簡単に調べてみるときにはとても便利です.
詳しいクエリの書き方
この記事では,詳しいクエリの書き方の説明は省略していますが,ご関心のある方は,
第1回Linked Open Data (LOD) 活用ワークショップの資料置き場
https://github.com/KnowledgeGraphJapan/LODws1st
に,ワークショップで解説した資料やサンプルがありますのでご覧ください.
また,Wikipediaと同じようなクエリが使える知識ベースであるDBpediaを使ったランクキングのクエリについては,こちらの記事で解説していますので,併せてご覧ください.
なお当然ながら,プログラムからのアクセスも可のです(プログラムからはhttps://query.wikidata.org/sparql というアドレスでアクセスします)ので,ちょっと工夫すると,いろんなことに使えると思います,