Диаграмма воронки в Python

от автора

Введение

Диаграммы-воронки часто используются для представления данных на различных этапах бизнес-процесса. Они является важным механизмом бизнес-аналитики для выявления потенциальных проблемных областей процесса. Например, они используются для наблюдения за доходами и затратами в процессе продаж на каждом этапе и отображают значения, которые постепенно уменьшаются. Каждый этап отражает определенный процент от общего числа всех значений.

Базовая диаграмма воронки с 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 запросы и на практике покажем, как их использовать для формирования выгрузок и витрин. >> РЕГИСТРАЦИЯ НА ЗАНЯТИЕ


ссылка на оригинал статьи https://habr.com/ru/articles/588190/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *