import matplotlib.pyplot as plt import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler, MinMaxScaler from statsmodels.tsa.holtwinters import ExponentialSmoothing from IPython.display import display # Определим функцию сглаживания временного ряда, она понадобится позже def smooth_time_series(ts): ## 1. Метод скользящего окна ## Параметр window задает ширину окна усреднения значений #return ts.rolling(window=5).mean() ## 2. Метод экспоненциального сглаживания (метод Хольта-Уинтерса) ## варианты для параметра trend: "add", "mul", "additive", "multiplicative", None ## варианты для параметра seasonal: "add", "mul", "additive", "multiplicative", None ## seasonal_periods задает для модели предполагаемый интервал сезонности, ## когда ВР будет иметь похожие уровни и тенденции model = ExponentialSmoothing(ts, trend="additive", seasonal="additive", seasonal_periods=5) return model.fit().fittedvalues ## Для чтения из файла необходимо взять временные ряды из предложенных наборов ## и сохранить в csv файл как показано в примере, сформировав датасет dataset = pd.read_csv("ts2.csv", delimiter=";") ## после того как файл был прочтен, можно вывести содержимое временных рядов в консоль print(dataset) ## для выполнения первой части задания необходимо подобрать метод ## и параметры сглаживания временного ряда ## для этого выше реализован пример функции sds = dataset.apply(smooth_time_series) plt.plot(sds, label='Сглаженный временной ряд') plt.plot(dataset, label='Исходный временной ряд') plt.show() df = pd.DataFrame(MinMaxScaler().fit_transform(sds), columns=sds.columns) print(df) # расчет степени корреляции между сглаженными временными рядами matrix = df.corr() print(matrix) # для примера сравним корреляцию для несглаженных временных рядов matrix2 = dataset.corr() print(matrix2) # визуализация матрицы корреляции plt.imshow(matrix, cmap='Blues') # добавление цветовой шкалы plt.colorbar() # для диаграммы понадобятся имена временных рядов variables = [] for i in matrix.columns: variables.append(i) # Метки добавляются на диаграммы plt.xticks(range(len(matrix)), variables, rotation=45, ha='right') plt.yticks(range(len(matrix)), variables) plt.show()