Python电商数据分析实战案例
导读: 今天给大家带来一个电商数据分析案例。我整理了下,以笔记的形式分享给到大家。案例背景大致是某电商连续几年的总体销售额都在上涨,但近年增速放缓,需要寻求有效的增涨点,以提升市场竞争力。因为篇幅较长,因此本次案例分析共分为上下两篇。文章较长,建议收藏~
电商分析基础知识
在正式开始之前,云朵君为大家准备了一些常见的基础的电商分析基础知识,对于数据分析小白较为友好,电商分析大佬可酌情查看,若有写得不好的地方,还望大佬纠正,共同进步!
此处参考自知乎:电商数据分析指标[1]
电商分析指标
一、 流量指标
浏览量(PV):用户访问页面的总数。
访客数(UV):独立访客。一台电脑为一个独立访问人数。可分为新访用户和回访用户。
当前在线人数:指15分钟内在线的UV数。
平均在线时间:指平均每个UV访问网页停留的时间长度。停留时间 = 访客打开网站第一个页面的时间点 – 打开网站最后一个页面的时间点。
平均访问量:用户每次浏览的平均页面值。
日均流量:平均每天的流量。
跳出率:只浏览了一个页面就离开的访问次数除以该页面的全部访问次数。分为:首页跳出率、关键页面跳出率、具体产品页面跳出率等。这个指标可以反映出一个页面内容的受欢迎程度。如果跳出率高,说明该页面需要调整和优化。跳出率高不可怕,可怕的是不知道用户跳出的原因。
二、转化指标
有了流量之后,我们希望用户按照设计好的要求进行动作,比如希望用户注册、收藏、下单、付款、参加我们的营销活动等等。这些动作就是转化。
转化率:指进行了相关动作的访问量占总访问量的比例。转化率是电商营运的核心指标,也是用来判断营销效果的指标。
注册转化率:注册用户数/新访用户数。
客服转化率:咨询客服人员的用户数/总访问数。
收藏转化率:即将产品添加到收藏或关注的用户数/该产品的总访问数。
添加转化率:将产品添加到购物车的用户数/该产品的总访问数。
成交转化率:成交用户数/总访问数。成交转化率又可细分为渠道转化率、事件转化率、品牌转化率等。
三、营运指标
成交指标:成交金额、成交数量、成交用户数
订单指标:订单金额、订单数量、订单用户数、有效订单、无效订单
退货指标:退货金额、退货数量、退货用户数、金额退货率、数量退货率、订单退货率
效率指标:客单价、件单价、连带率、动销率
采购指标:采购金额、采购数量
库存指标:库存金额、库存数量、库存天数、库存周转率、售罄率
供应链指标:送货金额、送货数量、订单满足率、订单响应时长、平均送货时间
四、会员指标
传统零售业和电商的会员概念上有一些不同。传统零售业中,用户需要消费到一定的金额数目才有资格成为会员,所以传统零售的会员一定是顾客。而电商中,一般用户只要注册成功便成为会员。二是时效性的差异,大部分传统零售的会员管理有失效的规定,即如果会员不能在一定期限内消费达到某一金额就将会失去会员的资格。而电商中的会员则没有这种限制,只是对不同消费金额的用户设定了不同的等级。
注册会员数:指曾经在网站上注册过的会员总数。一般来说这个定义没有太大的意义,因为存在有只注册不买的用户和买过东西但已经长时间不使用的用户,所以把这个指标定义为一年中有购买记录的会员更准确。
活跃会员数: 指在一段时期内有过消费或登录行为的会员总数。
活跃会员比率: 活跃会员数占总会员数的比例。
会员复购率: 指在某时期内产生了第二次或以上购买会员数占总购买会员的总数。
平局购买次数: 某时期内每个会员平均购买的次数。
会员回购率: 指上一期末活跃会员在下一期时间内有购买行为的会员比率。
会员留存率: 某时间节点的会员在某特定时间周期内登录或消费过的会员比率。电商一般使用消费数据,游戏、社交领域则使用登录数据。
五、财务指标
新客成本:公司花了100万获得了10000个新客户,则新客成本为100元/人。新客成本一般根据渠道计算,这样也可以区分不同的渠道质量。
单人成本: 营销成本/访客数。这里的访客不区分是否是新访客、是否购买、是否注册等。
单笔订单成本: 营销成本/产生的订单数
费销比: 营销成本/订单金额。它的倒数就是ROI。
核心指标是什么
对于不同行业、不同性质、不同阶段的公司来说,关注的指标也是不一样的,所以所谓核心指标也并非一成不变的。
对于一个新电商来说,积累数据,找准营运方向是最重要的,所以这一阶段最关注的的指标就是流量指标,包括了:访客数、访客来源、注册用户数、浏览量、浏览深度、产品的浏览量排行、产品的跳出率、顾客评价指数等等。
对于已经营运了一段时间的电商来说,通过数据分析提高销量就成为最重要的目标。这个阶段最关注的的指标主要包括流量和销售指标:访客数、浏览量、转化率、新增会员数、会员流失率、客单价、动销率、库存天数、ROI、销售额等。
对于具有了一定规模的电商来说,利用数据提升整体营运水平就很关键。他们的重点指标就是访客数、浏览量、转化率、复购率、流失率、留存率、客单价、利润率、ROI、新客成本、库存天数、订单满足率、销售额等。
电商案例分析
接下来进入我们今天案例分析的主题。
总体思路
1、了解行业与公司现状
行业现状与趋势,如涉及哪些业务 公司在市场中地位
2、沟通明确需求
头脑风暴,挖掘需求或瓶颈 多次沟通,最有价值的分析
3、最后用数据进行验证
导入相关模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
sns.set()
pd.set_option('float_format', lambda x: '%.2f' % x)
#显示中文
plt.rcParams['font.family'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus']=False
宏观市场分析
产品生命周期(product life cycle),简称PLC,是产品的市场寿命,即一种新产品从开始进入市场到被市场淘汰的整个过程。
费农认为:产品生命是指市上的的营销生命,产品和人的生命一样,要经历形成、成长、成熟、衰退这样的周期。就产品而言,也就是要经历一个起步、成长、成熟、衰退的阶段。
1、起步期
企业规模可能很小,关于该行业的企业如何发展有不同看法,产品类型、特点、性能和目标市场不断发展变化。市场中充满各种新发明的产品或服务,管理层采取战略支持产品上市。产品设计尚未成熟,行业产品的开发相对缓慢,利润率较低,市场增长率较高。
策略:跟踪对手、参与或观望。
2、成长期
该行业已经形成并快速发展,大多数企业因高增长率而在行业中继续存在。管理层需确保充分扩大产量达到目标市场份额。需大量资金达到高增长率和扩产计划,现金短缺。利用专利或者降低成本来设置进入壁垒(内在规模经济),阻止竞争者进入行业。
策略:增加投入、增加市场占有率、阻止新进入者。
3、成熟期
增长率降到较正常水平,相对稳定,各年销售量变动和利润增长幅度较小,竞争更激烈。后期一些企业因投资回报率不满意而退出行业,一小部分企业主导行业,需监控潜在兼并机会(啤酒行业)、探索新市场(中国拖拉机出口)、研发新技术、开发具有不同特色功能的新产品。战略管理至关重要
策略:提高效率、成本控制、进入和控制市场细分。兼并扩张,研发新品。
4、衰退期
行业生产力过剩,技术被模仿后出现的替代品充斥市场,市场增长率严重下降,产品品种减少,行业活动水平随各公司从该行业退出而下降,该行业可能不复存在或被并入另一行业。行业的存在期比任何单一产品都要长。充分运用战略管理很重要
策略:及时退出。
数据准备
本次案例数据量较多,下面按照分类通过思维导图的方式将其展示出来。
一级市场容量分析
数据读取
wxtz=pd.read_excel('./baier/电商案例数据/驱虫剂市场/电蚊香套装市场近三年交易额.xlsx')
ff=pd.read_excel('./baier/电商案例数据/驱虫剂市场/防霉防蛀片市场近三年交易额.xlsx')
mssc=pd.read_excel('./baier/电商案例数据/驱虫剂市场/灭鼠杀虫剂市场近三年交易额.xlsx')
wx=pd.read_excel('./baier/电商案例数据/驱虫剂市场/盘香灭蟑香蚊香盘市场近三年交易额.xlsx')
jrp=pd.read_excel('./baier/电商案例数据/驱虫剂市场/蚊香加热器市场近三年交易额.xlsx')
wxp=pd.read_excel('./baier/电商案例数据/驱虫剂市场/蚊香片市场近三年交易额.xlsx')
wxy=pd.read_excel('./baier/电商案例数据/驱虫剂市场/蚊香液市场近三年交易额.xlsx')
横向合并
将二级市场到交易额按照月份汇总到一起,形成一级市场到交易数据,用来分析整个一级市场(宏观市场)到市场容量走势
table = wxy
for i in [wxp,wxtz,ff,mssc,wx,jrp]:
table = pd.merge(table,i,how='inner',on='时间')
table.columns=['时间','电蚊香套装','防霉防蛀片','灭鼠杀虫剂','盘香灭蟑香蚊香盘','蚊香加热器','蚊香片','蚊香液']
table.head()
查看一级市场趋势
一般后续分析要按照时间维度进行各种汇总分析,最好把时间字段设置为该表的索引。
table.set_index('时间',inplace=True)
table['一级市场销售总额']=table.sum(axis=1)
table.head()
# table.一级市场销售总额.plot()
以时间索引为横轴,一级市场销售总额为纵轴,绘制折线图,查看一级市场销售趋势。由图中可以看出,销售总额趋势是周期性增长的。
回归算法预测销售额
这里有两点需要注意:
一般作宏观市场容量分析,一般要求5年。 发现年度数据不规整,2018年11月、12月缺失,2015年只有11月、12月。 接下来用回归分别对18年11月、12月数据做出简单的预测。
先预测18年11月的销售额,提取2015-2017年11月的销售额。
table_02 = pd.concat([table['2015-11'],table['2016-11'],table['2017-11']],axis=0)
table_02
对二级市场作回归分析(上表每个字段作一次)。
from sklearn.linear_model import LinearRegression
y_11 = []
x_train=np.array([2015,2016,2017]).reshape(-1,1)
for i in table_02.columns:
y_train=table_02[i].values
clf = LinearRegression()
clf.fit(x_train,y_train)
y_pred = clf.predict(np.array([[2018]]).round(1))
y_11.append(round(y_pred[0],2))
y_11
[5543203.83,
776627.04,
38692.61,
6678677.55,
71752495.99,
1801318.82,
193874.39,
86784890.23]
将上面得到的结果追加到15年到17年数据表中去。
date = datetime.datetime.strptime('2018-11-1','%Y-%m-%d')
y_11 = pd.Series(y_11,index=['电蚊香套装','防霉防蛀片','灭鼠杀虫剂','盘香灭蟑香蚊香盘',
'蚊香加热器','蚊香片','蚊香液','一级市场销售总额']
,name=date)
table_02.loc[date,:]=y_11
table_02
同理,预测2018年12月各个杀虫剂销量。
从预测结果可以看到,2018年11月和12月的市场销售总额,会比前三年还要进一步增加。
二级市场容量分析
将原始数据及预测得到的销售数据合并,再继续分析。
table_04 = pd.concat([table,table_02,table_03],axis=0)
# 根据索引排序
table_04 = table_04.drop_duplicates(
).sort_index(ascending=False).iloc[:-2,:]
table_04.head()
统计2016、2017和2018年一级市场年销售总额。并绘制折线图。
# table_04.resample('Y')['一级市场销售总额'].sum().plot()
t4 = table_04.resample('Y')['一级市场销售总额'].sum()
时间
2016-12-31 917966079.69
2017-12-31 1395872729.27
2018-12-31 1699011039.03
Freq: A-DEC, Name: 一级市场销售总额,
dtype: float64
由上图可以看出,2018年相对于2017年全年销售总额增速有所降缓。进一步分析二级市场的容量,探寻市场增长点。
table_05 = table_04.resample('Y').sum()
table_05
绘制各个驱虫剂三年内年消费总额折线图。
从结果可以看到:
二级市场里面,灭鼠杀虫剂市场销售额市场最大,增长幅度稳定 接下来对细分市场作分析,集中在灭鼠杀虫市场内,也是由于需求方产品线所处对二级市场。 灭蚊市场占比较大,增加产品多样性可以考虑灭蚊产品。
二级市场的占比分析
将所有杀虫剂年销售额除以一级市场销售总额,得到每种杀虫剂市场占比。
a=[]
for i in table_05.columns:
a.append(table_05[i]/table_05.一级市场销售总额)
table_06=pd.DataFrame(a,index=table_05.columns)
table_06.T
将上面得到的二级市场占比,进行可视化分析,得到如下图所示的各杀虫剂销售总额占比。
从结果可以看到:
灭鼠杀虫剂市场一直以来占领一级市场一级市场60%以上的市场份额。 其次是蚊香液产品,占据20%以上份额。
二级市场增量分析
将各个杀虫剂每年年销售总额做差分并除以上一年年销售总额得到年增幅。
incre_01=(table_05.iloc[1,:]-table_05.iloc[0,:])/table_05.iloc[0,:]
incre_02=(table_05.iloc[2,:]-table_05.iloc[1,:])/table_05.iloc[1,:]
incre=pd.DataFrame([incre_01,incre_02],index=['16-17年增幅',"17-18年增幅"])
incre
将上述得到的数据进行可视化。
由上面分析得到如下几点:
一级市场容量的增幅确实是在放缓,放缓幅度较大。 二级市场容量有所放缓,幅度较小。
竞争分析
本节使用行业排名top100品牌数据,包括品牌、行业排名、交易指数、交易增长幅度、支付宝转化指数等几个重要字段。
brand=pd.read_excel('./baier/电商案例数据/top100品牌数据.xlsx')
brand.head()
这里我们只需要品牌和交易指数两个字段。
brand=brand[['品牌','交易指数']]
brand.set_index('品牌',drop=True,inplace=True)
brand.head()
并将行业排名TOP10的品牌绘制饼图,查看各个品牌市场占比情况。
微观市场-竞争分析
mm=pd.read_excel('./baier/电商案例数据/灭鼠杀虫剂细分市场/螨.xlsx')
ms=pd.read_excel('./baier/电商案例数据/灭鼠杀虫剂细分市场/灭鼠.xlsx')
sc=pd.read_excel('./baier/电商案例数据/灭鼠杀虫剂细分市场/杀虫.xlsx')
sz=pd.read_excel('./baier/电商案例数据/灭鼠杀虫剂细分市场/虱子.xlsx')
zl=pd.read_excel('./baier/电商案例数据/灭鼠杀虫剂细分市场/蟑螂.xlsx')
t_01=sz[["类别","预估销售额"]]
t_02=zl[["类别","预估销售额"]]
t_03=mm[["类别","预估销售额"]]
t_04=ms[["类别","预估销售额"]]
t_05=sc[["类别","预估销售额"]]
微观市场容量分析
将灭鼠杀虫剂细分市场各个类别数据进行合并,并按照类别聚类,对预估销售额进行求和。得到如下图所示的各杀虫剂类别--预估销售总额条形图。
t = pd.concat([t_01,t_02,t_03,t_04,t_05])
t.set_index('类别',drop=True,inplace=True)
(t.groupby('类别').sum()).plot(kind='barh',
color=cmap[1],ax=ax)
从条形图中可以获得不少有价值的信息:
在二级市场内,灭鼠产品的预估销售额是最大。 其次是才是灭蟑产品,目前拜耳的在驱虫剂市场的产品主要集中在灭蟑和杀虫。 可以考虑灭鼠和除螨的产品线。
三级市场占比分析
将各个类别的产品除以总销售额,得到每个产品的销售额占比情况,并绘制横向条形图。
t.groupby('类别').sum().sum(axis=0)
t = pd.concat([t_01,t_02,t_03,t_04,t_05])
(t.groupby('类别').sum()/t.groupby('类别').sum().sum(axis=0)
).plot(kind='barh',color=cmap[1],ax=ax)
从结果可以看到:
拜耳主营业务市场,灭鼠和灭蟑产品占市场份额60%左右。
如果要介入灭鼠产品,以较低价引流产品为主,要以什么价格区间的灭鼠产品比较合适。
引流产品价格定位
通过对数据表进行描述性统计,得到每个价格区间预告销售额大小。
ms_02 = ms.loc[:,['类别','宝贝ID','售价','预估销售额']]
ms_02.describe()
价格数据离散化,设置0,50,100,150,200,250,300
七个切割点,将售价切分为六个价格区间。
bins_01 = [0,50,100,150,200,250,300]
labels = ['0-50','50-100','100-150','150-200','200-250','250-300']
ms_02['价格区间']=pd.cut(ms_02['售价'],bins=bins_01,labels=labels)
ms_02.head()
以价格区间聚合,对预估销售额进行求和,得到如下结果。可以明显看到,价格区间在0-50时,预估销售总额是最高的,且是排名第二的50-100价格区间总预估销售额的近5倍。
ms_02.groupby('价格区间')['预估销售额'].sum().sort_values(ascending=False)
价格区间
0-50 15162086.51
50-100 3335060.19
100-150 2758086.29
200-250 2743758.00
150-200 629813.00
250-300 237740.00
Name: 预估销售额, dtype: float64
如果拜耳想介入灭鼠产品,引流产品定位在0-50之间合适,但是哪个细分区间比较合理?
细化价格区间,将0-50价格区间继续以0,10,20,30,40,50
即每10元为一个区间,划分产品售价,得到如下结果。
bins_02=[0,10,20,30,40,50]
labels_02=["0-10","10-20","20-30","30-40","40-50"]
ms_02['价格区间']=pd.cut(ms_02['售价'],bins=bins_02,labels=labels_02)
ms_02.head()
同样聚合求和并排序,得到如下结果,其中10-20及20-30价格区间总预告销售额相对较高。
ms_02.groupby('价格区间')['预估销售额'].sum().sort_values(ascending=False)
价格区间
10-20 8102634.14
20-30 4969620.92
30-40 1240874.19
40-50 707568.49
0-10 141388.77
Name: 预估销售额, dtype: float64
如果想做0-50块之间灭鼠引流产品,10-30元以内比较合适,市场比较受欢迎,不容易亏损。
竞争分析
谁是我们的竞争对手?他们的策略是什么?和他们相比我们的优势和劣势在哪儿?这些是我们必须经常面对的问题,竞争对手无处不在。作为一名数据分析师,我们又要如何帮助公司制定竞争策略?不能正确识别自己的竞争对手会造成各种被动,既浪费资源,还浪费宝贵的发展时机。
本次竞争分析将从两个方面着手,一是销售竞争分析,其中包括拜耳、科凌虫控和安速家居销售分析。二是产品结构分析,这一部分将在本次案例分析下篇中继续展开,本篇不涉及。
销售分析
本次使用的数据是竞争数据中商品销售数据内的三家公司近30天销售数据。
安速家居 =pd.read_excel('./baier/电商案例数据/竞争数据/商品销售数据/安速家居近30天销售数据.xlsx')
科凌虫控 =pd.read_excel('./baier/电商案例数据/竞争数据/商品销售数据/科凌虫控旗舰店近30天销售数据.xlsx')
拜耳销售分析
查看下本次数据都包含哪些字段。
拜耳 = pd.read_excel('./baier/电商案例数据/拜耳店铺数据/拜耳近30天销售数据.xlsx')
拜耳.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 16 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 序号 15 non-null int64
1 店铺名称 15 non-null object
2 商品名称 15 non-null object
3 商品ID 15 non-null int64
4 主图链接 15 non-null object
5 商品链接 15 non-null object
6 商品原价 15 non-null float64
7 商品售价 15 non-null float64
8 30天销售量 15 non-null int64
9 总销量 15 non-null int64
10 类目 15 non-null object
11 物理形态 11 non-null object
12 型号 15 non-null object
13 净含量 13 non-null object
14 使用对象 15 non-null object
15 销售额 15 non-null float64
dtypes: float64(3), int64(4), object(9)
memory usage: 2.0+ KB
使用切片截取本次分析所需要的字段信息。
baier = 拜耳[["商品ID",'使用对象',"商品售价","30天销售量","销售额"]]
baier.head()
根据商品ID聚合,并对销售额求和,按照总销售额排序后绘制条形图如下所示。从结果中可以看出,爆款产品527604730327
的销售额远远超过其他任何一个产品。
cmap = [low_c,high_c]
(baier.groupby('商品ID')['销售额'].sum().sort_values(ascending=False)
).plot(kind='barh',color=cmap[1],ax=ax)
为了查看拜耳产品分不同使用对象的总销售额,对使用对象聚合并所有字段求和,其中主要看30天销售量
和销售额
两个字段即可。其余两个字段聚合求和得到的结果并没有意义。
baier.groupby('使用对象').sum().sort_values('销售额',ascending=False)
从上面结果可以得到如下信息:
灭蟑产品占拜耳的销售额最大的比重 其次是灭蚁等
科凌虫控销售分析
接下来分析科凌虫控销售数据。其数据与拜耳销售数据字段相同,在这里就不做展示。
同样切片截取需要的字段来分析。并以商品ID聚合,对其他字段求和,得到每种商品的销售数据。
keling = 科凌虫控[["商品ID",'适用对象',"商品售价","30天销售量","30天销售额"]]
keling.groupby('商品ID').sum().sort_values('30天销售额',ascending=False)
同样统计各个使用对象30天内销售总量及总额数据。
keling.groupby('适用对象')['30天销售量','30天销售额'].sum().sort_values('30天销售额',ascending=False)
得到如下主要信息。
热门产品(灭蟑)销售额与拜耳的差距不大 科凌的产品类目覆盖了二级市场里面主要的类目
安速家居销售分析
按照上面拜耳及科凌虫控销售数据分析方法,同样用以分析安速家居销售分析数据。
ansu = 安速家居[["商品ID",'适用对象',"商品售价","30天销售量","30天销售额"]]
ansu.head()
ansu.groupby('商品ID')['30天销售量','30天销售额'].sum().sort_values('30天销售额',ascending=False)
ansu.groupby('适用对象')['30天销售量','30天销售额'].sum().sort_values('30天销售额',ascending=False)
得到如下主要信息。
热销产品的销售额不及拜耳与科凌 安速的产品类目广,基本覆盖了拜耳和科凌主营产品类目 拜耳热销产品主要集中在灭蟑,主要竞争对手(科凌、安速)在主营业务上构成竞争 主要竞争对手的产品多样化比拜耳做的更好 拜耳灭蟑产品只要竞争对手科凌,杀虫灭蚁产品主要挑战来源于安速
写在最后
到目前为止,本次案例算是完成了分析任务的一般。从刚开始介绍了一些简单的电商案例分析基础知识,并从宏观市场及微观市场分析几家电商的销售数据。其中微观市场分析并未结束,将在接下来的下篇中分享给到大家。其主要内容包括如下:
参考资料
电商数据分析指标: https://zhuanlan.zhihu.com/p/50754573