Обложка: Основные инструменты дата-сайентиста

Основные инструменты дата-сайентиста

Основные инструменты в работе специалиста по Data Science: от самых простых и повседневных до более специфических и редких
Федор Ерин

Федор Ерин

декан факультета Data Engineering образовательной платформы GeekBrains

Используемые языки

Основным языком программирования для дата-сайентиста является Python. Это наиболее широко распространенный язык в области data science, он применяется для анализа данных, написания рабочего кода, создания моделей, проведения экспериментов и др. Также встречается анализ данных на R: этот язык чаще используется для статистических исследований, в эконометрике. Для работы с данными также нужен язык запросов SQL, на нем пишут запросы к источникам данных и получают результат в нужном формате. Если дата-сайентист разрабатывает ML модели на низком уровне, т.е. он, если быть точным, ML Engineer, — то он будет писать на С++.

Песочница дата-сайентиста

В качестве «песочницы» используют Jupyter Notebook. Это интерактивная веб- оболочка для экспериментов и разведочного анализа данных, в рамках которой дата-сайентист смотрит, что из себя представляют данные, с которыми он работает, какие в них закономерности, аномалии, какие величины есть в данных, как они распределены, строит гистограммы и другие графики, позволяющие наглядно визуализировать данные.

Помимо разведочного анализа, в Jupyter Notebook удобно отлаживать различные части кода, методы, классы, а также это подходящий формат, чтобы создавать сводки по аналитике, потому что помимо кода и отрисовывания графиков и картинок, там можно использовать форматирование markdown, в котором поддерживается синтаксис LaTex для отображения формул, систем уравнений, выражений со сложными индексами. Обобщая, можно сказать, что Jupyter Notebook является «рабочим столом» дата-сайентиста.

Среда разработки и другие программы

Код проекта, который будет использоваться в продакшене, нужно писать в полноценной среде разработки. Одна из самых часто используемых сред — это PyCharm IDE. В ней удобно писать код на Python, реализовывать модули, классы, настраивать и использовать интерпретаторы для Python, работать с Git, делать умный рефакторинг, следить за чистотой кода с помощью подсказок и помощи в форматировании. Расширенная версия PyCharm также позволяет настраивать удаленный интерпретатор, работать с базами данных и с теми же Jupyter-ноутбуками прямо внутри IDE. Есть, конечно, и другие IDE, в которых можно писать на Python: VS Code, Spider, PyDev и др.

При продуктивизации решения применяют CI/CD практики (Continuous Integration / Continuous Delivery) и часто встречающийся GitLab — продукт для хранения кода и совместной разработки больших программных проектов. В этом контексте дата-сайентист близок по инструментам к Python-разработчику.

Из программных инструментов в работе дата-сайентиста также стоит упомянуть и очевидный MS Excel, который является общепонятным форматом и в нем можно что-то быстро и наглядно показать бизнесу.

Помимо этого в работе дата-сайентиста можно встретить инструменты визуализации, например, Tableau (для построения различных бордов и отчетов), SAS (готовое решение по анализу данных) и другие более специфичные вещи, редко встречающиеся в работе и являющиеся скорее исключением, чем правилом, так как это больше про BI и продуктовую аналитику.

Библиотеки анализа данных

Что касается разведочного анализа данных, или же EDA (Exploratory Data Analysis), в Jupyter Notebook для построения графиков используют Matpotlib, Seaborn, Plotly. Обычно этих библиотек хватает, чтобы строить красивые и наглядные визуализации, исследовать зависимости в данных, видеть в данных их физическую сущность. Если говорить про язык R, то там используется библиотека ggplot2 для визуализации.

Помимо этого популярна библиотека scikit-learn. В ней реализовано множество полезных функций, несложных моделей машинного обучения, вспомогательные инструменты, в том числе и для визуализации, подсчет различных статистик.

Для работы с массивами данных используют Pandas. С помощью этой библиотеки можно работать с данными разных форматов, представлять их в виде удобного дата-фрейма, производить операции, рассчитывать статистики, применять функции к колонкам и пр. Также есть библиотека Numpy: с ней удобно оперировать матрицами, векторами, выполнять преобразования из линейной алгебры. Библиотека SciPy содержит дополнительные математические операции: методы оптимизации, преобразования сигналов, интегралы, разреженные матрицы и др.

