Язык Python зарекомендовал себя как полезный инструмент для машинного обучения и анализа данных благодаря своим вспомогательным библиотекам. Каждая из библиотек оптимизирована для решения уникальных задач. Рассмотрим Pandas, одну из наиболее востребованных библиотек, используемых для манипуляции данными в Python: изучим ее назначение, способы импорта, практические примеры применения.
Описание библиотеки Pandas
Pandas — это открытая библиотека, размещенная на GitHub, с доступным исходным кодом, который пользователи могут просматривать и модифицировать. Для работы с Pandas требуется компилятор C/C++ и среда разработки Python. Подробные инструкции по установке компилятора C для различных операционных систем можно найти в документации.
Pandas пользуется популярностью среди ученых-исследователей и аналитиков данных, которые применяют ее для обработки информации, включая группировку, визуализацию, создание таблиц, фильтрацию по заданным параметрам. Освоение Pandas расширяет возможности специалистов в областях, связанных с анализом информации.
Начало работы с Pandas
Установка Pandas Python
Расскажем подробно, как разработчику Python установить библиотеку Pandas.
1. Установка Anaconda
Самый простой способ начать работу с Pandas — установить Anaconda вместе с дистрибутивом Python, включающим в себя широкий набор библиотек. Загрузите Anaconda с официального сайта.
2. Настройка установки:
- выберите рекомендуемые параметры установки;
- установите флажок «Add Anaconda to my PATH environment variable», чтобы запускать Anaconda по умолчанию;
- ответьте «Да» на вопрос об инициализации Anaconda3;
- перезагрузите компьютер после завершения установки.
3. Запуск JupyterLab:
- откройте командную строку Anaconda;
- введите «jupyter-lab» для запуска JupyterLab, интерактивного интерфейса для работы с кодом, данными и блокнотами.
4. Создание нового блокнота:
- щелкните значок «+» в левом верхнем углу интерфейса JupyterLab;
- выберите «Python 3» для создания нового блокнота.
5. Импорт библиотеки
- в первой ячейке блокнота введите: «import pandas as pd»;
- теперь в следующих ячейках можно полноценно использовать библиотеку.
Сокращение pd используется для обозначения Pandas в коде. Оно встречается в документации, учебных пособиях и статьях. Рекомендуется использовать это сокращение и в своих программах, чтобы избежать дублирования полного имени pandas.
В сферах машинного обучения и анализа данных часто используются интерактивные среды, такие как Google Colab и Jupyter Notebook. Эти среды предоставляют интерактивный интерфейс для работы с данными и кодом, позволяя выполнять анализ пошагово и итеративно.
Pandas входит в стандартный набор библиотек для этих сред, поэтому устанавливать ее отдельно не требуется. Она будет доступна сразу после запуска Colab или Jupyter Notebook.
Series
Два основных вида данных в Pandas — это Series и DataFrame. Рассмотрим каждый.
Series — это одномерный массив, который может хранить данные разных типов. Его можно визуализировать как столбец таблицы, где каждое значение имеет соответствующий индекс (номер строки).
DataFrame
DataFrame — центральная структура данных в библиотеке Pandas, представленная двумерной таблицей с именованными столбцами, индексированными строками. Ячейки DataFrame могут содержать данные разных типов, в том числе числовые, булевы и строковые значения.
Индексы строк и столбцов DataFrame обеспечивают довольно удобные механизмы сортировки, фильтрации и быстрого доступа к конкретным элементам.
Отсутствие данных является распространенной проблемой в реальных датасетах. Пропущенные значения в Pandas обычно представляются специальным значением NaN («Not a Number») в ячейках Series или DataFrame.
Для работы с отсутствующими значениями доступны следующие методы:
- isna() — идентифицирует отсутствующие значения параметра и возвращает булеву маску, в которой True указывает на пропущенные данные;
- fillna() — позволяет заполнить отсутствующие значения указанными или методами интерполяции;
- dropna() —удаляет столбцы или строки содержащие отсутствующие значения.
Эти методы позволяют обрабатывать отсутствующие значения разными способами в зависимости от конкретных требований и целей анализа данных.
Удаление строк или столбцов с отсутствующими значениями может привести к потере ценной информации, особенно если датасет небольшой. В таких случаях лучшим вариантом является заполнение отсутствующих значений одним из подходящих для этого методов. Основных методов несколько:
- заполнение средним — заменяет отсутствующие значения средним значением в столбце;
- заполнение медианой — заменяет отсутствующие значения медианным значением в столбце;
- заполнение модой — заменяет отсутствующие значения наиболее часто встречающимся значением в столбце;
- заполнение предыдущим или последующим значением — заменяет отсутствующие значения предыдущим или последующим, присутствующим в строке или столбце.
Библиотека scikit-learn предоставляет модуль sklearn.impute, содержащий несколько классов импутеров, основанных на различных алгоритмах. Эти импутеры можно использовать для более сложных методов заполнения, таких как:
- K-ближайших соседей (KNN) — заполняет отсутствующие значения средним значением k ближайших точек данных;
- метод Байеса по средней (Bayesian Ridge) — заполняет отсутствующие значения, используя байесовский подход с использованием априорного распределения по средней;
- случайный лес — заполняет отсутствующие значения путем создания случайного леса и использования его для предсказания пропущенных значений.
Точный выбор подходящего метода заполнения определяется характером отсутствующих данных в сочетании с конкретной задачей аналитика.
Импорт данных
В Pandas есть гибкие возможности для импорта данных из различных источников: словарей, списков, кортежей. Один из наиболее распространенных способов импорта — использование файлов .csv, часто применяемых в дата-анализе. Для этой цели в Pandas используется функция pd.read_csv().
Функция read_csv() принимает ряд параметров, чтобы управлять процессом импорта:
- sep: позволяет указать разделитель, используемый в импортируемом файле. По умолчанию используется «,», что соответствует разделителю .csv. Этот параметр полезен при наличии нестандартных разделителей, таких как табуляция или точка с запятой.
- dtype: используется для определения типов данных в столбцах после загрузки файла .csv. Это необходимо, если типы определились некорректно. Например, даты часто импортируются как строки, а не как отдельный тип.
Чтение данных
Pandas поддерживает многие форматы, включая CSV, Excel, SQL, HTML, HDF. Доступные форматы можно просмотреть через атрибут pd.read.
Ниже приведены примеры чтения данных в Python с использованием Pandas.
Из CSV-файла:
import pandas as pd
data = pd.read_csv('data.csv')
print(data.head())
Из Excel-файла:
data = pd.read_excel('data.xlsx')
print(data.head())
Из SQL-базы данных:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
query = "SELECT * FROM table_name"
data = pd.read_sql(query, engine)
print(data.head())
Запись данных
В CSV или Excel-файл:
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [40, 33, 22]
})
data.to_csv('output.csv', index=False)
В SQL-базу данных:
import pandas as pd
from sqlalchemy import create_engine
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [40, 33, 22]
})
engine = create_engine('sqlite:///new_database.db')
data.to_sql('new_table', engine, index=False, if_exists='replace')
Добавление, удаление строк
Для добавления новых строк в DataFrame используется метод concat. Рассмотрим пример пошагово.
1. Создаем словарь с новыми данными
new_data = {
'name': ['Alice'],
'age': [40]
}
2. Конвертируем словарь в DataFrame
new_df = pd.DataFrame(new_data)
3. Объединяем два DataFrame с помощью concat
new_list = [df, new_df]
df = pd.concat(new_list, ignore_index=True)
Таким образом, у нас:
- создается словарь new_data, содержащий данные для новой строки;
- словарь конвертируется в DataFrame new_df;
- существующий DataFrame df объединяется с new_df с помощью concat;
- указывается опция ignore_index=True для сброса индексов строк после объединения: это приводит к тому, что новая строка добавляется как первая в объединенном DataFrame.
Для удаления строк используется метод drop. Он принимает два основных параметра:
- labels: индексы строк, которые требуется удалить. Можно передать один индекс или список индексов;
- inplace: управляет тем, будет ли модифицирован исходный DataFrame или будет создана новая копия без удаленных строк. По умолчанию равно False, что создает новую копию. Для изменения исходного DataFrame необходимо установить inplace в True.
Пример использования метода drop:
Удалить строку с индексом 0
df.drop(0, inplace=True)
Удалить несколько строк по списку индексов
df.drop([0, 1, 2], inplace=True)
После удаления строк с помощью inplace=True индексы оставшихся строк обнуляются, начиная с 0.
Доступ по индексу: основные методы
Для поиска конкретной строки можно использовать два подхода:
1. По индексному значению.
Это значение отображается в первом столбце DataFrame, который обычно содержит индексы строк. Для фильтрации по значению индекса используется метод loc.
2. По индексу:
Индексы строк в DataFrame всегда начинаются с 0. Для получения подмножества строк по их индексам используется метод iloc.
Пример использования для фильтрации строк с индексами 5-8:
df_subset = df.iloc[5:9]
Группировка данных
Для группировки данных существует метод groupby. Он позволяет выполнять разные операции над отдельными группами данных, сравнивать их между собой.
Пример использования для группировки по столбцу title:
grouped_data = df.groupby('title')
Метод groupby возвращает объект DataFrameGroupBy, который предоставляет различные методы для выполнения агрегатных операций и анализа данных по группам.
Агрегирование данных
После группировки данных в DataFrame для выполнения математических вычислений, таких как суммирование, используется метод aggregate.
Пример использования для суммирования стоимости внутри каждой группы:
result = grouped_data['revenue'].aggregate('sum')
Параметр as_index=False указывает, что исходные индексы строк должны быть сохранены в результирующем объекте. Если задать as_index=True, индексы строк будут преобразованы в столбец в результирующем DataFrame.
Редактирование DataFrame
Изменение значений в ячейках DataFrame в Pandas является еще одной распространенной задачей. Существует несколько способов сделать это, но наиболее простым и эффективным является использование методов at[] или iat[].
Метод at[] используется для доступа к элементам DataFrame по их меткам строк и столбцов. Например, чтобы изменить значение в ячейке с индексом строки «С» и именем столбца «x», можно использовать следующий код:
df.at["C", "x"] = 10
Метод iat[] используется для доступа к элементам DataFrame по их целочисленным индексам строк и столбцов. В приведенном примере индекс строки «C» равен 2, а индекс столбца «x» равен 0. Таким образом, значение в ячейке можно изменить с помощью следующего кода:
df.iat[2, 0] = 10
Оба метода изменяют исходный DataFrame непосредственно.
Использование метода xs() не рекомендуется для изменения значений в DataFrame. Метод xs() возвращает копию данных, а не ссылку на них, поэтому изменения, внесенные в возвращаемый объект, не будут отражаться в исходном DataFrame.
Сводные таблицы
Эти методы используются для суммирования и агрегации данных, собранных из объектов исследования. Для создания сводных таблиц на Python часто используется библиотека Pandas, а именно метод .pivot_table.
Для иллюстрации возьмем условный набор данных, где имеются простые категории «one»/«two», «small»/«large» и числовые значения. В столбце «A» категории «foo»/«bar» объединяются в слово «foobar» — это условное обозначение, используемое в программировании. В данном случае оно указывает на разделение данных на две группы по неопределенному признаку.
import pandas as pd
df = pd.DataFrame({
"A": ["foo", "foo", "foo", "foo", "foo", "bar", "bar", "bar", "bar"],
"B": ["one", "one", "one", "two", "two", "one", "one", "two", "two"],
"C": ["small", "large", "large", "small", "small", "large", "small", "small", "large"],
"D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
"E": [2, 4, 5, 5, 6, 6, 8, 9, 9]
})
df
Метод .pivot_table преобразует данные в таблицу сводных итогов. Аргументы метода определяют, как данные будут представлены в таблице:
- values — столбец данных, по которым будут рассчитываться сводные итоги;
- index — метки строк итоговой таблицы;
- columns — метки столбцов итоговой таблицы;
- aggfunc — функция или список функций, применяемых к данным для расчета итоговых значений.
Создаем для примера сводную таблицу, в которой данные сгруппированы по столбцам «A», «B» и «C» и просуммированы по столбцу «D»:
import numpy as np
table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
table
В случае, когда есть большое количество разнородной информации, составление сводных таблиц помогает ее систематизировать.
Визуализация данных
Специальные инструменты для визуализации данных, такие как Matplotlib или Seaborn, являются распространенными дополнениями к Pandas. Они позволяют создавать наглядные графики или диаграммы для исследования и представления данных.
Seaborn, построенный на основе Matplotlib, предоставляет высокоуровневый интерфейс для создания статистических графиков. Он упрощает создание сложных визуализаций с помощью простых в использовании функций.
Чтобы использовать Seaborn с Pandas, нужно выполнить следующие шаги:
1. Установите Seaborn с помощью pip или conda.
2. Импортируйте Seaborn и Matplotlib в свой код:
import seaborn as sns
import matplotlib.pyplot as plt
3. Создайте график, используя такие функции Seaborn как sns.distplot, sns.scatterplot и sns.barplot. Эти функции берут данные Pandas в качестве входных и создают визуализации данных. Например, следующий код создает гистограмму с использованием Seaborn:
# Данные
purchase_counts = [7000, 3755, 2523, 541, 251, 1]
# График
sns.distplot(purchase_counts, bins=20, kde=False, hist_kws={"alpha": 0.7})
plt.xlabel('Число покупок на одного покупателя')
plt.ylabel('Количество покупателей')
plt.title('Распределение числа покупок')
plt.show()
Используя Pandas и Seaborn вместе, аналитики могут создавать сложные информативные визуализации для анализа и представления данных.
Другие типы графиков в Pandas:
- kdeplot — график плотности распределения, который представляет собой сглаженную версию гистограммы. Он показывает распределение данных без учета отдельных значений.
- jointplot — график, который отображает распределение двух переменных в наборе данных. Каждое наблюдение в наборе данных представлено точкой на графике, причем значения двух переменных соответствуют координатам точки по осям X и Y.
- boxplot — график, который показывает центральную тенденцию и разброс данных. Он отображает медиану, первый и третий квартили, а также выбросы, если таковые имеются.
- scatterplot — график, который отображает отношения между двумя числовыми переменными. Каждая точка на графике представляет собой одно наблюдение, где координаты точки соответствуют значениям двух переменных.
- barplot — график, который отображает частоту или значения категориальных переменных. Он представляет собой столбчатую диаграмму, где высота каждого столбца соответствует частоте или значению соответствующей категории.
- pieplot — круговая диаграмма, которая показывает относительный вклад каждой категории в общую сумму.
Области применения Pandas
Pandas используется для различных задач, связанных с обработкой данных. К ним относятся:
- очистка — удаление дубликатов, обработка пропущенных значений и преобразование типов данных;
- преобразование — группировка, слияние, присоединение таблиц;
- анализ данных — расчет статистических показателей, таких как среднее, медиана, стандартное отклонение;
- визуализация — создание различных типов графиков и диаграмм для исследования и представления данных.
Хотя Pandas является мощным инструментом для анализа данных, он имеет некоторые лимиты, ограничивающие его использование в определенных сценариях, особенно в промышленных масштабах:
- производительность — Pandas может быть медленным для обработки очень больших наборов данных из-за своей интерпретируемой природы и последовательной обработки;
- управление памятью — Pandas потребляет много памяти, особенно при работе с большими наборами данных, что может привести к проблемам с производительностью на машинах с ограниченными ресурсами;
- отсутствие параллелизма — Pandas не поддерживает параллельную обработку, что ограничивает его масштабируемость при работе с большими наборами данных.
Несмотря на эти ограничения, Pandas остается ценным инструментом для многих задач анализа данных, особенно в следующих областях:
- прототипирование и исследования — Pandas идеально подходит для быстрого создания прототипов и исследования гипотез в проектах, где ресурсы не являются проблемой;
- анализ временных рядов — Pandas предоставляет мощные функции для работы с временными рядами, включая методы для извлечения признаков, прогнозирования и визуализации;
- обработка данных — Pandas включает в себя широкий набор функций для очистки, преобразования и анализа данных, что делает его универсальным инструментом для подготовки данных к моделированию.
Сферы применения Pandas включают в себя:
- искусственный интеллект (ИИ): Pandas используется для подготовки и анализа данных для моделей машинного и глубокого обучения;
- банковское дело: Pandas применяется для анализа финансовых показателей: информации о стоимости акций, курсах валютных, других финансовых показателей, для выявления закономерностей, принятия обоснованных решений;
- нейробиология: Pandas используется для обработки нейробиологических данных, таких как данные МРТ и ЭЭГ, для исследования структуры, функции, патологий мозга;
- макроэкономика: Pandas применяется для анализа экономических данных, таких как показатели ВВП, уровень безработицы, инфляции, для понимания экономических тенденций, разработки экономических моделей;
- статистика: Pandas используется для статистического анализа, включая описательную статистику, регрессионный анализ, анализ временных рядов;
- реклама: Pandas применяется для анализа показателей маркетинговых кампаний, таких как информация о показах объявлений, кликах и конверсиях, а также для оптимизации рекламных стратегий;
- веб-аналитика: Pandas используется для анализа данных веб-сайтов и приложений, таких как информация о трафике, поведении пользователей, для улучшения пользовательского опыта и повышения эффективности веб-сайта;
- здравоохранение: анализ данных о пациентах и результатах анализов для улучшения диагностики, лечения и прогнозирования;
- образование: анализ показателей успеваемости учащихся и данных опросов для улучшения методов обучения, оценки, работы с учениками;
- энергетика: анализ уровня потребления энергии для оптимизации ее использования, снижения выбросов парниковых газов;
- транспорт: анализ показателей трафика для улучшения транспортных систем и сокращения задержек.
В целом Pandas лучше всего подходит для проектов, где производительность не является критическим фактором, а гибкость в сочетании с удобством использования важнее, чем масштабируемость и эффективность.