Презентацию к лекции 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?