20 промтов для Data Science: анализ данных, визуализация и Pandas в 2026 году
Data Science перестала быть уделом избранных. Сегодня, в июле 2026 года, любой аналитик может использовать промты (prompts) для ускорения работы с данными. Но не все промты одинаково полезны. Я собрал 20 проверенных вариантов для работы с Pandas, Matplotlib и Seaborn, которые реально экономят время. Ниже — разбор каждого с примерами кода и результатами.
Введение: почему промты меняют Data Science
Промты — это не просто запросы к ChatGPT или Claude. Это структурированные инструкции, которые заставляют нейросеть генерировать точный код или выводы. По данным отчёта State of Data Science 2025 (Kaggle, 2025), 73% специалистов используют генеративные модели для написания кода. Но только 12% получают качественный результат с первого раза. Проблема в формулировках.
В этой статье — 20 промтов, разбитых на 3 уровня: базовые (очистка и агрегация), продвинутые (визуализация и статистика) и экспертные (ML-пайплайны и оптимизация). Каждый промт сопровождается примером кода и скриншотом (в тексте — описание).
Базовые промты: очистка и анализ с Pandas
Эти промты подходят для ежедневной работы с таблицами. Они экономят 30–50% времени на рутине.
1. Задача: быстрое обнаружение пропусков
Промт: «Напиши код на Python с Pandas для поиска пропусков в DataFrame df. Выведи процент пропусков по каждому столбцу и предложи стратегию заполнения: средним, медианой или модой. Учти тип данных каждого столбца.»
Пример результата:
def missing_analysis(df):
missing = df.isnull().sum()
percent = (missing / len(df)) * 100
result = pd.DataFrame({'Пропуски': missing, 'Процент': percent})
for col in df.columns:
if df[col].dtype == 'object':
print(f'{col}: мода — {df[col].mode()[0]}')
elif df[col].dtype in ['int64', 'float64']:
print(f'{col}: медиана — {df[col].median()}')
return result
Вывод: столбец ‘age’ имеет 12% пропусков — заполняем медианой (34 года), так как распределение скошено.
2. Задача: агрегация с группировкой
Промт: «Сгруппируй DataFrame df по столбцу ‘category’, рассчитай среднее, сумму и стандартное отклонение для числовых столбцов. Выведи результат в виде сводной таблицы с округлением до 2 знаков.»
Пример результата:
df.groupby('category').agg({
'sales': ['mean', 'sum', 'std'],
'profit': ['mean', 'sum', 'std']
}).round(2)
Таблица покажет, что категория ‘Electronics’ приносит 45% выручки, но имеет высокую вариативность (std = 1200).
3. Задача: фильтрация выбросов по IQR
Промт: «Напиши функцию для удаления выбросов из столбца ‘price’ методом межквартильного размаха (IQR). Используй коэффициент 1.5. Верни очищенный DataFrame.»
Пример результата:
def remove_outliers_iqr(df, column):
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
return df[(df[column] >= lower) & (df[column] <= upper)]
После применения ушло 5% записей — это типично для цен на недвижимость (источник: анализ данных Zillow, 2025).
4. Задача: конкатенация нескольких DataFrame
Промт: «Объедини три DataFrame (df1, df2, df3) по строкам, игнорируя индексы. Добавь столбец ‘source’ с именем исходного файла.»
Пример результата:
df_list = [df1, df2, df3]
for i, frame in enumerate(df_list):
frame['source'] = f'file_{i+1}.csv'
result = pd.concat(df_list, ignore_index=True)
Этот трюк часто используют при слиянии логов с нескольких серверов.
5. Задача: парсинг дат из строк
Промт: «Преобразуй столбец ‘date_str’ в формат datetime. Обработай ошибки: если формат不一致, замени на NaT. Выведи статистику по годам.»
Пример результата:
df['date'] = pd.to_datetime(df['date_str'], errors='coerce')
df['year'] = df['date'].dt.year
print(df['year'].value_counts().sort_index())
Полезно при работе с CSV из разных источников, где даты пишут как ‘2024-01-01’ и ‘01/01/2024’.
Продвинутые промты: визуализация с Matplotlib и Seaborn
Эти промты помогают создавать графики, которые сразу показывают инсайты.
6. Задача: гистограмма с наложением распределения
Промт: «Построй гистограмму для столбца ‘revenue’ с 30 бинами. Наложи кривую нормального распределения (KDE). Добавь вертикальную линию для среднего и медианы. Подпиши оси.»
Пример результата:
import matplotlib.pyplot as plt
import seaborn as sns
sns.histplot(df['revenue'], bins=30, kde=True)
plt.axvline(df['revenue'].mean(), color='red', linestyle='--', label='Среднее')
plt.axvline(df['revenue'].median(), color='green', linestyle='--', label='Медиана')
plt.legend()
plt.show()
График покажет, что распределение доходов смещено вправо (скошенность = 2.1).
7. Задача: тепловая карта корреляций
Промт: «Построй тепловую карту корреляций для числовых столбцов. Используй цветовую схему ‘coolwarm’. Выведи значения коэффициентов в ячейках. Сделай аннотации с точностью до 2 знаков.»
Пример результата:
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, fmt='.2f', cmap='coolwarm', center=0)
plt.title('Матрица корреляций')
plt.show()
Видно, что ‘ad_spend’ и ‘revenue’ имеют корреляцию 0.87 — сильная положительная связь.
8. Задача: boxplot с группировкой
Промт: «Построй boxplot для ‘salary’ по категориям ‘department’. Раскрась каждый ящик своим цветом. Добавь точки выбросов. Выведи медианные значения над ящиками.»
Пример результата:
sns.boxplot(x='department', y='salary', data=df, palette='Set2')
medians = df.groupby('department')['salary'].median()
for i, med in enumerate(medians):
plt.text(i, med + 1000, f'{med:.0f}', ha='center')
plt.show()
Выбросы в отделе IT: три сотрудника с зарплатой выше 200k.
9. Задача: временной ряд с трендом
Промт: «Построй линейный график продаж по месяцам. Добавь скользящее среднее с окном 3 месяца. Выдели точки максимума и минимума.»
Пример результата:
df_monthly = df.resample('M', on='date')['sales'].sum()
plt.plot(df_monthly.index, df_monthly, label='Продажи')
plt.plot(df_monthly.index, df_monthly.rolling(3).mean(), label='Скользящее среднее', linestyle='--')
plt.scatter(df_monthly.idxmax(), df_monthly.max(), color='green', s=100, label='Максимум')
plt.scatter(df_monthly.idxmin(), df_monthly.min(), color='red', s=100, label='Минимум')
plt.legend()
plt.show()
Пик продаж — декабрь 2025 (245k), минимум — февраль 2026 (120k).
10. Задача: парные графики (pairplot)
Промт: «Построй pairplot для четырёх числовых столбцов: ‘age’, ‘income’, ‘score’, ‘tenure’. Раскрась точки по категории ‘segment’. Используй только 500 случайных строк для скорости.»
Пример результата:
sample = df.sample(500)
sns.pairplot(sample, vars=['age', 'income', 'score', 'tenure'], hue='segment', diag_kind='kde')
plt.show()
На графике видно, что сегмент ‘Premium’ имеет более высокий доход и tenure.
Экспертные промты: ML-пайплайны и оптимизация
Эти промты для тех, кто строит модели и автоматизирует процессы.
11. Задача: автоматический выбор признаков
Промт: «Напиши класс FeatureSelector, который использует корреляцию с целевой переменной и VIF для отбора признаков. Удали признаки с VIF > 10 и корреляцией < 0.1.»
Пример результата:
from statsmodels.stats.outliers_influence import variance_inflation_factor
class FeatureSelector:
def __init__(self, threshold_vif=10, threshold_corr=0.1):
self.threshold_vif = threshold_vif
self.threshold_corr = threshold_corr
def fit(self, X, y):
corr = X.corrwith(y).abs()
self.features_corr = corr[corr > self.threshold_corr].index.tolist()
X_sub = X[self.features_corr]
vif = pd.Series([variance_inflation_factor(X_sub.values, i) for i in range(X_sub.shape[1])], index=X_sub.columns)
self.features_vif = vif[vif < self.threshold_vif].index.tolist()
return self.features_vif
Отбирает 8 из 20 признаков, снижая время обучения модели на 40%.
12. Задача: пайплайн с preprocessing
Промт: «Создай sklearn Pipeline, который: 1) заполняет пропуски медианой, 2) масштабирует признаки StandardScaler, 3) кодирует категориальные переменные OneHotEncoder. Обучи на train, примени к test.»
Пример результата:
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
numeric_features = ['age', 'income']
categorical_features = ['city', 'gender']
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('onehot', OneHotEncoder(handle_unknown='ignore'))])
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)])
Пайплайн готов к вставке в GridSearchCV.
13. Задача: оптимизация гиперпараметров
Промт: «Напиши код для GridSearchCV с 5-fold кросс-валидацией для RandomForestRegressor. Перебери: n_estimators (100, 200), max_depth (10, 20, None). Используй метрику RMSE.»
Пример результата:
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [100, 200],
'max_depth': [10, 20, None]
}
rf = RandomForestRegressor(random_state=42)
grid = GridSearchCV(rf, param_grid, cv=5, scoring='neg_root_mean_squared_error')
grid.fit(X_train, y_train)
print(f'Лучшие параметры: {grid.best_params_}, RMSE: {-grid.best_score_:.2f}')
Лучшая модель: n_estimators=200, max_depth=20, RMSE=1.23.
14. Задача: обнаружение аномалий с Isolation Forest
Промт: «Примени Isolation Forest для поиска аномалий в данных. Установи contamination=0.05. Добавь столбец ‘anomaly’ (1 — аномалия, 0 — норма). Выведи статистику по аномалиям.»
Пример результата:
from sklearn.ensemble import IsolationForest
iso_forest = IsolationForest(contamination=0.05, random_state=42)
df['anomaly'] = iso_forest.fit_predict(df[['revenue', 'users', 'churn']])
df['anomaly'] = df['anomaly'].map({1: 0, -1: 1})
print(df['anomaly'].value_counts())
print(df[df['anomaly'] == 1].describe())
Найдено 250 аномалий (5% данных) — в основном дни с резким падением пользователей.
15. Задача: feature importance с SHAP
Промт: «После обучения модели XGBoost, вычисли SHAP values для интерпретации. Построй summary plot с топ-10 признаками.»
Пример результата:
import shap
model = XGBRegressor().fit(X_train, y_train)
explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)
shap.summary_plot(shap_values, X_test, max_display=10)
График покажет, что ‘income’ и ‘tenure’ — главные драйверы предсказаний.
16. Задача: автоматическая генерация отчёта
Промт: «Напиши функцию, которая создаёт HTML-отчёт с таблицей описательных статистик, гистограммой и boxplot для каждого числового столбца. Сохрани в файл report.html.»
Пример результата:
def generate_report(df, filename='report.html'):
import webbrowser
# Код генерации HTML с встроенными графиками (base64)
# ...
with open(filename, 'w') as f:
f.write(html_content)
webbrowser.open(filename)
Отчёт можно отправить заказчику без дополнительных инструментов.
17. Задача: работа с большими данными (chunking)
Промт: «Прочитай CSV-файл размером 5 ГБ по частям (chunksize=10000). Для каждого чанка рассчитай среднее по столбцу ‘value’. Сохрани промежуточные результаты в список и выведи общее среднее.»
Пример результата:
chunks = pd.read_csv('large_file.csv', chunksize=10000)
means = []
for chunk in chunks:
means.append(chunk['value'].mean())
print(f'Общее среднее: {sum(means)/len(means):.2f}')
Без chunking код упал бы с MemoryError на машине с 8 ГБ ОЗУ.
18. Задача: A/B тестирование
Промт: «Проведи t-тест для двух групп (control, treatment) по метрике ‘conversion’. Выведи p-value и 95% доверительный интервал. Сделай вывод: значимо ли различие.»
Пример результата:
from scipy.stats import ttest_ind
control = df[df['group'] == 'control']['conversion']
treatment = df[df['group'] == 'treatment']['conversion']
t_stat, p_value = ttest_ind(control, treatment)
ci = (treatment.mean() - control.mean()) + np.array([-1.96, 1.96]) * np.sqrt(treatment.var()/len(treatment) + control.var()/len(control))
print(f'p-value: {p_value:.4f}, CI: {ci}')
if p_value < 0.05:
print('Различие статистически значимо')
else:
print('Различие незначимо')
p-value = 0.03 — новая версия сайта значимо увеличила конверсию на 2.1%.
19. Задача: сохранение модели с MLflow
Промт: «Обучи модель LogisticRegression, залогируй параметры, метрики и сохрани модель через MLflow. Загрузи модель обратно и сделай предсказание.»
Пример результата:
import mlflow
with mlflow.start_run():
model = LogisticRegression(C=0.1)
model.fit(X_train, y_train)
acc = model.score(X_test, y_test)
mlflow.log_param('C', 0.1)
mlflow.log_metric('accuracy', acc)
mlflow.sklearn.log_model(model, 'model')
# Загрузка
loaded_model = mlflow.sklearn.load_model('runs:/<run_id>/model')
pred = loaded_model.predict(X_new)
MLflow автоматически создаёт папку с артефактами.
20. Задача: интеграция с API (пример с Mock API)
Промт: «Напиши функцию, которая получает данные с внешнего API (например, погода), преобразует в DataFrame и объединяет с локальными данными по дате. Обработай таймауты (5 секунд).»
Пример результата:
import requests
def fetch_weather_data(api_url, params, timeout=5):
try:
response = requests.get(api_url, params=params, timeout=timeout)
response.raise_for_status()
data = response.json()
return pd.DataFrame(data)
except requests.exceptions.RequestException as e:
print(f'Ошибка: {e}')
return None
ASI Biont поддерживает подключение к внешним API через модуль интеграций — подробнее на asibiont.com/courses.
Заключение
Промты — это не магия, а инструмент. Они работают, если вы понимаете, что хотите получить. В этой подборке — 20 проверенных вариантов для анализа данных, визуализации и машинного обучения. Используйте их как шаблоны, адаптируйте под свои задачи и не забывайте проверять код. Data Science в 2026 году — это 50% логики и 50% правильных формулировок.
Если хотите углубиться в тему, рекомендую изучить официальную документацию Pandas (pandas.pydata.org) и Seaborn (seaborn.pydata.org). А для практики — попробуйте применить эти промты к открытым датасетам с Kaggle.
Комментарии