12 промтов, которые превращают Jupyter-ноутбук в аналитический конвейер: Pandas, визуализация, аномалии
Большинство аналитиков на Python теряют время не на анализ, а на рутину: переименовать колонки, привести типы, склеить три выгрузки, вспомнить синтаксис pd.merge с параметром how, а потом полчаса гуглить, почему Seaborn рисует пустой график. По данным опроса Kaggle State of Data Science, значительная часть рабочего времени дата-специалистов уходит именно на подготовку и очистку данных, а не на моделирование или интерпретацию результатов.
Хорошая новость: LLM научились генерировать не просто «пример кода из туториала», а рабочий код под ваш конкретный DataFrame — если правильно формулировать промт. Ниже — 12 промтов, которые я собрал и отшлифовал в реальной работе с Pandas, NumPy, Matplotlib, Seaborn и Plotly. Каждый промт — с задачей, примером запроса и пояснением, что именно он экономит.
Важный принцип: чем больше контекста о ваших данных вы даёте модели (имена колонок, типы, примеры строк, версия библиотек), тем меньше правок придётся вносить. Код ниже проверен на Pandas 2.x — синтаксис актуален на сентябрь 2026 года.
Промт 1. Профилирование датасета и аудит качества данных
Задача: быстро понять, что вообще в таблице — типы, пропуски, дубликаты, кардинальность категорий.
Промт:
Ты — senior data analyst. Ниже структура моего DataFrame df (колонки, dtypes, первые 5 строк). Напиши функцию
audit(df), которая выводит: 1) dtypes и долю пропусков по каждой колонке; 2) число полных дубликатов; 3) кардинальность категориальных колонок; 4) min/max/квартили для числовых. Верни результат как один Pandas DataFrame, отсортированный по доле пропусков. Без циклов по строкам, только векторные операции.
Пример: после загрузки выгрузки из CRM вы получаете таблицу с 40 колонками, половина из которых пустые. Промт даёт одну сводку вместо десяти df.info() и df.describe(). Результат — таблица, где сразу видно, что колонка phone заполнена на 12%, а region имеет 340 уникальных значений вместо ожидаемых 20 — то есть грязные данные.
Промт 2. Умная очистка колонок и типов
Задача: привести датасет в порядок без ручного перебора колонок.
Промт:
На основе audit-отчёта выше предложи план очистки: для каждой колонки укажи целевой dtype, стратегию обработки пропусков (drop / fill значением / forward-fill) и обоснование. Затем сгенерируй код с цепочкой
.astype(),pd.to_datetime(..., errors='coerce')иdf.pipe(), чтобы весь пайплайн был воспроизводимым. Не удаляй строки без явного указания — сначала пометь их флагом.
Почему работает: модель видит реальные dtypes и не предлагает astype(int) для колонки с пропусками (что упало бы с ошибкой). Флаг вместо удаления — золотое правило: вы всегда можете откатить фильтр.
Промт 3. Объединение нескольких датасетов без потери строк
Задача: склеить выгрузки по ключу и проверить, что ничего не потерялось.
Промт:
У меня два DataFrame:
orders(ключ order_id) иcustomers(ключ customer_id). Напиши merge сvalidate='many_to_one',indicator=True, затем выведи распределение_mergeи число строк, потерявших пару. Если есть несовпадения — покажи примеры ключей из левой таблицы, которых нет в правой. Добавь обработку дубликатов ключей в правой таблице.
Пример: параметр indicator=True добавляет колонку _merge со значениями both, left_only, right_only. Забыть про него — классическая ошибка, из-за которой «пропавшие» заказы ищут часами. validate='many_to_one' сразу бросает исключение, если в customers вдруг задублировался customer_id.
Промт 4. Группировки и сводные таблицы
Задача: получить агрегаты по нескольким разрезам сразу.
Промт:
Сгенерируй
groupbyпо колонкам region и month с агрегациями: сумма revenue, средний чек, число уникальных клиентов (nunique). Используй именованные агрегации через.agg(). Затем разверни результат в pivot-таблицуregion × monthпо сумме revenue сmargins=Trueдля итогов. Округли до двух знаков.
Пример:
summary = (df.groupby(['region', 'month'])
.agg(revenue=('revenue', 'sum'),
avg_check=('revenue', 'mean'),
clients=('customer_id', 'nunique'))
.reset_index())
pivot = summary.pivot_table(index='region', columns='month',
values='revenue', aggfunc='sum', margins=True)
Такой промт экономит главное — время на вспоминание синтаксиса именованных агрегаций и margins.
Промт 5. Временные ряды: ресемплинг и скользящие окна
Задача: перейти с дневных данных на недельные/месячные и сгладить шум.
Промт:
Преобразуй колонку date в DatetimeIndex, выполни
resample('W')с суммой по revenue и средним по conversion. Добавь скользящее среднее за 4 недели и скользящее стандартное отклонение. Отметь недели, где значение выходит за пределы mean ± 2·std.
Почему важно: resample требует DatetimeIndex — модель напомнит про set_index и sort_index, иначе результат будет молча неверным. Флаг аномалий через 2·std — простой и прозрачный детектор.
Промт 6. Поиск выбросов тремя методами
Задача: не гадать, а сравнить подходы к аномалиям.
Промт:
Реализуй три метода поиска выбросов в числовой колонке: 1) IQR (границы Q1−1.5·IQR и Q3+1.5·IQR); 2) Z-score (
|z| > 3); 3) модифицированный Z-score с медианой и MAD. Верни DataFrame с флагами по каждому методу и число пересечений. Объясни, когда какой метод предпочтительнее для скошенных распределений.
Пример: для распределения с длинным правым хвостом (доходы, суммы заказов) классический Z-score помечает как аномалию половину данных — MAD устойчивее. Промт заставляет модель это объяснить, а не просто выдать код.
Промт 7. Автоматическая генерация графиков по типу данных
Задача: получить набор релевантных графиков без ручного выбора.
Промт:
Напиши функцию
auto_plots(df), которая для каждой колонки выбирает тип графика: числовая → гистограмма с KDE; категориальная с кардинальностью ≤ 15 → bar chart; datetime → line plot. Используй Seaborn,plt.subplotsс сеткой,tight_layout(). Заголовки — на русском. Верни список созданных фигур.
Пример: на датасете из 20 колонок это даёт 20 графиков одной командой. Экономия — десятки минут на копипаст sns.histplot.
Промт 8. Корреляционный анализ и мультиколлинеарность
Задача: найти связи между признаками и не обмануться ложными корреляциями.
Промт:
Построй матрицу корреляций Спирмена для числовых колонок. Выведи топ-10 пар по модулю коэффициента. Для пар с
|r| > 0.7 проверь мультиколлинеарность через VIF из statsmodels. Добавь heatmap с маской верхнего треугольника и аннотациями. Отдельно предупреди о парах, где корреляция может быть ложной из-за общего тренда.
Ссылка на метод: коэффициент Спирмена устойчив к нелинейным монотонным связям, в отличие от Пирсона — это описано в документации SciPy (scipy.stats.spearmanr).
Промт 9. Ускорение тяжёлых вычислений
Задача: когда apply по миллиону строк работает минуты.
Промт:
Мой код использует
df.apply(func, axis=1)на 2 млн строк и работает медленно. Перепиши через векторные операции NumPy илиnp.select/np.where. Если логика сложная — предложи вариант сnumba.njitи сравни ожидаемый выигрыш. Не используйiterrows.
Пример: замена apply на np.select для категоризации часто ускоряет код на порядок — это стандартная рекомендация из официального гайда Pandas «Enhancing performance».
Промт 10. Визуализация в Plotly для интерактива
Задача: сделать график, который можно крутить и наводить мышью — для отчёта или дашборда.
Промт:
Сгенерируй интерактивный Plotly-график: line chart с двумя осями Y (revenue и conversion), hover-подсказками, диапазонным слайдером по времени и кнопками для переключения регионов через
updatemenus. Сохрани в HTML черезwrite_html.
Почему полезно: Plotly Express экономит код, но для кастомных кнопок нужен graph_objects — модель подскажет, что px здесь не хватит.
Промт 11. Воспроизводимый пайплайн в Jupyter
Задача: превратить набор ячеек в повторяемый процесс.
Промт:
Собери все шаги очистки и трансформации в одну функцию
build_dataset(path)с использованиемdf.pipe(). Добавь проверки черезassert(нет пропусков в ключах, типы совпадают). В конце —df.to_parquet()для быстрой перезагрузки. Оформи как модуль, который можно импортировать в ноутбук.
Пример: pipe() читается сверху вниз как рецепт, а to_parquet ускоряет повторную загрузку в разы по сравнению с CSV — формат колоночный и хранит типы.
Промт 12. Самопроверка кода и объяснение результата
Задача: чтобы не доверять коду слепо.
Промт:
Проверь этот код на типичные ошибки Pandas: chained assignment, молчаливое приведение типов, неверный
axisв агрегациях, потерю строк при merge. Для каждой найденной проблемы покажи строку, объясни риск и дай исправление. Затем напиши 3 теста сpytest, проверяющих корректность результата.
Почему это критично: chained assignment (df[df.a > 0]['b'] = 1) в Pandas 2.x вызывает SettingWithCopyWarning и часто не срабатывает — это описано в официальном гайде «Copy-on-Write». Промт помогает поймать такие места до продакшена.
Как формулировать промты для воспроизводимого кода
Три правила, которые я вывел на практике:
| Правило | Плохо | Хорошо |
|---|---|---|
| Давайте контекст данных | «почисти датасет» | «колонки: order_id (int), amount (float, 8% NaN), date (str)» |
| Указывайте версии | «используй pandas» | «Pandas 2.x, без inplace, с copy-on-write» |
| Просите проверки | «сделай merge» | «merge с validate и indicator, выведи распределение _merge» |
Для Jupyter отдельно просите: «оформи как отдельные ячейки с markdown-заголовками» и «не используй глобальные переменные внутри функций». Это делает ноутбук читаемым и переносимым.
Полезные официальные источники, на которые стоит ссылаться при проверке кода: документация Pandas (pandas.pydata.org/docs), гайд «Enhancing performance», раздел «Copy-on-Write», документация Seaborn (seaborn.pydata.org) и Plotly (plotly.com/python).
Что в итоге
Эти 12 промтов закрывают 80% ежедневной рутины аналитика: от аудита грязной выгрузки до интерактивного графика и воспроизводимого пайплайна. Главное — не копировать их слепо, а адаптировать под свои колонки и версии библиотек: чем точнее контекст, тем меньше правок. Начните с промтов 1, 2 и 12 — аудит, очистка и самопроверка дают максимальный эффект сразу. А дальше добавляйте визуализацию и ускорение по мере роста данных. Если хотите глубже разобраться с Pandas и визуализацией — попробуйте применить эти промты на своём реальном датасете уже сегодня: одна очищенная таблица скажет больше, чем десять прочитанных туториалов.
Комментарии