Реалізація AI-автоматичної візуалізації даних
Ручне побудування десятків графіків для розвідувального аналізу даних (EDA) — процес, що вимагає годин роботи. Аналітик витрачає час на вибір типу діаграми, налаштування осей і перевірку коректності. AI-агент візуалізації справляється за хвилини: він аналізує семантику колонок (ID, date, category, revenue) і обирає оптимальну візуалізацію. Ми бачили проєкти, де спеціаліст витрачав 3 дні на дашборд, а потім переробляв половину через зміну метрик. Наше рішення виключає такі цикли, автоматизуючи підбір і генерацію графіків за допомогою LLM.
Отримайте консультацію щодо впровадження AI-автовізуалізації у вашу аналітику.
Як AI-автовізуалізація вирішує проблему вибору графіка?
Ключова складність — зрозуміти, який графік адекватний даним. Ми використовуємо Claude 3.5 Sonnet для аналізу схеми та контексту. Модель повертає JSON з типом графіка, колонками та підписами. Нижче — базова реалізація на Python з Plotly.
from anthropic import Anthropic
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
class SmartVisualizer:
def __init__(self):
self.llm = Anthropic()
def visualize(self, df: pd.DataFrame, question: str = None) -> go.Figure:
"""Автоматичний підбір візуалізації"""
chart_config = self._determine_chart_config(df, question)
return self._render_chart(df, chart_config)
def _determine_chart_config(self, df: pd.DataFrame, question: str) -> dict:
schema = self._describe_dataframe(df)
response = self.llm.messages.create(
model="claude-3-5-sonnet-latest",
max_tokens=500,
messages=[{
"role": "user",
"content": f"""Given this dataframe and question, recommend the best visualization.
Data schema: {schema}
Question: {question or 'Show the data distribution'}
Return JSON with:
- chart_type: one of [bar, line, scatter, histogram, pie, heatmap, box, violin]
- x_column: column name for x axis
- y_column: column name for y axis (or list for multiple)
- color_column: column for color grouping (or null)
- title: chart title
- x_label: x axis label
- y_label: y axis label
- reasoning: brief explanation of choice"""
}]
)
return json.loads(response.content[0].text)
def _render_chart(self, df: pd.DataFrame, config: dict) -> go.Figure:
chart_type = config['chart_type']
chart_functions = {
'bar': lambda: px.bar(
df, x=config.get('x_column'), y=config.get('y_column'),
color=config.get('color_column'),
title=config.get('title', ''),
labels={config['x_column']: config.get('x_label', ''),
config['y_column']: config.get('y_label', '')}
),
'line': lambda: px.line(
df, x=config.get('x_column'), y=config.get('y_column'),
color=config.get('color_column'), title=config.get('title', '')
),
'scatter': lambda: px.scatter(
df, x=config.get('x_column'), y=config.get('y_column'),
color=config.get('color_column'), title=config.get('title', ''),
trendline='ols' if config.get('show_trendline') else None
),
'histogram': lambda: px.histogram(
df, x=config.get('x_column'), color=config.get('color_column'),
title=config.get('title', ''), nbins=30
),
'heatmap': lambda: px.imshow(
df.select_dtypes(include='number').corr(),
title=config.get('title', 'Correlation Matrix'),
text_auto=True, color_continuous_scale='RdBu_r'
),
'box': lambda: px.box(
df, x=config.get('x_column'), y=config.get('y_column'),
title=config.get('title', '')
),
}
render_fn = chart_functions.get(chart_type, chart_functions['bar'])
fig = render_fn()
# Стандартне оформлення
fig.update_layout(
template='plotly_white',
font=dict(size=12),
title_font_size=16,
)
return fig
Чому Plotly кращий за Matplotlib для автовізуалізації?
Matplotlib вимагає ручного налаштування кожної осі та легенди. Plotly надає готові шаблони (plotly_white) та автоматичну обробку типів даних. Для AI-агента важливо швидко генерувати коректний JSON з параметрами — Plotly Express приймає словники напряму. Це скорочує кількість ітерацій між LLM та рендерингом.
Що таке автоматичний EDA дашборд і як він прискорює аналіз?
Ручний EDA — це repeatable труд: гістограми, box plots, кореляційні матриці. Ми автоматизуємо генерацію дашборда з Plotly Subplots. Порівняйте:
| Параметр | Ручний EDA | AI-автоматичний дашборд |
|---|---|---|
| Час на датасет 10 колонок | 2-3 години | 15-20 хвилин |
| Кількість графіків | до 10 | до 9 (налаштовувано) |
| Помилки розкладки | часті | виключені |
| Повторюваність | низька | 100% |
def create_auto_dashboard(df: pd.DataFrame) -> go.Figure:
"""Автоматичний EDA дашборд"""
from plotly.subplots import make_subplots
num_cols = df.select_dtypes(include='number').columns.tolist()
cat_cols = df.select_dtypes(include=['object', 'category']).columns.tolist()
n_plots = min(len(num_cols) + len(cat_cols[:3]), 9)
rows = (n_plots + 2) // 3
fig = make_subplots(rows=rows, cols=3, subplot_titles=[
*[f'Distribution: {c}' for c in num_cols[:6]],
*[f'Top values: {c}' for c in cat_cols[:3]]
])
idx = 1
for col in num_cols[:6]:
row, col_pos = (idx - 1) // 3 + 1, (idx - 1) % 3 + 1
fig.add_trace(
go.Histogram(x=df[col], name=col, nbinsx=30),
row=row, col=col_pos
)
idx += 1
for col in cat_cols[:3]:
row, col_pos = (idx - 1) // 3 + 1, (idx - 1) % 3 + 1
top_values = df[col].value_counts().head(10)
fig.add_trace(
go.Bar(x=top_values.index, y=top_values.values, name=col),
row=row, col=col_pos
)
idx += 1
fig.update_layout(height=300 * rows, showlegend=False, title="Data Overview")
return fig
Типи графіків і коли їх застосовувати (таблиця)
| Тип графіка | Дані | Типовий use case |
|---|---|---|
| bar | категорії vs число | порівняння продажів по місяцях |
| line | часовий ряд | тренд виручки |
| scatter | дві числові колонки | кореляція |
| histogram | одна числова колонка | розподіл |
| heatmap | кореляційна матриця | мультиколінеарність |
| box | категорія vs число | викиди в цінах по регіонах |
| violin | категорія vs число | розподіл + щільність |
| pie | категорії (топ-5) | частка ринку |
Що входить в роботу (deliverables)
- Модуль SmartVisualizer з підтримкою 8 типів графіків та LLM-вибором
- Автоматичний EDA дашборд для будь-якого DataFrame (до 100 колонок)
- API-інтеграція з вашим стеком (Flask, FastAPI, Streamlit)
- Документація з налаштування та кастомізації
- Навчання команди (1 сесія онлайн)
- Гарантія на коректну роботу візуалізацій — фіксимо баги протягом 2 тижнів після здачі
Досвід і гарантії
Наша команда займається Data Science та MLOps понад 5 років. Реалізували 30+ проєктів з автоматизації аналітики для ритейлу, фінтеху та логістики. Використовуємо стеки PyTorch, LangChain, Plotly, PostgreSQL. Кожне рішення проходить code review та тестування на синтетичних даних. Надаємо гарантію якості візуалізацій: відсутність візуального сміття, коректні підписи, відповідність стандартам Edward Tufte, "The Visual Display of Quantitative Information".
Як ми це робимо
- Аналітика: вивчаємо ваші дані, питання бізнесу, сценарії використання.
- Проектування: визначаємо набір візуалізацій, модель LLM, конвеєр.
- Реалізація: пишемо код, інтегруємо з вашим сховищем (S3, PostgreSQL, Redshift).
- Тестування: перевіряємо на реальних даних, A/B тест з ручним побудуванням.
- Деплой: розгортаємо у вашому середовищі (Kubernetes, SageMaker, Vertex AI).
Терміни та вартість
Термін виконання — від 5 до 15 робочих днів залежно від складності інтеграції. Економія трудовитрат при регулярному EDA становить до 80%. Вартість рішення окупається протягом 2-3 місяців. Зв'яжіться з нами, щоб отримати консультацію та попередній розрахунок. Ми гарантуємо прозорість на кожному етапі.
Типові помилки при самостійній реалізації
- Використання matplotlib замість plotly — немає інтерактивності та автоматичної розмітки.
- Зберігання конфігурації графіків у коді, а не через LLM — складно змінювати під нові дані.
- Відсутність стандартного оформлення — кожен графік виглядає по-різному.
- Ігнорування кореляційної матриці — втрачаєте зв'язки між ознаками.
Правильна автовізуалізація скорочує час первинного EDA з 2-3 годин до 15-20 хвилин для стандартних датасетів. Замовте модуль SmartVisualizer та отримайте консультацію — напишіть нам.







