Введение
Data Science — это не только сложные алгоритмы, но и умение быстро «подружиться» с данными. Pandas, Matplotlib и Seaborn стали стандартом де-факто для исследовательского анализа данных (EDA). Однако каждый раз писать один и тот же код для загрузки, очистки и визуализации — терять время. Промты (готовые шаблоны кода) позволяют ускорить рутину и сосредоточиться на интерпретации результатов. В этой подборке — 10 промтов, которые покрывают 80% повседневных задач аналитика: от разведочного анализа до сложных визуализаций. Каждый промт снабжён примером и пояснением.
Для кого эта статья: начинающие и опытные дата-сайентисты, аналитики, инженеры данных, которые хотят повысить свою продуктивность.
1. Быстрый обзор структуры данных
Задача: Понять типы столбцов, количество пропусков и базовую статистику.
Промт:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.info())
print(df.describe(include='all'))
print(df.head(10))
Пример результата:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 customer_id 10000 non-null int64
1 age 9850 non-null float64
...
Промт сразу показывает, где есть пропуски, какие столбцы числовые, а какие — категориальные. Это первый шаг перед любой очисткой.
2. Очистка данных: обработка пропусков
Задача: Заполнить или удалить пропуски в зависимости от контекста.
Промт:
# Удаление строк с пропусками в ключевых столбцах
df.dropna(subset=['age', 'income'], inplace=True)
# Заполнение числовых столбцов медианой
for col in ['age', 'income']:
df[col].fillna(df[col].median(), inplace=True)
# Заполнение категориальных столбцов модой
for col in ['education', 'city']:
df[col].fillna(df[col].mode()[0], inplace=True)
Пример:
Допустим, в данных о клиентах 5% пропусков по возрасту. Использование медианы сохраняет распределение, а удаление строк с пропусками по income допустимо, если таких строк меньше 1%.
3. Группировка и агрегация
Задача: Посчитать средние продажи по категориям товаров.
Промт:
df_grouped = df.groupby('category').agg({
'sales': ['mean', 'sum', 'count'],
'price': 'median'
}).reset_index()
df_grouped.columns = ['category', 'avg_sales', 'total_sales', 'num_transactions', 'median_price']
print(df_grouped.head())
Результат:
category avg_sales total_sales num_transactions median_price
0 Electronics 1250.5 25000 20 799
1 Clothing 340.2 6804 20 599
...
Этот приём полезен для построения дашбордов и отчётов.
4. Визуализация распределения: гистограмма и boxplot
Задача: Понять форму распределения признака и выбросы.
Промт:
import matplotlib.pyplot as plt
import seaborn as sns
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
sns.histplot(df['age'], bins=30, kde=True, ax=axes[0])
axes[0].set_title('Распределение возраста')
sns.boxplot(x='category', y='price', data=df, ax=axes[1])
axes[1].set_title('Цены по категориям')
plt.tight_layout()
plt.show()
Результат: Гистограмма с KDE показывает, что возраст клиентов имеет левостороннюю асимметрию. Boxplot выявляет выбросы в категории «Электроника».
5. Корреляционный анализ и heatmap
Задача: Оценить взаимосвязи между числовыми признаками.
Промт:
import numpy as np
corr_matrix = df.select_dtypes(include=[np.number]).corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0, fmt='.2f')
plt.title('Корреляционная матрица')
plt.show()
Пример интерпретации: Высокая корреляция (0.85) между age и years_of_experience может указывать на мультиколлинеарность, которую следует учесть в модели.
6. Фильтрация и условный выбор
Задача: Выделить подмножество данных по сложному условию.
Промт:
# Клиенты старше 40 лет с доходом выше медианы и purchase > 3
high_value = df[(df['age'] > 40) &
(df['income'] > df['income'].median()) &
(df['purchase_count'] > 3)]
print(f'Найдено {len(high_value)} клиентов')
Результат: Промт позволяет быстро сегментировать аудиторию для таргетированных предложений.
7. Применение пользовательских функций
Задача: Преобразовать столбец с датами в формат с извлечением дня недели.
Промт:
def get_weekday(date_str):
dt = pd.to_datetime(date_str, format='%Y-%m-%d')
return dt.day_name()
df['weekday'] = df['purchase_date'].apply(get_weekday)
print(df[['purchase_date', 'weekday']].head())
Пример: Выяснили, что пик продаж приходится на пятницу — это влияет на планирование рекламных кампаний.
8. Временные ряды: ресемплинг и скользящее среднее
Задача: Сгладить дневные колебания продаж и увидеть тренд.
Промт:
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
weekly_sales = df['sales'].resample('W').sum()
weekly_sales_smooth = weekly_sales.rolling(window=4).mean() # месяц
plt.figure(figsize=(12, 5))
plt.plot(weekly_sales, label='Недельные продажи', alpha=0.5)
plt.plot(weekly_sales_smooth, label='Скользящее среднее (4 недели)', linewidth=2)
plt.legend()
plt.show()
Результат: График показывает чёткий восходящий тренд, несмотря на шум.
9. Сводные таблицы (pivot_table)
Задача: Построить матрицу средних продаж по регионам и месяцам.
Промт:
pivot = df.pivot_table(values='sales', index='region', columns='month', aggfunc='mean', fill_value=0)
print(pivot.head())
Результат:
month Jan Feb Mar Apr
region
North 1200 1150 1300 1400
South 980 1010 1050 1100
...
Сводная таблица — мощный инструмент для многомерного анализа без написания сложных циклов.
10. Сохранение результатов в разных форматах
Задача: Экспортировать отчёт в Excel с несколькими листами.
Промт:
with pd.ExcelWriter('report.xlsx', engine='openpyxl') as writer:
df_summary.to_excel(writer, sheet_name='Summary', index=False)
pivot.to_excel(writer, sheet_name='Pivot')
weekly_sales.to_excel(writer, sheet_name='Weekly_Sales')
Пример: Коллеги могут открыть файл без Python и работать с данными в привычном интерфейсе.
Сравнение инструментов визуализации
В работе с промтами часто возникает вопрос: что выбрать — Matplotlib или Seaborn? Краткое сравнение:
| Критерий | Matplotlib | Seaborn |
|---|---|---|
| Гибкость | Высокая (контроль каждой детали) | Средняя (быстрые высокоуровневые графики) |
| Красота по умолчанию | Требуется настройка | Привлекательные стили из коробки |
| Статистические графики | Базовые (hist, box) | Встроенные (violin, kde, pairplot) |
| Интеграция с Pandas | Прямая поддержка DataFrame.plot() | Работает с DataFrames напрямую |
Рекомендация: Используйте Seaborn для разведочного анализа и Matplotlib — для тонкой настройки отчётов.
Заключение
Представленные 10 промтов покрывают ключевые этапы работы с данными: от загрузки и очистки до разведочного анализа и визуализации. Скопируйте их в свой Jupyter Notebook и адаптируйте под свои датасеты — это сэкономит часы рутинного кода. Помните, что главное в Data Science — не количество строк, а качество инсайтов. Промты лишь инструмент, а интерпретация результатов остаётся за вами.
Дальнейшие шаги: попробуйте объединить несколько промтов в пайплайн, например очистку → группировку → тепловую карту. Документация Pandas (pandas.pydata.org/docs) и Seaborn (seaborn.pydata.org) — ваши лучшие друзья.
Удачного анализа!
Комментарии