/NIR_otchet.tex (c5e9c42a8aaf135947f090fb94154a2017abce50) (17538 bytes) (mode 100644) (type blob)

%
% Шаблон для НИР версия 2021
%

\documentclass[a4paper,12pt]{article}
\usepackage{vkriate}

% Настройки для окружений с подчеркиваниями для подписей и пр.
\setFRMfontencoding{T2A}
\setFRMdfontencoding{T2A}
% thanks to A.Starikov
\setFRMfontfamily{cmr}
\setFRMdfontfamily{ptm}
\setFRMdfontsize{10pt}

% задает длину поля для подписи на титульной странице
\newFRMfield{xtitlesign}{32mm}

% поле для факультета или кафедры
\newFRMfield{fcath}{65mm}

%имя файла с библиографией в формате BibTex
\addbibresource{rbiblio.bib}

\begin{document}

% счетчики страниц, рисунков, таблиц
\regtotcounter{page}
\regtotcounter{figure}
\regtotcounter{table}

\renewcommand{\refname}{\centerline{СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ}} 
\renewcommand{\contentsname}{\centerline{СОДЕРЖАНИЕ}} 
%\renewcommand{\refname}{Список источников}  % По умолчанию "Список литературы" (article)
%\renewcommand{\bibname}{Литература}  % По умолчанию "Литература" (book и report)

% титульная страница
\thispagestyle{empty}
\begin{center} \small
\textbf{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ}\\
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО  ОБРАЗОВАНИЯ\\
«Национальный исследовательский ядерный университет «МИФИ»\\
\textbf{Обнинский институт атомной энергетики} – \\
филиал федерального государственного автономного образовательного учреждения высшего\\
образования «Национальный исследовательский ядерный университет «МИФИ»\\
(ИАТЭ НИЯУ МИФИ)
\end{center}
%\vfill
\medskip

% Направление подготовки следует уточнять,
% магистры и бакалавры могут иметь разные наименования
\begin{center}
\begin{tabular}{rl}
Отделение & \useFRMfield{fcath}[\large Интеллектуальные кибернетические системы] \\ 
Направление подготовки & \useFRMfield{fcath}[\large Информационные системы и технологии] \\ 
\end{tabular} 
\end{center}

\vfill

\large 

\begin{center}
	Научно-исследовательская работа \\
	
	\medskip
	
	\textbf{\Large 
		Разработка сценариев анализа динамики метеопараметров
	}
	
\end{center}

\vspace{1cm}

\begin{tabular*}{\textwidth}{lcr}
Студент группы ИС-Б18 & \useFRMfield{xtitlesign} & Липинский Я. Д.\\
& & \\
Руководитель & & \\
к.т.н., доцент отд. ИКС & \useFRMfield{xtitlesign} & Мирзеабасов О. А.
\end{tabular*}


\vfill
\large

\begin{center}
Обнинск, 2022 г
\end{center}

\onehalfspacing

\pagebreak

% реферат
\thispagestyle{empty}

\section*{\centering РЕФЕРАТ}

% возможно, кол-во источников придется вставлять вручную
Работа \total{page} стр., \total{table} табл., \total{figure} рис. , \totalmycitecounts ист. 

ЯЗЫК ПРОГРАММИРОВАНИЯ PYTHON, АНАЛИЗ ВРЕМЕННЫХ РЯДОВ, МЕТЕОДАННЫЕ, ВРЕМЕННЫЕ РЯДЫ, NUMPY, STATSMODELS, PANDAS.

Научно-исследовательская работа посвящена разработке сценариев анализа динамики метеопараметров. Конечная цель работы – создание сценария на языке Python для обработки и визуализации динамики температуры и осадков.

Процесс разработки включает в себя изучение методов декомпозиции временных рядов, языка прогаммирования Python, библиотеки Statsmodels, предоставляющей набор методов статистического тестирования и моделирования, библиотеки Pandas для обработки и анализа данных.
 
\pagebreak
\thispagestyle{empty}

\section*{\centering ОПРЕДЕЛЕНИЯ, ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ}

DataFrame (датафрейм) – распределенная коллекция данных в виде именованных столбцов, аналогично таблице в реляционной базе данных. 

