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

Возможности библиотеки Pandas

В лекции рассматриваются основы работы с библиотекой Pandas в Python. Изложение строится от простого к сложному: сначала вводится понятие одномерной структуры Series и её индексов, затем описывается создание и модификация табличной структуры DataFrame. Практическая часть демонстрирует применение алгоритма K-Means для кластеризации данных. Завершается материал сравнением Python и R и обоснованием выбора инструмента для анализа данных.

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

В результате изучения лекции слушатель будет способен:
1. Объяснять разницу между структурами данных Series и DataFrame.
2. Создавать объекты Series и DataFrame из массивов и словарей.
3. Демонстрировать операции индексации, фильтрации и присвоения значений в Pandas.
4. Применять алгоритм K-Means из библиотеки Scikit-learn для разбиения данных на кластеры.
5. Сравнивать функциональные возможности языков Python и R для решения задач анализа данных.
Показывать лекцию целиком
Краткое изложение

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

Структуры данных: Series и DataFrame

Pandas — это библиотека, предоставляющая удобные и высокопроизводительные структуры данных. Среди них ключевыми являются Series и DataFrame.

Series (Серия) — это одномерный индексированный массив. В отличие от обычного массива, у каждого элемента в Series есть связанная с ним метка — индекс.

Создать Series можно, передав в конструктор список значений и список индексов:

import pandas as pd

# Создание Series из значений и индексов
s = pd.Series([4.7, -5, 3], index=['A', 'B', 'C'])

К элементам Series можно обращаться по индексу, например, s['A'] вернет значение 4.7. Присвоение также работает по индексу: s['D'] = 6.

Важное свойство Series — сохранение индексов при операциях. Если применить фильтрацию (например, выбрать значения больше нуля), умножить все значения на число или возвести в экспоненту, индексы у результирующего объекта останутся прежними.

Для придания данным смысла можно задать имя самому объекту Series (атрибут name) и имя его индексу (index.name). Это делает структуру более осмысленной для анализа.

DataFrame (Таблица данных) — это двумерная структура, представляющая собой таблицу вида «объект-свойство». Столбцы — это признаки, а строки — объекты.

Один из способов создания DataFrame — конструирование из словаря (dict):

data = {
    'State': ['A', 'B', 'C', 'D'],
    'Year': [2000, 2001, 2002, 2003],
    'Pop': [1.5, 1.7, 3.6, 2.4]
}
df = pd.DataFrame(data)

Можно управлять порядком столбцов с помощью параметра columns. Если указать имя столбца, которого нет в исходном словаре, он будет создан и заполнен значениями NaN (Not a Number) — специальным обозначением пропущенных данных.

Доступ к столбцам DataFrame можно получить несколькими способами:

  • Через имя столбца в квадратных скобках: df['Pop'].
  • Через атрибут: df.Pop.

Для доступа к строкам по их позиции используется свойство .iloc (integer location). Поскольку операции в Python векторизованы, можно присвоить значение всему столбцу, например, константу или новый вектор значений.

Кластеризация на практике

Применение методов машинного обучения, таких как кластеризация, в Python не сложнее, чем в других инструментах. Рассмотрим пример с алгоритмом K-Means (Метод k-средних).

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

После объединения наборов в один общий датасет запускается алгоритм K-Means. За его реализацию в Python отвечает библиотека Scikit-learn (sklearn). Мы заранее знаем, что групп три, поэтому указываем n_clusters=3.

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3)
kmeans.fit(data)

Для визуализации результата используется библиотека Matplotlib. График наглядно показывает, как алгоритм разделил данные на три предсказуемых кластера.

Выводы по использованию инструментов

Несмотря на то что язык R занимает сильные позиции в анализе данных, Python предоставляет не менее простые и удобные средства для решения тех же задач. Основные уступки R — это, как правило, скорость выполнения некоторых скриптов и общее число узкоспециализированных пакетов расширения. Однако все основные алгоритмы и методы анализа данных уже реализованы и для Python.

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

Лучший способ сделать осознанный выбор — самостоятельно попробовать оба инструмента в работе.

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

Переход от базовых концепций к прикладному применению демонстрирует, что эффективность аналитика определяется не столько выбором конкретного языка, сколько пониманием структур данных и алгоритмов. Освоение Series и DataFrame дает универсальный ключ к управлению данными: понимание механики индексов и векторных операций позволяет манипулировать информацией осознанно, не прибегая к громоздким циклам и избыточному коду. Это формирует базу для перехода от разрозненных массивов к целостному представлению о наборе данных как о таблице признаков.

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

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

Pandas — это ключевая библиотека Python для анализа данных, предоставляющая две основные структуры: Series и DataFrame.

Series (Серия) — это одномерный массив, у которого каждый элемент имеет свой индекс. Создать её можно, передав в конструктор список значений и список индексов. Обращаться к элементам и присваивать им новые значения можно по этому индексу. Ключевая особенность Series — сохранение индексов при любых операциях (фильтрации, умножении, математических функциях). Для улучшения читаемости можно задать имя объекту (name) и его индексу (index.name).

DataFrame (Таблица данных) — это двумерная таблица «объект-свойство». Легко создается из словаря (dict), где ключи становятся столбцами. Порядок столбцов задается параметром columns. Если указать несуществующий столбец, он будет заполнен значениями NaN (Not a Number) — это стандартное обозначение пропущенных данных. Доступ к столбцам возможен через квадратные скобки (df['column']) или через атрибут (df.column). Для доступа к строкам по позиции используется .iloc. Значение можно присвоить всему столбцу сразу благодаря векторным операциям в Python.

Практическая кластеризация. Алгоритм K-Means (Метод k-средних) из библиотеки Scikit-learn (sklearn) используется для группировки данных. Пример: генерируются три группы точек с нормальным распределением (у каждой своё среднее значение), они объединяются в один набор данных, и алгоритм запускается с параметром n_clusters=3, так как количество групп известно заранее. Визуализация результата выполняется библиотекой Matplotlib.

Сравнение Python и R. Python не уступает R в простоте применения алгоритмов анализа данных. R сохраняет преимущество в скорости выполнения некоторых самописных скриптов и в общем количестве специализированных пакетов. Однако наблюдается массовый переход специалистов с R на Python. Это связано с тем, что Python — это более универсальный и продуманный язык, пригодный не только для исследовательских задач, но и для создания коммерческих решений. В то время как R зачастую воспринимается как узкоспециализированный инструмент. Финальный выбор инструмента каждый делает на основе личной практики.

Выводы

1. Series — это одномерный массив с индексированными значениями, что упрощает адресацию данных.
2. При выполнении операций над Series (умножение, фильтрация, математические функции) индексы сохраняются.
3. DataFrame — это табличная структура данных, удобная для представления объектов и их признаков.
4. DataFrame можно создавать из словарей, где ключи становятся именами столбцов.
5. Несуществующие признаки при создании DataFrame автоматически заполняются значениями NaN.
6. Доступ к данным в Pandas возможен через квадратные скобки, через атрибут (точку) или с помощью .iloc.
7. K-Means — это алгоритм кластеризации, который группирует данные на основе их близости в пространстве признаков.
8. Для машинного обучения в Python используется библиотека Scikit-learn (sklearn).
9. Визуализация данных в Python выполняется с помощью библиотеки Matplotlib.
10. Python уступает R в основном в скорости исполнения некоторых самописных скриптов.
11. Python, в отличие от R, пригоден для создания коммерческих программных решений.
12. Для выбора оптимального инструмента анализа данных необходима личная практика с обоими языками.

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

1. В чем ключевое отличие Series от классического одномерного массива в Python?
2. Как изменится индексация Series после применения к нему операции фильтрации?
3. Каким образом можно придать смысловое название индексу в Series?
4. Что произойдет, если при создании DataFrame указать столбец, которого нет в исходном словаре?
5. Опишите два разных способа получения доступа к одному и тому же столбцу в DataFrame.
6. Почему перед запуском алгоритма K-Means в примере данные были сгенерированы с разными средними значениями?
7. Какую роль играет библиотека Scikit-learn в задаче кластеризации?
8. Для чего в процессе кластеризации используется библиотека Matplotlib?
9. В чем состоят основные конкурентные преимущества R перед Python?
10. Чем обусловлен тренд перехода специалистов с R на Python?
Вернуться к учебному плану