dd/MDA/project/main.py
2025-02-13 11:06:03 +04:00

62 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()