Самые популярные инструменты бизнес-аналитики на основе кода: Обзор
Сравнение самых популярных BI-as-code инструментов: Evidence, Streamlit, Dash, Observable, Shiny и Quarto
Кейси Хуанси Ли – Приглашенный Автор 30 октября 2024 г. · 4 мин чтения
Кейси – специалист по данным, инженер-программист и писатель. Ранее она работала в McKinsey & QuantumBlack, а в настоящее время работает в Shopify.
Оригинал тут: https://evidence.dev/blog/business-intelligence-tools
Не существует единственного «лучшего» инструмента бизнес-аналитики (BI); лучший инструмент для вас зависит от ваших конкретных потребностей, рабочего процесса и набора навыков.
Это руководство сравнивает некоторые из самых популярных инструментов BI-as-code, чтобы помочь вам найти то, что наилучшим образом подходит для вашего стека анализа данных и технических компетенций:
* Evidence: Конструктор приложений на Markdown и SQL для аналитиков данных.
* Streamlit: Оболочка для веб-приложений для Python-специалистов по данным.
* Dash: Фреймворк для веб-приложений для Python-разработчиков.
* Observable: Набор инструментов для визуализации данных для JavaScript-разработчиков.
* Shiny: Простая R/Python-оболочка для статистиков и исследователей.
* Quarto: Минималистичная система публикации Jupyter/Markdown для ученых и технических писателей.
Каждый из этих инструментов является открытым исходным кодом, и вы можете найти исходный код на GitHub.
Инструмент | Репозиторий GitHub | Лицензия | Языки | Звезды |
Evidence | evidence-dev/evidence | MIT | SQL/Markdown | 4.3k |
Streamlit | streamlit/streamlit | Apache 2.0 | Python | 35k |
Dash | plotly/dash | MIT | Python | 21k |
Observable | observablehq/framework | ISC | JavaScript | 2.5k |
Shiny | rstudio/shiny | GPL-3.0 | R/Python | 5.4k |
Quarto | quarto-dev/quarto-cli | MIT | Markdown/Jupyter | 3.9k |
Evidence

Инструмент для создания приложений на SQL и Markdown
Evidence выделяется своим управлением входными данными через SQL-запросы и созданием содержимого страниц с помощью Markdown и предварительно созданных компонентов.
Входные данные в Evidence управляются с помощью SQL-запросов. Содержимое страницы создается с помощью Markdown и предварительно созданных компонентов Evidence для общих визуализаций, таких как таблицы или столбчатые диаграммы.
Evidence разработан для аналитиков, знакомых с SQL и Markdown, предлагая расширяемость через веб-стандарты. Приложения Evidence отлаженные, производительные и легко воспринимаются бизнес-стейкхолдерами.
Evidence также предлагает неограниченные возможности для определения ваших собственных пользовательских компонентов с использованием HTML и JavaScript, а также стилизации страниц через CSS. Он также поддерживает постоянно растущий список вариантов развертывания, включая Evidence Cloud — безопасный, управляемый хостинг-сервис.
Пример кода:
# Sales Report
<Slider min=2019 max=2024 name=year_pick title=Year size=full/>
```sql sales_by_month
SELECT
order_month,
category,
sum(sales) AS sales
FROM orders
WHERE year = '${inputs.year_pick}'
GROUP BY ALL
```
<BarChart
data={sales_by_month}
title="Sales by Month"
x=order_month
y=sales
/>

Хороший выбор, если:
- Вы в основном работаете с SQL и хотите получать удобные для бизнеса результаты.
- Вы не являетесь в первую очередь JavaScript-разработчиком.
- Вы хотите иметь возможность добавлять пользовательские компоненты, если ваши потребности выходят за рамки готовой функциональности.
Не рекомендуется, если:
- Вы не хотите использовать SQL-запросы для управления входными данными.
---
Streamlit

