python で経済指標の取得とグラフ化その2
ISM Manufacturing PMI
ISM製造業PMI
を
altair でグラフにする
economic_data[economic_data['event'].str.contains('ISM Non-Manufacturing PMI')]
で結果の取得はできた
以前
apple の情報を取得し
そこから特定のカラムの Close だけ取り出したことがあるので
economic_data[economic_data['event'].str.contains('ISM Non-Manufacturing PMI')]['actual']
とすると
99 57.2 535 58.7 1016 55.3 1566 63.7 2027 62.7 2540 64.0 Name: actual, dtype: object
となり
ID と actual の数値がでる
ただし
chart =( alt.Chart(ISM) .mark_line(opacity=0.8,clip=True) .encode( x="Date:T", y=alt.Y("Stock Prices(USD):Q",stack=None), color='Name:N' ) ) chart
としてもエラーになる
ISM.dtype
を実行すると
dtype('O')
となる
検索して調べてみた
dtype( ‘O’)とは何ですか?
によれば
python object
とのこと
なので数値にしないとダメ
おそらくやり方が違っているので
株価可視化アプリでやったことを思い出す
economic_data.columns
でカラムを調べると
Index(['id', 'date', 'time', 'zone', 'currency', 'importance', 'event', 'actual', 'forecast', 'previous'], dtype='object')
となる
過去に apple の株価取得したときには
Index(['Open', 'High', 'Low', 'Close', 'Volume', 'Dividends', 'Stock Splits'], dtype='object')
だった
今回は指標を絞ってみる
ISM =economic_data[economic_data['event'].str.contains('ISM Non-Manufacturing PMI')] ISM.columns
とすると
Index(['id', 'date', 'time', 'zone', 'currency', 'importance', 'event', 'actual', 'forecast', 'previous'], dtype='object')
となる
あまり変わっていない
ISM.reset_index()
でインデックスを振りなおしてみる
ism_act = ISM[['actual']] ism_act
で
actual へ絞り込みができた
ただし、そのまま
chart =( alt.Chart(ism_act) .mark_line(opacity=0.8,clip=True) .encode( x="Date:T", y=alt.Y("Stock Prices(USD):Q",stack=None) ) )
としても日付がないので表示できない
pandas.DataFrameから条件を満たす行名・列名の行・列を抽出(選択)
を参考に
ism_act = ISM.filter(items=['date','actual']) ism_act
とすれば日付も取得できる
chart =( alt.Chart(ism_act) .mark_line(opacity=0.8,clip=True) .encode( x="date:T", y=alt.Y("actual:Q",stack=None) ) )
ででたけど
表示がおかしい
原因は日付表示
99 08/01/2021 57.2 535 04/02/2021 58.7 1016 04/03/2021 55.3 1566 05/04/2021 63.7 2027 05/05/2021 62.7 2540 03/06/2021 64.0
の場合日付を月と認識されるので
表記を変える必要がある
ism_act.index = ism_act.index.strftime('%d %B %Y')
としたが
AttributeError: 'Int64Index' object has no attribute 'strftime'
となる
[Python]pandasの日付データから年、月、日、曜日への変換方法
を参考に
ism_act['date'] = pd.to_datetime(ism_act['date'],format='%Y-%m-%d')
としたがエラー
Pandasデータフレームを日付で並べ替え
を参考に
ism_act['date']=pd.to_datetime(ism_act.date) ism_act.sort_values(by='date')
とすれば
ソートはできるが日付フォーマットを修正しないとバグる
df_ism_act = pd.DataFrame(ism_act)
で
Dataframe にしてみたが
おそらく株価アプリのときみたいに
DatetimeIndex を作成したほうがいいかもしれない
ism_act['date']=pd.to_datetime(ism_act['date'], format='%Y%m%d') ism_act.sort_values(by='date')
だと
08/01/2021
を8/1
として認識して変換している