プログラミング Tips

ITエンジニアの雑記ブログ。
IT関連ニュースの考察や、プログラミングに関するTipsの備忘録として…
育児や日常の雑記帳としても、記事を投稿していきます。

プログラミングと日常生活に関する情報を発信しています。

Python で Jsonフォーマットを解析してみた!

前の記事でPythonでXMLをJSONフォーマットに変換する方法をまとめてみた。

今回はアプリでJSONフォーマットデータを活用する為に、パース(解析)する方法。毎回調べ直すので、備忘録のためにまとめた。



環境

今回実施する環境は以下の通り

  • MacOSX 10.13.3
  • Python 3.6.1

準備

Virtualenv環境の構築

今回も"virtualenv"環境の上で実施する。準備の手順に関しては、過去の記事にまとめてあるので、参照してほしい。

尚、今回はサードパティのPythonパッケージを使用せず、標準パッケージのみで大丈夫な為、追加パッケージインストールはなし。

実験用のデータの準備

今回の検索対象のJSONベースのデータは、Google Books APIを用いて本の情報を用いる

以下のリンクから取得できる

# "入門Python3"情報をISBNから取得
https://www.googleapis.com/books/v1/volumes?q=isbn:9784873117386

実際に取得までの方法を以下に記載

import json
import urllib.request

url = 'https://www.googleapis.com/books/v1/volumes?q=isbn:9784873117386'
response = urllib.request.urlopen(url)
# "content"内に結果が格納される
content = json.loads(response.read().decode('utf8'))

JSONフォーマットのパース

準備の中でURLからJSONデータを取得するまでを挙げた。その結果の中身をパースして、意図したデータを取得する方法を以下に記述する

# jsonデータ全てを出力
print(content)

# 1階層入った内容を出力
print(content['items'])

# 'title'キーの内容を出力
print(content['items'][0]['volumeInfo']['title'])

# 'description'キーの内容を出力
print(content['items'][0]['volumeInfo']['description'])


Python で XMLをJSONへ変換をやってみた!

WEB APIを使っていると、jsonフォーマットのデータ受信が多いが、稀にXMLフォーマットで出力されることがある。

XMLパーサで解析していけばいいが、Jsonに比べて保存時のサイズが大きくなってしまったり、そもそも解析が面倒だったりする…

よって、XMLフォーマットで受け取ったら、それをjsonフォーマットへ一気に変換してくれないか?と思って調査&実験して見たのまとめ。



環境

  • MacOSX 10.13.3
  • Python 3.6.1

準備:"xmltodict" Pythonモジュールのインストール

PyPiからPythonパッケージをインストールする

pip install xmltodict

変換処理

結論からすると、一発変換は困難だったので辞書型を挟んで2ステップ構成となる

  1. XMLを辞書型へ変換
  2. 辞書型をJSONへ変換

1. XMLを辞書型へ変換

# サンプルXMLファイル:
<employees>
    <person>
        <name value="Alice"/>
    </person>
    <person>
        <name value="Bob"/>
    </person>
</employees>
# サンプルXMLファイル
xml = """
<employees>
    <person>
        <name value="Alice"/>
    </person>
    <person>
        <name value="Bob"/>
    </person>
</employees>
"""

dict = xmltodict.parse(xml)
# 辞書型へのアクセス方法

dict['emploees']
dict['emploees']['person']


2. 辞書型をJSONへ変換

import json

result = json.dumps(result, indent=2)
print(result)
# 出力結果
'{
    "employees": {
        "person": [
                {
                    "name": 
                {
                        "@value": "Alice"
                }
            },
            {
                "name": 
                {
                "@value": "Bob"
                }
            }
        ]
    }
}'

これで変換処理完了。



Python を使って RESAS APIを使ってみた!!

官民のビッグデータが、地域経済分析システム(RESAS)として、無償で公開されている。これを利活用するために、Python で使ってみたので、まとめてみた。



地域経済システム(RESAS)とは…

産業の構造や人の流れなどの官民ビッグデータを集約し、可視化するシステム。

このシステムは、地方創生のための様々な取り組みを情報面から支援するために、経済産業省と内閣官房「まち・ひと・しごと創世本部事務局」が提供している。

自治体職員のかたや、地域活性化に関心を持つ様々な分野の肩によって、効果的な施策の立案・実行・検証のためなどに広く利用されている。

RESAS本家のページはこちら

RESAS活用事例はこちら

APIを使って RESASデータをプログラムから活用する為に…

RESASデータをプログラムから取得するためには、APIを用いることになる。
プログラムを介さず、純粋にデータだけを取得することも可能である。

RESASによって、様々なデータがわかりやすく「見える化」されている一方、自分でデータを加工して独自サービスに組み込んだり、複数のデータを組み合わせて分析に活用したいという要望があがり、これを実現するためにAPIが提供されている。

提供されているAPIのドキュメントは、こちらに公開されている。

尚、この利用にはまず無料の利用登録が必須であり、この結果、API利用のための API KEY が発行される。

Python で API を利用してみた!!

APIを利用するための方法は、公式サイトに丁寧な説明が載っているので割愛する。

Python開発環境構築

今回も、virtualenv環境を用いて開発を行うこととし、環境構築方法に関しては以前の投稿に基づいて準備する。

必要モジュールのインストール

HTTPリクエストのために、下記モジュールをインストールする

pip install requests


APIを使って、都道府県一覧を取得!!

コードを以下に掲載

api_key は、無料利用登録から入手可能。
またAPIエンドポイントは、常に固定となり、取得したいデータに応じて

  • APIパス
  • パラメータ

をセットする。

import json
import requests

def resas_api_request():
    # 無料利用登録で入手できるKEY
    api_key = "xxxxxxxxxx"

    # RESAS API エンドポイント
    url  = "https://opendata.resas-portal.go.jp/"
    # APIパス
    url += "api/v1/prefectures"

    #APIレクエストヘッダー
    head={
            "Content-Type":"application/json",
            "X-API-KEY":api_key
        }

    # RESAS APIへのアクセス→取得
    req=requests.get(url, headers=head)

    # レスポンスの出力
    print(req)

    # json形式のレスポンスを読み取り&デコードして日本語変換
    json_obj=json.loads(req._content.decode('utf-8'))

    print(len(json_obj['result']))
    for i in json_obj['result']:
        print(i)

    return

if __name__=="__main__":
    resas_api_request()

以上で、SARESA データがAPIで取得される。

今回は都道府県コード取得のサンプルとしてが、APIパスやパラメータのセットを変更することで他のデータも取得可能になる。

またAPIで取得したデータを複数組み合わせることで、様々な分析が可能になる。

アイデアによっては、RESASアプリコンテストにエントリーして社会貢献することも意義がある活動になるかもしれない。



↑このページのトップヘ