List of commits:
Subject Hash Author Date (UTC)
- Изменено название работы на титульном листе. - Изменён год внизу титульного листа с 2021 на 2022. - Изменена аннотация. - Изменено введение. - Удалены главы с SciPy и JupyterLab. - Добавлена глава с Statsmodels и анализом временных рядов. - Изменено название второй главы. - Изменена вторая глава (2.1 остался без изменений). - Изменено заключение. - Добавлено приложение. c4609dd995779a49d656f0ebea2b096ff0e8228a YaYaroslav 2022-04-20 11:34:43
Push test. 8db6eb75bbf577d01ddcb6a368ecfc3653684e9c YaYaroslav 2022-04-19 09:15:00
Начальный коммит для проверки доступа к репозиторию e4a7dccb8c06611adb4162922c2679d67cbc3d8d OAM 2022-04-19 07:06:49
Commit c4609dd995779a49d656f0ebea2b096ff0e8228a - - Изменено название работы на титульном листе. - Изменён год внизу титульного листа с 2021 на 2022. - Изменена аннотация. - Изменено введение. - Удалены главы с SciPy и JupyterLab. - Добавлена глава с Statsmodels и анализом временных рядов. - Изменено название второй главы. - Изменена вторая глава (2.1 остался без изменений). - Изменено заключение. - Добавлено приложение.
Author: YaYaroslav
Author date (UTC): 2022-04-20 11:34
Committer name: YaYaroslav
Committer date (UTC): 2022-04-20 11:34
Parent(s): 8db6eb75bbf577d01ddcb6a368ecfc3653684e9c
Signer:
Signing key:
Signing status: N
Tree: 685f5988e186698e0e7cdc2d0debc8732f10c4b0
File Lines added Lines deleted
.gitignore 1 6
NIR_otchet.tex 211 20
README.md 13 20
intro.tex 1 1
part1.tex 13 28
part2.tex 120 266
pics/13.png 0 0
pics/14.png 0 0
pics/15.png 0 0
pics/16.png 0 0
pics/17.png 0 0
pics/18.png 0 0
pics/19.png 0 0
pics/20.png 0 0
pics/21.png 0 0
pics/22.png 0 0
pics/23.png 0 0
pics/24.png 0 0
pics/25.png 0 0
pics/26.png 0 0
pics/27.png 0 0
File .gitignore changed (mode: 100644) (index 510e4b9..a93ac2d)
1 # These are some examples of commonly ignored file patterns.
2 # You should customize this list as applicable to your project.
3 # Learn more about .gitignore:
4 # https://www.atlassian.com/git/tutorials/saving-changes/gitignore
5
6 1 ## Core latex/pdflatex auxiliary files: ## Core latex/pdflatex auxiliary files:
7 2 *.aux *.aux
8 3 *.lof *.lof
 
