経済指標グラフを altair で表示 その2

経済指標グラフを 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=
で指定するとラベル指定となってしまうらしい