Введение в аналитику больших массивов данных

Основные библиотеки для Data Mining

В лекции проводится сравнительный анализ языков Python и R для задач интеллектуального анализа данных. Рассматриваются сильные и слабые стороны Python, обосновывается его выбор для создания конечных продуктов. Основной фокус направлен на изучение ключевых библиотек научного стека: NumPy, SciPy, Pandas, Matplotlib и IPython. Подробно разбираются принципы работы с многомерными массивами в NumPy: их создание, векторизованные операции, индексация и математические функции, что формирует базу для дальнейшей работы с данными.

Основные мысли

В результате изучения лекции слушатель будет способен:
1. Сравнивать возможности языков Python и R для решения задач анализа данных.
2. Объяснять, почему Python подходит как для прототипирования, так и для разработки конечных продуктов.
3. Описывать назначение основных библиотек Python для научных вычислений и анализа данных.
4. Понимать принципы работы с многомерными массивами в библиотеке NumPy.
5. Применять векторизованные операции для обработки данных без использования циклов.
6. Анализировать поведение системы при работе со срезами массивов (копирование vs передача по ссылке).
Показывать лекцию целиком
Краткое изложение

Презентацию к лекции 17 Вы можете скачать здесь.

Сравнение Python и R для анализа данных

Рассмотрим, почему для интеллектуального анализа данных (Data Mining) стоит использовать Python, и сравним его с языком R.

Преимущества Python

  1. Сообщество и библиотеки. Python обладает мощным сообществом в области научных вычислений. Хотя R пока занимает лидирующие позиции, Python уверенно занимает второе место и быстро догоняет лидера. Количество библиотек для анализа данных под Python активно растет. Пока их не так много, как у R, но наблюдается устойчивая положительная тенденция, и, вероятно, в будущем их число сравняется.
  2. Скорость работы. Python — динамический язык программирования, и его собственный код может уступать по скорости языкам вроде C или C++. Однако большинство библиотек для анализа данных написаны на C. Python лишь вызывает эти библиотеки, поэтому основные вычисления выполняются очень быстро.
  3. Удобство разработки. Python предоставляет удобные инструменты для создания интерфейсов. На нем проще писать код. В отличие от R, он подходит не только для прототипирования, но и для создания конечных продуктов, которые можно передать заказчику. R, напротив, является в первую очередь инструментом для работы с данными: на нем сложно реализовать выразительный интерфейс и полноценное приложение.

Недостатки Python

  1. Скорость при нестандартных алгоритмах. Когда требуется реализовать собственный алгоритм, выходящий за рамки готовых библиотек на C, проявляются проблемы динамических языков — низкая скорость выполнения.
  2. Многопоточность. Python не очень хорошо предназначен для многопоточного программирования. Хотя он поддерживает такие функции, его возможностей для полноценной работы с многопоточностью недостаточно.

Обзор ключевых библиотек

Для работы с алгоритмами анализа и обработки данных понадобятся определенные библиотеки. Базовыми являются NumPy и SciPy — с ними интегрируются все остальные.

NumPy — основной пакет для научных вычислений на Python. Он предоставляет:

  • Быстрые и эффективные многомерные массивы. Они оптимизированы и работают значительно быстрее стандартных списков Python.
  • Функции для математических операций над массивами.
  • Инструменты для чтения и записи данных в виде массивов.
  • Операции линейной алгебры, преобразования Фурье и генераторы случайных чисел.
  • Инструменты для интеграции с кодом на C++ и Fortran, так как на этих языках написано много библиотек для научных вычислений.

SciPy — это набор пакетов для решения различных задач в области научных вычислений. Например, интегрирование, дифференцирование, линейная алгебра с более широкими возможностями, чем у NumPy, а также набор статистических средств обработки.

Matplotlib — библиотека для визуализации. Она удерживает полное лидерство в этой области для Python.

IPython — это усовершенствованная интерактивная оболочка для Python. По своим функциям она напоминает RStudio: есть консоль, возможность построения графиков и подсветка синтаксиса.

Pandas — библиотека, предоставляющая различные структуры и типы данных. Наиболее интересна тем, что содержит структуру Data Frame, аналогичную той, что есть в R. По удобству работы с данными она не уступает реализации в R.

Работа с массивами в NumPy

Рассмотрим подробнее возможности библиотеки NumPy. Она использует векторизированные операции для фильтрации, выделения подмножеств и трансформации данных. Также предоставляет общие алгоритмы для сортировки, преобразования массива во множество, получения статистических сведений о данных, слияния и объединения разнородных данных.

Создание массивов

Наибольший интерес представляют многомерные массивы (N-dimensional array или ndarray). Массив можно создать из последовательности, например, из списка списков. В результате получится двумерный массив.

  • Атрибут ndim (number of dimensions) укажет количество измерений. В нашем случае — 2.
  • Атрибут shape покажет размер матрицы (количество строк и столбцов).

Векторизированные операции

Важно, что операции над массивами можно выполнять без использования цикла for. Это очень удобно и похоже на работу в R. Массивы будут поэлементно перемножаться, вычитаться, складываться и т.д. То же самое касается операций со скалярами (обычными числами).

Работа с индексами и срезами

