数据分析实战——利润下滑诊断

背景

某个食品商家2018年到8月为止的利润同比下滑了许多,请你利用所学知识找出利润下滑的原因。

加载商品销售明细表(事实表)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'].insert(0, 'SimHei')
plt.rcParams['axes.unicode_minus'] = False

%config InlineBackend.figure_format = 'svg'

# 加载事实表
sales_df = pd.read_excel('profits/商品销售明细表.xlsx')
#查看该表的基本信息
sales_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 40514 entries, 0 to 40513
Data columns (total 7 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   日期(年月日)  40514 non-null  object 
 1   门店编码     40514 non-null  object 
 2   单据编码     40514 non-null  object 
 3   商品编码     40514 non-null  object 
 4   成本额      40514 non-null  float64
 5   数量       40514 non-null  int64  
 6   销售额      40514 non-null  float64
dtypes: float64(2), int64(1), object(4)
memory usage: 2.2+ MB

从该结果可以看出商品销售明细表中共有40514行数据,7个字段。其中日期(年月日) 、  门店编码 、  单据编码 、  商品编码4个字段是object类型,成本额和销售字段为float类型,数量字段为int类型。大家从中发现什么问题了吗?

没错日期(年月日)字段应该为datetime类型,而在这里却是object类型,那么我们接下来要将日期(年月日)字段类型转换成datetime类型。

数据预处理
# 数据预处理
#新增一列datetime类型的‘日期列’
sales_df['日期'] = pd.to_datetime(sales_df['日期(年月日)'])
#删除原有的日期(年月日)列
sales_df.drop(columns='日期(年月日)', inplace=True)
sales_df

 

既然我们要找出利润下滑的原因,那么应该先算出毛利润(为什么是毛利润呢,在这里我不过多赘述,感兴趣的自行查找)。

毛利润 = 销售额 - 成本额

这里我添加了一列‘月份’列方便后续处理,使用的是pandas库高级接口dt使用方法,我的文章中有相关使用说明,感兴趣的可以去看看。

# 添加“毛利润”和“月份”列
sales_df['毛利润'] = sales_df.销售额 - sales_df.成本额
sales_df['月份'] = sales_df.日期.dt.month
sales_df

接下来我们看看是那个月的毛利润下滑的严重,将表中毛利润和销售额按月份统计出来,我这里用到的是透视表pivot_table,将月份作为索引对销售额和毛利润进行求和。

# 统计每月的销售额和毛利润
temp_df = sales_df.pivot_table(
    index='月份',
    values=['销售额', '毛利润'],
    aggfunc='sum'
)
temp_df

 现在我们把每个月的毛利润和销售额求出来了,但是这样不方便我们观察,所以我们画一个折线图就能很好的看出到底是哪个月的问题了。

# 绘制折线图
temp_df.plot(kind='line', figsize=(8, 4))
plt.ylim(0, 14000000)
plt.show()

 现在我们可以看到,销售额和毛利润整体呈一个上升趋势,但是在7月份的时候销售额明明上升的很快,但是毛利润却是在下降,这到底是怎么回事呢?我们这里推断应该是成本控制处了问题,但是仅仅靠现有的数据还不足以找出具体原因,所有我们需要将商品销售明细表、门店信息维度表和商品信息温度表连接起来。

加载商品维度表

# 加载商品维度表
products_df = pd.read_excel('profits/商品信息维度表.xlsx')
products_df

 加载门店维度表

# 加载门店维度表
stores_df = pd.read_excel('profits/门店信息维度表.xlsx')
stores_df

连接事实表和维度表

# 将事实表和维度表连接起来(通过不同的维度去拆解数据)
df = pd.merge(pd.merge(sales_df, products_df, how='inner', on='商品编码'), stores_df, how='inner', on='门店编码')
df
数据分析

上面我们已经看到了利润下滑,那么现在我们要到哪个省、哪个城市、哪个门店、哪个商品类别、哪个商品的成本控制出现了问题。

按省份将销售额和成本额用聚合函数agg()进行求和,并用nlargest()函数选出成本额最大的10个省份。

# 找到哪个省的成本控制出现了问题
temp_df = df.groupby('省份')[['销售额', '成本额']].agg({
    '销售额': 'sum',
    '成本额': 'sum',
}).nlargest(10, '成本额')
temp_df

 

随后求出各个省份的毛利润率

毛利润率 = (销售额 - 成本额)/ 销售额

((temp_df.销售额 - temp_df.成本额) / temp_df.销售额).sort_values()

 

现在我们可以看到湖南省的毛利润率低于其它省份,所以我们大胆猜测是湖南省的成本控制出了问题,接下来我们便向湖南省下手看看是哪个城市的成本控制出现了问题,还是同样的套路……

我们利用query()函数筛选出湖南省,然后按湖南省的城市对销售额和成本额进行求和,对成本额进行升序处理。

# 找到哪个城市的成本控制出现了问题
temp_df = df.query('省份 == "湖南省"').groupby('城市')[['销售额', '成本额']].sum().sort_values('成本额', ascending=False)
temp_df

 

 求出各个城市的毛利润率

((temp_df.销售额 - temp_df.成本额) / temp_df.销售额).sort_values()

 

现在我们看到长沙市的毛利润率远低于其它城市,那么它的成本控制一定是有问题的,接下来我们继续深究是哪个门店成本控制出了问题。

# 找到哪个门店的成本控制出现了问题
temp_df = df.query(
    '省份 == "湖南省" and 城市 == "长沙市"'
).groupby('门店名称')[['销售额', '成本额']].sum().sort_values('成本额', ascending=False)
temp_df

 

接下来便是重复操作,这里我就不再文字赘述了。

((temp_df.销售额 - temp_df.成本额) / temp_df.销售额).sort_values()

 

# 找到哪个商品品类的成本控制出现了问题
temp_df = df.query(
    '门店名称 == "长沙梅溪湖店"'
).groupby('商品类别')[['销售额', '成本额']].sum().sort_values('成本额', ascending=False)
temp_df

 

((temp_df.销售额 - temp_df.成本额) / temp_df.销售额).sort_values()

 

# 找到哪个商品的成本控制出现了问题
temp_df = df.query(
    '门店名称 == "长沙梅溪湖店" and 商品类别 == "零食"'
).groupby('商品名称')[['销售额', '成本额']].sum().sort_values('成本额', ascending=False)
temp_df

 

((temp_df.销售额 - temp_df.成本额) / temp_df.销售额).sort_values()

 

至此我们得到是湖南省长沙市长沙梅溪湖店中零食品类中的德芙巧克力的成本控制出现了问题,现在我们找出了利润下滑的原因,接下来解决问题就需要去对应门店去了解详情了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在过去的两个月里,Databricks公司举办了一场会议,将数据团队聚集在一起,共召开220多个会议,有无数机会与同行交流——超过50,000名数据科学家、数据工程师、分析师、商业领袖和其他数据专业人士。 Spark + AI 峰会虚拟环境。 引用\[2\]:本书以数据智能为灵魂,以Spark 2.4.X版本为载体,以Spark+ AI商业案例实战和生产环境下几乎所有类型的性能调优为核心,对企业生产环境下的Spark+AI商业案例与性能调优抽丝剥茧地进行剖析。全书共分4篇,内核解密篇基于Spark源码,从一个实战案例入手,循序渐进地全面解析Spark 2.4.X版本的新特性及Spark内核源码;商业案例篇选取Spark开发中最具代表性的经典学习案例,在案例中综合介绍Spark的大数据技术;性能调优篇覆盖Spark在生产环境下的所有调优技术; Spark+ AI内幕解密篇讲解深度学习动手实践,通过整合Spark、PyTorch以及TensorFlow揭秘Spark上的深度学习内幕。本书适合所有大数据和人工智能学习者及从业人员使用。对于有丰富大数据和AI应用经验的人员,本书也可以作为大数据和AI高手修炼的参考用书。同时,本书也特别适合作为高等院校的大数据和人工智能教材。 问题:spark数据分析实战——奥运会 回答: Spark是一个强大的大数据处理框架,可以用于数据分析和处理。在奥运会数据分析实战中,Spark可以帮助我们处理大规模的奥运会数据,进行数据清洗、转换和分析。通过使用Spark的分布式计算能力和优化技术,我们可以高效地处理大量的奥运会数据,并从中提取有价值的信息。同时,Spark还提供了丰富的数据处理和机器学习库,可以帮助我们进行数据挖掘和建模,以便更好地理解和预测奥运会的趋势和结果。通过结合Spark和AI技术,我们可以实现更深入的奥运会数据分析,并为奥运会的组织者、运动员和观众提供更好的决策支持和用户体验。 #### 引用[.reference_title] - *1* *2* [免费参加全球最大的Spark+AI峰会(Databricks 2020年6月22-26日)!免费访问峰会主题演讲及分组会议!](https://blog.csdn.net/duan_zhihua/article/details/106729096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [热烈祝贺王家林大咖大数据经典传奇著作《Spark大数据商业实战三部曲》 畅销书籍第二版 清华大学出版社发行...](https://blog.csdn.net/duan_zhihua/article/details/106294896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值