# !pip install --use-feature=in-tree-build git+https://github.com/krzpiesiewicz/timeseries
from datetime import datetime
import pandas as pd
from timeseries import Interval
from timeseries.plotting import plot_ts, plot_hist, plot_acf, plot_pacf
from timeseries.transform.ihs import IHSTransformer
# .csv available to download at:
# https://www.investing.com/currencies/gbp-usd-historical-data
gpd_usd_data = pd.read_csv("data/GBP_USD Historical Data_daily.csv")
gpd_usd_data["Date"] = pd.to_datetime(gpd_usd_data.Date, format="%b %d, %Y")
gpd_usd_data.set_index("Date", inplace=True)
gpd_usd_data.sort_index(ascending=True, inplace=True)
ts = gpd_usd_data.Price
whole_intv = Interval(ts, datetime(2019, 1, 1))
train_intv = Interval(ts, datetime(2020, 2, 1), datetime(2021, 4, 1))
display(plot_ts(whole_intv.view(), title="GBP/USD Daily"))
trans = IHSTransformer(ts, interval=train_intv, verbose=True, lmb=None)
trans_ts = trans.transform(ts)
print(f"differenced only – skewness: {trans_ts.skew()}")
fig = plot_ts(whole_intv.view(trans_ts),
title="GBP/USD Daily – Differenced")
plot_ts(train_intv.view(trans_ts), color="tab:red", name="train",
fig=fig)
display(fig)
trans_ihs = IHSTransformer(ts, interval=train_intv, verbose=True, save_loglikelihood_deriv=True)
display(plot_ts(trans_ihs.loglikelihood_deriv, title="GBP/USD Daily",
xaxis_title=trans_ihs.loglikelihood_deriv.index.name))
trans_ihs_ts = trans_ihs.transform(ts)
print(f"differenced and IHS transformed – skewness: {trans_ihs_ts.skew()}")
fig = plot_ts(whole_intv.view(trans_ihs_ts), title="GBP/USD Daily – Differenced and IHS Transformed")
plot_ts(train_intv.view(trans_ihs_ts), color="tab:red", name="train",
fig=fig)
display(fig)
figh = plot_hist(whole_intv.view(trans_ts), bins=50, title="GBP/USD Daily – Histogram of Transformed",
name="differenced only")
plot_hist(whole_intv.view(trans_ihs_ts), fig=figh, bins=50, name="differenced and IHS transformed")
display(figh)
detrans_ts = trans_ihs.detransform(train_intv.view(trans_ihs_ts), train_intv.prev_view())
fig = plot_ts(whole_intv.view(), title="GBP/USD Daily")
plot_ts(detrans_ts, color="red", name="detransformed train", fig=fig)
display(fig)
# .csv available to download at:
# https://ourworldindata.org/explorers/coronavirus-data-explorer
covid_data = pd.read_csv("data/covid-data.csv")
covid_data["date"] = pd.to_datetime(covid_data["date"], format="%Y-%m-%d")
covid_data.set_index("date", inplace=True)
covid_data.sort_index(ascending=True, inplace=True)
loc = "Argentina"
ts = covid_data[covid_data.location == loc]["new_cases"]
ts = ts[~ts.isnull()]
plot_ts(ts, title=f"Covid-19 {loc}", engine="plotly", color="tab:blue")
train_intv = Interval(ts, begin=datetime(2020, 8, 1), end=datetime(2021, 3, 1))
trans = IHSTransformer(ts, interval=train_intv, lmb=None, verbose=True)
trans_ts = trans.transform(ts)
print(f"differenced only – skewness: {trans_ts.skew()}")
fig = plot_ts(trans_ts, engine="plotly", color="tab:blue",
title=f"Covid-19 New Cases in {loc} – Differenced")
plot_ts(train_intv.view(trans_ts), color="tab:red", fig=fig)
trans_ihs = IHSTransformer(ts, interval=train_intv, verbose=True)
trans_ihs_ts = trans_ihs.transform(ts)
print(f"differenced with IHS – skewness: {trans_ihs_ts.skew()}")
fig = plot_ts(trans_ihs_ts, engine="plotly", color="tab:blue",
title=f"Covid-19 New Cases in {loc} – IHS Transformed")
plot_ts(train_intv.view(trans_ihs_ts), color="tab:red", fig=fig)
# plot_acf and plot_pacf are only available with pyplot engine at the moment
display(plot_acf(trans_ihs_ts))
display(plot_pacf(trans_ihs_ts))
figh = plot_hist(whole_intv.view(trans_ts), engine="plotly", color="tab:blue",
title=f"Covid-19 New Cases in {loc} – Histogram of IHS Transformed",
name="differenced only")
plot_hist(whole_intv.view(trans_ihs_ts), fig=figh, name="differenced with IHS", color="tab:orange")
detrans_ts = trans_ihs.detransform(train_intv.view(trans_ihs_ts), train_intv.prev_view())
fig = plot_ts(ts, title=f"Covid-19 {loc}", engine="plotly", color="tab:blue")
plot_ts(train_intv.view(ts), color="yellow", fig=fig)
plot_ts(detrans_ts, color="tab:red", name="detransformed IHS train", fig=fig)