12 промтов, которые превращают Jupyter-ноутбук в аналитический конвейер: Pandas, визуализация, аномалии

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 и визуализацией — попробуйте применить эти промты на своём реальном датасете уже сегодня: одна очищенная таблица скажет больше, чем десять прочитанных туториалов.

← Все статьи

Комментарии

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

Пошаговое руководство: Интеграция Z-Wave-устройств с AI-агентом ASI Biont через MQTT-мост

15 июля 2026

Новые модели ИИ: почему преимущества остаются прежними

17 июля 2026

Бухгалтерский учёт и отчётность: как освоить профессию с нуля за 2 месяца с помощью AI

25 июня 2026

OS Personium: Инженерный подход к психологии. Часть 7: Откуда берутся неадекватные люди?

19 июля 2026

Революция в отслеживании активов с помощью интеграции ИИ-агента: мониторинг в реальном времени, автоматизированный инвентарь и бескодовая связь через API

17 июля 2026

Go для бэкенда: создание масштабируемых сервисов с AI-обучением на Asibiont

13 июля 2026

AI-агенты для автоматизации бизнес-процессов: 5 практических примеров, которые сэкономят ваше время

4 июня 2026

Show HN: 18 слов — как минимализм меняет правила Vibe Coding

9 июля 2026

From latency to instant: Как GitHub Issues переписал правила навигации и что это значит для разработчиков

26 июня 2026