This commit is contained in:
Anton Romanov 2025-02-13 10:24:40 +04:00
commit 4db88e4641
8 changed files with 97 additions and 0 deletions

BIN
MDA/Task.docx Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
MDA/datasets/statistic.xls Normal file

Binary file not shown.

63
MDA/project/main.py Normal file
View File

@ -0,0 +1,63 @@
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()

17
MDA/project/ts.csv Normal file
View File

@ -0,0 +1,17 @@
Features count by week;Testing time by week
3;2.5
5;2.833333333
6;2.966666667
9;3.066666667
16;4.383333333
16;6.466666667
16;5.416666667
25;5.433333333
29;5.583333333
42;5.683333333
42;5.15
50;5.633333333
54;6.033333333
58;12.86666667
59;6.783333333
60;4.1
1 Features count by week Testing time by week
2 3 2.5
3 5 2.833333333
4 6 2.966666667
5 9 3.066666667
6 16 4.383333333
7 16 6.466666667
8 16 5.416666667
9 25 5.433333333
10 29 5.583333333
11 42 5.683333333
12 42 5.15
13 50 5.633333333
14 54 6.033333333
15 58 12.86666667
16 59 6.783333333
17 60 4.1

17
MDA/project/ts2.csv Normal file
View File

@ -0,0 +1,17 @@
first;second;third
3;2.5;1
2;2.833333333;2
3;2.966666667;3
3;3.066666667;4
4;4.383333333;5
6;6.466666667;6
5;5.416666667;7
5;5.433333333;8
5;5.583333333;9
5;5.683333333;10
5;5.15;11
5;5.633333333;12
6;6.033333333;13
12;12.86666667;14
6;6.78333333;15
6;6.5;16
1 first second third
2 3 2.5 1
3 2 2.833333333 2
4 3 2.966666667 3
5 3 3.066666667 4
6 4 4.383333333 5
7 6 6.466666667 6
8 5 5.416666667 7
9 5 5.433333333 8
10 5 5.583333333 9
11 5 5.683333333 10
12 5 5.15 11
13 5 5.633333333 12
14 6 6.033333333 13
15 12 12.86666667 14
16 6 6.78333333 15
17 6 6.5 16