プログラミング Tips

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

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

2018年02月

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

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

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


御前崎マリンパークで遊び、ナブラ市場でジェラート満喫してきた!!

嫁が勉強のために東京まで出掛けていたので、長男7歳(小1)と次男4歳(年少)を連れて、ちょっとドライブしながら遠目の公園までお出掛け!

公園は公共施設が多いため事前情報がそれほど多くない…

どんな遊具があるのか?どのくらい楽しめるか?は行ってみないとわからず、ギャンブル的な要素もあるんだけど、それも楽しみの一つだと割り切って行ってみました

「御前崎マリンパーク」

事前に調べて、丘の上から全長50メートルのスラーダーがあることはわかっていたので、少なくともこれだけは楽しめると思って行ってみた。


駐車場は、無料で広々!!

夏場は海水浴も楽しめるように整備されている公園なので、駐車場も広く綺麗に整備されている。冬場なので空いていたが、夏場でも十分な台数が収容できる広さだと思う

遊具はシンプル!ロングスライダーと幼児用アスレチック

公園ではあるが、正直遊具はそれほど充実しているとはいえない。でもロングスラーダーは小1の長男と年少の次男が何度もなんども滑って遊んでいたので子供心をくすぐるには十分だったと思う。

スラーダーは2本あって、長い方が50メートル!短い方でも20メートルほどある。昨年整備が施された為、キレイで滑りも十分!!

スラーダースタート地点は、「港の見える丘」という小高い丘になっているのでその上からの見晴らしは最高に気持ちがいい!!子ども的には見晴らしよりも、滑り台に夢中だったが…笑。付き添いの大人も楽しめると感じた。

港の見える丘は、富士山&駿河湾も望める最高のスポット!!

この丘は、駿河湾に突き出すように南北に数百メートル続いている。その先端からは、富士山も見えるので、絶景ポイントになっている。

ただ今日は風が強かった…立っているのもやっとなほどの強風!!
子どもたちは風に煽られるのが楽しかったようで、きゃっきゃきゃっきゃはしゃいでた笑。

芝生の広場と海水浴場

今はシーズンオフだが、海水浴場は白砂で水の透明度も高かったので、海としても十分に楽しめると思った。海の家やトイレも仮説ではなく、鉄筋の建物があった。

ここら辺は市の管理している公園内海水浴場ということで、行き届いている感があった。

またその隣には芝生の広場もあるので、ボール遊びや日光浴なども楽しめる。

前述の通り、今日は強風すぎてこれは断念…笑

注意事項としては、BBQ禁止の施設なので火器の扱いはできないことは注意してほしい。

公園情報まとめ

公園 :御前崎マリンパーク
住所 :静岡県御前崎市港6104-9
駐車場:460台
ホームページ:ここ
地図 :


御前崎マリンパーク

公園の真横のなぶら市場でおやつのジェラート堪能!!

公園併設ではないが、隣には地元鮮魚を直売する市場がある

「なぶら市場」

観光客向けの市場だが、鮮魚は良心的な価格に抑えられていて新鮮な魚介が揃っている。

でも…子どもたちからすればジェラートの方が言い訳です笑。

なので、ジェラート屋さんで美味しくおやつをいただきました!!
長男は食物アレルギー(小麦&卵)で完全除去中ですが食べられました。

お店の方は成分を理解している上に、食物アレルギーのことを伝えると成分表を見せてくれたので、安心して食べることができました。

このように理解を示してくれるお店の心遣いには、非常にありがたいですね。


Python で Redmine RestAPI をコントロール ~インストールと設定~

準備

  • Python 3.6.1
  • "python-redmine"モジュール

インストール

実施環境に、 virtualenv を用いる詳細はここを参照

pip install python-redmine

Redmine でRestAPIを有効にする

管理画面上で"Rest API"の有効チェックボックスをオンにして保存する

Python から Redmineサーバー へのつなぎこみ

Python へ "Python-Redmine" をimportすることでRedmineサーバーへのアクセス準備が整う

from redminelib import Redmine

Redmineサーバーへの繋ぎこみ

redmine = Redmine('https://redmineserver.url')

RedmineサーバーのURLを入力するだけで繋ぎこみは完了!!

Redmine サーバーへの認証

Rest API を用いるためには認証作業が必要
2通りの方法がある

  1. ID, Password
  2. API key
# ID, Pass
redmine = Redmine('https://redmine.url', username='name', password='pass')

# API key
redmine = Redmine('https://redmine.url', key='xxxxxx')

API key はRedmineページにログインして、個人の管理ページ右側ペインボタンをタップすると表示される

Django との親和性

Redmineサーバーへの繋ぎこみの為にコード上に、ID/PassやAPI keyを記述しておくことは推奨しない。例えばDjangoのようなフレームワークを用いた場合、Python-Redminesettings.pyファイルに記述しておくことを推奨する

# settings.py
REDMINE_URL = 'https://redmine.url'
REDMINE_KEY = 'xxxxxxxxxx'
# コード内
from django.conf import settings
from redminelib import Redmine

redmine = Redmine(settings.REDMINE_URL, key=settings.REDMINE_KEY)

次回は、Python-Redmine を用いて関数の使い方をまとめる


↑このページのトップヘ

-->