Spaces:
Runtime error
Runtime error
import logging | |
import math | |
import matplotlib.pyplot as plt | |
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf | |
import numpy as np | |
import pandas as pd | |
import seaborn as sns | |
from sklearn.preprocessing import MinMaxScaler | |
class Visualiser(): | |
def __init__(self) -> None: | |
logging.debug('Init Visualiser') | |
self.scaler = MinMaxScaler() | |
def fit(self, data: pd.DataFrame): | |
self.data = data | |
self.norm_data = pd.DataFrame( | |
self.scaler.fit_transform(data.values), | |
columns=data.columns, | |
index=data.index) | |
# ------------ # | |
# ACF and PACF # | |
# ------------ # | |
def plot_auto_correlation(self, func): | |
n_rows = len(self.data.columns) | |
fig, axs = plt.subplots( | |
n_rows, | |
1, | |
figsize=(8, 2*n_rows), | |
sharex=True, | |
sharey=True) | |
for i, col in enumerate(self.data.columns): | |
func(self.data[col], ax=axs[i], zero=False) | |
axs[i].set_title(f'Autocorrelation - {col}') | |
fig.tight_layout() | |
return fig | |
def acf(self): | |
return self.plot_auto_correlation(plot_acf) | |
def pacf(self): | |
return self.plot_auto_correlation(plot_pacf) | |
# ----- Enf of [ACF and PACF] ----- # | |
def corr(self): | |
# Generate a mask for the upper triangle | |
corr = self.data.corr(numeric_only=True) | |
mask = np.triu(np.ones_like(corr, dtype=bool)) | |
fig, ax = plt.subplots(figsize=(8, 8)) | |
sns.heatmap( | |
corr, | |
mask=mask, | |
square=True, | |
annot=True, | |
cmap='coolwarm', | |
linewidths=.5, | |
cbar_kws={"shrink": .5}, | |
ax=ax) | |
return fig | |
def distributions(self, norm=True): | |
data: pd.DataFrame = self.norm_data if norm else self.data | |
plot_col = min(math.ceil(math.sqrt(data.shape[1])), 5) | |
plot_row = math.ceil(data.shape[1] / plot_col) | |
fig, axs = plt.subplots( | |
plot_row, | |
plot_col, | |
figsize=(4*plot_row, 1.5*plot_col), | |
sharex=norm, | |
sharey=norm) | |
for idx, col in enumerate(data.columns): | |
axs_x = math.floor(idx/plot_col) | |
axs_y = idx - axs_x * plot_col | |
ax = axs[axs_x, axs_y] | |
# sns.distplot(self.ts_df[col], ax=axs[axs_x, axs_y]) | |
sns.histplot(data[col], ax=ax, kde=True) | |
ax.set(xlabel=None) | |
ax.set_title(col) | |
fig.suptitle(f'Distributions - Normalised ({str(norm)})') | |
return fig | |