見出し画像

【Python】【経済指標】インフレに関わるデータを取得して描画する

株式投資において、インフレ関連の経済統計データは、低インフレのときにはほとんど注目されませんが、インフレが加速すると金融政策の変更が行われるので、一気に注目度が高まります。

インフレに関するデータは株式投資において重要な情報源となります。投資家はインフレに関するデータを定期的にモニタリングし、それを基に投資戦略を立案することが求められます。ここでは、様々なインフレに関わるデータの取得と描画を学んでいきます。

相場にとって米雇用統計が大事な経済指標と言われていますが、一方、その時々の経済情勢で大きなトピックがあるときは、それに関連した経済指標が注目を集めます。たとえば、2022年以降の米国では、インフレが加速しました。こういうときは、雇用統計もさることながら、インフレ率に対する関心が高まります。米国ではCPI(消費者物価指数)ならびにPCE(個人消費支出)の2つが注目されます。

米国の中央銀行であるFRBは、物価動向を把握する上でCPIよりもPCEを重視するともいわれています。個人消費が旺盛になれば、徐々に物価が上昇傾向をたどるので、個人支出の動向を押さえておけば、消費者物価指数が上昇する前にインフレの兆候を把握できるというわけです。つまり個人消費支出は消費者物価指数の先行指数的な存在と考えられるのです。

世界インフレ時代の経済指標 エミン・ユルマズ著


なお、最低限のポイントのみの説明にするため、Pythonライブラリ、モジュール等のインストール方法については割愛させて頂きます。お使いのPC環境等に合わせてインストールしてもらえればと思います。


1.インフレに関わるデータを取得する

インフレに関わるデータを分析するには、pandasのDataFrameオブジェクトにデータを用意する必要があります。ここでは、米国の消費者物価指数(CPI、コアCPI)、個人消費支出(PCE、コアPCE)のデータをFREDから取得していきます。FREDは米国のセントルイス連銀が運営するサイトで一般的には十分な世界中の公的な経済データが手に入ります。データの取得期間は、2018年1月1日から現在の日付までです。

CPI(Consumer Price Index)は、消費者物価指数を表します。一般消費者が購入する一定の商品やサービスの価格の変動を測定します。

コアCPIは、CPIから食品とエネルギーの価格変動を除いた指数です。食品とエネルギーの価格は比較的変動が激しいため、経済の基本的なインフレ動向を見るためにこれらを除いた指標が用いられます。

PCE(Personal Consumption Expenditures)は、個人消費支出指数を表します。CPIと同様に消費者の支出パターンを反映し、物価の変動を測定しますが、一定の方法で計算されるため、CPIよりも幅広い商品やサービスの価格変動をカバーします。

コアPCEは、PCEから食品とエネルギーの価格変動を除いた指数です。PCEの中でも価格変動が大きい食品とエネルギーを除いた指標となります。

簡潔に言えば、CPIは一般消費者の商品やサービスの価格変動を、コアCPIは食品とエネルギーを除いた指数を、PCEは個人消費支出の価格変動を、コアPCEは食品とエネルギーを除いた個人消費支出の指数を測定します。

FREDから取得する際のコードは下記です。

