経済指標グラフを altair で表示 その2
investpy で経済指標を取得し
altair で表示する
import pandas as pd
import investpy
import altair as alt
import datetime
economic_data = investpy.economic_calendar(time_zone=None, time_filter='time_only', countries=['japan', 'united states'], from_date='01/01/2021', to_date='11/06/2021')
ISM =economic_data[economic_data['event'].str.contains('ISM Non-Manufacturing PMI')]
date2 =[]
for i in ISM['date']:
new_date = datetime.datetime.strptime(i,"%d/%m/%Y").strftime("%Y-%m-%d")
date2.append(new_date)
ISM['date']=ISM['date'].str.replace('/','-')
ISM['date'] = date2
ISM.fillna(0)
chart =(
alt.Chart(ISM)
.mark_line(opacity=0.8,clip=True)
.encode(
x="date:T",
y=alt.Y("actual:Q",stack=None)
)
)
chart
とすると
ISM の actual の数値が折れ線グラフで表示される
実際の値だけでなく予測値の forecast もほしいので
actual =(
alt.Chart(ISM)
.mark_line(opacity=0.8,clip=True)
.encode(
x="date:T",
y=alt.Y("actual:Q",stack=None)
)
)
forecast =(
alt.Chart(ISM)
.mark_line(opacity=0.8,clip=True,color='red')
.encode(
x="date:T",
y=alt.Y("forecast:Q",stack=None),
)
)
として2つの折れ線データを用意する
あとは
alt.layer で重ねて表示すると2つ表示される
alt.layer(actual,forecast).resolve_scale(
y = 'independent'
)
independent を指定するとy軸が独立した2つになる
なお重ねて表示するのは3つでも可能
試しに previous の値も追加するのなら
previous =(
alt.Chart(ISM)
.mark_line(opacity=0.8,clip=True,color='green')
.encode(
x="date:T",
y=alt.Y("previous:Q",stack=None),
)
)
alt.layer(actual,forecast,previous).resolve_scale(
y = 'independent'
)
とすれば3つの折れ線グラフが表示される
重ねて折れ線グラフを表示するのについては
Layered chart with Dual-Axis
を参考に
altair で線の色を指定するには
altairでとあるアイドルグループのメンバー在籍期間のチャート化してみた
を参考に
最初に
altair.encode() で指定したときにはエラーとなった
color=
で指定するとラベル指定となってしまうらしい