Веб-приложение-обертка для pandas, numpy и других основных инструментов Python для анализа данных
Если вы уже знакомы с такими вещами, как numpy или pandas, документация Streamlit заставит вас почувствовать себя как дома. Оборачивая, например, `np.histogram` во что-то вроде `st.bar_chart`, Streamlit берет на себя перевод вашего Python-кода в веб-приложение.
Streamlit запускает ваш Python-скрипт сверху вниз, передавая выходные данные, такие как текст, таблицы или диаграммы, на страницу. Этот инструмент также можно использовать для создания чат-бота в стиле ChatGPT с использованием выходных данных на основе Python.
Пример кода:
import streamlit as st
import pandas as pd
import numpy as np
st.title('Uber pickups in NYC')
DATE_COLUMN = 'date/time'
DATA_URL = ('https://s3-us-west-2.amazonaws.com/'
'streamlit-demo-data/uber-raw-data-sep14.csv.gz')
@st.cache_data
def load_data(nrows):
data = pd.read_csv(DATA_URL, nrows=nrows)
lowercase = lambda x: str(x).lower()
data.rename(lowercase, axis='columns', inplace=True)
data[DATE_COLUMN] = pd.to_datetime(data[DATE_COLUMN])
return data
# Create a text element and let the reader know the data is loading.
data_load_state = st.text('Loading data...')
# Load 10,000 rows of data into the dataframe.
data = load_data(10000)
# Notify the reader that the data was successfully loaded.
data_load_state.text("Done! (using st.cache_data)")
st.subheader('Raw data')
st.write(data)
st.subheader('Number of pickups by hour')
hist_values = np.histogram(
data[DATE_COLUMN].dt.hour, bins=24, range=(0,24))[0]
st.bar_chart(hist_values)
hour_to_filter = st.slider('hour', 0, 23, 17) # min: 0h, max: 23h, default: 17h
filtered_data = data[data[DATE_COLUMN].dt.hour == hour_to_filter]
st.subheader(f'Map of all pickups at {hour_to_filter}:00')
st.map(filtered_data)

Хороший выбор, если:
- Вы являетесь Python-специалистом по данным, который хочет быстро создать веб-приложение, которым можно поделиться.
Не рекомендуется, если:
- Вам нужно настроить UI/UX, выходя за рамки базовых цветовых тем.
- Вам нужен точный контроль над повторной отрисовкой страницы (весь скрипт перезапускается при изменении входных данных, если вы не управляете фрагментами вручную).
- Вам не нравится писать Python-скрипты.
---
Dash

Фреймворк для веб-приложений на Python, предоставляющий прямой контроль над макетами, элементами DOM и обратными вызовами.
Dash позволяет Python-разработчикам создавать интерактивные веб-приложения без необходимости изучать JavaScript. Он предлагает существенный контроль и настройку для тех, кто готов углубиться в документацию. Ядро Dash — это класс Python, который объединяет несколько концепций:
- Python-обертки для отображения общих элементов DOM и визуализаций plotly (например, `html.H1`, `dcc.Graph`);
- Макет приложения, определенный как список вышеуказанных элементов в `app.layout`;
- Загрузка и обработка данных с помощью обычных средств анализа данных, таких как numpy или pandas;
- Интерактивность посредством обратных вызовов, которые принимают именованные входные данные из приложения (например, значение из выпадающего списка) и возвращают именованные выходные данные (например, отфильтрованный DataFrame);
- Возможность добавлять собственный CSS и JavaScript при необходимости.
Dash построен на базе Flask, поэтому любой Python-разработчик, имеющий опыт работы с веб-фреймворками, должен чувствовать себя в нем комфортно. Хотя R, Julia и F# также указаны как совместимые языки, подавляющее большинство документации Dash написано для Python.
Dash — мощный выбор для опытных программистов на Python, которым нужен точный контроль. Однако, если вам неудобны ментальные модели, такие как классы, обратные вызовы или DOM, кривая обучения в Dash может показаться несколько крутой.
Пример кода:
from dash import Dash, html, dcc, callback, Output, Input
import plotly.express as px
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv')
app = Dash()
app.layout = [
html.H1(children='Title of Dash App', style={'textAlign':'center'}),
dcc.Dropdown(df.country.unique(), 'Canada', id='dropdown-selection'),
dcc.Graph(id='graph-content')
]
@callback(
Output('graph-content', 'figure'),
Input('dropdown-selection', 'value')
)
def update_graph(value):
dff = df[df.country==value]
return px.line(dff, x='year', y='pop')
if __name__ == '__main__':
app.run(debug=True)

