見出し画像

【Python】【経済指標】米国の雇用統計と新規失業保険申請件数のデータを取得して描画する

米国雇用統計は、機関投資家のみならず個人投資家にとっても、投資をする上でとても注目度の高い経済指標と言われています。ではなぜなのでしょうか?それは米国の中央銀行である連邦準備制度理事会 FRBが金融政策を決める上でとても重視している経済統計だからです。

FRBの役割として特に重要なのは、国民の雇用を最大化することと、物価を安定させることです。FRBが重視する米国雇用統計は、自国の金融政策の方向を左右するのです。

また、新規失業保険申請件数は、特に近年になって注目されるようになった米国の経済指標です。申請された失業保険の件数をトラックしたものです。

なぜ、雇用統計が重視されるのかというと、第一に非常にタイムリーな指標であることです。発表されるのが毎月第一金曜日ですから、曜日の位置にもよりますが、前の月末からそれほど日数を置かずに、前月の内容が発表されます。多くの経済指標は、集計が終わって発表されるまでの間、多少の日数を必要とするため、若干遅行する傾向があるのですが、雇用統計はほとんどタイムラグがありません

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

失業保険の申請件数が増えるということは、失業する人が増えていることと同義ですから、景気がリセッションに入った可能性が高いと判断されます。なぜ、この経済指標が改めて注目されるようになったのかというと、一番の理由は一致指数として正確性が高いことです。何しろ毎週発表されていますから、発表頻度が1カ月に一度の雇用統計に比べて、タイムリー性が高いという特徴があります。今、景気がどういう状況にあるのかを、最もタイムリーに、かつ素早く把握できるのです。

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


ここでは、雇用統計新規失業保険申請件数に関するデータを取得し描画していきます。

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


1.米国の雇用統計と新規失業保険申請件数データを取得する

米国の雇用統計や新規失業保険申請件数のデータを分析するには、pandasのDataFrameオブジェクトにデータを用意する必要があります。ここでは、非農業部門雇用者数、失業率、労働参加率、平均時給、新規失業保険申請件数のデータをFREDから取得していきます。FREDは米国のセントルイス連銀が運営するサイトで一般的には十分な世界中の公的な経済データが手に入ります。データの取得期間は、2018年1月1日から現在の日付までです。

https://fred.stlouisfed.org/

import pandas_datareader.data as web
import datetime

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

# 米非農業部門雇用者数の取得
df_payems = web.DataReader(['PAYEMS'], 'fred', start, end)
df_payems = df_payems.dropna() # 空データ削除

# 失業率
df_unrate = web.DataReader(["UNRATE"], "fred", start, end)
df_unrate = df_unrate.dropna() # 空データ削除

# 労働参加率
df_civpart = web.DataReader(["CIVPART"], "fred", start, end)
df_civpart = df_civpart.dropna() # 空データ削除

# 平均時給
df_hourly_earnings = web.DataReader(["CES0500000003"], "fred", start, end)
df_hourly_earnings = df_hourly_earnings.dropna() # 空データ削除

# 新規失業保険申請件数
df_icsa = web.DataReader(["ICSA"], "fred", start, end)
df_icsa = df_icsa.dropna() # 空データ削除

https://note.com/scilabcafe/n/n0060466ef5c3

