62 lines
3.0 KiB
Python
62 lines
3.0 KiB
Python
import matplotlib.pyplot as plt
|
||
import pandas as pd
|
||
from sklearn.preprocessing import StandardScaler, MinMaxScaler
|
||
from statsmodels.tsa.holtwinters import ExponentialSmoothing
|
||
|
||
# Определим функцию сглаживания временного ряда, она понадобится позже
|
||
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)
|
||
plt.plot(dataset)
|
||
plt.legend(['sm first', 'sm second', 'sm third', 'first', 'second', 'third'])
|
||
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() |