/part1.tex (9e0cc5226fa299f52e84f58fc2f7f2cc244e5f89) (18492 bytes) (mode 100644) (type blob)

% первая часть

\section{Обзор средств разработки и библиотек}

\subsection{Язык программирования Python}

Python — это высокоуровневый язык программирования общего назначения с динамической строгой типизацией и автоматическим управлением памятью. Ориентирован на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ. Он является полностью объектно-ориентированным в том плане, что всё является объектами, даже значения, относящиеся к элементарным типам, наподобие чисел и строк, а также сами типы данных~\cite{prohor}. Необычной особенностью данного языка является выделение блоков кода пробельными отступами. Согласно стандарту, для выделения блоков необходимо использовать четыре пробела \cite{prohor}. Синтаксис ядра минималистичен, за счёт чего на практике редко возникает необходимость обращаться к документации. Сам же язык известен как интерпретируемый и используется в том числе для написания скриптов. Недостатками языка являются зачастую более низкая скорость работы и более высокое потребление памяти написанных на нём программ по сравнению с аналогичным кодом, написанным на компилируемых языках, таких как Си или C++.

Python представляет из себя мультипарадигмальный язык программирования. Он поддерживает объектно-ориентированное программирование, императивное, структурное, процедурное, метапрограммирование и функциональное программирование. Задачи обобщённого программирования решаются за счёт динамической типизации. Аспектно-ориентированное программирование частично поддерживается через декораторы, более полноценная поддержка обеспечивается дополнительными фреймворками. Такие методики как контрактное и логическое программирование можно реализовать с помощью библиотек или расширений. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений с глобальной блокировкой интерпретатора (GIL), высокоуровневые структуры данных. Поддерживается разбиение программ на модули, которые, в свою очередь, могут объединяться в пакеты.

Стандартная библиотека включает большой набор полезных переносимых функций, начиная от функционала для работы с текстом и заканчивая средствами для написания сетевых приложений. Дополнительные возможности, такие как математическое моделирование, работа с оборудованием, написание веб-приложений или разработка игр, могут реализовываться посредством обширного количества сторонних библиотек, а также интеграцией библиотек, написанных на Си или C++, при этом и сам интерпретатор Python может интегрироваться в проекты, написанные на этих языках. Существует и специализированный репозиторий программного обеспечения, написанного на Python, — PyPI. Данный репозиторий предоставляет средства для простой установки пакетов в операционную систему и стал стандартом де-факто для Python. По состоянию на 2019 год в нём содержалось более 175 тысяч пакетов.

Python стал одним из самых популярных языков, он используется в анализе данных, машинном обучении, DevOps и веб-разработке, а также в других сферах, включая разработку игр. За счёт читабельности, простого синтаксиса и отсутствия необходимости в компиляции язык хорошо подходит для обучения программированию, позволяя концентрироваться на изучении алгоритмов, концептов и парадигм. Отладка же и экспериментирование в значительной степени облегчаются тем фактом, что язык является интерпретируемым. Применяется язык многими крупными компаниями, такими как Google или Facebook. По состоянию на октябрь 2021 года Python занимает первое место в рейтинге TIOBE популярности языков программирования с показателем 11,27\%. «Языком года» по версии TIOBE Python объявлялся в 2007, 2010, 2018 и 2020 годах.

\subsection{Библиотека Pandas}

Pandas — программная библиотека на языке Python для обработки и анализа данных. Работа pandas с данными строится поверх библиотеки NumPy, являющейся инструментом более низкого уровня. Предоставляет специальные структуры данных и операции для манипулирования числовыми таблицами и временными рядами \cite{plas}.

Основная область применения — обеспечение работы в рамках среды Python не только для сбора и очистки данных, но для задач анализа и моделирования данных, без переключения на более специфичные для статобработки языки.

Основные возможности библиотеки:

\begin{itemize}
\item объект DataFrame для манипулирования индексированными массивами двумерных данных;

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

\item встроенные средства совмещения данных и способы обработки отсутствующей информации;

\item переформатирование наборов данных, в том числе создание сводных таблиц;

\item срез данных по значениям индекса, расширенные возможности индексирования, выборка из больших наборов данных;

\item вставка и удаление столбцов данных;

\item возможности группировки позволяют выполнять трёхэтапные операции типа «разделение, изменение, объединение»;

\item слияние и объединение наборов данных;

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

\item работа с временными рядами: формирование временных периодов и изменение интервалов и так далее.
\end{itemize}

\subsection{Библиотека NumPy}

NumPy (сокращенно от Numerical Python)— библиотека с открытым исходным кодом для языка программирования Python. Возможности:

\begin{itemize}
\item поддержка многомерных массивов (включая матрицы);

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

Математические алгоритмы, реализованные на интерпретируемых языках (например, Python), часто работают гораздо медленнее тех же алгоритмов, реализованных на компилируемых языках (например, Фортран, Си, Java). Библиотека NumPy предоставляет реализации вычислительных алгоритмов (в виде функций и операторов), оптимизированные для работы с многомерными массивами. В результате любой алгоритм, который может быть выражен в виде последовательности операций над массивами (матрицами) и реализованный с использованием NumPy, работает так же быстро, как эквивалентный код, выполняемый в MATLAB.