Машинное обучение

Если говорить про машинное обучение и создание моделей, частично простые модели уже есть в scikit-learn, помимо этого есть отдельные библиотеки для создания чуть более сложных моделей-ансамблей, например, XGBoost, CatBoost и LightGBM. Это библиотеки с бустинговыми алгоритмами, которые можно применять для задач регрессии, классификации. Для интерпретации работы модели есть библиотеки SHAP и DiCE. Если нужно работать с текстами, то стоит упомянуть библиотеку NLTK, если же с нейросетями, то это TensorFlow, PyTorch, Keras. С помощью этих фреймворков создаются нейронные сети для самых разных задач: сегментация, детекция, распознавание, speech-to-text, генерация речи и др.

Работа с данными

Дата-сайентист может тратить на работу с данными до 80 процентов своего времени, и только остальные 20 процентов уходят на запуск и настройку модели, оценку результатов. Основная работа связана со сбором данных, их преобразованием, очисткой, написанием пайплайнов. В первую очередь для этого требуется знание различных баз данных: как классических (PostgreSQL, MySQL, Oracle), так и более специфичных хранилищ данных (ClickHouse, Greenplum, Vertica), использование которых разнится от команды к команде.

Если говорить о больших массивах данных, с которыми нужно выполнять распределенные вычисления, то здесь стоит упомянуть экосистему Hadoop. Распределенная файловая система (HDFS), поверх которой работает множество технологий, также часто используется в работе дата-сайентиста. Это может быть база HBase, СУБД для работы с данными (Hive, Impala, Pig), фреймворк для распределенных вычислений Spark, который имеет множество различных приложений, таких как машинное обучение (Spark MLlib), выполнение SQL-запросов (Spark SQL), процессинг потока данных (Spark Streaming) и др.

Для удобства работы с кластером Hadoop можно использовать Hue, в котором можно писать SQL-запросы, анализировать результаты, просматривать файлы HDFS. Также есть продукт Ambari для решения схожих задач.

Для работы с множеством источников данных одновременно можно использовать DBeaver или DataGrip. Эти программы позволяют подключаться к различным источникам, писать запросы к таблицам и отлаживать запросы на выгрузку данных.

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

Помимо традиционных баз данных и кластера Hadoop, стоит упомянуть облачные решения для работы с данными от Google, Amazon и др. У Google есть Cloud Platform, а также Colab и Drive. Они позволяют делать удаленные вычисления и экспериментировать в ноутбуках. В амазоновских сервисах (AWS, S3, Redshift etc.) также можно обрабатывать и хранить данные, запускать вычисления. Такой стек можно встретить в небольших компаниях, которым выгоднее арендовать ресурсы, нежели купить свои, которые могут простаивать.

Автоматизация процессов

После того, как процесс обработки данных описан, расчет показателей определен и уже сформирован, нужно дальше автоматизировать все эти пайплайны для регулярного запуска. Здесь потребуется инструмент для настройки пайплайнов, который умеет работать по расписанию и следить за всеми задачами, — это Apache Airflow. Иногда используют Luigi, инструмент попроще, с помощью него можно также описывать DAG (Directed Acyclic Graph), производить вычисления, сбор данных, создание витрин, обучение и валидацию моделей, сохранение прогнозов рекомендаций. Это может быть сохранение в Excel-файл, запись в таблицу, либо подготовка аналитического отчета в Jupyter Notebook.

DevOps и другие полезные практики

Стоит теперь упомянуть про другие практики, в которых дата-сайентист может не быть глубоким экспертом, но с которыми он может столкнуться в работе. Это технологии контейнеризации (Docker, Kubernetes) и в целом элементы DevOps. В контейнерах можно разворачивать приложения, создавать изолированные среды для выполнения своих программ. Понимание DevOps дает возможность самостоятельно настраивать взаимодействие между системами. Также есть MLOps: это область на стыке машинного обучения, разработки и эксплуатации. Это вспомогательные инструменты для проведения различных экспериментов, версионирования моделей и данных: MLflow, DVC, Kubeflow, Hydrosphere. Эти инструменты направлены на продуктивизацию машинного обучения, создание ML-платформы, когда у специалиста есть много моделей и версий, за которыми надо следить.