使用Python对零售商品进行数据分析
一、主要内容:
1、清洗数据。将列名统一修改、处理缺失数据和异常数据、转换日期等数据类型
2、查看总体销售情况
3、商品维度进行分析。主要分析内容有:商品价格分析,商品销售量、销售额情况分析,商品关联分析
4、店铺维度进行分析。主要分析内容有:店铺销售量、销售额法分析,店铺促销情况分析,店铺销售时间分析,周均消费次数分析,客单价分析等
5、相关性分析:用关联关系表和相关矩阵图初步对变量之间的关系进行分析。
6、用户维度进行分析。主要分析内容有:分析用户基本购买情况,按时间(周)对用户购买情况进行分析,用户购买力分析,用户复购率分析,RFM区分用户。
二、使用工具
Python
三、数据来源
该数据集包含2018年6月1日-2018年7月5日的公司零售的交易信息。
四、字段含义
- SDATE(订单日期)
- STORE_CODE(商店编号)
- POSID(POS机编号)
- BASK_CODE(用户编号)
- PROD_CODE(商品编号)
- ITEM_QUANTITY(商品数量)
- ITEM_SPEND(商品实际价格)
- NORMAL_PRICE(商品单价)
- DISCOUNT_TYPE(折扣类型)
- DISCOUNT_AMOUNT(折扣金额)
五、数据清洗
1、查看总体数据特征
从图片中初步可以看出数据集可能存在的异常数据以及需要进行初步处理的地方有以下几点:
1)数据表中的SDATE字段需要将数据类型转换为日期型方便后续计算;
2)数据表中的ITEM_SPEND字段有负值,即商品实付金额为负,为异常数据;
3)数据表中的ITEM_QUANTITY字段有负值,即商品数量为负,为异常数据;
4)数据表中的DISCOUNT_AMOUTN字段数据有正值,即折扣后金额比折扣前金额高,为异常数据。
5)为方便阅读与查看,将列名统一改为符合驼峰命名法
2、修改列名
item.columns = ['shop_date','store_id','pos_id','user_id','prod_id','item_quantity','item_spend','normal_price','discount_type','discount_amount']
3、检验缺失数据
item.apply(lambda x: sum(x.isnull()) / len(x), axis=0)
4、查看并转换数据类型
(1)查看数据表类型
如图可发现数据中没有缺失数据,因此不需要进行缺失值处理
(2)转换数据类型
数据类型中的object表示如果一列中含有多个类型,则该列的类型会是object,同样字符串类型的列也会被当成object类型,因此object类型中SDATE数据类型应为日期类型,此外数值类型由于涉及零售的金钱问题,也应都调整为两位小数。
因此最终数据表数据类型需要调整的地方主要有以下几点:
- 1)调整日期数据类型
- 2)将金钱调整为两位小数
- 3)查看调整后数据类型
#日期数据类型 item.shop_date = pd.to_datetime(item.shop_date) #金钱保留两位小数 pd.set_option('display.float_format', lambda x: '%.2f' % x)#将所有数据转换为两位小数
(3)查看修改后数据表数据类型
5、查看异常值并删除
根据上一小节对数据的初步查看发现的问题进行操作,在上一小节中发现数据表中商品数量、订单总金额、商品实付金额均有负值,且折扣金额为正,折扣金额的计算可能受到金额为负的影响,此外,数据也可能存在空值。因此,异常值的删除主要有以下几个操作:
1)将商品数量、订单总金额、商品实付金额为负值的调整为正值;
2)新建销售总金额字段:销售总金额=单价*数量根据修改后的数据进行折扣金额的计算:折扣金额=销售总金额-实际付款金额(ITEM_SPEND),与实际折扣金额不同的可以判定为异常数据,进行删除操作;
3)删除过后分析是否还存在折扣金额为正的数据,若存在,也进行删除操作。
最后发现不存在折扣金额与实际折扣不同的数据,可以判定无异常值。
六、数据分析
1、总体销量数据
由总体销售情况分析可知,商店在2018年6月1日-2018年7月5日共有280878个用户进店购买过商品,总销售额为22216624.17元,有流水的商品数共19261个。
2、商品维度分析
(1)商品价格分析
由初步价格箱型图可知,客户比较青睐店铺内的低价商品,且由此图无法很明显的看出商品价格具体情况,因此下面将商品价格为0-50的价格提取出来进行分析
#求商品价格的四分位数 df_1 = pd.to_numeric(item_normal['normal_price']) q = [df_1.quantile(i) for i in [0,.25,.5,.75,1]];q[-1] += 1 q
[0.5, 3.6, 7.0, 13.8, 51.0]
由最后的箱型图可知,商品价格最多的在3.6元~13.8元之间,也符合消费者在零售商店购买的商品价格会比较低,店家可以根据消费者的消费情况对商品进行调整,多上架一些平价、常用的商品供消费者选择。
(2)查看销量排名前十和最后的商品
本小节分析了商品销售量前10和商品销售量最后的商品数量,此外将商品销售量前10的商品绘制柱状图进行分析。
由图表可知,前3销售量的商品很明显比后面商品销量多,差别至少为2000以上,而商品销量最后的商品在计算过程中发现有很多商品销量为1,将所有销量为1的商品提取出来,共有2673个,这2673个商品在这一段时间只销售了1个商品,可能为商品为不常用商品,也可能是商品本身有其他问题。
(3)查看销售额排名前十和后十的商品
本小节主要分析了商品销售额前10和商品销售量后10的商品,此外将商品销售量前10的商品绘制柱状图进行分析。由图表可知,前3销售量的商品很明显比后面商品销售额多,差别至少为50000以上,而商品销量最后的商品仅仅在1元左右,这些商品无论是数量还是销售额都很少,商品可能存在问题。
(4)查看销售量与销售额关系
由于商品销售量最后的销售量为1,数量共2673个,因此查看销售量最后2673个商品中同时销售额在后10的商品,发现销售额最后的商品均为销量为1的商品,本小节查看了销售额和销售量最后的商品编号,找出之后根据具体的商品,找出原因,考虑如何优化或者是否要下架。
(5)商品关联度分析
从以上的结果可以总结出:
从总体上看,所有组合商品中支持度数值偏低,这是由于平台销售的商品种类繁多,也可能是用户同时购买两个商品的可能性低,需要进一步进行分析;
商品组合[1570] --> [1557]的置信度最高,表示支持率在1%的情况下购买商品编号1570的用户中有70%会购买商品编号1557,可以对这两种商品进行捆绑销售;
3、店铺维度分析
进行店铺维度的分析可以分析各店铺销售情况,判断哪些店铺销售情况不好,考虑是否需要对店铺员工进行培训或裁员。
(1)店铺销售量情况分析
本小节分析了商品销售量前10的店铺,可以发现商品销售数量前2的店铺销售量远超过后面的店铺,超过150000个商品,说明D002和A001两个店铺商品数量销售情况很好。
本小节分析了商品销售额前10的店铺,进行图表分析,可以发现A001和D002两个店铺销售额远超其他店铺,至少超过了2000000元,根据上小节分析,这两个店铺销售量与销售额均远超其他店铺,说明两个店铺销售情况良好。
(2)店铺促销情况分析
4、销售情况分析
(1)下单时间分析
(2)销售额分析
由于数据表中时间仅有日期,没有具体的销售时间,且数据量由2018年6月1日-2018年7月5日,仅有约一个月的时间,因此分析月销售量没有很大的意义,因此首先对每周周一至周日的销售情况进行分组计算,求出一周内不同天的销售情况,分析每周哪一天销售情况最好。
由图表可以看出,周一至周五的下单量在一条线上下波动,没有很大的起伏,周六和周日两天的下单量远远高于周一至周五的下单量,高出了至少50000单,销售额也是同样的趋势,超出了至少400000元,可以看出一般周末用户的下单量与交易额会远远高于工作日的下单情况,商家可以考虑在周末多上一些商品供用户选择。
(3)每日销售额/销售量分析
本小节分组计算了日销售额与日销售量的数据,并绘制了折线图进行趋势对比分析,由图中可知,销售量与销售额的趋势几乎相同,且均在2018年6月16日达到最高,。
(4)周均消费次数/金额
总订单数 280878 次
周数 6 周
周均消费次数 46813 次
周均消费金额为: 3702770.0 元
(5)客单价
商场(超市)每一个顾客平均购买商品的金额,客单价也即是平均交易金额。
客单价为: 79.0 元
由于数据表中数据量由2018年6月1日-2018年7月5日,仅有约一个月的时间,因此分析月销售量没有很大的意义,因此首先对每周周一至周日的销售情况进行分组计算,求出不同周的大致销售情况,最终结果可知总订单数为280878次,共有6周的数据,周均消费次数为46813次
5、相关性分析
查看数据相关性
我们可以查看数据的相关性,值越接近1,说明相关性越强。也可以把相关性信息进行可视化,颜色越接近黄色相关性越高,越接近紫色相关性越低。由相关性图可知,商品销售总额与商品数量、折扣金额和商品销售总额相关性相对强,周数和销售额相关性最弱
6、用户分析
(1)用户角度分析
从用户角度看,每位用户平均购买8.83单位的商品,最多的用户购买了6581个商品,属于狂热用户。用户的平均消费金额(客单价)79.1元,标准差是291.24,结合分位数和最大值看,平均值和50~75分位之间的接近,肯定存在小部分的高额消费用户。
(2)按周维度分析
按周统计每周的商品销量和销售额。从图中可以看到,销售量和销售额趋势相同,没有什么异常的地方,前几周销量比较平稳,甚至有些下降,而后面几周销量逐渐高涨,可能是商店逐渐被用户所认可。
(3)观察用户消费购买力
左边的直方图的x轴代表item_spend的分组,一共30组。y轴代表item_spend中对应到各个分组的频数。从直方图看,大部分用户的消费能力确实不高,高消费用户在图上几乎看不到。这也确实符合消费行为的行业规律。
(4)分析用户的复购率
复购率 = 单位时间内,消费两次及以上的用户数 / 购买总用户数
图上复购率可知复购率一直在62%以上,可能因为是零售商店,用户会经常购买商品,尤其到最后几周复购率更高,可能因为用户已经开始信任店铺
(5)用户RFM分析
通过RFM方法,我们根据用户购买商品的数据进行分析,对用户进行了归类。在促销等很多过程中,可以更加精准化,针对不同类别的用户进行不同的符合其特点的促销方式和销售方式,不至于出现用户反感的情景。
上一篇:经验丰富程序员才知道的15种高级Python小技巧(收藏)
栏 目:Python代码
下一篇:Python中time与datetime模块使用方法详解
本文标题:使用Python对零售商品进行数据分析
本文地址:http://www.codeinn.net/misctech/210303.html