% первая часть
\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{Библиотека SciPy}
SciPy — библиотека для языка программирования Python с открытым исходным кодом, предназначенная для выполнения научных и инженерных расчётов.
Возможности:
\begin{itemize}
\item поиск минимумов и максимумов функций;
\item вычисление интегралов функций;
\item поддержка специальных функций;
\item обработка сигналов;
\item обработка изображений;
\item работа с генетическими алгоритмами;
\item решение обыкновенных дифференциальных уравнений.
\end{itemize}
Для визуализации результатов расчётов часто применяется библиотека 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{Пользовательский интерфейс JupyterLab}
JupyterLab — это интерактивная среда разработки для работы с блокнотами, кодом и данными. JupyterLab позволяет использовать текстовые редакторы, терминалы, средства просмотра файлов данных и другие настраиваемые компоненты рядом с блокнотами в разбитой на вкладки рабочей области.
JupyterLab позволяет организовать рабочую зону с помощью блокнотов, текстовых файлов, терминалов и выводов блокнотов.
JupyterLab обеспечивает высокий уровень интеграции между блокнотами, документами и действиями:
\begin{itemize}
\item используется drag-and-drop для того чтобы можно было переупорядочить ячейки и скопировать их между блокнотами;
\item блоки кода выполняются интерактивно прямо из текстовых файлов (.py, .R, .md, .tex и т. д.);
\item консоль кода можно связать с ядром блокнота, чтобы изучать код в интерактивном режиме, не загромождая блокнот временными правками;
\item Возможность редактирования популярных форматов файлов с предварительным просмотром в реальном времени, такие как Markdown, JSON, CSV, Vega, VegaLite и другие.
\end{itemize}