Хороший выбор, если:
- У вас сильные навыки Python, и вы хотите более прямого контроля над макетом, стилизацией и интерактивностью, чем в Streamlit.
- Вы уже хорошо работаете с веб-фреймворками на базе Python, такими как Flask или Django.
- Вы знакомы с библиотеками для анализа данных на базе Python, такими как pandas, numpy и plotly.
Не рекомендуется, если:
- Вам неудобно работать с классами, обратными вызовами, методами или декораторами Python.
- Вам неудобно напрямую взаимодействовать с DOM.
---
Observable Framework

Инструментарий для визуализации данных для веб-разработчиков на JavaScript.
Если `npm run dev` — это ваша скорость, Observable Framework — отличный выбор для использования всей мощи веб-разработки при визуализации данных. Предоставляя вам импортируемые вспомогательные элементы, такие как Plot и FileAttachment, Observable упрощает интеграцию входных данных и предварительно созданных компонентов визуализации в ваше веб-приложение. У вас по-прежнему есть все обычные инструменты веб-разработки: HTML, JSX, компоненты React, стили CSS, функции JavaScript и импорты и т.д.
Хотя загрузчики данных для Observable могут быть написаны на любом языке программирования, базовый уровень комфорта с концепциями веб-разработки (например, HTML, CSS и JavaScript) позволит вам наилучшим образом использовать многие функции Observable.
Пример кода:
import * as Plot from 'npm:@observablehq/plot';
export function temperaturePlot(data, { width } = {}) {
return Plot.plot({
title: 'Hourly temperature forecast',
width,
x: { type: 'utc', ticks: 'day', label: null },
y: { grid: true, inset: 10, label: 'Degrees (F)' },
marks: [
Plot.lineY(data.properties.periods, {
x: 'startTime',
y: 'temperature',
z: null, // varying color, not series
stroke: 'temperature',
curve: 'step-after'
})
]
});
}
# Weather report
import { temperaturePlot } from './components/temperaturePlot.js';
const forecast = FileAttachment('./data/forecast.json').json();
display(temperaturePlot(forecast));

Хороший выбор, если:
- Вы веб-разработчик, который разбирается в HTML, CSS и JavaScript и хочет в полной мере использовать свои обычные инструменты (например, Node, React).
Не рекомендуется, если:
- Вы не уверены, что такое node и npm, или что означает async/await.
---
Shiny

Авторитетная оболочка для R и Python, с акцентом на эффективную реактивность.
Если R или Python — ваш основной язык для анализа данных, и вы не заинтересованы в полноценной веб-разработке или ручном управлении обратными вызовами, то, возможно, стоит потрудиться, чтобы изучить ментальные модели Shiny. Из всех инструментов, рассмотренных в этой статье, он, вероятно, наиболее авторитетен в плане создания новых, специфичных для Shiny концепций, которые должен освоить пользователь. Например, все пользовательские входы (т.е. выпадающие списки) определяются с помощью функций `ui.input_*()`, а все выходы создаются декораторами, такими как `@render.plot`. Даже для опытного Python-разработчика понимание всех этих концепций может занять время. Код для сложной панели инструментов Shiny может стать довольно громоздким.
Преимущество всего этого заключается в том, что Shiny автоматически эффективно управляет реактивностью за вас. Их документация даже приводит пример воспроизведения панели инструментов Streamlit для более быстрой работы.
HTML, CSS и JavaScript могут управляться вручную, но необходимость их размещения внутри Python-оберток может привести к тому, что код будет выглядеть немного громоздко.
Если вы довольны использованием чистых, минималистичных, предварительно стилизованных компонентов Shiny и цените эффективную реактивность, Shiny может быть хорошим выбором.
Пример кода:
from shiny.express import input, render, ui
from shinywidgets import render_plotly
ui.page_opts(title="Penguins dashboard", fillable=True)
with ui.sidebar():
ui.input_selectize(
"var", "Select variable",
["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g", "year"]
)
ui.input_numeric("bins", "Number of bins", 30)
with ui.card(full_screen=True):
@render_plotly
def hist():
import plotly.express as px
from palmerpenguins import load_penguins
return px.histogram(load_penguins(), x=input.var(), nbins=input.bins())

