ども、k69 です。
何か調べものをするときにフリーの百科事典であるWikipediaはとても便利ですが、プログラムでデータ分析をする場合にはHTMLではなくAPIでデータが取得できると便利です。
そんなときに役に立つのがWikidataです。Wikidataとは
ウィキデータは、人間とコンピューターの双方が同等に参照・編集できるフリーかつオープンな知識データベースです。"
で、Wikipediaのメニューからもアクセスできます。
そんなWikidataから curl で Wikidataから欲しいデータを JSON で取得してみました。
対象読者
前提条件
- curl と jq がインストールされていること
- Windows端末を使用しています
手順
ここでは品川区の人口を取得します。
Wikidataで調べる
1. 欲しいデータをWikidataで"品川区"を検索すると、下記の表示がされるのでQXXXXXX(赤下線部)を覚えておきます。
2. curl で検索します。
覚えておいたQXXXXXXを下記のURLでcurl実行します。
:warning: 拡張子が**.json**であることに注意!
https://www.wikidata.org/wiki/Special:EntityData/QXXXXXX.json
curl -sLH 'Accept: application/json' http://www.wikidata.org/entity/Q233495 | jq . > shinagawa.json
※ @yayamamo さん、ご指摘ありがとうございました!
3. 欲しいデータ(品川区の人口)を探す
Wikidataの画面で下記を確認する
3-1.- 人口のリンクを確認すると"P1082"となっている
- 人口が400,485人となっている
3-2. jsonから欲しいデータ(品川区の人口)を探す
~~ 省略 ~~
"P1082": [
{
"mainsnak": {
"snaktype": "value",
"property": "P1082",
"datavalue": {
"value": {
"amount": "+400485", ★ 品川区の人口はこれ!!
"unit": "1"
},
"type": "quantity"
},
"datatype": "quantity"
},
"type": "statement",
"qualifiers": {
"P585": [
{
"snaktype": "value",
"property": "P585",
~~ 省略 ~~
3-2. jsonから欲しいデータ(品川区の人口)を取り出す。
あとは、Pythonなどで欲しいデータを取り出せばOKです。
import json
f = open('C:/tmp/shinagawa.json', 'r',encoding="utf-8")
json_dict = json.load(f)
amount = json_dict["entities"]["Q233495"]["claims"]["P1082"][0]["mainsnak"]["datavalue"]["value"]["amount"]
print(amount)
※ 8/16 追加
※ もう眠いので例は別途書きます (-_-)zzz
まとめ
品川区の人口だけを取得するなら、WikipediaやWikidataのページを見ればよいだけですが、もっと広い範囲(たとえば日本全国の区のデータ)を調べたい場合などはAPIを取得するプログラムを記述したほうがはるかに効率的ですし、他のデータと組み合わせることができるなどいろいろなことができそうです。
※ 日本の人口データであればDATA GO JPで探せばありそうなものですが ('ω')ノ
あとは、自前(プライベート)知識データベースの作り方や、OpenRefineとの連携なども試してみたいところだ。
参考URL
- LOD(Linked Open Data)の基礎技術
https://github.com/KnowledgeGraphJapan/LODws1st/blob/master/LOD-WS-tokyo-Overview-20170803.pdf - OpenRefineを用いてWikidataの項目と照合する
https://qiita.com/yayamamo/items/eade3e5788e6f359bce7#照合したデータベースから値を取得する