\subsection{Библиотека Statsmodels}

Statsmodels предоставляет набор методов статистического тестирования и моделирования, а также инструменты, предназначенные для анализа временных рядов. Также может быть использована для прогнозирования.

Для визуализации результатов расчётов часто применяется библиотека Matplotlib.

\subsection{Библиотека Matplotlib}

Matplotlib — библиотека на языке программирования Python для визуализации данных двумерной и трёхмерной графикой. Получаемые изображения могут быть использованы в качестве иллюстраций в публикациях.

Matplotlib написан и поддерживался в основном Джоном Хантером и распространяется на условиях BSD-подобной лицензии \cite{albon}. Генерируемые в различных форматах изображения могут быть использованы в интерактивной графике, в научных публикациях, графическом интерфейсе пользователя, веб-приложениях, где требуется построение диаграмм.

Matplotlib является гибким, легко конфигурируемым пакетом, который вместе с NumPy, SciPy и IPython предоставляет возможности, подобные MATLAB. В настоящее время пакет работает с несколькими графическими библиотеками, включая wxWindows и PyGTK.

Пакет поддерживает многие виды графиков и диаграмм:
\begin{itemize}
\item графики (line plot);

\item диаграммы разброса (scatter plot);

\item столбчатые диаграммы (bar chart) и гистограммы (histogram);

\item круговые диаграммы (pie chart);

\item ствол-лист диаграммы (stem plot);

\item контурные графики (contour plot);

\item поля градиентов (quiver);

\item спектральные диаграммы (spectrogram).
\end{itemize}

\subsection{Анализ временных рядов}

Анализ временных рядов – совокупность статистических методов для выявления составляющих временного ряда и его прогнозирования.

Временной ряд – последовательность статистических данных, собранных в разные моменты времени, о значении каких-либо параметров исследуемого процесса~\cite{nielsen}. Каждое значение временного ряда называется уровнем временного ряда. Во временном ряде каждому уровню должно быть указанно время измерения или номер измерения по порядку. Методы анализа временных рядов существенно отличаются от методов анализа данных простой выборки. При анализе временного ряда исследователя интересуют не только статистические характеристики временного ряда, но и учитывается взаимосвязь измерений со временем.

Временные ряды, как правило, возникают в результате измерения некоторого показателя. Это могут быть как характеристики технических систем, так и показатели природных, социально-экономических явлений и процессов. Например, динамика курса валюты или курса акции, при анализе которых пытаются определить основное направление развития. Или, например, анализ динамики продаж компании с целью планирования остатков на складе.

Основная цель анализа временного ряда – построить прогноз его значений на будущие периоды. А основные задачи анализа временного ряда – понять, под воздействием каких компонент формируется значение временного ряда, и построить математическую модель для каждой компоненты или их совокупности. Любой временной ряд можно разложить на следующие составляющие: тренд, сезонную составляющую, циклическую составляющую и случайную составляющую. Первые три компоненты образуют неслучайную составляющую временного ряда. Случайная составляющая присутствует в любом временном ряде. А а вот присутствие в структуре временного ряда компонент неслучайной составляющей не обязательно.

Подходы к моделированию временного ряда можно разделить на два направления:
\begin{itemize}
\item моделирование неслучайной составляющей в совокупности;

\item разложение временного ряда на составляющие компоненты и моделирование значений каждой компоненты в отдельности.
\end{itemize}

Статистические методы прогнозирования делятся на алгоритмические методы и аналитические методы. К алгоритмическим методам относят методы простой и взвешенной скользящей средней. К аналитическим методам относят методы прогнозной экстраполяции на основе кривых роста в виде функций времени. В случае наличия сезонной или циклической компоненты во временном ряду проводят  анализ периодических колебаний или спектральный анализ временного ряда.

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 17668 9ed491e08df177d2bf5c8fee298048117c9c9c9d NIR_otchet.tex
100644 blob 19270 5e63d8f3ee1a8032ab9bac14a733dd9cae2ac83d PRACTICE_otchet.tex
100644 blob 1263 0b2de41983ec8a67a94ab745ad6cfd421a80402f README.md
100644 blob 1128 a7b50e32539aa045a04277a1f9d429eb1b079b08 intro.tex
100644 blob 1089 f325756734257124981c220b9a6de7ec15b02f8a intro2.tex
100644 blob 18492 9e0cc5226fa299f52e84f58fc2f7f2cc244e5f89 part1.tex
100644 blob 6205 64e81e644c4aaf27353d78662694a909d6fe47a0 part2.tex
100644 blob 18492 9e0cc5226fa299f52e84f58fc2f7f2cc244e5f89 part3.tex
100644 blob 10671 066b6d5263a1c3fc66a438cfd777c23a652b7add part4.tex
040000 tree - 5acc024eedc1e5ded81f27459d0f97e7156ed126 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