Введение
Диаграммы-воронки часто используются для представления данных на различных этапах бизнес-процесса. Они является важным механизмом бизнес-аналитики для выявления потенциальных проблемных областей процесса. Например, они используются для наблюдения за доходами и затратами в процессе продаж на каждом этапе и отображают значения, которые постепенно уменьшаются. Каждый этап отражает определенный процент от общего числа всех значений.
Базовая диаграмма воронки с plotly.express
Plotly Express – это простой высокоуровневый интерфейс для Plotly, который работает с различными типами данных и отрисовывает фигуры в простом стиле.
С помощью px.funnel каждую строку фрейма данных можно представить как уровень воронки.
import plotly.express as px
data = dict(
number=[39, 27.4, 20.6, 11, 2],
stage=["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"])
fig = px.funnel(data, x='number', y='stage')
fig.show()
Сложенная диаграмма воронки с plotly.express
import plotly.express as px
import pandas as pd
stages = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"]
df_mtl = pd.DataFrame(dict(number=[39, 27.4, 20.6, 11, 3], stage=stages))
df_mtl['office'] = 'Montreal'
df_toronto = pd.DataFrame(dict(number=[52, 36, 18, 14, 5], stage=stages))
df_toronto['office'] = 'Toronto'
df = pd.concat([df_mtl, df_toronto], axis=0)
fig = px.funnel(df, x='number', y='stage', color='office')
fig.show()
Базовая диаграмма воронки с трассировкой graph_objects go.Funnel
Если Plotly Express не дает хорошей отправной точки, можно использовать более универсальный класс go.Funnel из plotly.graph_objects (https://plotly.com/python/graph-objects/).
from plotly import graph_objects as go
fig = go.Figure(go.Funnel(
y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"],
x = [39, 27.4, 20.6, 11, 2]))
fig.show()
Настройка параметров размера и цвета маркеров
В этом примере используются параметры textposition и textinfo для определения вида информации, отображаемой на диаграмме, а также показано, как настроить столбцы.
from plotly import graph_objects as go
fig = go.Figure(go.Funnel(
y = ["Website visit", "Downloads", "Potential customers", "Requested price", "Finalized"],
x = [39, 27.4, 20.6, 11, 2],
textposition = "inside",
textinfo = "value+percent initial",
opacity = 0.65, marker = {"color": ["deepskyblue", "lightsalmon", "tan", "teal", "silver"],
"line": {"width": [4, 2, 2, 3, 1, 1], "color": ["wheat", "wheat", "blue", "wheat", "wheat"]}},
connector = {"line": {"color": "royalblue", "dash": "dot", "width": 3}})
)
fig.show()
Сложенная диаграмма воронки с go.Funnel
from plotly import graph_objects as go
fig = go.Figure()
fig.add_trace(go.Funnel(
name = 'Montreal',
y = ["Website visit", "Downloads", "Potential customers", "Requested price"],
x = [120, 60, 30, 20],
textinfo = "value+percent initial"))
fig.add_trace(go.Funnel(
name = 'Toronto',
orientation = "h",
y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"],
x = [100, 60, 40, 30, 20],
textposition = "inside",
textinfo = "value+percent previous"))
fig.add_trace(go.Funnel(
name = 'Vancouver',
orientation = "h",
y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized"],
x = [90, 70, 50, 30, 10, 5],
textposition = "outside",
textinfo = "value+percent total"))
fig.show()
Базовая диаграмма воронки с областями с plotly.express
С помощью px.funnel_area
каждая строка фрейма данных представляется как уровень воронки.
import plotly.express as px
fig = px.funnel_area(names=["The 1st","The 2nd", "The 3rd", "The 4th", "The 5th"],
values=[5, 4, 3, 2, 1])
fig.show()
Базовая диаграмма воронки с областями с go.Funnelarea
Если Plotly Express не дает хорошей отправной можно использовать более универсальный класс go.Funnelarea из plotly.graph_objects.
from plotly import graph_objects as go
fig = go.Figure(go.Funnelarea(
text = ["The 1st","The 2nd", "The 3rd", "The 4th", "The 5th"],
values = [5, 4, 3, 2, 1]
))
fig.show()
Настройка параметров размера и цвета маркеров в диаграмме воронки с областями
from plotly import graph_objects as go
fig = go.Figure(go.Funnelarea(
values = [5, 4, 3, 2, 1], text = ["The 1st","The 2nd", "The 3rd", "The 4th", "The 5th"],
marker = {"colors": ["deepskyblue", "lightsalmon", "tan", "teal", "silver"],
"line": {"color": ["wheat", "wheat", "blue", "wheat", "wheat"], "width": [0, 1, 5, 0, 4]}},
textfont = {"family": "Old Standard TT, serif", "size": 13, "color": "black"}, opacity = 0.65))
fig.show()
Множество воронок с областями
from plotly import graph_objects as go
fig = go.Figure()
fig.add_trace(go.Funnelarea(
scalegroup = "first", values = [500, 450, 340, 230, 220, 110], textinfo = "value",
title = {"position": "top center", "text": "Sales for Sale Person A in U.S."},
domain = {"x": [0, 0.5], "y": [0, 0.5]}))
fig.add_trace(go.Funnelarea(
scalegroup = "first", values = [600, 500, 400, 300, 200, 100], textinfo = "value",
title = {"position": "top center", "text": "Sales of Sale Person B in Canada"},
domain = {"x": [0, 0.5], "y": [0.55, 1]}))
fig.add_trace(go.Funnelarea(
scalegroup = "second", values = [510, 480, 440, 330, 220, 100], textinfo = "value",
title = {"position": "top left", "text": "Sales of Sale Person A in Canada"},
domain = {"x": [0.55, 1], "y": [0, 0.5]}))
fig.add_trace(go.Funnelarea(
scalegroup = "second", values = [360, 250, 240, 130, 120, 60],
textinfo = "value", title = {"position": "top left", "text": "Sales of Sale Person B in U.S."},
domain = {"x": [0.55, 1], "y": [0.55, 1]}))
fig.update_layout(
margin = {"l": 200, "r": 200}, shapes = [
{"x0": 0, "x1": 0.5, "y0": 0, "y1": 0.5},
{"x0": 0, "x1": 0.5, "y0": 0.55, "y1": 1},
{"x0": 0.55, "x1": 1, "y0": 0, "y1": 0.5},
{"x0": 0.55, "x1": 1, "y0": 0.55, "y1": 1}])
fig.show()
Источники
Обратите внимание на ссылки для px.(funnel) или https://plotly.com/python/reference/funnel/ и https://plotly.com/python/reference/funnelarea/ , чтобы получить больше информации о параметрах и атрибутах диаграммы.
А как насчет Dash?
Dash – открытый фреймворк для создания аналитических приложений, в нем не требуется JavaScript, и он тесно интегрирован с библиотекой построения диаграмм Plotly.
Узнайте, как установить Dash здесь.
Везде, где в этой статье вы видите fig.show()
, можно отобразить такой график в приложении Dash, передав его в аргумент figure
компонента Graph из пакета built-in dash_core_components
, следующим образом:
import plotly.graph_objects as go # or plotly.express as px
fig = go.Figure() # or any Plotly Express function e.g. px.bar(...)
# fig.add_trace( ... )
# fig.update_layout( ... )
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(figure=fig)
])
app.run_server(debug=True, use_reloader=False) # Turn off reloader if inside Jupyter
Материал подготовлен в рамках курса «Python для аналитики».
Всех желающих приглашаем на demo-занятие «SQL для работы с данными». SQL становится все более востребован для аналитиков, менеджеров и маркетологов, которые работают с данными. На открытом уроке мы разберем основные SQL запросы и на практике покажем, как их использовать для формирования выгрузок и витрин. >> РЕГИСТРАЦИЯ НА ЗАНЯТИЕ