米国雇用統計
米非農業部門雇用者数
PAYEMS:All Employees, Total Nonfarm (Monthly) (https://fred.stlouisfed.org/series/PAYEMS/?utm_source=fred-glance-widget&utm_medium=widget&utm_campaign=fred-glance-widget)

失業率
UNRATE:Unemployment Rate (Monthly) (https://fred.stlouisfed.org/series/UNRATE/?utm_source=fred-glance-widget&utm_medium=widget&utm_campaign=fred-glance-widget)

労働参加率
CIVPART:Labor Force Participation Rate (Monthly)
https://fred.stlouisfed.org/series/CIVPART/?utm_source=fred-glance-widget&utm_medium=widget&utm_campaign=fred-glance-widget)

平均時給
CES0500000003:Average Hourly Earnings of All Employees, Total Private (Monthly)
Average Hourly Earnings of All Employees, Total Private (CES0500000003) | FRED | St. Louis Fed (stlouisfed.org)

新規失業保険申請件数
ICSA:Initial Claims (Weekly)
Initial Claims (ICSA) | FRED | St. Louis Fed (stlouisfed.org)


FRED

米非農業部門雇用者数の数字を見る際のポイント
マーケット関係者が常に注視している経済指標です。これは、自営業者と農業従事者を除いた雇用者数の増減を、前月比で見るもので、大体15万~20万人増であれば好調と考えられます。逆に、景気が悪化すると前月比で大幅マイナスということも起こるのですが、リセッションが最終局面に近づくと、非農業部門雇用者数の数字は徐々に上昇していきます。トレンドから見て上昇の兆しが見えてきたら、不景気もようやく終わりに近づいていると判断できるのです。

失業率の数字を見る際のポイント
1カ月間、仕事のない人が自分で仕事を探す努力をしているのに、仕事が見つからない場合、労働力の中における失業者にカウントされます。したがって、仮に失業率が改善に向かったとしても、仕事探しをあきらめた失業者がどの程度いるのか、という点も踏まえて考える必要があります。

新規失業保険申請件数の数字を見る際のポイント
数週間以上にわたって申請件数が40万件を超えている場合は、景気悪化局面にあり、逆に長期にわたって申請件数が37万件を下回った場合は、景気回復局面にあると判断できる。

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


2.グラフの描画

ここでは、plotlyを使って、米非農業部門雇用者数、失業率、労働参加率、平均時給、新規失業保険申請件数の変化をグラフに表示していきます。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 オブジェクトを生成
payems_trace = go.Scatter(
    x=df_payems.index,
    y=df_payems['PAYEMS'],
    mode='lines',
    line={'color':'red', 'width':4},
    name='米非農業部門雇用者数'
    )

unrate_trace = go.Scatter(
    x=df_unrate.index,
    y=df_unrate['UNRATE'],
    mode='lines',
    line={'color':'red', 'width':4},
    name='失業率'
    )

civpart_trace = go.Scatter(
    x=df_civpart.index,
    y=df_civpart['CIVPART'],
    mode='lines',
    line={'color':'red', 'width':4},
    name='労働参加率'
    )

hourly_earnings_trace = go.Scatter(
    x=df_hourly_earnings.index,
    y=df_hourly_earnings['CES0500000003'],
    mode='lines',
    line={'color':'red', 'width':4},
    name='平均時給'
    )

icsa_trace = go.Scatter(
    x=df_icsa.index,
    y=df_icsa['ICSA'],
    mode='lines',
    line={'color':'blue', 'width':4},
    name='新規失業保険申請件数'
    )

subplots_fig = make_subplots(
    rows=5,
    cols=1,
    start_cell='top-left',
    subplot_titles=[
        '米非農業部門雇用者数',
        '失業率',
        '労働参加率',
        '平均時給',
        '新規失業保険申請件数'
    ],
    horizontal_spacing=0.15,
    vertical_spacing=0.08,

)


# 描画領域である figure オブジェクトの作成                  
subplots_fig.add_trace(payems_trace, row=1, col=1)
subplots_fig.add_trace(unrate_trace, row=2, col=1)
subplots_fig.add_trace(civpart_trace, row=3, col=1)
subplots_fig.add_trace(hourly_earnings_trace, row=4, col=1)
subplots_fig.add_trace(icsa_trace, row=5, col=1)


# レイアウトの更新
subplots_fig.update_layout(
    
    # 凡例は消去
    showlegend=False,
    
    # 幅と高さの設定
    width=900,height=1000,
    
    title='経済指標(米国雇用統計)',
    plot_bgcolor='white', # 背景色を白に設定
    
),


# 軸の設定
subplots_fig.update_yaxes(title='Thousands of Persons', row=1, col=1)
subplots_fig.update_yaxes(title='Percent(%)', row=2, col=1)
subplots_fig.update_yaxes(title='Percent(%)', row=3, col=1)
subplots_fig.update_yaxes(title='Dollars per Hour', row=4, col=1)
subplots_fig.update_yaxes(title='Number', row=5, 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)

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

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

subplots_fig.update_xaxes(linecolor='black', linewidth=1, mirror=True, row=5, col=1)
subplots_fig.update_yaxes(linecolor='black', linewidth=1, mirror=True, row=5, 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)

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

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

subplots_fig.update_xaxes(ticks='inside', tickcolor='black', tickwidth=1, ticklen=5, row=5, col=1)
subplots_fig.update_yaxes(ticks='inside', tickcolor='black', tickwidth=1, ticklen=5, row=5, 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)

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

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

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

# tick0:初期軸目盛り, dtick:軸目盛り間隔
subplots_fig.update_xaxes(dtick='M6')  # 6カ月ごと

# 軸の文字サイズ変更
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を用いてデータの可視化を行いました。今後は、他の経済指標のデータ取得や他の経済指標と合わせた分析を行っていきたいと思います。



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