Wikidata에서 원하는 데이터를 json으로 가져옵니다.



모두 keita69sawada입니다.

뭔가 조사를 할 때 무료 백과사전이다 Wikipedia 는 매우 편리합니다만, 프로그램으로 데이터 분석을 하는 경우에는 HTML이 아니라 API로 데이터를 취득할 수 있으면 편리합니다.

그럴 때 도움이 되는 것이 Wikidata 입니다. Wikidata이란?

위키데이터는 인간과 컴퓨터 모두가 동등하게 참조·편집할 수 있는 자유롭고 개방적인 지식 데이터베이스입니다. "

에서 Wikipedia 메뉴에서도 액세스할 수 있습니다.



.그런 Wikidata 에서 curl 로 Wikidata

대상 독자



  • Wikidata에서 API로 데이터를 얻고 싶은 사람
  • 열심히 스크래핑하는 사람 (어쩌면 Wikidata 에서 원하는 데이터를 취할 수 있을지도)

    전제 조건


  • curl 과 jq 가 인스톨 되고 있는 것
  • Windows 터미널을 사용하고 있습니다

  • 절차



    여기에서는 시나가와구의 인구를 취득합니다.

    1. 원하는 데이터를 Wikidata에서 확인



    Wikidata 에서 "시나가와구"를 검색하면, 아래와 같은 표시가 되므로 QXXXXXX(적하선부)를 기억해 둡니다.



    2. curl에서 검색합니다.



      기억한 QXXXXXX를 아래의 URL로 curl 실행합니다.
    확장자가 .json이라는 점에 유의하십시오!

    htps //w w. 우키키였다. 오 rg/우우키/S페시아 l:엔치 ty다타/Q 왓 x. j 그런

    시나가와구(Q233495)의 예
    curl -sLH 'Accept: application/json' http://www.wikidata.org/entity/Q233495 | jq . > shinagawa.json
    

    @ 야야마 씨, 지적 감사합니다!

    3. 원하는 데이터(시나가와구의 인구)를 찾는다



    3-1. Wikidata 화면에서 다음을 확인한다


  • 인구의 링크를 확인하면 "P1082"가 된다
  • 인구가 400,485명이 되었다



  • 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

    요약



    시나가와구의 인구만을 취득한다면, Wikipedia 이나 Wikidata 를 기술하는 편이 훨씬 효율적이고, 다른 데이터와 조합할 수 있는 등 여러가지 수 있을 것 같습니다.
    ※ 일본의 인구 데이터라면 DATA GO KR 에서 찾으면 있을 것 같습니다만

    그리고는, 자전(프라이빗) 지식 데이터베이스의 만드는 방법이나, OpenRefine와의 제휴 등도 시험해보고 싶은 곳이다.

    참고 URL


  • LOD(Linked Open Data)의 기초 기술
    htps : // 기주 b. 이 m/K의 w㎇d게 G등 ph쟈판/ぉDws1st/bぉb/마s테 r/ぉD-WS-토쵸오오ぇrゔぃ에w-20170803. pdf
  • OpenRefine을 사용하여 Wikidata의 항목과 일치
    https://qiita.com/yayamamo/items/eade3e5788e6f359bce7#%E7%85%A7%E5%90%88%E3%81%97%E3%81%9F%E3%83%87%E3%83%BC %E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%8B%E3%82%89%E5%80%A4%E3%82%92%E5 %8F%96%E5%BE%97%E3%81%99%E3%82%8B
  • 좋은 웹페이지 즐겨찾기