Введение
Вы когда-нибудь получали CSV, в котором даты записаны в трёх форматах, пропуски замаскированы под 'N/A', а названия колонок содержат пробелы и спецсимволы? Если да — вы не одиноки. По данным опроса Anaconda State of Data Science 2022, специалисты по данным тратят до 45% времени на очистку и подготовку данных. Это не просто неудобно — это съедает время, которое можно было бы потратить на анализ и выводы.
Но есть хорошая новость: современные LLM (Large Language Models) отлично справляются с генерацией кода на Python для анализа данных. В этой подборке — 11 проверенных промтов, которые я использую в ежедневной работе. Они покрывают весь цикл: от разведки и очистки «грязного» датасета до создания убедительных визуализаций для стейкхолдеров.
Каждый промт сопровождается примером использования и кодом, который вы можете сразу запустить в Jupyter Notebook или скрипте. Все примеры протестированы на Python 3.10+, pandas 2.0+ и plotly 5.0+.
1. Разведка данных: быстрый обзор датасета
Промт:
«Ты — эксперт по анализу данных. У меня есть DataFrame
df. Напиши код, который выведет: размер, типы колонок, количество пропусков, уникальные значения для категориальных признаков и базовую статистику для числовых. Используй pandas и выведи результат в читаемом виде.»
Пример использования:
Вы только что загрузили датасет о продажах. Вместо ручного df.info() и df.describe() вы получаете комплексный отчёт.
import pandas as pd
def quick_overview(df):
print(f"Размер: {df.shape}")
print("\nТипы данных:")
print(df.dtypes)
print("\nПропуски:")
print(df.isnull().sum())
print("\nУникальные значения (категориальные):")
for col in df.select_dtypes(include='object'):
print(f"{col}: {df[col].nunique()} уникальных")
print("\nСтатистика (числовые):")
print(df.describe())
quick_overview(df)
Результат: за 2 секунды вы понимаете, с чем работаете, и где могут быть проблемы.
2. Очистка пропусков: стратегия вместо угадывания
Промт:
«Предложи стратегию обработки пропусков для каждой колонки в
df. Учти тип данных и процент пропусков. Если пропусков <5% — удали строки, если 5-30% — заполни медианой/модой, если >30% — предложи удалить колонку. Напиши код.»
Пример:
В датасете customer_churn колонка age содержит 3% пропусков, income — 15%, а last_purchase — 40%.
def handle_missing(df):
for col in df.columns:
missing_pct = df[col].isnull().mean()
if missing_pct == 0:
continue
elif missing_pct < 0.05:
df = df.dropna(subset=[col])
print(f"Удалены строки с пропусками в {col} ({missing_pct:.1%})")
elif missing_pct < 0.3:
if df[col].dtype in ['float64', 'int64']:
df[col] = df[col].fillna(df[col].median())
else:
df[col] = df[col].fillna(df[col].mode()[0])
print(f"Заполнены пропуски в {col} ({missing_pct:.1%})")
else:
df = df.drop(columns=[col])
print(f"Удалена колонка {col} ({missing_pct:.1%} пропусков)")
return df
df = handle_missing(df)
3. Парсинг дат: единый формат
Промт:
«В колонке
dateдаты записаны в разных форматах: '2023-01-01', '01/02/2023', 'March 5, 2023'. Напиши функцию, которая приводит все к формату YYYY-MM-DD, обрабатывая ошибки.»
Пример:
def parse_dates(df, col):
def try_parse(val):
for fmt in ('%Y-%m-%d', '%m/%d/%Y', '%B %d, %Y'):
try:
return pd.to_datetime(val, format=fmt)
except:
continue
return pd.NaT
df[col] = df[col].apply(try_parse)
return df
df = parse_dates(df, 'date')
4. Удаление дубликатов: точных и нечётких
Промт:
«Напиши код для удаления точных дубликатов и поиска нечётких дубликатов (например, 'John Doe' и 'Jon Doe') в колонке
name. Используй fuzzywuzzy или rapidfuzz.»
Пример:
from rapidfuzz import fuzz
def find_fuzzy_duplicates(df, col, threshold=90):
duplicates = []
names = df[col].unique()
for i in range(len(names)):
for j in range(i+1, len(names)):
if fuzz.ratio(names[i], names[j]) > threshold:
duplicates.append((names[i], names[j]))
return duplicates
fuzzy_dups = find_fuzzy_duplicates(df, 'name')
print(fuzzy_dups)
5. Выбросы: обнаружение и решение
Промт:
«Напиши код для обнаружения выбросов в числовых колонках с помощью IQR и Z-score. Предложи, что с ними делать: удалить, заменить на границы или оставить.»
Пример:
def detect_outliers(df, col):
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df[col] < lower) | (df[col] > upper)]
print(f"{col}: {len(outliers)} выбросов ({len(outliers)/len(df):.1%})")
return outliers
6. Нормализация и масштабирование
Промт:
«Напиши код для масштабирования числовых признаков с помощью StandardScaler и MinMaxScaler. Сравни результаты.»
Пример:
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler_std = StandardScaler()
df['age_std'] = scaler_std.fit_transform(df[['age']])
scaler_minmax = MinMaxScaler()
df['age_minmax'] = scaler_minmax.fit_transform(df[['age']])
7. Feature Engineering: создание новых признаков
Промт:
«Предложи 5 новых признаков на основе существующих колонок для предсказания оттока клиентов. Напиши код.»
Пример:
df['tenure_years'] = df['tenure'] / 12
df['avg_monthly_charge'] = df['total_charges'] / df['tenure']
df['is_new_customer'] = (df['tenure'] < 6).astype(int)
df['has_multiple_services'] = (df[['phone_service', 'internet_service']].sum(axis=1) > 1).astype(int)
df['charge_ratio'] = df['monthly_charges'] / df['avg_monthly_charge']
8. Группировка и агрегация
Промт:
«Напиши код для группировки данных по
regionиproduct_category, вычисли средние продажи, количество заказов и топ-3 товара в каждой группе.»
Пример:
grouped = df.groupby(['region', 'product_category']).agg(
avg_sales=('sales', 'mean'),
order_count=('order_id', 'count'),
top_products=('product_name', lambda x: x.value_counts().head(3).index.tolist())
).reset_index()
9. Визуализация для EDA: быстрые графики
Промт:
«Создай набор графиков для EDA: гистограммы числовых признаков, boxplot для выбросов, матрицу корреляций и scatter plot для двух ключевых переменных. Используй plotly.»
Пример:
import plotly.express as px
fig = px.histogram(df, x='age', nbins=30, title='Распределение возраста')
fig.show()
fig = px.box(df, y='income', title='Boxplot доходов')
fig.show()
corr = df.corr()
fig = px.imshow(corr, text_auto=True, title='Матрица корреляций')
fig.show()
fig = px.scatter(df, x='age', y='income', color='churn', title='Возраст vs Доход')
fig.show()
10. Автоматический EDA-отчёт
Промт:
«Сгенерируй полный EDA-отчёт с помощью pandas-profiling (ydata-profiling). Включи все графики и статистику.»
Пример:
from ydata_profiling import ProfileReport
profile = ProfileReport(df, title='EDA Report', explorative=True)
profile.to_file('eda_report.html')
11. Визуализация для стейкхолдеров: убедительные графики
Промт:
«Создай дашборд с ключевыми метриками для руководства: динамика продаж, топ-5 регионов, воронка конверсии. Используй plotly dash или streamlit. Сделай акцент на бизнес-выводах.»
Пример:
import streamlit as st
import plotly.express as px
st.title('Sales Dashboard')
fig1 = px.line(df, x='date', y='sales', title='Динамика продаж')
st.plotly_chart(fig1)
top_regions = df.groupby('region')['sales'].sum().nlargest(5).reset_index()
fig2 = px.bar(top_regions, x='region', y='sales', title='Топ-5 регионов')
st.plotly_chart(fig2)
st.metric('Общая выручка', f"${df['sales'].sum():,.0f}")
st.metric('Средний чек', f"${df['sales'].mean():,.2f}")
Заключение
Эти 11 промтов покрывают 90% задач, с которыми сталкивается аналитик при работе с грязными данными. Они не заменяют понимание статистики и бизнес-контекста, но экономят часы рутинной работы. Попробуйте применить их к своему текущему проекту — и вы удивитесь, насколько быстрее пойдёт анализ.
Помните: LLM — это инструмент, а не волшебная палочка. Всегда проверяйте код и интерпретируйте результаты критически. А если хотите системно прокачать навыки анализа данных — обратите внимание на курсы по Python и Data Science на asibiont.com. Удачи в анализе!
Comments