... ... TSWLatexianTemp*
222 217 /auto/* /auto/*
223 218
224 219 # expex forward references with \gathertags # expex forward references with \gathertags
225 *-tags.tex
220 *-tags.tex
File NIR_otchet.tex changed (mode: 100644) (index 98b9584..7689b88)
63 63 \large \large
64 64
65 65 \begin{center} \begin{center}
66 Производственная практика: научно-исследовательская работа \\
66 Научно-исследовательская работа \\
67 67
68 68 \medskip \medskip
69 69
70 70 \textbf{\Large \textbf{\Large
71 Исследование корреляций динамики метеопараметров в близких точках наблюдений
71 Разработка сценариев анализа динамики метеопараметров
72 72 } }
73 73
74 74 \end{center} \end{center}
 
79 79 Студент группы ИС-Б18 & \useFRMfield{xtitlesign} & Липинский Я. Д.\\ Студент группы ИС-Б18 & \useFRMfield{xtitlesign} & Липинский Я. Д.\\
80 80 & & \\ & & \\
81 81 Руководитель & & \\ Руководитель & & \\
82 к.т.н., доцент отд.ИКС & \useFRMfield{xtitlesign} & Мирзеабасов О. А.
82 к.т.н., доцент отд. ИКС & \useFRMfield{xtitlesign} & Мирзеабасов О. А.
83 83 \end{tabular*} \end{tabular*}
84 84
85 85
 
87 87 \large \large
88 88
89 89 \begin{center} \begin{center}
90 Обнинск, 2021 г
90 Обнинск, 2022 г
91 91 \end{center} \end{center}
92 92
93 93 \onehalfspacing \onehalfspacing
 
102 102 % возможно, кол-во источников придется вставлять вручную % возможно, кол-во источников придется вставлять вручную
103 103 Работа \total{page} стр., \total{table} табл., \total{figure} рис. , \totalmycitecounts ист. Работа \total{page} стр., \total{table} табл., \total{figure} рис. , \totalmycitecounts ист.
104 104
105 ЯЗЫК ПРОГРАММИРОВАНИЯ PYTHON, АНАЛИЗ ВРЕМЕННЫХ РЯДОВ, МЕТЕОДАННЫЕ, ВРЕМЕННЫЕ РЯДЫ, NUMPY, SCIPY, PANDAS.
105 ЯЗЫК ПРОГРАММИРОВАНИЯ PYTHON, АНАЛИЗ ВРЕМЕННЫХ РЯДОВ, МЕТЕОДАННЫЕ, ВРЕМЕННЫЕ РЯДЫ, NUMPY, STATSMODELS, PANDAS.
106 106
107 Научно-исследовательская работа посвящена исследованию корреляций динамики метеопараметров в близких точках наблюдений. Конечная цель работы – изучение динамики метеопараметров для нескольких выбранных точек наблюдений в рамках одного региона.
107 Научно-исследовательская работа посвящена разработке сценариев анализа динамики метеопараметров. Конечная цель работы – создание сценария на языке Python для обработки и визуализации динамики температуры и осадков.
108 108
109 Процесс разработки включает в себя изучение языка прогаммирования Python, библиотеки, реализующей математические алгоритмы, NumPy, библиотеки, предназначенной для выполнения научных и инженерных расчётов, SciPy и библиотеки Pandas для обработки и анализа данных.
109 Процесс разработки включает в себя изучение методов декомпозиции временных рядов, языка прогаммирования Python, библиотеки Statsmodels, предоставляющей набор методов статистического тестирования и моделирования, библиотеки Pandas для обработки и анализа данных.
110 110
111 111 \pagebreak \pagebreak
112 112 \thispagestyle{empty} \thispagestyle{empty}
 
... ... NumPy - Numerical Python
160 160 \section*{\centering ЗАКЛЮЧЕНИЕ} \section*{\centering ЗАКЛЮЧЕНИЕ}
161 161 \addcontentsline{toc}{section}{ЗАКЛЮЧЕНИЕ} \addcontentsline{toc}{section}{ЗАКЛЮЧЕНИЕ}
162 162
163 В ходе проделанной работы был проведен разведочный анализ и визуализация данных по температуре и осадкам в двух точках наблюдения. Были выполнены следующие задачи:
163 В ходе проделанной работы был создан сценарий на языке Python для обработки и визуализации динамики температуры и осадков. Были выполнены следующие задачи:
164 164
165 165 \begin{itemize} \begin{itemize}
166 \item изучение языка программирования Python и ознакомление с пакетами numpy, scipy, pandas;
166 \item изучены методы декомпозиции временных рядов;
167 167
168 \item ознакомление с организацией доступа к метеоданным;
168 \item изучены пакеты Python для работы с временными рядами;
169 169
170 \item выбор региона и точек наблюдения, загрузка данных;
170 \item подготовлены данные по динамике температуры и осадкам;
171 171
172 \item сравнение динамики температур и осадков в разных точках наблюдения.
172 \item разработан сценарий Python для декомпозиции и визуализации подготовленных данных.
173 173 \end{itemize} \end{itemize}
174 174
175 175 % оформление библиографии - вариант с БД % оформление библиографии - вариант с БД
 
... ... NumPy - Numerical Python
182 182
183 183 \pagebreak \pagebreak
184 184
185 %\renewcommand{\appendixpagename}{\centering Приложения}
185 \renewcommand{\appendixpagename}{\centering Приложения}
186 186
187 187
188 188 \begin{appendices} \begin{appendices}
189 %\renewcommand{\thesection}{\Asbuk{section}}
190 %\makeatletter
191 %\renewcommand{\theProgram}{\thesection.\@arabic\c@Program}
192 %\makeatother
189 \renewcommand{\thesection}{\Asbuk{section}}
190 \makeatletter
191 \renewcommand{\theProgram}{\thesection.\@arabic\c@Program}
192 \makeatother
193 193
194 194 % каждое приложение задается следующей командой, нумерация - русскими буквами % каждое приложение задается следующей командой, нумерация - русскими буквами
195 %\section{\centering }
195 \section{\centering }
196 196 % независимая нумерация листингов в каждом приложении % независимая нумерация листингов в каждом приложении
197 197 \setcounter{Program}{0} \setcounter{Program}{0}
198
199
198 \begin{MyCode}
199 import os
200 import sys
201 import pandas as pd
202 import numpy as np
203 import matplotlib.pyplot as plt
204 import seaborn as sns
205 from sys import argv
206 from statsmodels.tsa.seasonal import seasonal_decompose
207 from pandas.plotting import register_matplotlib_converters
208
209 script, data1, data2 = argv
210
211 city1 = data1.replace(".txt", "")
212 city2 = data2.replace(".txt", "")
213
214 register_matplotlib_converters()
215
216 original_stdout = sys.stdout
217
218 # Считывание и обработка датасетов.
219 print("Считывание и обработка данных.")
220 data1 = pd.read_csv(data1, sep=";", header=None)
221 data1.columns = ["index", "year", "month", "day", "temp_quality", "temp_min", "temp_avg", "temp_max", "precipitation"]
222 data2 = pd.read_csv(data2, sep=";", header=None)
223 data2.columns = ["index", "year", "month", "day", "temp_quality", "temp_min", "temp_avg", "temp_max", "precipitation"]
224 df1 = pd.DataFrame({'year': data1["year"],
225 'month': data1["month"],
226 'day': data1["day"]})
227 df1["date"] = pd.to_datetime(df1)
228 df1["temp_avg"] = data1["temp_avg"]
229 df1["precipitation"] = pd.to_numeric(data1["precipitation"],
230 errors='coerce')
231 df2 = pd.DataFrame({'year': data2["year"],
232 'month': data2["month"],
233 'day': data2["day"]})
234 df2["date"] = pd.to_datetime(df2)
235 df2["temp_avg"] = data2["temp_avg"]
236 df2["precipitation"] = pd.to_numeric(data2["precipitation"],
237 errors='coerce')
238
239 # Стилизация графиков.
240 sns.set_style("darkgrid")
241 plt.rc("figure", figsize=(12, 9))
242 plt.rc("font", size=13)
243 plt.rc("lines", markersize=5)
244 plt.rc("lines", linewidth=3)
245
246 # Создание папки для хранения графиков.
247 if not os.path.exists("Result"):
248 os.makedirs("Result")
249
250 # Построения графика среднегодовой температуры города 1.
251 print("Построения графика среднегодовой температуры города " + city1 + ".")
252 result1 = df1.groupby('year').mean()
253 plt.plot(result1.index, result1['temp_avg'])
254 plt.title("Среднегодовая температура (" + city1 + ")")
255 plt.xlabel('Год')
256 plt.ylabel('Температура (цельсии)')
257 z = np.polyfit(result1.index, result1['temp_avg'], 1)
258 p = np.poly1d(z)
259 plt.plot(result1.index, p(result1.index), "r--")
260 plt.savefig('Result/' + city1 + '_Temperature_Plot.png')
261 plt.clf()
262
263 # Построения графика количества осадков за год города 1.
264 print("Построения графика количества осадков за год города " + city1 + ".")
265 plt.plot(result1.index, result1['precipitation'])
266 plt.title("Количество осадков за год (" + city1 + ")")
267 plt.xlabel('Год')
268 plt.ylabel('Количество осадков')
269 z = np.polyfit(result1.index, result1['precipitation'], 1)
270 p = np.poly1d(z)
271 plt.plot(result1.index, p(result1.index), "r--")
272 plt.savefig('Result/' + city1 + '_Precipitations_Plot.png')
273 plt.clf()
274
275 # Построения графика среднегодовой температуры города 2.
276 print("Построения графика среднегодовой температуры города " + city2 + ".")
277 result2 = df2.groupby('year').mean()
278 plt.plot(result2.index, result2['temp_avg'])
279 plt.title("Среднегодовая температура (" + city2 + ")")
280 plt.xlabel('Год')
281 plt.ylabel('Температура (цельсии)')
282 z = np.polyfit(result2.index, result2['temp_avg'], 1)
283 p = np.poly1d(z)
284 plt.plot(result2.index, p(result2.index), "r--")
285 plt.savefig('Result/' + city2 + '_Temperature_Plot.png')
286 plt.clf()
287
288 # Построения графика количества осадков за год города 2.
289 print("Построения графика количества осадков за год города " + city2 + ".")
290 plt.plot(result2.index, result2['precipitation'])
291 plt.title("Количество осадков за год (" + city2 + ")")
292 plt.xlabel('Год')
293 plt.ylabel('Количество осадков')
294 z = np.polyfit(result2.index, result2['precipitation'], 1)
295 p = np.poly1d(z)
296 plt.plot(result2.index, p(result2.index), "r--")
297 plt.savefig('Result/' + city2 + '_Precipitations_Plot.png')
298 plt.clf()
299
300 # Построения графика корреляции среднегодовой температуры двух городов.
301 print("Построения графика корреляции среднегодовой температуры двух городов.")
302 plt.plot(result1.index, result1['temp_avg'],
303 label="Среднегодовая температура в городе " + city1)
304 plt.plot(result2.index, result2['temp_avg'],
305 label="Среднегодовая температура в городе " + city2)
306 plt.title("Среднегодовая температура в городах " + city1 + " и " + city2)
307 plt.xlabel('Год')
308 plt.ylabel('Температура (цельсии)')
309 plt.legend()
310 plt.savefig('Result/Correlation_Temperature_Plot.png')
311 print("Расчёт корреляции среднегодовой температуры двух городов.")
312 corr1 = np.corrcoef(result1['temp_avg'], result2['temp_avg'])
313 with open('Result/Temperature_Correlation.txt', 'w') as f:
314 sys.stdout = f
315 print('Матрица корреляции температур:\n')
316 print(corr1)
317 sys.stdout = original_stdout
318 plt.clf()
319
320 # Построения графика корреляции количества осадков за год двух городов.
321 print("Построения графика корреляции количества осадков за год двух городов.")
322 plt.plot(result1.index, result1['precipitation'],
323 label="Среднегодовые осадки в городе " + city1)
324 plt.plot(result2.index, result2['precipitation'],
325 label="Среднегодовые осадки в городе " + city2)
326 plt.title("Среднегодовые осадки в городах " + city1 + " и " + city2)
327 plt.xlabel('Год')
328 plt.ylabel('Количество осадков')
329 plt.legend()
330 plt.savefig('Result/Correlation_Precipitations_Plot.png')
331 print("Расчёт корреляции количества осадков за год двух городов.")
332 corr2 = np.corrcoef(result1['precipitation'], result2['precipitation'])
333 with open('Result/Precipitations_Correlation.txt', 'w') as f:
334 sys.stdout = f
335 print('Матрица корреляции осадков:\n')
336 print(corr2)
337 sys.stdout = original_stdout
338 plt.clf()
339
340 # Построения диаграммы размаха среднегодовой температуры города 1.
341 print("Построения диаграммы размаха среднегодовой температуры города " + city1 + ".")
342 sns.boxplot(data=df1, x='month', y='temp_avg')
343 plt.xlabel('Месяц')
344 plt.ylabel('Температура (цельсии)')
345 plt.title('Температура в городе ' + city1)
346 plt.savefig('Result/' + city1 + '_Temperature_Boxplot.png')
347 plt.clf()
348
349 # Построения диаграммы размаха среднегодовой температуры города 2.
350 print("Построения диаграммы размаха среднегодовой температуры города " + city2 + ".")
351 sns.boxplot(data=df2, x='month', y='temp_avg')
352 plt.xlabel('Месяц')
353 plt.ylabel('Температура (цельсии)')
354 plt.title('Температура в городе ' + city2)
355 plt.savefig('Result/' + city2 + '_Temperature_Boxplot.png')
356 plt.clf()
357
358 # Декомпозиция данных по температуре города 1.
359 print("Декомпозиция данных по температуре города " + city1 + ".")
360 result = seasonal_decompose(result1['temp_avg'], model='additive', period=12)
361 result.plot()
362 plt.savefig('Result/' + city1 + '_Temperature_Decomposition.png')
363 plt.clf()
364
365 # Декомпозиция данных по осадкам города 1.
366 print("Декомпозиция данных по осадкам города " + city1 + ".")
367 result = seasonal_decompose(result1['precipitation'], model='additive', period=12)
368 result.plot()
369 plt.savefig('Result/' + city1 + '_Precipitations_Decomposition.png')
370 plt.clf()
371
372 # Декомпозиция данных по температуре города 2.
373 print("Декомпозиция данных по температуре города " + city2 + ".")
374 result = seasonal_decompose(result2['temp_avg'], model='additive', period=12)
375 result.plot()
376 plt.savefig('Result/' + city2 + '_Temperature_Decomposition.png')
377 plt.clf()
378
379 # Декомпозиция данных по осадкам города 2.
380 print("Декомпозиция данных по осадкам города " + city2 + ".")
381 result = seasonal_decompose(result2['precipitation'], model='additive', period=12)
382 result.plot()
383 plt.savefig('Result/' + city2 + '_Precipitations_Decomposition.png')
384 plt.clf()
385
386 print("\nРабота успешно завершена!")
387 \end{MyCode}
388 \begin{Program}
389 \caption{Код реализации скрипта}\label{app1}
390 \end{Program}
200 391 \end{appendices} \end{appendices}
201 392
202 393 \end{document} \end{document}
File README.md changed (mode: 100644) (index 39af52c..0b2de41)
1 # README #
1 # nir4ist
2 Шаблон отчета по НИР для студентов направления "Инф.системы и технологии" ИАТЭ НИЯУ МИФИ
2 3
3 This README would normally document whatever steps are necessary to get your application up and running.
4 Проект перенесен с GitHub, там больше не поддерживается
4 5
5 ### What is this repository for? ###
6 Основные файлы (выберите подходящий):
6 7
7 * Quick summary
8 * Version
9 * [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo)
8 BAK_vkr.tex - шаблон для бакалаврской работы
10 9
11 ### How do I get set up? ###
10 MAG_disser.tex - шаблон для магистерской диссертации
12 11
13 * Summary of set up
14 * Configuration
15 * Dependencies
16 * Database configuration
17 * How to run tests
18 * Deployment instructions
12 MSKMAG_disser.tex - шаблон, использовавшийся для защит в 2018 г.
19 13
20 ### Contribution guidelines ###
14 Все шаблоны используют вспомогательные и включаемые файлы:
21 15
22 * Writing tests
23 * Code review
24 * Other guidelines
16 rbiblio.bib - пример библиографичской базы данных BibTeX (в примерах используется biblatex и biber - укажите biber в настройках TeXstudio!)
25 17
26 ### Who do I talk to? ###
18 intro.tex - пример введения
27 19
28 * Repo owner or admin
29 * Other community or team contact
20 pert1.tex, part2.tex - основные разделы документа, при необходимости их можно добавлять
21
22 Примеры использования библилографии, вставки рисунков и таблиц приведены в тексте.
File intro.tex changed (mode: 100644) (index e324e68..a7b50e3)
3 3
4 4 Эти данные могут быть применены для проведения исследований окружающей среды российскими и зарубежными специалистами. Эти данные могут быть применены для проведения исследований окружающей среды российскими и зарубежными специалистами.
5 5
6 В рамках данной научно-исследовательской работы были приняты меры по исследованию корреляций динамики метеопараметров в близких точках наблюдений.
6 В рамках данной научно-исследовательской работы были приняты меры по обработке и визуализации динамики температуры и осадков путём декомпозиции временных рядов.
File part1.tex changed (mode: 100644) (index 1090bb5..4d6a4be)
... ... NumPy (сокращенно от Numerical Python)— библиотека с о
54 54
55 55 Математические алгоритмы, реализованные на интерпретируемых языках (например, Python), часто работают гораздо медленнее тех же алгоритмов, реализованных на компилируемых языках (например, Фортран, Си, Java). Библиотека NumPy предоставляет реализации вычислительных алгоритмов (в виде функций и операторов), оптимизированные для работы с многомерными массивами. В результате любой алгоритм, который может быть выражен в виде последовательности операций над массивами (матрицами) и реализованный с использованием NumPy, работает так же быстро, как эквивалентный код, выполняемый в MATLAB. Математические алгоритмы, реализованные на интерпретируемых языках (например, Python), часто работают гораздо медленнее тех же алгоритмов, реализованных на компилируемых языках (например, Фортран, Си, Java). Библиотека NumPy предоставляет реализации вычислительных алгоритмов (в виде функций и операторов), оптимизированные для работы с многомерными массивами. В результате любой алгоритм, который может быть выражен в виде последовательности операций над массивами (матрицами) и реализованный с использованием NumPy, работает так же быстро, как эквивалентный код, выполняемый в MATLAB.
56 56
57 \subsection{Библиотека SciPy}
57 \subsection{Библиотека Statsmodels}
58 58
59 SciPy — библиотека для языка программирования Python с открытым исходным кодом, предназначенная для выполнения научных и инженерных расчётов.
59 Statsmodels предоставляет набор методов статистического тестирования и моделирования, а также инструменты, предназначенные для анализа временных рядов. Также может быть использована для прогнозирования.
60 60
61 Возможности:
62 \begin{itemize}
63 \item поиск минимумов и максимумов функций;
64
65 \item вычисление интегралов функций;
66
67 \item поддержка специальных функций;
68
69 \item обработка сигналов;
70
71 \item обработка изображений;
72
73 \item работа с генетическими алгоритмами;
74
75 \item решение обыкновенных дифференциальных уравнений.
76 \end{itemize}
77 61 Для визуализации результатов расчётов часто применяется библиотека Matplotlib. Для визуализации результатов расчётов часто применяется библиотека Matplotlib.
78 62
79 63 \subsection{Библиотека Matplotlib} \subsection{Библиотека Matplotlib}
 
... ... Matplotlib является гибким, легко конфигурируем
103 87 \item спектральные диаграммы (spectrogram). \item спектральные диаграммы (spectrogram).
104 88 \end{itemize} \end{itemize}
105 89
90 \subsection{Анализ временных рядов}
106 91
107 \subsection{Пользовательский интерфейс JupyterLab}
92 Анализ временных рядов – совокупность статистических методов для выявления составляющих временного ряда и его прогнозирования.
108 93
109 JupyterLab — это интерактивная среда разработки для работы с блокнотами, кодом и данными. JupyterLab позволяет использовать текстовые редакторы, терминалы, средства просмотра файлов данных и другие настраиваемые компоненты рядом с блокнотами в разбитой на вкладки рабочей области.
94 Временной ряд – последовательность статистических данных, собранных в разные моменты времени, о значении каких-либо параметров исследуемого процесса. Каждое значение временного ряда называется уровнем временного ряда. Во временном ряде каждому уровню должно быть указанно время измерения или номер измерения по порядку. Методы анализа временных рядов существенно отличаются от методов анализа данных простой выборки. При анализе временного ряда исследователя интересуют не только статистические характеристики временного ряда, но и учитывается взаимосвязь измерений со временем.
110 95
111 JupyterLab позволяет организовать рабочую зону с помощью блокнотов, текстовых файлов, терминалов и выводов блокнотов.
96 Временные ряды, как правило, возникают в результате измерения некоторого показателя. Это могут быть как характеристики технических систем, так и показатели природных, социально-экономических явлений и процессов. Например, динамика курса валюты или курса акции, при анализе которых пытаются определить основное направление развития. Или, например, анализ динамики продаж компании с целью планирования остатков на складе.
112 97
113 JupyterLab обеспечивает высокий уровень интеграции между блокнотами, документами и действиями:
114 \begin{itemize}
115 \item используется drag-and-drop для того чтобы можно было переупорядочить ячейки и скопировать их между блокнотами;
98 Основная цель анализа временного ряда – построить прогноз его значений на будущие периоды. А основные задачи анализа временного ряда – понять, под воздействием каких компонент формируется значение временного ряда, и построить математическую модель для каждой компоненты или их совокупности. Любой временной ряд можно разложить на следующие составляющие: тренд, сезонную составляющую, циклическую составляющую и случайную составляющую. Первые три компоненты образуют неслучайную составляющую временного ряда. Случайная составляющая присутствует в любом временном ряде. А а вот присутствие в структуре временного ряда компонент неслучайной составляющей не обязательно.
116 99
117 \item блоки кода выполняются интерактивно прямо из текстовых файлов (.py, .R, .md, .tex и т. д.);
100 Подходы к моделированию временного ряда можно разделить на два направления:
101 \begin{itemize}
102 \item моделирование неслучайной составляющей в совокупности;
118 103
119 \item консоль кода можно связать с ядром блокнота, чтобы изучать код в интерактивном режиме, не загромождая блокнот временными правками;
104 \item разложение временного ряда на составляющие компоненты и моделирование значений каждой компоненты в отдельности.
105 \end{itemize}
120 106
121 \item Возможность редактирования популярных форматов файлов с предварительным просмотром в реальном времени, такие как Markdown, JSON, CSV, Vega, VegaLite и другие.
122 \end{itemize}
107 Статистические методы прогнозирования делятся на алгоритмические методы и аналитические методы. К алгоритмическим методам относят методы простой и взвешенной скользящей средней. К аналитическим методам относят методы прогнозной экстраполяции на основе кривых роста в виде функций времени. В случае наличия сезонной или циклической компоненты во временном ряду проводят анализ периодических колебаний или спектральный анализ временного ряда.
File part2.tex changed (mode: 100644) (index 125ec47..fb3ee11)
1 1 % вторая часть % вторая часть
2 2
3 \section{Анализ динамики температуры и осадков}
3 \section{Демонстрация работы скрипта}
4 4
5 5 \subsection{Получение данных} \subsection{Получение данных}
6 6
7 Данные по температуре и осадках были взяты с сайта http://aisori-m.meteo.ru/. Пример запроса в базу данных приведён на рис.1
7 Данные по температуре и осадка были взяты с сайта http://aisori-m.meteo.ru/. Пример запроса в базу данных приведён на рис.1
8 8
9 9 \begin{figure}[H] \begin{figure}[H]
10 10 \centering \centering
 
41 41 \caption{Результат запроса в БД} \caption{Результат запроса в БД}
42 42 \label{fig:2} \label{fig:2}
43 43 \end{figure} \end{figure}
44 \subsection{Подготовка данных}
44 \subsection{Запуск скрипта}
45 45
46 Для работы с данными использовался язык программирования Python с подключёнными библиотеками Pandas, NumPy, SciPy и Matplotlib.
46 Перед запуском скрипта его необходимо переместить в папку с метеоданными, заранее переименованными по принципу *название города*.txt.
47 47
48 \begin{Program}[H]
49 \caption{Импорт необходимых библиотек} \label{lst:1}
50 \begin{MyCode}
51 import pandas as pd
52 import numpy as np
53 import scipy as sp
54 import matplotlib.pyplot as plt
55 \end{MyCode}
56 \end{Program}
57
58 Были заполнены датафреймы:
59
60 \begin{Program}[H]
61 \caption{Считывание днных о погоде в Москве} \label{lst:2}
62 \begin{MyCode}
63 data1 = pd.read_csv('DataSet1.txt', sep=";", header=None)
64 data1.columns = ["index", "year", "month", "day", "temp_quality",
65 "temp_min", "temp_avg", "temp_max", "precipitation"]
66 \end{MyCode}
67 \end{Program}
68
69 \begin{Program}[H]
70 \caption{Считывание днных о погоде в Нижнем Новгороде} \label{lst:3}
71 \begin{MyCode}
72 data2 = pd.read_csv('DataSet2.txt', sep=";", header=None)
73 data2.columns = ["index", "year", "month", "day", "temp_quality",
74 "temp_min", "temp_avg", "temp_max", "precipitation"]
75 \end{MyCode}
76 \end{Program}
77
78 где:
79 \begin{itemize}
80 \item data1 - датафрейм с данными о погоде в Москве;
81
82 \item data2 - датафрейм с данными о погоде в Нижнем Новгороде;
83
84 \item index - индекс ВМО;
85
86 \item year - год;
87
88 \item month - месяц;
89
90 \item day - день;
91
92 \item temp\_quality - общий признак качества температур;
93
94 \item temp\_min - минимальная температура воздуха;
95
96 \item temp\_avg - средняя температура воздуха;
97
98 \item temp\_max - максимальная температура воздуха;
99
100 \item precipitation - количество осадков.
101 \end{itemize}
102 Проверка заполнености датафреймов:
103
104 \begin{Program}[H]
105 \caption{Вывод датафрейма с Московскими данными} \label{lst:4}
106 \begin{MyCode}
107 data1
108 \end{MyCode}
109 \end{Program}
48 Скрипт запускается через коммандную строку Windows.
110 49
111 50 \begin{figure}[H] \begin{figure}[H]
112 51 \centering \centering
113 \includegraphics[width=0.50\linewidth]{pics/3}
114 \caption{Результат вывода Московских данных}
52 \includegraphics[width=0.75\linewidth]{pics/13}
53 \caption{Запуск скрипта}
115 54 \label{fig:3} \label{fig:3}
116 55 \end{figure} \end{figure}
117 56
118 \begin{Program}[H]
119 \caption{Вывод датафрейма с данными Нижнего Новгорода} \label{lst:5}
120 \begin{MyCode}
121 data2
122 \end{MyCode}
123 \end{Program}
124
125 \begin{figure}[H]
126 \centering
127 \includegraphics[width=0.50\linewidth]{pics/4}
128 \caption{Результат вывода данных Нижнего Новгорода}
129 \label{fig:4}
130 \end{figure}
131
132 Сформированы датафреймы, где содержатся только необходимые столбцы.
133
134 \begin{Program}[H]
135 \caption{Формирование нового датафрейма с Московскими данными} \label{lst:6}
136 \begin{MyCode}
137 df1 = pd.DataFrame({'year': data1["year"],
138 'month': data1["month"],
139 'day': data1["day"]})
140 df1["date"] = pd.to_datetime(df1)
141 df1["temp_avg"] = data1["temp_avg"]
142 df1["precipitation"] = pd.to_numeric(data1["precipitation"], errors='coerce')
143 df1
144 \end{MyCode}
145 \end{Program}
146
147 \begin{figure}[H]
148 \centering
149 \includegraphics[width=0.50\linewidth]{pics/5}
150 \caption{Результат вывода нового датафрейма с Московскими данными}
151 \label{fig:5}
152 \end{figure}
153
154 \begin{Program}[H]
155 \caption{Формирование нового датафрейма с данными Нижнего Новгорода} \label{lst:7}
156 \begin{MyCode}
157 df2 = pd.DataFrame({'year': data2["year"],
158 'month': data2["month"],
159 'day': data2["day"]})
160 df2["date"] = pd.to_datetime(df2)
161 df2["temp_avg"] = data2["temp_avg"]
162 df2["precipitation"] = pd.to_numeric(data2["precipitation"], errors='coerce')
163 df2
164 \end{MyCode}
165 \end{Program}
166
167 \begin{figure}[H]
168 \centering
169 \includegraphics[width=0.50\linewidth]{pics/6}
170 \caption{Результат вывода нового датафрейма с данными Нижнего Новгорода}
171 \label{fig:6}
172 \end{figure}
173
57 В командной строке необходимо перейти по пути, где лежит скрипт, с помощью команды cd. После этого запускается скрипт с двумя параметрами, представляющими из себя переименованные файлы с метеоданными.
174 58
59 После завершения работы скрипта, весь результат сохраняется в папке Result.
175 60
176 \subsection{Динамика температуры и осадков}
61 \subsection{Результат работы скрипта}
177 62
178 Построены графики среднегодовых температур и осадков в Москве и Нижнем Новгороде.
63 После завершения работы скрипта построены следующие графики:
179 64
180 \begin{Program}[H]
181 \caption{Формирование графика среднегодовой температуры в Москве} \label{lst:8}
182 \begin{MyCode}
183 result1 = df1.groupby('year').mean()
184 plt.plot(result1.index, result1['temp_avg'])
185 plt.title("Среднегодовая температура (Москва)")
186 plt.xlabel('Год')
187 plt.ylabel('Температура (цельсии)')
188 z = np.polyfit(result1.index, result1['temp_avg'], 1)
189 p = np.poly1d(z)
190 plt.plot(result1.index,p(result1.index),"r--")
191 plt.show()
192 \end{MyCode}
193 \end{Program}
194
195 \begin{figure}[H]
196 \centering
197 \includegraphics[width=0.75\linewidth]{pics/7}
198 \caption{График среднегодовой температуры в Москве}
199 \label{fig:7}
200 \end{figure}
201
202 \begin{Program}[H]
203 \caption{Формирование графика среднегодовых осадков в Москве} \label{lst:9}
204 \begin{MyCode}
205 plt.plot(result1.index, result1['precipitation'])
206 plt.title("Количество осадков за год (Москва)")
207 plt.xlabel('Год')
208 plt.ylabel('Количество осадков')
209 z = np.polyfit(result1.index, result1['precipitation'], 1)
210 p = np.poly1d(z)
211 plt.plot(result1.index,p(result1.index),"r--")
212 plt.show()
213 \end{MyCode}
214 \end{Program}
215
216 \begin{figure}[H]
217 \centering
218 \includegraphics[width=0.75\linewidth]{pics/8}
219 \caption{График среднегодовых осадков в Москве}
220 \label{fig:8}
221 \end{figure}
222
223 \begin{Program}[H]
224 \caption{Формирование графика среднегодовой температуры в Нижнем Новгороде} \label{lst:10}
225 \begin{MyCode}
226 result2 = df2.groupby('year').mean()
227 plt.plot(result2.index, result2['temp_avg'])
228 plt.title("Среднегодовая температура (Нижний-Новгород)")
229 plt.xlabel('Год')
230 plt.ylabel('Температура (цельсии)')
231 z = np.polyfit(result2.index, result2['temp_avg'], 1)
232 p = np.poly1d(z)
233 plt.plot(result2.index,p(result2.index),"r--")
234 plt.show()
235 \end{MyCode}
236 \end{Program}
237
238 \begin{figure}[H]
239 \centering
240 \includegraphics[width=0.75\linewidth]{pics/9}
241 \caption{График среднегодовой температуры в Нижнем Новгороде}
242 \label{fig:9}
243 \end{figure}
244
245 \begin{Program}[H]
246 \caption{Формирование графика среднегодовых осадков в Нижнем Новгороде} \label{lst:11}
247 \begin{MyCode}
248 plt.plot(result2.index, result2['precipitation'])
249 plt.title("Количество осадков за год (Нижний-Новгород)")
250 plt.xlabel('Год')
251 plt.ylabel('Количество осадков')
252 z = np.polyfit(result2.index, result2['precipitation'], 1)
253 p = np.poly1d(z)
254 plt.plot(result2.index,p(result2.index),"r--")
255 plt.show()
256 \end{MyCode}
257 \end{Program}
258
259 \begin{figure}[H]
260 \centering
261 \includegraphics[width=0.75\linewidth]{pics/10}
262 \caption{График среднегодовых осадков в Нижнем Новгороде}
263 \label{fig:10}
264 \end{figure}
265
266 Высчитан коэффициент корреляции для температур и осадков в разных точках наблюдения.
267
268 \begin{Program}[H]
269 \caption{Формирование графика среднегодовых температур} \label{lst:12}
270 \begin{MyCode}
271 plt.plot(result1.index, result1['temp_avg'],
272 label = "Среднегодовая температура в Москве")
273 plt.plot(result2.index, result2['temp_avg'],
274 label = "Среднегодовая температура в Нижнем-Новгороде")
275 plt.title("Среднегодовая температура в Москве и Нижнем-Новгороде")
276 plt.xlabel('Год')
277 plt.ylabel('Температура (цельсии)')
278 plt.legend()
279 plt.show()
280 corr1 = np.corrcoef(result1['temp_avg'], result2['temp_avg'])
281 print("Матрица корреляции:")
282 print(corr1)
283 \end{MyCode}
284 \end{Program}
285
286 \begin{figure}[H]
287 \centering
288 \includegraphics[width=0.75\linewidth]{pics/11}
289 \caption{График среднегодовых температур}
290 \label{fig:11}
291 \end{figure}
292
293 В данном случае коэффициент корреляции температур примерно равен 0.97
294
295 \begin{Program}[H]
296 \caption{Формирование графика среднегодовых осадков} \label{lst:14}
297 \begin{MyCode}
298 plt.plot(result1.index, result1['precipitation'],
299 label = "Среднегодовые осадки в Москве")
300 plt.plot(result2.index, result2['precipitation'],
301 label = "Среднегодовые осадки в Нижнем-Новгороде")
302 plt.title("Среднегодовые осадки в Москве и Нижнем-Новгороде")
303 plt.xlabel('Год')
304 plt.ylabel('Количество осадков')
305 plt.legend()
306 plt.show()
307 corr2 = np.corrcoef(result1['precipitation'], result2['precipitation'])
308 print("Матрица корреляции:")
309 print(corr2)
310 \end{MyCode}
311 \end{Program}
312
313 \begin{figure}[H]
314 \centering
315 \includegraphics[width=0.75\linewidth]{pics/12}
316 \caption{График среднегодовых осадков}
317 \label{fig:12}
318 \end{figure}
65 \begin{itemize}
66 \item графики среднегодовых температур и осадков в двух точках наблюдений;
67
68 \begin{figure}[H]
69 \centering
70 \includegraphics[width=0.75\linewidth]{pics/20}
71 \caption{График среднегодовой температуры в Москве}
72 \label{fig:4}
73 \end{figure}
74
75 \begin{figure}[H]
76 \centering
77 \includegraphics[width=0.75\linewidth]{pics/21}
78 \caption{График среднегодовых осадков в Москве}
79 \label{fig:5}
80 \end{figure}
81
82 \begin{figure}[H]
83 \centering
84 \includegraphics[width=0.75\linewidth]{pics/22}
85 \caption{График среднегодовой температуры в Нижнем-Новгороде}
86 \label{fig:6}
87 \end{figure}
88
89 \begin{figure}[H]
90 \centering
91 \includegraphics[width=0.75\linewidth]{pics/23}
92 \caption{График среднегодовых осадков в Нижнем-Новгороде}
93 \label{fig:7}
94 \end{figure}
95
96 \item вычислен коэффициент корреляции для температур и осадков в разных
97 точках наблюдения;
98
99 \begin{figure}[H]
100 \centering
101 \includegraphics[width=0.75\linewidth]{pics/24}
102 \caption{График среднегодовых температур}
103 \label{fig:8}
104 \end{figure}
105
106 \begin{figure}[H]
107 \centering
108 \includegraphics[width=0.75\linewidth]{pics/25}
109 \caption{График среднегодовых осадков}
110 \label{fig:9}
111 \end{figure}
112
113 \begin{figure}[H]
114 \centering
115 \includegraphics[width=0.5\linewidth]{pics/26}
116 \caption{Матрица корреляции среднегодовых температур}
117 \label{fig:10}
118 \end{figure}
119
120 \begin{figure}[H]
121 \centering
122 \includegraphics[width=0.5\linewidth]{pics/27}
123 \caption{Матрица корреляции среднегодовых осадков}
124 \label{fig:11}
125 \end{figure}
126
127 \item коробочные диаграммы по температурам в двух точках наблюдения;
128
129 \begin{figure}[H]
130 \centering
131 \includegraphics[width=0.75\linewidth]{pics/14}
132 \caption{Коробочная диаграмма температуры в Москве}
133 \label{fig:12}
134 \end{figure}
135
136 \begin{figure}[H]
137 \centering
138 \includegraphics[width=0.75\linewidth]{pics/15}
139 \caption{Коробочная диаграмма температуры в Нижнем-Новгороде}
140 \label{fig:13}
141 \end{figure}
142
143 \item графики декомпозиции данных по температуре и осадкам в двух точках наблюдения.
144
145 \begin{figure}[H]
146 \centering
147 \includegraphics[width=0.75\linewidth]{pics/16}
148 \caption{Декомпозиция данных по температуре в Москве}
149 \label{fig:14}
150 \end{figure}
151
152 \begin{figure}[H]
153 \centering
154 \includegraphics[width=0.75\linewidth]{pics/17}
155 \caption{Декомпозиция данных по осадкам в Москве}
156 \label{fig:15}
157 \end{figure}
158
159 \begin{figure}[H]
160 \centering
161 \includegraphics[width=0.75\linewidth]{pics/18}
162 \caption{Декомпозиция данных по температуре в Нижнем-Новгороде}
163 \label{fig:16}
164 \end{figure}
165
166 \begin{figure}[H]
167 \centering
168 \includegraphics[width=0.75\linewidth]{pics/19}
169 \caption{Декомпозиция данных по осадкам в Нижнем-Новгороде}
170 \label{fig:17}
171 \end{figure}
172
173 \end{itemize}
319 174
320 В данном случае коэффициент корреляции количества осадков примерно равен 0.59
File pics/13.png added (mode: 100644) (index 0000000..bec8ec9)
File pics/14.png added (mode: 100644) (index 0000000..4a08064)
File pics/15.png added (mode: 100644) (index 0000000..60e1631)
File pics/16.png added (mode: 100644) (index 0000000..3d00516)
File pics/17.png added (mode: 100644) (index 0000000..9ec132c)
File pics/18.png added (mode: 100644) (index 0000000..4b33fe0)
File pics/19.png added (mode: 100644) (index 0000000..58164ae)
File pics/20.png added (mode: 100644) (index 0000000..9f27580)
File pics/21.png added (mode: 100644) (index 0000000..cfdd583)
File pics/22.png added (mode: 100644) (index 0000000..e96835b)
File pics/23.png added (mode: 100644) (index 0000000..265d092)
File pics/24.png added (mode: 100644) (index 0000000..0d91506)
File pics/25.png added (mode: 100644) (index 0000000..f02cf92)
File pics/26.png added (mode: 100644) (index 0000000..444470d)
File pics/27.png added (mode: 100644) (index 0000000..14f11e8)
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/oami/yanir2

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/oami/yanir2

Clone this repository using git:
git clone git://git.rocketgit.com/user/oami/yanir2

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main