15 промтов для Data Science: анализ данных, визуализация и Pandas
Введение
Data Science — это не просто модное слово, а ключевая компетенция в современном мире данных. По данным отчёта Stack Overflow Developer Survey 2025, более 40% разработчиков используют Python для анализа данных, а Pandas остаётся одной из самых востребованных библиотек. Однако, чтобы эффективно работать с данными, нужно не только знать синтаксис, но и уметь формулировать задачи. Именно здесь на помощь приходят промты — готовые шаблоны действий, которые экономят время и помогают избежать типичных ошибок. В этой статье я собрал 15 промтов для Data Science, которые охватывают три ключевые области: базовый анализ данных, визуализацию и продвинутую работу с Pandas. Каждый промт сопровождается реальным примером, кодом и пояснением, чтобы вы могли сразу применить его в своей работе.
Категория 1: Базовые промты для анализа данных
Промт 1: Загрузка данных и первичный обзор
Задача: Быстро загрузить CSV-файл и получить сводную информацию о датасете.
Промт: «Загрузи данные из CSV-файла с помощью Pandas, выведи первые 5 строк, опиши типы данных и основные статистики числовых колонок.»
Пример результата:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
print(df.dtypes)
print(df.describe())
Пояснение: Этот промт идеален для начала работы: вы сразу видите структуру данных, пропуски и выбросы. Метод describe() возвращает среднее, стандартное отклонение, минимум и максимум — базовый набор для EDA.
Промт 2: Обработка пропущенных значений
Задача: Определить и заполнить пропуски в датасете.
Промт: «Найди колонки с пропущенными значениями, посчитай их количество и заполни медианой для числовых и модой для категориальных.»
Пример результата:
missing = df.isnull().sum()
print(missing[missing > 0])
for col in df.select_dtypes(include=['float64', 'int64']).columns:
df[col].fillna(df[col].median(), inplace=True)
for col in df.select_dtypes(include=['object']).columns:
df[col].fillna(df[col].mode()[0], inplace=True)
Пояснение: Пропуски — частая проблема реальных данных. Медиана устойчива к выбросам, а мода подходит для текстовых полей. Метод select_dtypes позволяет автоматически разделить колонки по типам.
Промт 3: Фильтрация данных по условию
Задача: Отфильтровать строки на основе сложного условия.
Промт: «Выбери все записи, где значение в колонке ‘sales’ больше 1000 и ‘region’ равен ‘Europe’.»
Пример результата:
filtered_df = df[(df['sales'] > 1000) & (df['region'] == 'Europe')]
print(filtered_df.shape)
Пояснение: Использование логических операторов & и скобок — must-have для фильтрации. Этот промт помогает быстро выделить подмножество данных для анализа.
Промт 4: Группировка и агрегация
Задача: Посчитать средние продажи по регионам.
Промт: «Сгруппируй данные по колонке ‘region’ и вычисли среднее, сумму и количество записей для колонки ‘sales’.»
Пример результата:
agg = df.groupby('region')['sales'].agg(['mean', 'sum', 'count'])
print(agg)
Пояснение: Метод agg позволяет применять несколько функций одновременно. Это основа для построения отчётов и дашбордов.
Промт 5: Создание новых признаков (feature engineering)
Задача: Создать колонку ‘profit’ как разность ‘revenue’ и ‘cost’.
Промт: «Добавь новую колонку ‘profit_ratio’, равную отношению ‘profit’ к ‘revenue’, и округли до двух знаков.»
Пример результата:
df['profit'] = df['revenue'] - df['cost']
df['profit_ratio'] = (df['profit'] / df['revenue']).round(2)
Пояснение: Feature engineering улучшает качество моделей. Простые производные признаки часто несут больше информации, чем исходные.
Категория 2: Промты для визуализации
Промт 6: Гистограмма распределения
Задача: Визуализировать распределение числовой переменной.
Промт: «Построй гистограмму для колонки ‘age’ с 20 бинами, добавь линию среднего и медианы.»
Пример результата:
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10, 6))
sns.histplot(df['age'], bins=20, kde=True)
plt.axvline(df['age'].mean(), color='red', linestyle='--', label='Mean')
plt.axvline(df['age'].median(), color='green', linestyle='--', label='Median')
plt.legend()
plt.show()
Пояснение: KDE (ядровая оценка плотности) накладывает сглаженную кривую, а линии среднего и медианы помогают оценить асимметрию. Это базовый график для понимания распределения.
Промт 7: Ящик с усами (boxplot)
Задача: Выявить выбросы в данных.
Промт: «Построй boxplot для колонки ‘price’ по группам ‘category’ для сравнения медиан и разброса.»
Пример результата:
plt.figure(figsize=(12, 6))
sns.boxplot(x='category', y='price', data=df)
plt.xticks(rotation=45)
plt.show()
Пояснение: Boxplot показывает квартили, медиану и выбросы. Если точки выходят за усы (1.5 IQR), это потенциальные аномалии — их стоит проверить.
Промт 8: Корреляционная матрица
Задача: Оценить взаимосвязи между числовыми переменными.
Промт: «Построй тепловую карту корреляции для всех числовых колонок, подпиши значения.»
Пример результата:
corr = df.select_dtypes(include=['float64', 'int64']).corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.show()
Пояснение: Тепловая карта помогает быстро найти сильные корреляции (близкие к 1 или -1). Это важно для выбора признаков для модели.
Промт 9: Линейный график временного ряда
Задача: Визуализировать тренд продаж по месяцам.
Промт: «Преобразуй колонку ‘date’ в datetime, установи её как индекс и построй линейный график месячных продаж.»
Пример результата:
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
monthly = df['sales'].resample('M').sum()
plt.figure(figsize=(12, 6))
monthly.plot(marker='o')
plt.title('Monthly Sales Trend')
plt.show()
Пояснение: Работа с временными рядами требует преобразования дат. Метод resample агрегирует данные по месяцам, что сглаживает шум и показывает тренд.
Промт 10: Диаграмма рассеяния (scatter plot)
Задача: Исследовать взаимосвязь двух переменных.
Промт: «Построй scatter plot для ‘advertising_spend’ и ‘sales’, добавь линию регрессии.»
Пример результата:
plt.figure(figsize=(10, 6))
sns.regplot(x='advertising_spend', y='sales', data=df, scatter_kws={'alpha':0.5})
plt.show()
Пояснение: regplot автоматически добавляет линию регрессии и доверительный интервал. Это помогает визуально оценить линейную зависимость.
Категория 3: Продвинутые промты для Pandas
Промт 11: Применение пользовательских функций с apply
Задача: Применить сложную логику к каждой строке.
Промт: «Создай функцию, которая классифицирует ‘age’ на ‘young’, ‘adult’, ‘senior’, и примени её через apply.»
Пример результата:
def age_group(age):
if age < 18:
return 'young'
elif age < 60:
return 'adult'
else:
return 'senior'
df['age_group'] = df['age'].apply(age_group)
Пояснение: apply позволяет использовать любые Python-функции, но для производительности лучше использовать векторизованные методы. В данном случае это оправдано простотой.
Промт 12: Работа с датами и временем
Задача: Извлечь компоненты даты для анализа.
Промт: «Из колонки ‘timestamp’ извлеки год, месяц и день недели, создай новые колонки.»
Пример результата:
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['year'] = df['timestamp'].dt.year
df['month'] = df['timestamp'].dt.month
df['weekday'] = df['timestamp'].dt.dayofweek
Пояснение: Доступ через dt аксессор — эффективный способ работы с datetime-данными. День недели (0=понедельник) полезен для сезонного анализа.
Промт 13: Слияние датасетов
Задача: Объединить два датафрейма по ключу.
Промт: «Слей users_df и orders_df по колонке ‘user_id’ с помощью left join, чтобы сохранить всех пользователей.»
Пример результата:
merged_df = pd.merge(users_df, orders_df, on='user_id', how='left')
Пояснение: merge — аналог SQL JOIN. Left join сохраняет все строки левого датафрейма, а отсутствующие значения заполняются NaN.
Промт 14: Сводные таблицы (pivot_table)
Задача: Построить матрицу средних продаж по регионам и категориям.
Промт: «Создай сводную таблицу со средними продажами, где строки — ‘region’, столбцы — ‘category’.»
Пример результата:
pivot = pd.pivot_table(df, values='sales', index='region', columns='category', aggfunc='mean')
print(pivot)
Пояснение: pivot_table — мощный инструмент для многомерного анализа. Можно указать несколько функций агрегации через список.
Промт 15: Оптимизация памяти
Задача: Уменьшить потребление памяти датафреймом.
Промт: «Измени типы данных для экономии памяти: преобразуй float64 в float32 и object в category, где возможно.»
Пример результата:
for col in df.select_dtypes(include=['float64']).columns:
df[col] = df[col].astype('float32')
for col in df.select_dtypes(include=['object']).columns:
if df[col].nunique() / len(df) < 0.5:
df[col] = df[col].astype('category')
Пояснение: Тип category экономит память для колонок с небольшим числом уникальных значений. Это особенно актуально для больших датасетов (миллионы строк).
Заключение
Эти 15 промтов покрывают основные потребности Data Science-специалиста: от загрузки данных до продвинутой трансформации и визуализации. Практикуйтесь на реальных датасетах, например, из репозитория UCI Machine Learning Repository или Kaggle. Помните, что лучший способ освоить анализ данных — это решать конкретные задачи. Начните с малого: возьмите один промт, примените его к своим данным и постепенно усложняйте. Удачи в анализе!
Комментарии