NumPy - Numerical Python

БД - База Данных

ВМО - Всемирная Метеорологическая Организация

\pagebreak
\thispagestyle{empty}

% титульная страница - номер 1, остальные страницы до Содержания не нумеруются
\tocloftpagestyle{empty}

\tableofcontents
% если нужно добавить "Стр." над номерами страниц - раскомментируйте следующую команду
%\addtocontents{toc}{~\hfill\textbf{Стр.}\par}

\pagebreak

\setcounter{page}{3}

\section*{\centering ВВЕДЕНИЕ}
\addcontentsline{toc}{section}{ВВЕДЕНИЕ}
\input{intro} % текст введения в файле intro.tex
\pagebreak

%\input{Post_zad}
\pagebreak
\input{part1}  % первая глава - в файле part1.tex
\pagebreak
\input{part2} % вторая глава - в файле part2.tex
\pagebreak

% если есть еще разделы - сохраните их в соответствующих файлах и раскомментируйте строки ниже, при необходимости добавьте еще
%\input{part3}  % третья глава - в файле part3.tex
%\pagebreak

%\input{part4} % четвертая глава - в файле part4.tex
%\pagebreak

%\input{part5}  % пятая глава - в файле part5.tex
%\pagebreak

\section*{\centering ЗАКЛЮЧЕНИЕ}
\addcontentsline{toc}{section}{ЗАКЛЮЧЕНИЕ}

В ходе проделанной работы был создан сценарий на языке Python для обработки и визуализации динамики температуры и осадков. Были выполнены следующие задачи:

\begin{itemize}
\item изучены методы декомпозиции временных рядов;

\item изучены пакеты Python для работы с временными рядами;

\item подготовлены данные по динамике температуры и осадкам;

\item разработан сценарий Python для декомпозиции и визуализации подготовленных данных.
\end{itemize}

% оформление библиографии - вариант с БД
\pagebreak

\addcontentsline{toc}{section}{СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ}
% ВАЖНО: для корректного отображения в списке литературы ссылок на англ.языке в bibtex-описание источника следует добавить поле 
% langid = {english}
\printbibliography

\pagebreak

\renewcommand{\appendixpagename}{\centering Приложения}


\begin{appendices}
\renewcommand{\thesection}{\Asbuk{section}}
\makeatletter
\renewcommand{\theProgram}{\thesection.\@arabic\c@Program}
\makeatother

% каждое приложение задается следующей командой, нумерация - русскими буквами

\section{\centering } 

% независимая нумерация листингов в каждом приложении
\setcounter{Program}{0}
\begin{MyCode}
import os
import sys
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sys import argv
from statsmodels.tsa.seasonal import seasonal_decompose
from pandas.plotting import register_matplotlib_converters

script, data1, data2 = argv

city1 = data1.replace(".txt", "")
city2 = data2.replace(".txt", "")

register_matplotlib_converters()

original_stdout = sys.stdout

# Считывание и обработка датасетов.
print("Считывание и обработка данных.")
data1 = pd.read_csv(data1, sep=";", header=None)
data1.columns = ["index", "year", "month", "day", "temp_quality", "temp_min", "temp_avg", "temp_max", "precipitation"]
data2 = pd.read_csv(data2, sep=";", header=None)
data2.columns = ["index", "year", "month", "day", "temp_quality", "temp_min", "temp_avg", "temp_max", "precipitation"]
df1 = pd.DataFrame({'year': data1["year"],
	'month': data1["month"],
	'day': data1["day"]})
df1["date"] = pd.to_datetime(df1)
df1["temp_avg"] = data1["temp_avg"]
df1["precipitation"] = pd.to_numeric(data1["precipitation"],
errors='coerce')
df2 = pd.DataFrame({'year': data2["year"],
	'month': data2["month"],
	'day': data2["day"]})
df2["date"] = pd.to_datetime(df2)
df2["temp_avg"] = data2["temp_avg"]
df2["precipitation"] = pd.to_numeric(data2["precipitation"],
errors='coerce')

