commit 4db88e4641c7eb1c1d847826419e879f4798594b Author: Anton Romanov Date: Thu Feb 13 10:24:40 2025 +0400 initial diff --git a/MDA/Task.docx b/MDA/Task.docx new file mode 100644 index 0000000..0f0c9b5 Binary files /dev/null and b/MDA/Task.docx differ diff --git a/MDA/datasets/NN3_COMPLETE.xls b/MDA/datasets/NN3_COMPLETE.xls new file mode 100644 index 0000000..16c7ed5 Binary files /dev/null and b/MDA/datasets/NN3_COMPLETE.xls differ diff --git a/MDA/datasets/NN3_REDUCED.xls b/MDA/datasets/NN3_REDUCED.xls new file mode 100644 index 0000000..ec3213d Binary files /dev/null and b/MDA/datasets/NN3_REDUCED.xls differ diff --git a/MDA/datasets/cif-dataset.xls b/MDA/datasets/cif-dataset.xls new file mode 100644 index 0000000..8750d08 Binary files /dev/null and b/MDA/datasets/cif-dataset.xls differ diff --git a/MDA/datasets/statistic.xls b/MDA/datasets/statistic.xls new file mode 100644 index 0000000..ff7f79b Binary files /dev/null and b/MDA/datasets/statistic.xls differ diff --git a/MDA/project/main.py b/MDA/project/main.py new file mode 100644 index 0000000..d3541c9 --- /dev/null +++ b/MDA/project/main.py @@ -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() \ No newline at end of file diff --git a/MDA/project/ts.csv b/MDA/project/ts.csv new file mode 100644 index 0000000..7eee3a2 --- /dev/null +++ b/MDA/project/ts.csv @@ -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 diff --git a/MDA/project/ts2.csv b/MDA/project/ts2.csv new file mode 100644 index 0000000..92c5039 --- /dev/null +++ b/MDA/project/ts2.csv @@ -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