Cover Image for Wikidataから欲しいデータをjsonで取得する方法
Wikidataから欲しいデータをjsonで取得する方法

image.png

ども、k69 です。

何か調べものをするときにフリーの百科事典であるWikipediaはとても便利ですが、プログラムでデータ分析をする場合にはHTMLではなくAPIでデータが取得できると便利です。

そんなときに役に立つのがWikidataです。Wikidataとは

ウィキデータは、人間とコンピューターの双方が同等に参照・編集できるフリーかつオープンな知識データベースです。"

で、Wikipediaのメニューからもアクセスできます。

image.png

そんなWikidataから curl で Wikidataから欲しいデータを JSON で取得してみました。

対象読者

  • WikidataからAPIでデータを取得したい人
  • 頑張ってスクレイピングしている人(もしかしたらWikidataから欲しいデータをとれるかも)

前提条件

  • curl と jq がインストールされていること
  • Windows端末を使用しています

手順

ここでは品川区の人口を取得します。

1. 欲しいデータをWikidataで調べる

Wikidataで"品川区"を検索すると、下記の表示がされるのでQXXXXXX(赤下線部)を覚えておきます。

image.png

2. curl で検索します。

覚えておいたQXXXXXXを下記のURLでcurl実行します。
:warning: 拡張子が**.json**であることに注意!

https://www.wikidata.org/wiki/Special:EntityData/QXXXXXX.json

品川区(Q233495)の例
curl -sLH 'Accept: application/json' http://www.wikidata.org/entity/Q233495 | jq . > shinagawa.json

※ @yayamamo さん、ご指摘ありがとうございました!

3. 欲しいデータ(品川区の人口)を探す

3-1. Wikidataの画面で下記を確認する

  • 人口のリンクを確認すると"P1082"となっている
  • 人口が400,485人となっている

image.png

3-2. jsonから欲しいデータ(品川区の人口)を探す

shinagawa.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

まとめ

品川区の人口だけを取得するなら、WikipediaWikidataのページを見ればよいだけですが、もっと広い範囲(たとえば日本全国の区のデータ)を調べたい場合などはAPIを取得するプログラムを記述したほうがはるかに効率的ですし、他のデータと組み合わせることができるなどいろいろなことができそうです。
※ 日本の人口データであればDATA GO JPで探せばありそうなものですが ('ω')ノ

あとは、自前(プライベート)知識データベースの作り方や、OpenRefineとの連携なども試してみたいところだ。

参考URL

© 2022 k69

本サイトを通じて、たくさんの人がプログラミングに興味を持ち、 これがキッカケでモノづくりの楽しさに触れることができれば幸せです!