# Стилизация графиков.
sns.set_style("darkgrid")
plt.rc("figure", figsize=(12, 9))
plt.rc("font", size=13)
plt.rc("lines", markersize=5)
plt.rc("lines", linewidth=3)

# Создание папки для хранения графиков.
if not os.path.exists("Result"):
os.makedirs("Result")

# Построения графика среднегодовой температуры города 1.
print("Построения графика среднегодовой температуры города " + city1 + ".")
result1 = df1.groupby('year').mean()
plt.plot(result1.index, result1['temp_avg'])
plt.title("Среднегодовая температура (" + city1 + ")")
plt.xlabel('Год')
plt.ylabel('Температура (цельсии)')
z = np.polyfit(result1.index, result1['temp_avg'], 1)
p = np.poly1d(z)
plt.plot(result1.index, p(result1.index), "r--")
plt.savefig('Result/' + city1 + '_Temperature_Plot.png')
plt.clf()

# Построения графика количества осадков за год города 1.
print("Построения графика количества осадков за год города " + city1 + ".")
plt.plot(result1.index, result1['precipitation'])
plt.title("Количество осадков за год (" + city1 + ")")
plt.xlabel('Год')
plt.ylabel('Количество осадков')
z = np.polyfit(result1.index, result1['precipitation'], 1)
p = np.poly1d(z)
plt.plot(result1.index, p(result1.index), "r--")
plt.savefig('Result/' + city1 + '_Precipitations_Plot.png')
plt.clf()

# Построения графика среднегодовой температуры города 2.
print("Построения графика среднегодовой температуры города " + city2 + ".")
result2 = df2.groupby('year').mean()
plt.plot(result2.index, result2['temp_avg'])
plt.title("Среднегодовая температура (" + city2 + ")")
plt.xlabel('Год')
plt.ylabel('Температура (цельсии)')
z = np.polyfit(result2.index, result2['temp_avg'], 1)
p = np.poly1d(z)
plt.plot(result2.index, p(result2.index), "r--")
plt.savefig('Result/' + city2 + '_Temperature_Plot.png')
plt.clf()

# Построения графика количества осадков за год города 2.
print("Построения графика количества осадков за год города " + city2 + ".")
plt.plot(result2.index, result2['precipitation'])
plt.title("Количество осадков за год (" + city2 + ")")
plt.xlabel('Год')
plt.ylabel('Количество осадков')
z = np.polyfit(result2.index, result2['precipitation'], 1)
p = np.poly1d(z)
plt.plot(result2.index, p(result2.index), "r--")
plt.savefig('Result/' + city2 + '_Precipitations_Plot.png')
plt.clf()

# Построения графика корреляции среднегодовой температуры двух городов.
print("Построения графика корреляции среднегодовой температуры двух городов.")
plt.plot(result1.index, result1['temp_avg'],
label="Среднегодовая температура в городе " + city1)
plt.plot(result2.index, result2['temp_avg'],
label="Среднегодовая температура в городе " + city2)
plt.title("Среднегодовая температура в городах " + city1 + " и " + city2)
plt.xlabel('Год')
plt.ylabel('Температура (цельсии)')
plt.legend()
plt.savefig('Result/Correlation_Temperature_Plot.png')
print("Расчёт корреляции среднегодовой температуры двух городов.")
corr1 = np.corrcoef(result1['temp_avg'], result2['temp_avg'])
with open('Result/Temperature_Correlation.txt', 'w') as f:
sys.stdout = f
print('Матрица корреляции температур:\n')
print(corr1)
sys.stdout = original_stdout
plt.clf()

# Построения графика корреляции количества осадков за год двух городов.
print("Построения графика корреляции количества осадков за год двух городов.")
plt.plot(result1.index, result1['precipitation'],
label="Среднегодовые осадки в городе " + city1)
plt.plot(result2.index, result2['precipitation'],
label="Среднегодовые осадки в городе " + city2)
plt.title("Среднегодовые осадки в городах " + city1 + " и " + city2)
plt.xlabel('Год')
plt.ylabel('Количество осадков')
plt.legend()
plt.savefig('Result/Correlation_Precipitations_Plot.png')
print("Расчёт корреляции количества осадков за год двух городов.")
corr2 = np.corrcoef(result1['precipitation'], result2['precipitation'])
with open('Result/Precipitations_Correlation.txt', 'w') as f:
sys.stdout = f
print('Матрица корреляции осадков:\n')
print(corr2)
sys.stdout = original_stdout
plt.clf()