При работе со срезами важно помнить: копирования данных не происходит. Происходит передача по ссылке.

  • Пример 1: Если взять срез массива (например, с 5-го по 8-й элемент) и присвоить всем его элементам число 12, то в исходном массиве эти данные также изменятся.
  • Пример 2: Можно взять срез, изменить в нем первый элемент, и в исходном массиве соответствующий элемент также изменится. Это подтверждает, что данные не копируются, а используются общие ссылки.

Транспонирование

Транспонирование удобно тем, что при этом не происходит копирования данных. Возвращается просто представление транспонированной матрицы. Оно доступно по атрибуту T.

Универсальные функции (ufunc)

Универсальные функции способны работать с массивом поэлементно. Например, можно создать массив от 0 до 10 и вычислить квадратный корень из каждого элемента, просто передав массив в функцию sqrt. Это так же просто, как и в R.

Существуют функции, которые принимают на вход два массива и возвращают один. Например, функция вычисления максимума сравнивает попарно элементы двух массивов и возвращает массив с максимальными значениями.

Математические и статистические методы

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

  • Для матрицы 5x4 можно указать axis=0, и функция (например, вычисление среднего) вернет массив со средними значениями по строкам (то есть по каждому столбцу).
  • Если указать axis=1, расчет будет произведен по столбцам (для каждой строки).

Сортировка

Сортировка выполняется функцией sort. У нее также есть возможность указать ось (измерение), по которой нужно произвести сортировку.

Краткие итоги

Python занимает прочное место в инструментарии специалиста по данным, представляя собой не просто альтернативу R, а самостоятельную экосистему с четкой логикой развития. Его ключевое преимущество — универсальность: он объединяет среду для быстрого прототипирования с возможностью создания промышленных решений, что снимает типичный для исследовательских языков барьер между анализом и внедрением. Такой подход сокращает путь от гипотезы до работающего продукта, что критически важно в бизнес-среде.

Фундаментом этой эффективности является продуманная архитектура библиотек. Вынос вычислительно сложных операций в низкоуровневый код на C или Fortran позволяет обойти ограничения производительности, свойственные динамическим языкам. Пользователь взаимодействует с удобным интерфейсом Python, в то время как «тяжелая» работа выполняется на высокой скорости. Эта концепция разделения труда между интерфейсом и вычислительным ядром является центральной для понимания современного подхода к научным вычислениям на Python.

Особого внимания заслуживает философия работы с данными, реализованная в NumPy. Отказ от явных циклов в пользу векторизированных операций — это не просто синтаксическое удобство, а парадигма, делающая код одновременно более кратким, читаемым и быстрым. Однако она требует осознанного отношения к управлению памятью. Понимание того, что при создании среза возвращается представление (view), а не копия, является критически важным для написания корректного кода. Игнорирование этого факта может привести к трудноуловимым ошибкам, поскольку изменения в «новом» массиве неявно затронут исходные данные. Это подчеркивает необходимость глубокого понимания внутренних механизмов библиотек, а не поверхностного заучивания функций.

Python vs R

Python — мощный инструмент для Data Mining, конкурент языка R.

Ключевые библиотеки

Работа с массивами в NumPy

Создание и свойства

Векторизированные операции

Операции над массивами выполняются поэлементно, без циклов for (например, arr1 * arr2, arr + 5).

Индексация и срезы

Универсальные функции (ufunc)

Статистика и сортировка

Выводы

1. Python — универсальный язык, объединяющий прототипирование и создание конечных продуктов.
2. Высокая скорость анализа данных на Python достигается за счет вызова библиотек, написанных на C.
3. NumPy и SciPy — базовые библиотеки, на которых строится вся экосистема анализа данных в Python.
4. Pandas предоставляет структуру Data Frame — удобный аналог из языка R.
5. Векторизированные операции в NumPy позволяют обрабатывать массивы без циклов.
6. При работе со срезами в NumPy создается представление, а не копия данных.
7. Транспонирование массива в NumPy также не копирует данные, а возвращает новое представление.
8. Универсальные функции NumPy выполняют операции над каждым элементом массива.
9. Параметр axis в функциях NumPy задает измерение, по которому проводятся вычисления.
10. Ограничением Python является слабая поддержка полноценной многопоточности.

Вопросы для самопроверки

1. В чем состоит главное отличие Python от R с точки зрения создания конечного продукта?
2. Почему Python, будучи динамическим языком, обеспечивает высокую скорость вычислений в анализе данных?
3. Каково основное назначение библиотеки Pandas в анализе данных?
4. Какие ключевые компоненты включает в себя библиотека NumPy?
5. Для решения каких вычислительных задач используется библиотека SciPy?
6. Что такое векторизированная операция и в чем ее преимущество?
7. В чем заключается опасность изменения среза массива в NumPy?
8. Что произойдет с данными, если изменить элемент транспонированной матрицы?
9. Что возвращает функция sqrt(), если ей передать массив чисел?
10. Для чего используется параметр axis в методах типа mean или sort?
11. Какую оболочку для Python можно сравнить с RStudio?
12. В чем состоит слабость Python при разработке нестандартных вычислительных алгоритмов?
Вернуться к учебному плану