AI-агенты для Data Science

Как AI-агенты ускоряют работу с данными: генерация кода pandas/matplotlib, автокорреляция, дашборды.

📊 Средний⏱ 12 мин

# 1. АГЕНТ ДЛЯ АНАЛИЗА ДАННЫХ — КОНЦЕПТ

# Установка зависимостей
pip install pandas matplotlib seaborn scikit-learn langchain langchain-openai

from langchain.agents import create_pandas_dataframe_agent
from langchain_openai import ChatOpenAI
import pandas as pd

# Загружаем датасет
df = pd.read_csv("sales_data_2025.csv")

# Создаём pandas-агента
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_pandas_dataframe_agent(
    llm,
    df,
    verbose=True,
    allow_dangerous_code=True,
    agent_executor_kwargs={"handle_parsing_errors": True}
)

# Задаём вопрос на естественном языке
response = agent.invoke(
    "Какие 3 категории товаров принесли больше всего выручки в Q3?"
)
print(response["output"])

# 2. ЗАГРУЗКА И ЭКСПЛОРАЦИЯ ДАННЫХ

import pandas as pd
import numpy as np

# Загрузка и базовая статистика через агента
df = pd.read_csv("sales_data_2025.csv")

# Автоматический EDA-отчёт через агента
queries = [
    "Сколько строк и столбцов в датасете?",
    "Покажи типы данных всех колонок",
    "Есть ли пропущенные значения? В каких колонках?",
    "Выведи базовую статистику (mean, std, min, max) для числовых колонок",
    "Какие уникальные значения в колонке 'category' и сколько их?",
]

for q in queries:
    result = agent.invoke(q)
    print(f"\n📊 {q}")
    print(result["output"])

# Вывод агента (пример):
# 📊 Сколько строк и столбцов в датасете?
# В датасете 15,432 строки и 12 столбцов.
# Колонки: date, product_id, category, region, quantity,
#          unit_price, revenue, cost, profit, customer_segment,
#          discount_applied, payment_method

# 3. АВТОМАТИЧЕСКАЯ ВИЗУАЛИЗАЦИЯ

import matplotlib.pyplot as plt
import seaborn as sns

# Агент генерирует код для визуализации
viz_prompt = """
Построй столбчатую диаграмму (bar chart) выручки по категориям товаров.
Используй библиотеки matplotlib и seaborn.
Цвета: синяя гамма, размер 12x6.
Сохрани график в 'revenue_by_category.png'.
"""

agent.invoke(viz_prompt)

# Альтернативно — агент с полным доступом к pandas/matplotlib
from langchain.experimental import PandasDataFrameOutputParser

advanced_queries = [
    "Построй boxplot прибыли по регионам",
    "Покажи временной ряд выручки по месяцам с линией тренда",
    "Создай scatter plot: цена vs количество, раскрась по категории",
    "Построй pie chart распределения customer_segment",
]

for q in advanced_queries:
    print(f"\n🎨 {q}")
    agent.invoke(q)
    plt.tight_layout()
    plt.savefig(f"plot_{q[:20].replace(' ','_')}.png", dpi=150)
    plt.close()

# 4. КОРРЕЛЯЦИОННЫЙ АНАЛИЗ

from sklearn.preprocessing import LabelEncoder
import numpy as np

# Агент находит корреляции между переменными
corr_prompt = """
Выполни корреляционный анализ:
1. Выдели только числовые колонки
2. Построй корреляционную матрицу (correlation matrix)
3. Найди топ-5 пар с самой сильной корреляцией (положительной и отрицательной)
4. Построй heatmap размером 10x8 с аннотациями
5. Сохрани как 'correlation_heatmap.png'
"""

agent.invoke(corr_prompt)

# Ручной альтернативный код, который сгенерирует агент:
numeric_cols = df.select_dtypes(include=[np.number]).columns
corr_matrix = df[numeric_cols].corr()

# Топ-5 корреляций
corr_pairs = corr_matrix.unstack().sort_values(ascending=False)
corr_pairs = corr_pairs[corr_pairs < 1.0]  # Убираем self-correlation
print("Топ-5 корреляций:")
print(corr_pairs.head(5))

# Heatmap
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", center=0,
            fmt=".2f", linewidths=0.5)
plt.title("Correlation Matrix — Sales Data 2025", fontsize=14)
plt.tight_layout()
plt.savefig("correlation_heatmap.png", dpi=150)

# 5. ГЕНЕРАЦИЯ ОТЧЁТА

# Агент генерирует полноценный markdown-отчёт
report_prompt = """
Сгенерируй markdown-отчёт по анализу данных, включи:
1. ## Общая статистика — количество записей, даты, ключевые метрики
2. ## Топ-3 категории по выручке — таблица с цифрами
3. ## Топ-5 корреляций — таблица (Variable 1, Variable 2, Correlation)
4. ## Графики — список сгенерированных графиков
5. ## Инсайты и рекомендации — 5 ключевых выводов

Сохрани результат в report.md
"""

response = agent.invoke(report_prompt)
report = response["output"]

# Сохраняем отчёт
with open("report.md", "w", encoding="utf-8") as f:
    f.write(report)

print("✅ Отчёт сохранён в report.md")

# Агент также может генерировать HTML-дашборд
dashboard_prompt = """
Создай простой HTML-дашборд со встроенными графиками (base64).
Включи: заголовок, 2-3 ключевые метрики крупным шрифтом,
таблицу топ-продуктов и корреляционный heatmap.
"""

# 6. ИНТЕГРАЦИЯ С JUPYTER

# Установка Jupyter AI Assistant
pip install jupyter-ai langchain-openai

# В ячейке Jupyter Notebook:

# Магическая команда для AI-помощника
# %%ai chatgpt -m gpt-4o
# Проанализируй DataFrame 'df' и предложи 5 визуализаций

# Альтернативно — встроенный агент в ноутбуке:
from langchain_openai import ChatOpenAI
from langchain.agents import create_pandas_dataframe_agent

llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_pandas_dataframe_agent(
    llm, df, verbose=True, allow_dangerous_code=True
)

# Интерактивный цикл вопрос-ответ
while True:
    query = input("🤖 Задайте вопрос о данных (или 'exit'): ")
    if query.lower() == "exit":
        break
    response = agent.invoke(query)
    print(f"\n📊 Ответ: {response['output']}\n")

# Пример взаимодействия:
# 🤖 Задайте вопрос о данных: Покажи распределение выручки по регионам
# 📊 Ответ: [агент строит график и выводит статистику]

🔗 Полезные ссылки

📖 Pandas Documentation📖 Matplotlib Docs📖 Seaborn Docs📖 LangChain Pandas Agent