Хороший выбор, если:
- У вас сильные навыки R или Python, и вы хотите использовать только эти языки.
- Вы цените быструю, эффективную реактивность и не хотите вручную управлять обратными вызовами.
- Вам нравится использовать чистые, минималистичные, предварительно стилизованные компоненты.
Не рекомендуется, если:
- Вы не хотите изучать специфические для Shiny ментальные модели для управления UI и реактивностью.
- Вы предпочитаете напрямую контролировать UI с помощью более традиционного стека веб-разработки (например, HTML / CSS / JS).
- Вам требуется очень тонкий контроль над внешним видом и ощущениями.
---
Quarto

Минималистичный рендерер страниц на Jupyter / Markdown, предназначенный для научной и технической публикации.
Если ваша цель — как можно быстрее и без излишеств преобразовать результаты анализа данных в HTML-файлы, .doc или PDF, Quarto может быть хорошим выбором. Quarto берет заметки Jupyter или Markdown в стиле Quarto и преобразует их в широкий спектр форматов. Доступны темы, а также некоторые параметры интерактивности. Фактически, если вы готовы потрудиться и изучить ее, Quarto предоставляет документацию для большинства задач, которые вы можете захотеть выполнить. В целом, однако, Quarto — хороший выбор для тех, кто уже знаком с заметками Jupyter и хочет быстро представить свою работу в общем формате без чрезмерной настройки или суеты.
Если вы привыкли публиковать свои работы в LaTeX, Quarto также может показаться более современной, гибкой альтернативой, которая по-прежнему предлагает чистый, простой, академический вид документа LaTeX.
Пример кода:
---
title: 'Quarto Basics'
format:
html:
code-fold: true
jupyter: python3
---
For a demonstration of a line plot on a polar axis, see @fig-polar.
#| label: fig-polar
#| fig-cap: "A line plot on a polar axis"
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
fig, ax = plt.subplots(
subplot_kw = {'projection': 'polar'}
)
ax.plot(theta, r)
ax.set_rticks([0.5, 1, 1.5, 2])
ax.grid(True)
plt.show()

Хороший выбор, если:
- Вы уже знакомы с заметками Jupyter или Markdown и хотите быстро представить свою работу в общем формате с минимальной стилизацией.
- Вы не против изучать документацию для выполнения более сложных задач (например, пользовательские темы или развертывание в определенном сервисе, таком как Netlify).
Не рекомендуется, если:
- Вам требуется полноценная функциональность веб-разработки.
- Вам нужен обширный контроль над внешним видом и ощущениями, или интерактивностью.
---
Заключение
При выборе инструмента BI-as-code учитывайте технические навыки вашей команды и конкретные потребности:
* Evidence идеально подходит для аналитиков, которые в основном работают с SQL и хотят быстро создавать приложения для данных с использованием Markdown.
* Streamlit хорошо подходит для Python-специалистов по данным, стремящихся к быстрому прототипированию.
* Dash предлагает больше контроля для Python-разработчиков, знакомых с веб-фреймворками.
* Observable предоставляет полные возможности веб-разработки для JavaScript-разработчиков.
* Shiny подходит для пользователей R/Python, которым нужно эффективное управление реактивностью.
* Quarto идеально подходит для ученых и технических писателей, сосредоточенных на публикации документов.
Если вы хотите попробовать Evidence сами, вы можете начать бесплатно.

Evidence можно хостить на huggingface.co, но вот чем лучше в своей закрытой корпоративной среде пока не ясно. думаемс. 🤔
Кстати, вот такая штука еще интересная, но это тема другой статьи https://tabler.io/admin-template