12 промтов для Python-разработчика: превращаем сырые данные в готовый отчёт без боли

Вы когда-нибудь тратили полдня на то, чтобы свести данные из трёх CSV в один DataFrame, а потом ещё час — на подбор правильных параметров для matplotlib? Знакомо. А теперь представьте, что у вас есть ассистент, который делает это за вас: пишет код, объясняет каждый шаг и даже предлагает альтернативные подходы. Речь не о магии, а о правильно составленных промтах для нейросетей. В этой статье я собрал 12 проверенных промтов, которые реально экономят часы работы и позволяют сосредоточиться на сути анализа, а не на рутине.

1. Базовые промты: с чего начать

1.1. Очистка данных от выбросов

Задача: Нужно быстро найти и удалить выбросы в числовых колонках, чтобы не искажать статистику.

Промт:

«У меня есть DataFrame с колонками: age, income, score. Найди выбросы в каждой колонке, используя метод IQR (межквартильный размах), и удали их. Напиши код на Python с pandas, который делает это автоматически, и добавь комментарии к каждому шагу.»

Пример результата:

import pandas as pd
import numpy as np

def remove_outliers_iqr(df, columns):
    for col in columns:
        Q1 = df[col].quantile(0.25)
        Q3 = df[col].quantile(0.75)
        IQR = Q3 - Q1
        lower_bound = Q1 - 1.5 * IQR
        upper_bound = Q3 + 1.5 * IQR
        df = df[(df[col] >= lower_bound) & (df[col] <= upper_bound)]
    return df

# Применяем к нужным колонкам
df_clean = remove_outliers_iqr(df, ['age', 'income', 'score'])

1.2. Генерация сводной статистики

Задача: Быстро получить описательную статистику по всем числовым признакам.

Промт:

«Сгенерируй сводную статистику для DataFrame: среднее, медиану, стандартное отклонение, минимум, максимум для каждой числовой колонки. Выведи результат в виде таблицы с названиями колонок. Используй pandas и округли до двух знаков.»

Пример результата:

import pandas as pd
summary = df.describe().T[['mean', '50%', 'std', 'min', 'max']]
summary.columns = ['Среднее', 'Медиана', 'Ст. отклонение', 'Мин', 'Макс']
print(summary.round(2))

1.3. Визуализация распределения признаков

Задача: Построить гистограммы для всех числовых колонок, чтобы понять распределения.

Промт:

«Построй гистограммы для всех числовых колонок DataFrame, используя matplotlib и seaborn. Для каждой гистограммы добавь подпись оси X и заголовок с названием колонки. Размести графики в сетке 3x3.»

Пример результата:

import matplotlib.pyplot as plt
import seaborn as sns

num_cols = df.select_dtypes(include=['float64', 'int64']).columns
fig, axes = plt.subplots(3, 3, figsize=(15, 12))
axes = axes.flatten()
for i, col in enumerate(num_cols):
    sns.histplot(df[col], kde=True, ax=axes[i])
    axes[i].set_title(col)
plt.tight_layout()
plt.show()

2. Продвинутые промты: для ежедневных задач

2.1. Feature engineering: создание новых признаков

Задача: На основе существующих данных создать признаки, которые улучшат качество модели.

Промт:

«Предложи и реализуй на Python 5 новых признаков для моего DataFrame, которые могут быть полезны для предсказания целевой переменной. Например, если есть дата, можно сделать день недели, месяц, возраст в днях. Обоснуй, почему каждый признак может быть важен.»

Пример результата:

# Пусть есть колонка 'purchase_date' (datetime)
df['weekday'] = df['purchase_date'].dt.dayofweek
df['month'] = df['purchase_date'].dt.month
df['hour'] = df['purchase_date'].dt.hour
df['is_weekend'] = df['weekday'].isin([5, 6]).astype(int)
df['days_since_first_purchase'] = (df['purchase_date'] - df['first_purchase_date']).dt.days

2.2. Автоматический подбор модели и гиперпараметров

Задача: Подобрать лучшую модель для классификации, не перебирая всё вручную.

Промт:

«Используя библиотеку scikit-learn, реализуй автоматический подбор гиперпараметров для RandomForestClassifier с помощью GridSearchCV. Данные: X_train, y_train. Оцени качество по метрике accuracy. Выведи лучшие параметры и результат на тестовой выборке.»

Пример результата:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20],
    'min_samples_split': [2, 5, 10]
}
grid = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring='accuracy')
grid.fit(X_train, y_train)
print('Best params:', grid.best_params_)
print('Best score:', grid.best_score_)

2.3. Интерпретация модели с SHAP

Задача: Понять, какие признаки больше всего влияют на предсказания модели.

Промт:

«Для моей обученной модели (XGBClassifier) построй SHAP summary plot, чтобы увидеть важность признаков. Используй библиотеку shap. Проведи анализ: какие признаки топ-5 по влиянию?»

Пример результата:

import shap

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test, feature_names=X_test.columns)

3. Экспертные промты: для сложных сценариев

3.1. Обработка временных рядов: прогнозирование с пропусками

Задача: Построить прогноз временного ряда с пропусками данных и трендом.

Промт:

«У меня есть временной ряд с еженедельными продажами, в котором есть пропуски. Используя библиотеку statsmodels, выполни интерполяцию пропусков (методом линейной интерполяции) и построй модель SARIMA для прогнозирования на 4 недели вперёд. Проверь остатки на стационарность.»

Пример результата:

import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# Интерполяция пропусков
df['sales'] = df['sales'].interpolate(method='linear')
# Модель Holt-Winters
model = ExponentialSmoothing(df['sales'], trend='add', seasonal='add', seasonal_periods=52)
fit = model.fit()
forecast = fit.forecast(4)
print(forecast)

3.2. Оптимизация кода с помощью Numba

Задача: Ускорить вычисления в цикле на Python.

Промт:

«Напиши функцию на Python, которая вычисляет скользящее среднее с окном 5 для большого массива (10 млн элементов). Используй Numba (JIT-компиляцию) для ускорения. Сравни время выполнения с обычной реализацией на pandas.»

Пример результата:

import numpy as np
from numba import jit
import pandas as pd
import time

@jit(nopython=True)
def rolling_mean_numba(arr, window):
    result = np.empty(len(arr) - window + 1)
    for i in range(len(result)):
        result[i] = np.mean(arr[i:i+window])
    return result

arr = np.random.randn(10_000_000)
start = time.time()
res = rolling_mean_numba(arr, 5)
print('Numba time:', time.time() - start)

3.3. Работа с большими данными: Dask вместо pandas

Задача: Обработать датасет, который не помещается в память.

Промт:

«Как обработать датасет размером 50 ГБ, используя Dask? Покажи пример: чтение CSV, группировка и агрегация, вычисление суммы по группе. Объясни, как Dask работает под капотом (ленивые вычисления, граф задач).»

Пример результата:

import dask.dataframe as dd

df = dd.read_csv('huge_file.csv')
result = df.groupby('category')['amount'].sum().compute()
print(result)

3.4. Создание интерактивных дашбордов с Plotly

Задача: Визуализировать результаты анализа в интерактивном виде.

Промт:

«Создай интерактивный дашборд с Plotly Dash для отображения продаж по регионам и временным периодам. Добавь фильтры по дате и региону. Код должен быть самодостаточным.»

Пример результата:

import dash
from dash import dcc, html, Input, Output
import plotly.express as px
import pandas as pd

app = dash.Dash(__name__)
df = pd.read_csv('sales.csv')

app.layout = html.Div([
    dcc.Dropdown(id='region', options=[{'label': r, 'value': r} for r in df['region'].unique()], value='All'),
    dcc.Graph(id='sales-chart')
])

@app.callback(Output('sales-chart', 'figure'), Input('region', 'value'))
def update_chart(region):
    if region != 'All':
        filtered = df[df['region'] == region]
    else:
        filtered = df
    fig = px.line(filtered, x='date', y='sales', color='product')
    return fig

if __name__ == '__main__':
    app.run_server(debug=True)

4. Бонус: промты для коммуникации с заказчиком

4.1. Формирование отчёта для нетехнической аудитории

Задача: Объяснить результаты анализа простыми словами.

Промт:

«Перепиши следующий технический вывод для руководителя без технического бэка: "Модель градиентного бустинга показала ROC-AUC 0.85 на тестовой выборке, что говорит о хорошей способности разделять классы". Сделай акцент на бизнес-выгоде.»

Пример результата:

«Наша модель правильно предсказывает 85% случаев, что значительно снижает риск ошибок. Это позволит нам сэкономить до 20% бюджета на маркетинг.»

4.2. Генерация SQL-запросов по описанию задачи

Задача: Получить нужные данные из базы без написания SQL вручную.

Промт:

«Напиши SQL-запрос для PostgreSQL: выбрать топ-10 клиентов по сумме покупок за последний месяц, с указанием их имени и email. Таблицы: customers(id, name, email), orders(id, customer_id, created_at, total_amount).»

Пример результата:

SELECT c.name, c.email, SUM(o.total_amount) as total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.created_at >= NOW() - INTERVAL '1 month'
GROUP BY c.id, c.name, c.email
ORDER BY total_spent DESC
LIMIT 10;

Заключение

Эти промты — не просто шаблоны, а отправная точка для вашего диалога с ИИ. Экспериментируйте, комбинируйте и адаптируйте их под свои задачи. Помните, что лучший промт — тот, который даёт вам не только готовый код, но и понимание процесса. Начните с базовых, и вы увидите, как рутина уходит на второй план, освобождая время для настоящего анализа. А если хотите углубиться в AI-инструменты для работы с данными, загляните в наш блог — там много интересного.

← Все статьи

Комментарии

Читайте также