# Построения диаграммы размаха среднегодовой температуры города 1.
print("Построения диаграммы размаха среднегодовой температуры города " + city1 + ".")
sns.boxplot(data=df1, x='month', y='temp_avg')
plt.xlabel('Месяц')
plt.ylabel('Температура (цельсии)')
plt.title('Температура в городе ' + city1)
plt.savefig('Result/' + city1 + '_Temperature_Boxplot.png')
plt.clf()

# Построения диаграммы размаха среднегодовой температуры города 2.
print("Построения диаграммы размаха среднегодовой температуры города " + city2 + ".")
sns.boxplot(data=df2, x='month', y='temp_avg')
plt.xlabel('Месяц')
plt.ylabel('Температура (цельсии)')
plt.title('Температура в городе ' + city2)
plt.savefig('Result/' + city2 + '_Temperature_Boxplot.png')
plt.clf()

# Декомпозиция данных по температуре города 1.
print("Декомпозиция данных по температуре города " + city1 + ".")
result = seasonal_decompose(result1['temp_avg'], model='additive', period=12)
result.plot()
plt.savefig('Result/' + city1 + '_Temperature_Decomposition.png')
plt.clf()

# Декомпозиция данных по осадкам города 1.
print("Декомпозиция данных по осадкам города " + city1 + ".")
result = seasonal_decompose(result1['precipitation'], model='additive', period=12)
result.plot()
plt.savefig('Result/' + city1 + '_Precipitations_Decomposition.png')
plt.clf()

# Декомпозиция данных по температуре города 2.
print("Декомпозиция данных по температуре города " + city2 + ".")
result = seasonal_decompose(result2['temp_avg'], model='additive', period=12)
result.plot()
plt.savefig('Result/' + city2 + '_Temperature_Decomposition.png')
plt.clf()

# Декомпозиция данных по осадкам города 2.
print("Декомпозиция данных по осадкам города " + city2 + ".")
result = seasonal_decompose(result2['precipitation'], model='additive', period=12)
result.plot()
plt.savefig('Result/' + city2 + '_Precipitations_Decomposition.png')
plt.clf()

print("\nРабота успешно завершена!")
\end{MyCode}
\begin{Program}
	\caption{Код реализации скрипта}\label{app1}
\end{Program}
\end{appendices}

\end{document}          



Mode Type Size Ref File
100644 blob 2190 a93ac2d6149961a6eb6d7da7898d8a1b109e7c03 .gitignore
100644 blob 9960 4caa1844d393ca4510e1d3393fff8dfa4412f65a BAK_vkr.tex
100644 blob 0 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ItWorks.tex
100644 blob 9741 2a955984838e297dc5b48dc2c2af796190ccf2b8 MAG_disser.tex
100644 blob 11531 b25e54dfc03d39cf85aa34333744cde900167852 MSKMAG_disser.tex
100644 blob 8542 cf60b2f41242fa933b6f03da68f1de06ca58c7ac NIR2_otchet.tex
100644 blob 17538 c5e9c42a8aaf135947f090fb94154a2017abce50 NIR_otchet.tex
100644 blob 1263 0b2de41983ec8a67a94ab745ad6cfd421a80402f README.md
100644 blob 1128 a7b50e32539aa045a04277a1f9d429eb1b079b08 intro.tex
100644 blob 18492 cd3195f031de5e75f4bedba9a26d69bdad0d9b29 part1.tex
100644 blob 6196 fb3ee11eb5d4860d2551a77901f507cbee2e41de part2.tex
040000 tree - b6421e13c678e97843d034027163724396810f89 pics
100644 blob 3105 5e036cb51df7456c1ef746e73341d21271709ba3 rbiblio.bib
100644 blob 4172 0adbcfb598851bcac78231e0e0ca84d022b52b73 vkriate.sty
100644 blob 4245 5ca7abdf60d50010184e1e457ce356feb415632b vkriate2.sty
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