【Python】ISM製造業指数をイコライザーにする!
PMIは景気の先行きを知るのに重要な指標である。
PMIとは「Purchasing Managers' Index」の略であり、日本語では「購買担当者景気指数」と呼ばれる。
この指標には、
「IHS マークイット」が発表する製造業PMIと
「ISM」が発表する製造業PMIがある。
(ISM:Institute for Supply Management:全米供給管理協会)
マークイットPMIには民間企業の情報しか含まれてないのに対し、ISMは幅広く網羅されているという違いがあるらしい。(因みに、IHS マークイットは、S&Pグローバルが買収予定。)
このPMIには各企業の購買担当者から集めた新規受注や在庫などの情報が網羅されており、景気の先行きを伺うのに重要な役割を果たしている。
この数値は、50を下回ると悪く、50を上回ると良いと言われる。
ISMのアメリカ全体の製造業PMIは月初に発表されるのだが、その前に、シカゴISMのPMIが発表されるらしく、先行するシカゴのPMIは注目されているらしい。
因みに、ISMの製造業PMIとシカゴのPMIの推移(1998年~)をグラフにすると下記のようになる。
グラフを見ると、全体のPMIより、シカゴのPMIは上下に跳ねやすい傾向がありそうだが、ある程度、PMIを先行する情報として役に立ちそうに思われる。
このグラフは、景気の方向感を見るのが重要なので、グラフには折れ線グラフが使われるのだが、50%を中心として、上下に振れつつ、前後の影響を受けながら、比較的なだらかな推移をしていることが伺える。
そこで、景況感というか、
購買担当者のビートを肌で感じるために
1948年以降のデータを
グラフィック・イコライザー風にしてみることにした。
(多分、みんな、ココで急に置いてけぼりになったと思うw)
では、PMIをグラフィック・イコライザーにしてみようw
コーディング
PMI(ISM)の取得は以前書いた記事を参考にする。
ライブラリをインストール。
pip install quandl
ISMのPMIデータを取得。
import quandl
# PMIデータ取得
df_pmi = quandl.get("ISM/MAN_PMI")
サーバが混雑して、データ取得できない場合は、下記のファイルと下記のコードを実行。
import pandas as pd
df_pmi = pd.read_csv("pmi.csv")
df_pmi["Date"] = pd.to_datetime(df_pmi["Date"],format="%Y-%m-%d")
df_pmi = df_pmi.set_index("Date")
データが整ったところで、下記のコードを実行。
(汚いコードになっていますが、ご勘弁を。)
import pandas as pd
import datetime
import fix_yahoo_finance as yf
import matplotlib.pyplot as plt
from matplotlib import cm
%matplotlib inline
import matplotlib.animation as animation
from IPython.display import HTML
df_pmi = df_pmi.reset_index()
df_pmi["xDate"] = df_pmi["Date"]
df_pmi = df_pmi.set_index("Date")
fig, ax1 = plt.subplots(figsize=(8, 4.5),facecolor="black",
subplot_kw=dict(facecolor='black'))
def create_ani(i):
ax1.clear()
xyear = 1948
xyear = xyear + i
ax1.bar(df_pmi["xDate"][str(xyear)],df_pmi["PMI"][str(xyear)],
color="#00ff41", label="PMI",width=17,alpha=0.0)
ax1.axhline(y=50,color='gray',linewidth=2,alpha=0.3 )
ax1.bar(df_pmi["xDate"][str(xyear)],df_pmi["PMI"][str(xyear)]-2.4,
color="white", label="PMI",width=14,alpha=0.7)
ax1.bar(df_pmi["xDate"][str(xyear)],df_pmi["PMI"][str(xyear)],
color="#00ff41", label="PMI",width=17,alpha=0.4)
ax1.bar(df_pmi["xDate"][str(xyear)],df_pmi["PMI"][str(xyear)],
color="#00ff41", label="PMI",width=20,alpha=0.3)
ax1.bar(df_pmi["xDate"][str(xyear)],df_pmi["PMI"][str(xyear)],
color="#00ff41", label="PMI",width=23,alpha=0.2)
ax1.bar(df_pmi["xDate"][str(xyear)],0.2,color="#00ff41", label="PMI",
width=14,alpha=0.7,bottom=df_pmi["PMI"][str(xyear)]-1.8)
ax1.bar(df_pmi["xDate"][str(xyear)],0.2,color="#00ff41", label="PMI",
width=14,alpha=0.7,bottom=df_pmi["PMI"][str(xyear)]-1.2)
ax1.bar(df_pmi["xDate"][str(xyear)],0.2,color="#00ff41", label="PMI",
width=14,alpha=0.7,bottom=df_pmi["PMI"][str(xyear)]-0.6)
ax1.set_title(label=("ISM(Manufacturing PMI) "+str(xyear)), fontsize=20,color="gray")
ax1.axis('off')
ax1.text(1.0, 0, "hipelog.com research Ltd." ,
horizontalalignment='right', verticalalignment='top',
transform=ax1.transAxes, fontstyle='italic',fontsize=12,color="gray")
ax1.set_ylim(df_pmi["PMI"].min()-5, df_pmi["PMI"].max()+5)
ax1.set_xlim(datetime.date(xyear-1,12,1), datetime.date(xyear,12,31))
# plt.show()
ani = animation.FuncAnimation(fig, create_ani, interval=200,frames = (2021-1948)+1, repeat=True)
ani.save('PMI.mp4', writer="ffmpeg",dpi=100,savefig_kwargs = {'facecolor':'black'})
HTML(ani.to_html5_video())
# ここまで
すると、画面左の下記の場所に「PMI.mp4」という動画が作成される。
それが、下記である。
よく見ると分かるのだが、このグラフ、サイバー感を出すために、棒グラフの枠を大きくしながら、複数回、薄い色でなぞる事で、光沢感を出しているのだ。
更に、イコライザー感を出すために、グラフの上部に、PMIの値に上限まで、細かな積み上げグラフ複数個重ねる。という力の入れようである。(因みに、灰色で薄く引いている横線が、50のラインである。)
まぁ、PMIデータという素材とイコライザーの相性は良かったようで、なかなかの出来栄えである。
ただ、つくって見て思うのは、よくできてるけど、
購買担当者のビートは分からん。
グラフは、年ごとに切り替わるので、アノマリー性を見るのには優れているはず!と苦し紛れな事を言ってみたり・・・
Pythonでのサイバー感のあるグラフ作成や、動画作成や、積み上げグラフを作成する時に、少しは役立つはずと言ってみたり・・・
何かの参考になれば幸いです。では!
おつかれさん「缶コーヒー一杯ぐらい、ご馳走してあげよう」という太っ腹な方がいれば、よろしくお願いします!
課金しなくても、参考になったら、「ハートボタン」をクリックしたり、「リツイート」してくれると読まれる可能性があがるので嬉しいです。やる気が出ます。よろしくお願いします!
ここから先は
¥ 100
この記事が気に入ったらチップで応援してみませんか?