
Мы построили двигатель AI, который выбирает лучшую диаграмму для ваших данных
18 июля 2025 г.Визуализация данных является последним шагом в аналитике, но также и один из самых пренебрегаемых. Как два человека глубоко встроены вБизнес -аналитика и искусственное интеллектПространство, мы наблюдали, как панели панели превращаются в леса с барными чартами и круговыми диаграммами, и часто не потому, что они лучшие, а потому, что они знакомы.
Это заставило нас задуматься:
Может ли ИИ порекомендовать лучшую диаграмму для любого набора данных автоматически?
Мы объединились, чтобы исследовать эту идею. Один из нас сосредоточился наЭвристика на основе правили логика профилирования данных; Другой (крик моего соавтора!) Взвал заряд наУсовершенствования LLMПолем Вместе мы создали рабочий прототип, который женится на структуре с семантикой.
Эта статья-наша встроенная в публичная прохождение: архитектура, код, логика и все.
Проблема с традиционной биографией BI
Давайте будем честными: большинство инструментов BI (Tableau, Power Bi, Looker и т. Д.) Предлагают диаграммуразнообразие, но нетруководствоПолем Они предполагают пользователя:
- Знает, какая диаграмма соответствует их данным
- Понимает типы данных
- Может сделать вывод истории, которую должна рассказать график
В действительности:
- Пользователи по умолчанию в безопасные/знакомые диаграммы
- Визуальные эффекты часто искажают данные
- Заинтересованные стороны неправильно их прочитали
Нам нужен инструмент, который не просто рисует, нодумаетПолем
Что если ИИ выбрал график?
Идея попала во время обзора приборной панели:Зачем использовать линейную диаграмму для этих категориальных данных?
БУМ !! Возможность обнаружена.
Что если система могла:
- Прочитайте свой CSV
- Столбцы профиля
- Понять, что вы хотите проанализировать
- Порекомендуйте самую эффективную таблицу
Наше видение:Загрузите свои данные → Получите индивидуальное предложение диаграммы (с объяснением)
Это будет расширить возможностинетехническийПользователи иускоритьаналитики.
Как мы его разработали
Мы разделили двигатель натри слоя:
Профилирование данных
Этот шаг сканирует набор данных, чтобы идентифицировать типы столбцов, кардинальность, ноль и многое другое.
pythonCopyEditdef profile_data(df):
profile = []
for col in df.columns:
dtype = df[col].dtype
unique_vals = df[col].nunique()
null_count = df[col].isnull().sum()
profile.append({
"column": col,
"dtype": str(dtype),
"unique_values": unique_vals,
"nulls": null_count
})
return pd.DataFrame(profile)
Выход:
столбец | dtype | уникальный_values | ноль |
Область | Объект | 5 | 0 |
Продажа | float64 | 1000 | 3 |
Censue_at | DateTime | 12 | 0 |
Основанный на правилах и эвристический двигатель
Мы жестко кодировали правила, основанные на общих закономерностях. Это покрыло 70–80% случаев.
pythonCopyEditdef suggest_chart(df):
profile = profile_data(df)
cat_cols = profile[profile['dtype'] == 'object']['column'].tolist()
num_cols = profile[profile['dtype'].str.contains('float|int')]['column'].tolist()
if len(cat_cols) == 1 and len(num_cols) == 1:
return f"Bar chart recommended for {cat_cols[0]} vs {num_cols[0]}"
elif len(num_cols) == 2:
return f"Scatter plot recommended for {num_cols[0]} vs {num_cols[1]}"
elif any('date' in str(dtype).lower() for dtype in df.dtypes):
return "Line chart recommended for time series visualization"
else:
return "Default to table or manual selection"
Эти логические правила действовали какограждения: Жесткий, но быстрый и надежный.
Семантический слой с усилением LLM (во главе соавтором!)
Мы добавилиLLM слойЭто интерпретирует имена столбцов и цели пользователя с использованием естественного языка.
import openai
from openai import OpenAI
client=OpenAI(api_key="API_KEY_HERE")
models = client.models.list()
def get_llm_chart_suggestion(columns):
user_prompt = f"""
You are given a dataset or a description of data. Your task is to recommend the single most suitable type of chart or visualization to effectively represent the data. Your recommendation should:
- Be limited to one concise sentence.
- Focus on clarity and effectiveness of communication, based on the data structure and use case.
- Take into account:
- The type of data (categorical, numerical, time series, geographical, etc.)
- The number of variables (univariate, bivariate, multivariate)
- The intended analytical goal (e.g., comparison, distribution, trend over time, composition, correlation, ranking, or anomaly detection)
- The audience if mentioned (e.g., general public, business analysts, data scientists)
- The medium if known (e.g., slide, dashboard, report, mobile screen)
Avoid generating the chart or describing how to build it. Just recommend the name of the chart type (e.g., bar chart, line chart, pie chart, histogram, box plot, scatter plot, bubble chart, heatmap, treemap, choropleth map, etc.) that best fits the scenario. If more than one chart could be appropriate, choose the most effective and commonly accepted option.
Data is: {columns}
"""
response = client.chat.completions.create(
model="gpt-4o-mini", # or "gpt-3.5-turbo"
messages=[
{"role": "system", "content": "You are a data visualization expert."},
{"role": "user", "content": user_prompt}
]
)
print(response.choices[0].message.content)
Пример результата:
«Используйте сложенную планку для сравнения доходов по линейке продуктов по регионам».
Эта логика, поддерживаемая LLM, помогла вдвусмысленныйслучаи, когда логика, основанная на правилах, боролась.
Необязательно: автоматические диаграммы
Мы даже добавили вариант быстрого рендеринга:
pythonCopyEditdef plot_bar(df, category_col, value_col):
grouped = df.groupby(category_col)[value_col].sum()
grouped.plot(kind='bar')
plt.title(f'{value_col} by {category_col}')
plt.show()
Что делает этот двигатель
- Читает ваш набор данных
- Профилируется, используя правила
- Предлагает диаграмму с использованием логики + LLM
- Необязательно заплаты на быструю диаграмму
Больше не догадываться. Нет больше несоответствующих визуальных эффектов. Просто контекст-диаграмма.
Проблемы, с которыми мы столкнулись
Вот где мы боролись:
- Неоднозначные имена столбцов:
val1
Вx2
Вabc123
: LLMS помог, но только так много. - Перекрывающиеся параметры диаграммы: Бар против сложенного бар против линии? Контекст - это все.
- Лучшие практики визуализации: Выбор диаграммы ↓ качество диаграммы. Избегать «диаграммы мусора» - еще один слой.
Что дальше?
Вот как мы планируем выровнять это:
- Fine-Tune LLM с реальными наборами данных
- Упаковать это как расширение мощности BI или таблицы
- Добавьте петлю обратной связи: «Был ли эта диаграмма полезна?»
- Создайте пользовательский интерфейс перетаскивания (загрузка → предварительный просмотр диаграммы)
В конце концов, мы хотим, чтобы это стало вашимAI Assiveization AssistantПолем
Ключевые выводы
- Большинство инструментов BI предполагают, что пользователи знают, какую диаграмму выбрать. Они не делают.
- Правила + эвристика обрабатывает большинство случаев. LLMS справляется с остальными.
- Правильная диаграмма = лучшие решения, лучшие истории, лучшие результаты.
- Автоматизация может сделать визуализацию доступной для всех.
Бонус: попробуйте самостоятельно
Мы скоро открыты на Github.
Хотите сотрудничать, проверить это или использовать в своих рабочих процессах BI?
Протянуть руку. Вилка. Способствовать. Или просто скажите нам, что вы улучшите.
Оригинал