excel学习库

excel表格_excel函数公式大全_execl从入门到精通

BI实战系列之帕累托分析(ParetoAnalysis)

帕累托分析BI实战

在企业精细化运营中,帕累托分析被视为七大基本质量控制工具之一,因可轻松查看最常见的问题,能区分出“极其渺小的大多数”和“至关重要的极少数”,且是优化和改进的有效检测工具。

帕累托分析又称ABC分析法、柏拉图分析、主次因分析法等,通常按照70%、20%、10% 将商品分为ABC3个类别,再根据不同类别商品的贡献度,采用与之相对应的营销方案,推动销量,提升效益。

A类商品,占总销售额的70%,是主要关注。

B类商品,占总销售额的20%,是次要关注。

C类商品,占总销售额的10%,是一般关注。

帕累托原则表明80%的问题都是由众多原因中的20%主要原因引起的。帕累托分析帮助团队分清主次。

00:32

一、ExcelBI篇:

本次实战案例,将根据产品的销售额和订单量做帕累托分析。

产品子类别 按销售额

1.导入数据(订单表、产品表、日期表、ABC表)

2.制作帕累托分析图,需要求出各个产品的销售额,在根据销售额从大到小排序后,求出累计销售额,最后根据累计销售额求出累计百分比。下面开始实操步骤:

在产品表,新增列销售额

销售额 = CALCULATE(SUM('订单数据'[销售额]))

累计销售额 = SUMX(FILTER('产品分析','产品分析'[销售额] >= EARLIER('产品分析'[销售额])), '产品分析'[销售额])

累计百分比 = DIVIDE('产品分析'[累计销售额],SUM('产品分析'[销售额]))

ABC分类 = IF('产品分析'[累计百分比]<=0.7,"A",IF('产品分析'[累计百分比]<=0.9,"B","C"))

3. 产品子类别 按销售额帕累托分析,所需要准备数据已经整理完毕,在Excel里面还是通过透视表来实现可视化所需各个模块。

4.最终效果

产品子类别 按订单量

在订单数据表中新增列

订单量 =CALCULAT(SUM('订单数据'[数量]))

累计订单量 = SUMX(FILTER('产品分析','产品分析'[订单量] >= EARLIER('产品分析'[订单量])), '产品分析'[订单量])

累计百分比2 = DIVIDE('产品分析'[累计订单量],SUM('产品分析'[订单量]))

ABC分类2 = IF('产品分析'[累计百分比2]<=0.7,"A",IF('产品分析'[累计百分比2]<=0.9,"B","C"))

最终效果

二、PowerBI篇:

与Excel相比,PowerBI更加灵活、便捷,本次案例实战将从PowerBI软件本身功能的优越性来实现。

1.导入数据(订单表、产品表、日期表)

2.根据帕累托分析需求,分别求出销售额、订单量

销售额 = SUM('订单'[销售额] )

订单量 = SUM('订单'[数量])

3.ABC表 :

ABC =

VAR vItems = DISTINCT( '产品'[子类别] )

RETURN

SELECTCOLUMNS(

vItems ,

"名称" , [子类别]

)

4.求出当前产品子类别的销售额、销售额累计占比和

ABC.销售额 =

VAR vRelation =

TREATAS( { SELECTEDVALUE( 'ABC'[名称] ) } ,'产品'[子类别] )

RETURN

CALCULATE( [销售额] , vRelation )

ABC.销售额积累占比% =

VAR vCurrentValue = [ABC.销售额]

VAR vTable =

CALCULATETABLE(

ADDCOLUMNS( VALUES( 'ABC'[名称] ) , "@Value" , [ABC.销售额] ) ,

ALLSELECTED( )

)

RETURN

DIVIDE(

SUMX( FILTER( vTable , [@Value] >= vCurrentValue ) , [@Value] ) ,SUMX( vTable , [@Value] ) )

5.当前产品子类别的订单量、订单量累计占比

ABC.订单量 =

VAR vRelation =

TREATAS( { SELECTEDVALUE( 'ABC'[名称] ) } ,'产品'[子类别] )

RETURN

CALCULATE( [订单量] , vRelation )

ABC.销售额积累占比% =

VAR vCurrentValue = [ABC. 订单量]

VAR vTable =

CALCULATETABLE(

ADDCOLUMNS( VALUES( 'ABC'[名称] ) , "@Value" , [ABC.订单量] ) ,

ALLSELECTED( )

)

RETURN

DIVIDE(

SUMX( FILTER( vTable , [@Value] >= vCurrentValue ) , [@Value] ) ,SUMX( vTable , [@Value] ) )

6.效果图

三、Python BI篇:

  1. 导入数据(导入本次实战案例所用到的第三方库):

