Промты для Python-анализа: как превратить грязный датасет в убедительную историю для стейкхолдеров

Вступление

Вы когда-нибудь открывали CSV-файл и с ужасом обнаруживали пропуски, дубликаты, странные форматы дат и выбросы, которые искажают всю картину? Знакомая ситуация: аналитик тратит 80% времени на очистку данных, и лишь 20% — на сам анализ. А потом приходит стейкхолдер и спрашивает: «Почему продажи упали?» — и вы понимаете, что данных для ответа недостаточно.

В 2026 году мы можем автоматизировать рутину с помощью больших языковых моделей. Но чтобы получить качественный результат, нужны правильные промты. В этой статье я собрал 11 проверенных сценариев — от первичной очистки до визуализаций, которые убедят даже самого скептичного руководителя. Каждый промт содержит задачу, готовый текст для копирования и пример результата.

Я тестировал эти промты на реальных проектах: датасеты по продажам, логи веб-сервера, опросы клиентов. Все примеры кода рабочие, используют актуальные версии pandas 2.2+, plotly 5.18+.

1. Быстрый аудит грязного датасета

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

Промт:

Проанализируй датасет sales.csv с колонками: order_id, date, customer_email, amount, product_category, region. Напиши функции на Python, которые выведут: количество пропусков, уникальные значения для категориальных полей, распределение числовых колонок, примеры строк с аномалиями. Используй pandas и numpy.

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

import pandas as pd
import numpy as np

df = pd.read_csv('sales.csv')

print('Пропуски:')
print(df.isnull().sum())

print('\nУникальные категории:')
for col in df.select_dtypes(include='object'):
    print(f'{col}: {df[col].nunique()} значений, примеры: {df[col].unique()[:5]}')

print('\nЧисловые распределения:')
print(df.describe())

# Аномалии: отрицательные суммы
anomalies = df[df['amount'] < 0]
print(f'\nОтрицательные amount: {len(anomalies)} строк')

Этот промт экономит часы ручного исследования. LLM сгенерирует код, который сразу покажет «болевые точки».

2. Очистка пропусков с умом

Задача: не просто удалить NaN, а выбрать стратегию: заполнить средним, медианой, интерполяцией или оставить как есть.

Промт:

В датасете df есть пропуски в колонках age (числовая), income (числовая), education (категориальная). Предложи оптимальные методы заполнения для каждой колонки, обоснуй выбор и напиши код с использованием pandas. Учти, что пропуски в income могут быть не случайными (MNAR).

Пример результата:
LLM предложит: для age — медиану (устойчива к выбросам), для income — не заполнять, а создать индикатор пропуска, для education — моду. Код:

df['age'] = df['age'].fillna(df['age'].median())
df['income_missing'] = df['income'].isna().astype(int)
df['education'] = df['education'].fillna(df['education'].mode()[0])

3. Борьба с дубликатами и почти-дубликатами

Задача: найти точные и нечёткие дубликаты (например, «ООО Ромашка» и «Ромашка ООО»).

Промт:

Напиши функцию для поиска почти-дубликатов в колонке company_name с помощью нечёткого сравнения (fuzzy matching). Используй библиотеку thefuzz (или rapidfuzz). Порог сходства 85%. Выведи пары и предложи, как их объединить.

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

from rapidfuzz import fuzz, process

def find_duplicates(names, threshold=85):
    matches = []
    for i, name in enumerate(names):
        for j in range(i+1, len(names)):
            score = fuzz.ratio(name, names[j])
            if score >= threshold:
                matches.append((name, names[j], score))
    return matches

duplicates = find_duplicates(df['company_name'].unique())
print(duplicates[:5])

4. Приведение типов и парсинг дат

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

Промт:

В датасете df колонка date содержит даты в разных форматах: '2025-01-15', '15/01/2025', 'Jan 15, 2025'. Колонка price — строки с '$' и запятыми. Напиши код для приведения к правильным типам с обработкой ошибок и логированием проблемных строк.

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

df['date'] = pd.to_datetime(df['date'], format='mixed', errors='coerce')
df['price'] = df['price'].str.replace(r'[$,]', '', regex=True).astype(float)

# Логирование неудачных преобразований
failed_dates = df[df['date'].isna()]
if not failed_dates.empty:
    print(f'Не удалось распарсить {len(failed_dates)} дат:')
    print(failed_dates[['date']].head())

5. Обработка выбросов: не удалять, а анализировать

Задача: выявить выбросы и решить, что с ними делать — удалить, заменить или оставить для отдельного анализа.

Промт:

Предложи методы обнаружения выбросов в колонке transaction_amount (IQR, Z-score, Isolation Forest). Напиши код для визуализации выбросов с помощью plotly и выведи статистику: сколько выбросов, какова их доля, какие значения. Обоснуй, стоит ли их удалять.

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

import plotly.express as px

Q1 = df['transaction_amount'].quantile(0.25)
Q3 = df['transaction_amount'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR

outliers = df[(df['transaction_amount'] < lower) | (df['transaction_amount'] > upper)]
print(f'Выбросов: {len(outliers)} ({len(outliers)/len(df)*100:.2f}%)')

fig = px.box(df, y='transaction_amount', title='Распределение сумм транзакций')
fig.show()

6. Feature engineering: создаём новые признаки

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

Промт:

На основе колонок date, amount, category создай новые признаки: день недели, месяц, квартал, признак выходного, логарифм суммы, отношение суммы к средней по категории. Напиши код на pandas.

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

df['day_of_week'] = df['date'].dt.dayofweek
df['month'] = df['date'].dt.month
df['is_weekend'] = df['day_of_week'].isin([5,6]).astype(int)
df['log_amount'] = np.log1p(df['amount'])
df['amount_vs_category_avg'] = df['amount'] / df.groupby('category')['amount'].transform('mean')

7. Группировка и агрегация для бизнес-метрик

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

Промт:

Сгруппируй данные по region и product_category, посчитай: общую сумму продаж, средний чек, количество заказов, долю от общей суммы. Отсортируй по убыванию суммы. Выведи топ-10 групп.

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

grouped = df.groupby(['region', 'product_category']).agg(
    total_sales=('amount', 'sum'),
    avg_check=('amount', 'mean'),
    orders=('order_id', 'count')
).reset_index()
grouped['share'] = grouped['total_sales'] / grouped['total_sales'].sum() * 100
grouped = grouped.sort_values('total_sales', ascending=False)
print(grouped.head(10))

8. Визуализация трендов с plotly

Задача: показать динамику продаж по месяцам с разбивкой по категориям.

Промт:

Построй интерактивный линейный график продаж по месяцам с разбивкой по категориям. Используй plotly.express. Добавь скользящее среднее за 3 месяца. Настрой подсказки и легенду.

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

import plotly.express as px

df['month'] = df['date'].dt.to_period('M').astype(str)
monthly = df.groupby(['month', 'product_category'])['amount'].sum().reset_index()
monthly['rolling_avg'] = monthly.groupby('product_category')['amount'].transform(lambda x: x.rolling(3).mean())

fig = px.line(monthly, x='month', y='amount', color='product_category',
              title='Динамика продаж по месяцам', markers=True)
fig.add_scatter(x=monthly['month'], y=monthly['rolling_avg'],
                mode='lines', name='Скользящее среднее (3 мес)', line=dict(dash='dash'))
fig.show()

9. Сравнение сегментов: A/B-анализ

Задача: проверить, есть ли статистически значимая разница между контрольной и тестовой группой.

Промт:

У меня есть данные A/B-теста: group (control/treatment), conversion (0/1). Напиши код для расчёта конверсии в группах, t-теста для пропорций и визуализации доверительных интервалов. Используй scipy и plotly.

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

from scipy import stats
import plotly.graph_objects as go

control = df[df['group'] == 'control']['conversion']
treatment = df[df['group'] == 'treatment']['conversion']

conv_control = control.mean()
conv_treatment = treatment.mean()

# Z-тест для пропорций
from statsmodels.stats.proportion import proportions_ztest
count = np.array([treatment.sum(), control.sum()])
nobs = np.array([len(treatment), len(control)])
zstat, pval = proportions_ztest(count, nobs)
print(f'p-value: {pval:.4f}')

fig = go.Figure()
fig.add_trace(go.Bar(x=['Control', 'Treatment'], y=[conv_control, conv_treatment],
                     error_y=dict(type='data', array=[1.96*np.sqrt(conv_control*(1-conv_control)/len(control)),
                                                      1.96*np.sqrt(conv_treatment*(1-conv_treatment)/len(treatment))])))
fig.show()

10. Автоматический EDA-отчёт

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

Промт:

Создай функцию, которая для любого датасета выводит: shape, типы колонок, пропуски, описательные статистики, корреляционную матрицу (для числовых), топ-5 частых значений (для категориальных), и сохраняет всё в HTML-файл с помощью pandas-profiling (ydata-profiling).

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

from ydata_profiling import ProfileReport

def generate_eda_report(df, output_file='eda_report.html'):
    profile = ProfileReport(df, title='EDA Report', explorative=True)
    profile.to_file(output_file)
    print(f'Отчёт сохранён: {output_file}')

generate_eda_report(df)

11. Промт для интерпретации результатов и сторителлинга

Задача: превратить сухие цифры в убедительную историю для стейкхолдеров.

Промт:

На основе следующих результатов анализа (вставьте сводку) сформулируй 3 ключевых вывода для руководства. Используй язык, понятный неспециалистам. Предложи 2 рекомендации на основе данных. Избегай жаргона, добавь метафору для наглядности.

Пример результата:
LLM может выдать: «Продажи в регионе X упали на 15% по сравнению с прошлым кварталом. Это похоже на то, как если бы магазин потерял каждого седьмого покупателя. Рекомендуем проверить работу местного отдела продаж и запустить локальную акцию».

Заключение

Эти 11 промтов покрывают полный цикл анализа данных: от знакомства с грязным датасетом до презентации результатов. Главное преимущество — вы не пишете шаблонный код вручную, а делегируете рутину LLM, оставляя за собой стратегические решения. Попробуйте применить их в следующем проекте — и вы удивитесь, насколько быстрее пойдёт работа. А если хотите систематизировать знания, изучите наши курсы по анализу данных и Python — там мы разбираем реальные кейсы и учим писать код, который приносит бизнес-результат.

← Все статьи

Комментарии

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

Почему 72% инженеров ИИ отдают предпочтение тонкой настройке перед предварительным обучением в 2026 году: Курс по тонкой настройке LLM на Asibiont.com

7 июля 2026

Интеграция ASI Biont с Bitrix24 и 1С-Битрикс: автоматизация CRM без кода — реальный кейс и сценарии

2 августа 2026

NVIDIA представляет Jetson Thor: новый шаг к массовой робототехнике и периферийному ИИ

15 июля 2026

Транспортное право: как системно изучить законы перевозок и избежать ошибок в работе — курс на Asibiont

18 июля 2026

Кембридж IGCSE по физике (0625): Полное руководство по курсу на 2026 год

15 августа 2026

ИИ для доступности: Как LLM расширяют возможности людей с инвалидностью

21 июня 2026

Умный полив с AI: пошаговое руководство по интеграции датчика дождя и влажности почвы с ASI Biont через MQTT и ESP32

20 июля 2026

Освоение визуализации данных в 2026 году: D3.js, Plotly и обучение с ИИ на asibiont.com

16 июля 2026

Усильте свою наблюдаемость: как AI-агент ASI Biont автоматизирует мониторинг New Relic без кода

15 июля 2026