米国CPI:消費者物価指数
CPIAUCSL:Consumer Price Index for All Urban Consumers: All Items in U.S. City Average (Monthly)
(https://fred.stlouisfed.org/series/CPIAUCSL


米国コアCPI:消費者物価指数(食料とエネルギーを除く)
CPILFESL:Consumer Price Index for All Urban Consumers: All Items Less Food and Energy in U.S. City Average (Monthly)
Consumer Price Index for All Urban Consumers: All Items Less Food and Energy in U.S. City Average (CPILFESL) | FRED | St. Louis Fed (stlouisfed.org)

米国PCE:個人消費支出
PCE:Personal Consumption Expenditures (Monthly)
Personal Consumption Expenditures (PCE) | FRED | St. Louis Fed (stlouisfed.org)

米国コアPCE:個人消費支出(食料とエネルギーを除く)
PCEPILFE:Personal Consumption Expenditures Excluding Food and Energy (Chain-Type Price Index) (Monthly)
Personal Consumption Expenditures Excluding Food and Energy (Chain-Type Price Index) (PCEPILFE) | FRED | St. Louis Fed (stlouisfed.org)

FRED


それでは、株価データを取得するを参考にFREDからCPI, コアCPI, PCE,コアPCEのデータを取得していきます。データは、pct_change()メソッドを使って、df.pct_change(12)*100 で前年同月比(%)に変換します。

import pandas_datareader.data as web
import datetime

# 2018/1/1から現在まで
start = '2018-01-01'
end = datetime.date.today()

# CPI(US)
tmp_cpi_us = web.DataReader(["CPIAUCSL","CPILFESL"], "fred", start, end)
df_cpi_us = tmp_cpi_us.pct_change(12)*100     #前年同月比 (%)データに変換

# PCE(US)
tmp_pce_us = web.DataReader(["PCE","PCEPILFE"], "fred", start, end)
df_pce_us = tmp_pce_us.pct_change(12)*100     #前年同月比 (%)データに変換





2.インフレに関わるデータの描画

ここでは、plotlyを使って、米国CPI 、コアCPI 、米国PCE、米国コアPCEの変化をグラフに表示していきます。plotlyについては、以前に描画方法と見た目に関わる設定について投稿しているので参考にしてもらえればと思います。

●plotlyでグラフを描画

import plotly.graph_objects as go  # グラフ表示関連ライブラリ
import plotly.io as pio  # 入出力関連ライブラリ
pio.renderers.default = 'iframe'

# subplot
from plotly.subplots import make_subplots


# グラフの実体となる trace オブジェクトを生成
cpi_us_trace = go.Scatter(
    x=df_cpi_us.index,
    y=df_cpi_us['CPIAUCSL'],
    mode='lines',
    line={'color':'red', 'width':4},
    name='米国CPI(総合)'
    )

cpi_core_us_trace = go.Scatter(
    x=df_cpi_us.index,
    y=df_cpi_us['CPILFESL'],
    mode='lines',
    line={'color':'blue', 'width':4},
    name='米国CPI(コア:食料とエネルギーを除く)'
    )

pce_us_trace = go.Scatter(
    x=df_pce_us.index,
    y=df_pce_us['PCE'],
    mode='lines',
    line={'color':'red', 'width':4},
    name='米国PCE(総合)'
    )

pce_core_us_trace = go.Scatter(
    x=df_pce_us.index,
    y=df_pce_us['PCEPILFE'],
    mode='lines',
    line={'color':'blue', 'width':4},
    name='米国PCE(コア:食料とエネルギーを除く)'
    )


subplots_fig = make_subplots(
    rows=2,
    cols=1,
    start_cell='top-left',
    subplot_titles=[
        '米国CPI',
        '米国PCE',
    ],
    horizontal_spacing=0.15,
    vertical_spacing=0.10,

)


# 描画領域である figure オブジェクトの作成                  
subplots_fig.add_trace(cpi_us_trace, row=1, col=1)
subplots_fig.add_trace(cpi_core_us_trace, row=1, col=1)
subplots_fig.add_trace(pce_us_trace, row=2, col=1)
subplots_fig.add_trace(pce_core_us_trace, row=2, col=1)


# レイアウトの更新
subplots_fig.update_layout(
    
    # 凡例は表示
    showlegend=True,
    
    # 幅と高さの設定
    width=900,height=900,
    
    title='経済指標(インフレ指標)',
    plot_bgcolor='white', # 背景色を白に設定
    
),


# 軸の設定
subplots_fig.update_yaxes(title='前年同月比(%)', row=1, col=1)
subplots_fig.update_yaxes(title='前年同月比(%)', row=2, col=1)


# linecolorを設定して、ラインをミラーリング(mirror=True)して枠にする
subplots_fig.update_xaxes(linecolor='black', linewidth=1, mirror=True, row=1, col=1)
subplots_fig.update_yaxes(linecolor='black', linewidth=1, mirror=True, row=1, col=1)

subplots_fig.update_xaxes(linecolor='black', linewidth=1, mirror=True, row=2, col=1)
subplots_fig.update_yaxes(linecolor='black', linewidth=1, mirror=True, row=2, col=1)


# ticks='inside':目盛り内側, tickcolor:目盛りの色, tickwidth:目盛りの幅、ticklen:目盛りの長さ
subplots_fig.update_xaxes(ticks='inside', tickcolor='black', tickwidth=1, ticklen=5, row=1, col=1)
subplots_fig.update_yaxes(ticks='inside', tickcolor='black', tickwidth=1, ticklen=5, row=1, col=1)

subplots_fig.update_xaxes(ticks='inside', tickcolor='black', tickwidth=1, ticklen=5, row=2, col=1)
subplots_fig.update_yaxes(ticks='inside', tickcolor='black', tickwidth=1, ticklen=5, row=2, col=1)


# gridcolor:グリッドの色, gridwidth:グリッドの幅、griddash='dot':破線
subplots_fig.update_xaxes(gridcolor='lightgrey', gridwidth=1, griddash='dot', row=1, col=1)
subplots_fig.update_yaxes(gridcolor='lightgrey', gridwidth=1, griddash='dot', row=1, col=1)

subplots_fig.update_xaxes(gridcolor='lightgrey', gridwidth=1, griddash='dot', row=2, col=1)
subplots_fig.update_yaxes(gridcolor='lightgrey', gridwidth=1, griddash='dot', row=2, col=1)


# tick0:初期軸目盛り, dtick:軸目盛り間隔
subplots_fig.update_xaxes(dtick='M12')  # 6カ月ごと
subplots_fig.update_yaxes(dtick=1, row=1, col=1)
subplots_fig.update_yaxes(dtick=5, row=2, col=1)

# 軸の文字サイズ変更
subplots_fig.update_xaxes(tickfont=dict(size=14, color='grey'))
subplots_fig.update_yaxes(tickfont=dict(size=16, color='grey'))

# show()メソッドでグラフを描画
subplots_fig.show()


今回は、株式投資において重要なインフレに関するデータを取得して、plotlyを用いてデータの可視化を行いました。今後は、他の経済指標と合わせた分析を行っていきたいと思います。



この記事が気に入ったらサポートをしてみませんか?