簡體   English   中英

plot 在 python 中使用 plotly 的漏斗圖

[英]plot a funnel chart with percentage difference using plotly in python

我原來的 dataframe 看起來與下面的類似:

| Sales_entity | country | id |
|--------------|---------|----|
| sales B      | US      | 1  |
| sales C      | US      | 1  |
| sales C      | US      | 15 |
| sales B      | US      | 20 |
| sales D      | US      | 21 |
| sales C      | US      | 2  |
| sales D      | US      | 2  |
| sales D      | US      | 12 |
| sales D      | US      | 50 |
| sales A      | US      | 25 |
| sales A      | Canada  | 3  |
| sales A      | Canada  | 3  |
| sales A      | Canada  | 9  |
| sales A      | Canada  | 11 |
| sales C      | Canada  | 4  |
| sales C      | Canada  | 4  |
| sales B      | Canada  | 5  |
| sales D      | Canada  | 5  |
| sales B      | Canada  | 6  |
| sales B      | Canada  | 6  |
| sales B      | Canada  | 8  |
| sales C      | Canada  | 7  |
| sales A      | Canada  | 14 |

這是輸入 dataframe:

df= pd.DataFrame({'id' : [1]*2+[15]+[20]+[21] +[2]*2+[12]+[50]+[25] + [3]*2+[9]+[11] + [4]*2 +[5]*2+[6]*2+[8]*1+[7]+[14], 
                 'Sales Entity' : ['sales B','sales C','sales C','sales B','sales D','sales C','sales D','sales D','sales D',
                                   'sales A','sales A','sales A','sales A','sales A','sales C','sales C','sales B','sales D',
                                  'sales B','sales B','sales B','sales C','sales A'],
                'country' : ['US']*10 + ['Canada']*13})

我想按國家和 sales_entity 分組,並對 id 進行不同的計數。 為此,我使用了以下代碼: df1= df.groupby(['country','Sales Entity'])['id'].nunique().reset_index(name='count') My output from this代碼如下所示:

| country | sales_entity | id |
|---------|--------------|----|
| Canada  | sales A      | 4  |
| Canada  | sales B      | 3  |
| Canada  | sales C      | 2  |
| Canada  | sales D      | 1  |
| US      | sales A      | 1  |
| US      | sales B      | 2  |
| US      | sales C      | 3  |
| US      | sales D      | 4  |

從這個 output,我想分別為加拿大和美國生成一個漏斗圖,以便漏斗顯示每個銷售實體的價值以及百分比增長/下降。 例如,如果我們查看加拿大,漏斗應該以“銷售額 A”開頭,值為 4,百分比總計為 100%。 當我們沿着漏斗向下移動到“銷售 B”時,它應該顯示值 3 和百分比變化等等。 同樣,對於美國,漏斗應該以“銷售 D”開頭,然后是“銷售 C”、“銷售 B”和“銷售 A”,顯示它們的價值和百分比變化。 在這種情況下,如何在 Python 中使用 plotly 創建漏斗圖,而無需手動輸入表中的值?

您可以從此處參考https://plotly.com/python/funnel-charts/ 對於 Showing % change 您可以修改 textinfo 並從percent initialpercent previouspercent totalvalue中選擇任何內容。 textinfo Docs

如果您需要一些其他列,您可以將其添加到數據中並使用texttemplate 示例顯示在 plot 中

import plotly.graph_objects as go
from plotly.subplots import make_subplots

df= pd.DataFrame({'id' : [1]*2+[15]+[20]+[21] +[2]*2+[12]+[50]+[25] + [3]*2+[9]+[11] + [4]*2 +[5]*2+[6]*2+[8]*1+[7]+[14], 
                 'Sales Entity' : ['sales B','sales C','sales C','sales B','sales D','sales C','sales D','sales D','sales D',
                                   'sales A','sales A','sales A','sales A','sales A','sales C','sales C','sales B','sales D',
                                  'sales B','sales B','sales B','sales C','sales A'],
                'country' : ['US']*10 + ['Canada']*13})

df1= df.groupby(['country','Sales Entity'])['id'].nunique().reset_index(name='count')

USDF = df1[df1['country'] == 'US'].sort_values(['count'], ascending=[False])
CNDF = df1[df1['country'] == 'Canada'].sort_values(['count'], ascending=[False])

fig = make_subplots(rows=1, cols=2,subplot_titles=("US Funnel","Canada Funnel"))


fig.add_trace(
    go.Funnel(
    y = USDF['Sales Entity'],
    x = USDF['count'],
    textposition = "inside",
    textinfo = "value+percent previous",
    marker = {"color": "#1c1847"}
),
    row=1, col=1
)

fig.add_trace(
    go.Funnel(
    y = CNDF['Sales Entity'],
    x = CNDF['count'],
    textposition = "inside",
    textinfo = "value+percent previous",
        marker = {"color": "#ff0000"}
),
    row=1, col=2
)

fig.update_layout(showlegend=False,height=600, width=1000)
fig.show()

Output

輸出

我試了一下,參考官方參考。 我做了一個圖表比較了兩個國家在同一階段。 被@venky同時回答了,但我敢回答,因為措辭不同。 感謝有機會學習這個。 從 plotly 導入 graph_objects 作為 go

canada_number = df1.loc[df1['country'] == 'Canada','count']
canada_stage = df1.loc[df1['country'] == 'Canada','Sales Entity']

us_number = df1.loc[df1['country'] == 'US','count']
us_stage = df1.loc[df1['country'] == 'US','Sales Entity']

fig = go.Figure()

fig.add_trace(go.Funnel(
    name = 'Canada',
    y = canada_stage,
    x = canada_number,
    textinfo = "value+percent initial"))

fig.add_trace(go.Funnel(
    name = 'US',
    orientation = "h",
    y = us_stage,
    x = us_number,
    textposition = "inside",
    textinfo = "value+percent previous"))

fig.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM