Pandas
Pandas - библиотека для Python, предоставляющая мощные и гибкие инструменты для работы со структурированными данными. Pandas вводит 2 ключевые структуры данных: Series (одномерный массив с метками) и DataFrame (двумерная таблица с метками строк и столбцов). Библиотека стала стандартом де-факто для манипуляции, очистки, агрегации и анализа данных в экосистеме Data Science.
В интернет-маркетинге Pandas используется для обработки данных из CRM, рекламных кабинетов, Яндекс.Метрики, Google Analytics 4 и других источников, позволяя маркетинговым аналитикам объединять, очищать и подготавливать данные для построения отчётов, когортного анализа и моделей машинного обучения.
Основные структуры данных
[править]Series
[править]Одномерный массив с индексами (метками). Аналог столбца в Excel.
import pandas as pd # Создание Series s = pd.Series([100, 200, 300], index=['янв', 'фев', 'мар']) print(s) # янв 100 # фев 200 # мар 300 # dtype: int64 # Доступ по индексу print(s['фев']) # 200 print(s.iloc[1]) # 200 (позиционная индексация)
DataFrame
[править]Двумерная таблица с метками строк (index) и столбцов (columns). Основной объект работы в Pandas.
# Создание DataFrame из словаря
data = {
'канал': ['Яндекс.Директ', 'VK Реклама', 'SEO', 'Email'],
'бюджет': [50000, 30000, 20000, 15000],
'лиды': [45, 38, 12, 28],
'выручка': [180000, 114000, 60000, 84000]
}
df = pd.DataFrame(data)
print(df)
Основные операции с данными
[править]Загрузка и просмотр данных
[править]# Загрузка из CSV
df = pd.read_csv('marketing_data.csv', encoding='utf-8')
# Просмотр первых/последних строк
df.head(10) # первые 10 строк
df.tail(5) # последние 5 строк
# Информация о DataFrame
df.info() # типы данных, количество непустых значений
df.describe() # статистика по числовым столбцам
df.shape # размерность (строки, столбцы)
Выборка и фильтрация
[править]# Выбор столбцов df['канал'] # 1 столбец → Series df[['канал', 'выручка']] # несколько столбцов → DataFrame # Фильтрация по условию high_roi = df[df['выручка'] > 100000] channel_filter = df[df['канал'].isin(['Яндекс.Директ', 'SEO'])] # Фильтрация по нескольким условиям filtered = df[(df['лиды'] > 20) & (df['бюджет'] < 40000)]
Агрегация и группировка
[править]# Базовая агрегация
total_budget = df['бюджет'].sum()
avg_leads = df['лиды'].mean()
max_revenue = df['выручка'].max()
# Группировка
grouped = df.groupby('канал')['выручка'].sum()
# Множественная агрегация
summary = df.groupby('канал').agg({
'бюджет': 'sum',
'лиды': 'mean',
'выручка': ['sum', 'mean']
})
Работа с пропусками
[править]# Проверка пропусков df.isnull().sum() # количество пропусков в каждом столбце df.isnull().sum().sum() # общее количество пропусков # Заполнение пропусков df.fillna(0, inplace=True) # заполнить нулями df.fillna(df.mean(), inplace=True) # заполнить средним df.ffill(inplace=True) # заполнить предыдущим значением # Удаление пропусков df.dropna(inplace=True) # удалить строки с любыми пропусками df.dropna(subset=['важный_столбец'], inplace=True) # удалить строки с пропусками в конкретном столбце
Объединение данных
[править]# Объединение по индексу или столбцу (аналог VLOOKUP) merged = pd.merge(df_ads, df_crm, on='client_id', how='inner') # how: inner, left, right, outer # Конкатенация (склеивание) concatenated = pd.concat([df1, df2], axis=0) # по строкам
Применение Pandas в маркетинговой аналитике
[править]Сквозная аналитика
[править]Объединение данных из разных источников.
# Загрузка данных
df_ads = pd.read_csv('ads_data.csv') # данные из рекламных кабинетов
df_crm = pd.read_csv('crm_data.csv') # данные о сделках из CRM
df_analytics = pd.read_csv('site_data.csv') # данные из GA4 / Яндекс.Метрики
# Объединение данных
df_merged = df_ads.merge(df_analytics, on='visit_id', how='left')
df_full = df_merged.merge(df_crm, on='client_id', how='left')
# Расчёт метрик
df_full['roas'] = df_full['revenue'] / df_full['ad_spend'] * 100
df_full['cac'] = df_full['ad_spend'] / df_full['new_clients']
Когортный анализ
[править]# Преобразование даты в месяц когорты
df['cohort_month'] = df['first_purchase_date'].dt.to_period('M')
# Когортный анализ
cohort_data = df.groupby(['cohort_month', 'lifetime_month']).agg({
'client_id': 'nunique',
'revenue': 'sum'
}).reset_index()
# Формирование таблицы когорт (pivot)
cohort_pivot = cohort_data.pivot(
index='cohort_month',
columns='lifetime_month',
values='client_id'
)
# Расчёт retention
retention = cohort_pivot.div(cohort_pivot[0], axis=0) * 100
Анализ эффективности каналов
[править]# Группировка по каналам
channel_performance = df.groupby('channel').agg({
'spend': 'sum',
'leads': 'sum',
'revenue': 'sum'
}).reset_index()
# Расчёт метрик
channel_performance['cpl'] = channel_performance['spend'] / channel_performance['leads']
channel_performance['roas'] = channel_performance['revenue'] / channel_performance['spend'] * 100
channel_performance['cac'] = channel_performance['spend'] / channel_performance['new_clients']
# Сортировка по ROAS
channel_performance.sort_values('roas', ascending=False, inplace=True)
Анализ воронки продаж
[править]# Данные по этапам воронки
funnel_data = {
'stage': ['Просмотры', 'Клики', 'Лиды', 'MQL', 'SQL', 'Сделки'],
'count': [10000, 1200, 300, 150, 80, 45]
}
df_funnel = pd.DataFrame(funnel_data)
# Расчёт конверсии
df_funnel['conversion'] = df_funnel['count'] / df_funnel['count'].iloc[0] * 100
df_funnel['dropoff'] = df_funnel['count'].pct_change() * -100
Анализ клиентских сегментов
[править]# RFM-анализ (Recency, Frequency, Monetary)
rfm = df.groupby('client_id').agg({
'purchase_date': 'max', # Recency
'order_id': 'count', # Frequency
'revenue': 'sum' # Monetary
}).reset_index()
# Присвоение квантилей
rfm['r_score'] = pd.qcut(rfm['purchase_date'].rank(), 4, labels=[4, 3, 2, 1])
rfm['f_score'] = pd.qcut(rfm['order_id'], 4, labels=[1, 2, 3, 4])
rfm['m_score'] = pd.qcut(rfm['revenue'], 4, labels=[1, 2, 3, 4])
# RFM-сегмент
rfm['rfm_score'] = rfm['r_score'].astype(str) + rfm['f_score'].astype(str) + rfm['m_score'].astype(str)
Интеграция с другими библиотеками
[править]Pandas тесно интегрирован с экосистемой Python.
| Библиотека | Интеграция |
|---|---|
| NumPy | Pandas построен на NumPy, DataFrame содержат NumPy массивы |
| Matplotlib | df.plot() использует Matplotlib для быстрой визуализации |
| Scikit-learn | DataFrame можно передавать в модели ML |
| Jupyter Notebook | DataFrame отображаются в красивых таблицах |
Оптимизация производительности
[править]Для работы с большими объёмами данных (миллионы строк) рекомендуется:
# Использование типов данных с меньшим потреблением памяти
df['category'] = df['category'].astype('category')
df['value'] = df['value'].astype('float32')
# Фильтрация перед агрегацией
df_filtered = df[df['date'] > '2025-01-01']
# Использование query() для сложных фильтров
df.query('channel == "Яндекс.Директ" and spend > 10000')
# Параллельная обработка (Dask, Modin) для очень больших данных
Значение для маркетолога
[править]Понимание возможностей Pandas позволяет маркетологу:
- Эффективно взаимодействовать с аналитиками, понимая их инструментарий.
- Формулировать требования к аналитическим отчётам с учётом возможностей обработки данных.
- Интерпретировать результаты анализа, представленные в виде таблиц и сводок.
- Участвовать в постановке задач на разработку сквозной аналитики и дашбордов.
