プログラミング Tips

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

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

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アプリコンテストにエントリーして社会貢献することも意義がある活動になるかもしれない。



エクセルの株価チャートを出力のエラー解消する方法をまとめた!!

エクセルで株価チャートを作ろうとしたが、

この株価チャートを作成するには、出来高、高値、安値、終値の順でシートのデータを配置してください。ラベルには日付または銘柄を使用してください。

というエラーが出てきてかなり悩まされた…

色々調べたが、有効な解決策が見つからなかったので、自己解決した!!

今後の備忘録として…
同じ問題で困っている人のために情報をまとめてみた。



環境

  • MacOSX 10.13.1
  • Excel for Mac 16.10

MacOSX環境で対応したが、WindowsベースのExcel上でも解決方法は変わらない

問題:エラーが出てグラフが出力されない

下記手順に従って、株価チャートを作成してみる

  1. Excelを開く
  2. 下記データを入力
  3. 入力データを全て選択
  4. メニューバーの"挿入" > "グラフの挿入" > "株価"を選択

入力データ

銘柄A
出来高 8000
高値 1000
安値 100
終値 500

下記エラーポップアップが表示される…

この株価チャートを作成するには、出来高、高値、安値、終値の順で
シートのデータを配置してください。ラベルには日付または銘柄を
使用してください。

エクセルのエラーメッセージ

全ての情報を指示通りに並べているにも関わらずのエラー
かなり不思議な現象…

解決策:データを4つ以上並べる!!

銘柄、高値、安値、終値を全て4つ以上入力することで解決できることがわかった。知る範囲では、ドキュメントのどこにも「4つ以上のデータを準備すること」の記載がなかったので理由は定かではないが…

よって、先ほどのデータ生成の部分を下記に修正する

銘柄A ダミーB ダミーC ダミーD
出来高 8000 1000 1000 1000
高値 1000 1000 1000 1000
安値 100 200 200 200
終値 500 500 500 500

この状態であれば、グラフが生成可能!!

最後に、表示されたグラフのプロパティ「データの選択」を開き、ダミーデータを削除する。一度グラフが生成されれば、データを削除しても問題ない!


↑このページのトップヘ