import pandas as pd

df1 = pd.read_excel('D:/大叔学BI/Demo DataSource.xlsx', '订单数据')

df2 = pd.read_excel('D:/大叔学BI/Demo DataSource.xlsx', '产品数据')

查看数据结构

2.合并产品数据和订单数据表:

df3 = pd.merge(df1, df2, left_on='产品ID', right_on='产品ID', how='left')

3.根据df3求出产品子类别的销售额:

plt_df = pd.DataFrame(df3.groupby('子类别')['销售额'].sum())

plt_df = plt_df.rename_axis('产品子类别').reset_index()

4.将目标数据导入为series元组

data = pd.Series(plt_df['销售额'].values, index=plt_df['产品子类别'])

5.对数组进行降序排列

data.sort_values(ascending=False, inplace=True)

df = data.to_frame()

df.columns = ['销售额']

df['销售额'] = df['销售额'].astype(int)

6.求出累计百分比

p = data.cumsum() / data.sum()

df['累计百分比'] = p.to_frame()

df = df.rename_axis('产品子类别').reset_index()

df['累计百分比'] = df['累计百分比'].round(2)

7.据df3求出产品子类别的销售量:

plt_df1 = pd.DataFrame(df3.groupby('子类别')['数量'].sum())

plt_df1 = plt_df1.rename_axis('产品子类别').reset_index()

8.将目标数据导入为series元组

data1 = pd.Series(plt_df1['数量'].values, index=plt_df['产品子类别'])

9.对数组进行降序排列

data1.sort_values(ascending=False, inplace=True)

df6 = data1.to_frame()

df6.columns = ['订单量']

10.求出累计百分比,并保留两位小数

p1 = data1.cumsum() / data1.sum()

df6['累计百分比'] = p1.to_frame()

df6 = df6.rename_axis('产品子类别').reset_index()

df6['累计百分比'] = df6['累计百分比'].round(2)

11.制作帕累托图所需数据已经准备好了,开始导入制图用到的第三方库

from pyecharts import options as opts

from pyecharts.charts import Bar, Line, Page, Pie

from pyecharts.commons.utils import JsCode

柱形图:

bar = (

Bar(

init_opts=opts.InitOpts(width="1500px", height="350px")

) # 设置图表大小

.add_xaxis(df['产品子类别'].tolist()) # 设置柱形图的X轴

.add_yaxis(

series_name="销售额", # Y轴系列名称

y_axis=df['销售额'].tolist(),

label_opts=opts.LabelOpts(is_show=True, position='top', formatter="{c}"), # 数字标签显示方式

itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color1_function), opacity=0.5) # 柱形图颜色

)

.extend_axis( # 设置次坐标轴

yaxis=opts.AxisOpts(

name="",

type_="value",

min_=0,

max_=1,

is_show=True)

)

.set_global_opts(

title_opts=opts.TitleOpts(

title="产品子类别 按 销售额帕累托分析", # 主标题

title_textstyle_opts=opts.TextStyleOpts(color="#FFFFFF"),

subtitle="", # 副标题

pos_left='1%', # 位置

pos_right='1%'

),

tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 鼠标交叉十字显示

legend_opts=opts.LegendOpts(is_show=False, pos_top="4%"), # 图例

xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=25)), # X轴文字旋转

yaxis_opts=opts.AxisOpts( # 显示Y轴网格

type_="value",

axislabel_opts=opts.LabelOpts(color="#FFFFFF"),

axistick_opts=opts.AxisTickOpts(is_show=True), # 坐标轴上的刻度是否显示

axisline_opts=opts.AxisLineOpts(is_show=False), # Y轴线不显示

splitline_opts=opts.SplitLineOpts(is_show=False) # Y轴网格是否显示

)

)

)

折线图:

line = (

Line(

init_opts=opts.InitOpts(width="1500px", height="350px") # 设置图表大小

)

.add_xaxis(df['产品子类别'].tolist()) # 设置线形图的X轴)

.add_yaxis(

"",

df['累计百分比'], # 系列数据

symbol_size=10, # 标识大小

yaxis_index=1, # 主坐标轴还是次坐标轴

markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定义标记点",

coord=[df.index[5], # 数据坐标

df['累计百分比'][5]],

value=df['累计百分比'][5])]), # 数据值

linestyle_opts=opts.LineStyleOpts(width=3, color='#28527a'), # 线宽度

itemstyle_opts=opts.ItemStyleOpts(border_width=3, border_color='#28527a', color='#28527a') # 标记的颜色和宽度

) # 标记重点

# .set_global_opts(

# yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} %")))

.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) # 是否显示数据标签

)

图形组合:

bar.overlap(line)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接