LoginSignup
0
1

More than 3 years have passed since last update.

quandlから消費者物価指数(CPI)を取得し騰落率を計算する

Posted at

はじめに

株式投資を始めたことがきっかけで世界的な経済や金融に興味をもつようになりました。
前回Quandlというサイトから各国のインフレ率を取得し表示してみるということをしました。
Quandlではインフレ率以外にもさまざまな経済指標をWebAPIで取得することができます。
今回は個人的な研究で消費者物価指数(CPI)の騰落率が欲しかったのでQuandlでデータを取得しpandasでその騰落率を計算してみました。

実行環境

  • Windows バージョン20H2
  • Python 3.9.4
  • jupyterlab 3.0.16
  • Quandl 3.6.1
  • pandas 1.2.5

コードと説明

ライブラリのインポート

get_CPI.ipynb
import quandl
import pandas as pd

インポートするモジュールは前回とほぼ同じですが今回はグラフをファイル出力しませんのでmatplotlibをインポートしていません。

コンフィグ

get_CPI.ipynb
apikey = 'XXXXXXXX'
datatype = {'USA':'RATEINF/CPI_USA',
           'Japan':'RATEINF/CPI_JPN'}

APIKeyは前回と同じです。アカウント登録時に提供されたものに置き換えてください。今回はアメリカと日本のデータのみが欲しかったためdatatypeは2国のみ定義しています。
また前回はインフレ率の取得でしたのでシンボルは'RATEINF/INFLATION_XXX'でしたが今回は'RATEINF/CPI_XXX'を指定している点がポイントです。
詳しく知りたい方はRATEINF Infration RatesのAPIのドキュメントを参照してください。

データ取得と整形と出力

get_CPI.ipynb
# データ取得関数
def getdata(dtype):
    data = quandl.get(dtype, column_index = '1')
    return data

# APIキーのセット
quandl.ApiConfig.api_key = apikey

# データ取得
for dk in datatype.keys():
    # データ取得
    tempdata = getdata(datatype[dk])
    tempdata.rename(columns = {'Value':dk + '_value'}, inplace = True)
    # NaNの穴埋め
    tempdata = tempdata.fillna(method = 'ffill')
    # 騰落率の計算
    tempdata['tempval'] = tempdata.pct_change()
    tempdata['RoR'] = tempdata['tempval'] * 100
    tempdata = tempdata.drop(columns = 'tempval')
    # CSVの出力
    tempdata.to_csv('CPI_' + dk + '.csv')

今回はquandl.get(~)で期間を指定していない点やグラフ出力のために表を1つにまとめていないなど前回よりも構造はかなりシンプルです。
ポイントとしては騰落率の計算です。騰落率の計算式はこちらのサイトを参考にさせていただきました。以下の通りです。

騰落率(%) = {(基準日の値 / 前回の値) - 1} * 100

pandasのpct_change関数を用いることで{(基準日の値 / 前回の値) - 1}までの計算が行われるため次の行でpct_changeの結果に対し100をかけていることがコードからわかるかと思います。

出力されるファイル例

RoR.png
出力されたファイルのRoR列が騰落率です。

さいごに

いかがでしたでしょうか。Pythonではpandasなどデータを扱う強力なライブラリが多数ありまたそれに合ったデータを提供してくれているところなども様々ありデータ分析が非常にやりやすく楽しいですね。

また何か気になることがあれば投稿します。それではまた。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1