一、数据集介绍
(一)数据集和源码
通过网盘分享的文件:京东消费者数据分析
链接: https://pan.baidu.com/s/1mQnaPKuk9Wari2T7NtaQKA?pwd=42nk 提取码: 42nk
(二)字段说明
| customer_id | 用户ID |
| product id | 产品ID |
| action _date | 行为发生日期 |
| action id | 行为记录ID |
| type | 行为类型 |
| age_range | 用户年龄分段 |
| gender | 用户性别 |
| customer_register_date | 用户注册账号日期 |
| customer level | 用户会员等级 |
| city_level | 用户所在城市等级 |
| brand | 产品品牌名称 |
| shop_id | 店铺ID |
| category | 产品类别 |
| product_market_date | 产品上市日期 |
| vender_id | 商家ID |
| fans_number | 店铺粉丝数量 |
| vip_number | 店铺会员数量 |
| shop_register_date | 店铺注册日期 |
| shop_category | 店铺主营类目 |
| shop_score | 店铺评分 |
该数据条数较多,建议用企业版wps打开,或者直接在HADOOP集群中处理
二、集群配置
(一)HADOOP集群启动
我是在FinalShell上操作的,ssh操作较为方便,文件什么的都很直观
启动HADOOP集群后,jps命令查看各个节点的情况
如图,HADOOP已经启动成功了
(二)保持MYSQL处于启动状态
启动HIVE前要保证MYSQL是处于启动的状态,否则HIVE会启动失败,毕竟HIVE没有存储功能,它只是翻译的工具,把SQL语句翻译成MapReduce任务(注意mysql的个别语句在hive中运行不了),而MYSQL是帮助hive存储表结构、库信息、HDFS路径等元数据的,数据本身还是存储到HADOOP集群中的HDFS里(注意内部表和外部表)。
进入hive前,先将数据先从本地上传到HDFS中
(三)开启HIVE
开启hive
先将装载数据的数据库、表等建好
这里记得使用 use 已经建的数据库
根据字段信息建表,将数据带入到表中
注意:
FinalShell里可能出现汉字无法显示的情况,有可能是hive、mysql的问题,我碰到的是ssh的问题,修改一下配置就好了,一般汉字显示不出来就会显示成?
三、数据预处理
(一)缺失值处理
先查看一下每个字段分别有多少数据
将运行结果填入表格中
| COUNT(customer_id) | 183828 |
| COUNT(product_id) | 183828 |
| COUNT(action_date) | 183828 |
| COUNT(action_id) | 183828 |
| COUNT(type) | 183828 |
| COUNT(age_range) | 183828 |
| COUNT(gender) | 183828 |
| COUNT(customer_register_date) | 183828 |
| COUNT(customer_level) | 183828 |
| COUNT(city_level) | 183828 |
| COUNT(brand) | 183828 |
| COUNT(shop_id) | 183828 |
| COUNT(category) | 183828 |
| COUNT(product_market_date) | 183828 |
| COUNT(vender_id) | 183828 |
| COUNT(fans_number) | 183828 |
| COUNT(vip_number) | 183828 |
| COUNT(shop_register_date) | 183828 |
| COUNT(shop_category) | 183828 |
| COUNT(shop_score) | 183828 |
数据非常工整
这里就不用处理了
(二)重复值处理
查询出现次数>1的customer_id的重复次数
| customer_id |
| 1085560 |
| 1514987 |
| 429158 |
在创建一个新表,用distinct()去除重复值,观察前后变化
由此可知,有3条重复数据,那后面就用没有重复值的新表
(三)异常值处理
判断“用户年龄分段”,“用户会员等级”,“用户所在城市等级”,“店铺评分”是否在合理范围内。
| MAX(age_range) | NULL |
| MIN(age_range) | 1 |
| MAX(customer_level) | 7 |
| MIN(customer_level) | 1 |
| MAX(city_level) | NULL |
| MIN(city_level) | 1 |
| MAX(shop_score) | 10.0 |
| MIN(shop_score) | -1.0 |
发现有店铺评分为负值,查询得知有1524条店铺评分为负值,考虑到店铺评分最大值为10,0分已代表最差评价,因此出现负值认定为数据异常。为保证数据的一致性和后续分析的准确性,决定将所有负的店铺评分统一修正为0分,即业务上的最低有效分值。
(四)数据格式处理
时间变量:
“action_date”,“customer_register_date”,“product_market_date”,“shop_register_date”
要求:
①action_date >=customer_register_date 用户必须先注册,才能产生行为;
②action_date >=product_market_date用户只能对已上市的商品进行操作;
③action_date >=shop_register_date用户只能在店铺注册后才能访问该店铺商品;
④product_market_date >=shop_register_date商品必须在店铺注册之后才能上架。
将不满足条件的数据视为无效数据,将其删除
为了方便后续使用,将各时间格式改为“年-月-日”的格式。
最后简单做一下描述性分析(这里的数据出现了些异常,应该是上面时间格式化出现了问题)
正常的数据应该像下面这样
| 字段 | 计数 | 平均值 | 标准差 | 最大值 | 最小值 |
| 行为发生日期 | 181979 | 2018-04-15 | 2018-02-01 | ||
| 用户ID | 139443 | 4.68 | |||
| 用户年龄分段 | 181879 | 4.97 | 1.53 | 6 | 1 |
| 用户会员等级 | 181879 | 3.29 | 2.33 | 7 | 1 |
| 用户所在城市等级 | 181879 | 68860.13 | 1.41 | 6 | 1 |
| 店铺粉丝数量 | 181879 | 99585.94 | 245770.71 | 9293487 | 0 |
| 店铺会员数量 | 181879 | 99585.94 | 264449.78 | 13841676 | 0 |
| 店铺评分 | 181879 | 5.69 | 4.65 | 10 | 0 |
四、数据分析
(一)用户特征分析
1.用户特征分布
分别查询用户年龄分段占比、用户性别占比、用户会员等级占比、用户所在城市等级占比。
用户年龄分段占比:
用户性别占比:
用户会员等级占比:
用户所在城市等级占比:
部分数据
2.用户活跃度分析
因为大多数业务存在明显的周期性波动。
例如,周一至周五流量高,周六周日流量低(或者像娱乐类应用反之)。因此计算每周活跃用户数的pv(Page View,页面浏览量)、uv(Unique Visitor,独立访客数)、pv/uv(浏览深度)。
为了方便我们直接从起始日开始,7天为一周。先做编号操作,即先按时间顺序编号比如前七天编号为0,再七天编号为1...
①(SELECT MIN(action_date) FROM jd_database_new) 开始日期;
②(SELECT MAX(action_date) FROM jd_database_new) 结束日期;
③DATE_ADD((SELECT MIN(action_date) FROM jd_database_new), INTERVAL (num 7) DAY) 计算每周的起始日期:起始日期+num 7;
④DATE_ADD((SELECT MIN(action_date) FROM jd_database_new), INTERVAL (num * 7 + 6) DAY) 计算每周的终止日期:每周起始日期+6。
部分数据:
从这里可知,DATE这个日期字段的格式并不符合前面的格式化要求,以至于数据的描述性分析出现了问题。
3.用户留存分析
平均用户留存率:
每日新增用户的平均次日留存率:
这里新增留存率出现了0,平均留存率的结果与正确结果也有所偏差,运行命令里使用了日期字段就可以解释此现象,以下使用日期字段的数据都有此情况。
4.正确数据结论
用户特征分布:年龄分段以5和 6占比最高,合计超过75%,用户群体偏向中老年;性别分布中男性用户更为活跃,占比约 65%;会员等级集中在1级与5~7 级,中高等级用户占主导;城市等级以1级与3~5 级城市为主,反映出平台在低线城市的渗透优势。
用户活跃规律:2月初为活跃度最高峰,周PV达27020,随后在2月中旬活跃度大幅下降(除夕为2月15日),符合春节期间电商活跃度降低的普遍规律。节后(2月22日起)活跃度迅速恢复。浏览深度相对稳定,各周均稳定在1.04左右。
用户留存薄弱:整体次日留存率仅 2.78%,新增用户次日留存率更低至 1.69%,表明平台用户粘性严重不足,绝大多数用户在首次访问后便不再返回。
(二)产品-购物偏好分析
1.产品品类偏好
查询不同年龄、性别用户购买品类最多的Top3
2.产品品牌偏好
不同产品品类购买最多的品牌
3.新品接受度
该结果也受到日期字段的影响
4.正确数据分析数据
品类偏好与用户特征相关:茶类在几乎所有年龄段的男性和女性用户中均稳居购买量前三。男性用户偏好实用型品类:外套在男性各年龄段购买占比均位居前列。女性用户美妆护肤需求突出:粉底、面霜等美妆产品在女性各年龄段频繁上榜。随着年龄增长,男女用户的品类偏好逐渐分化—年轻男性(如年龄分段1-2)仍以茶、糖果为主,中年男性(年龄分段4-6)则外套占比显著提升;女性从年轻时的茶、面霜逐步转向粉底、外套等多元化需求。
品牌集中度分化明显:部分品类呈现头部品牌垄断格局,如茶类(立顿占100%)、婴幼儿奶粉(illuma占100%)、羽毛球用品(李宁占100%)等;而另一些品类则品牌分散,如冰箱(海尔占42.3%)、唇膏(Chando占33.9%)。对于高集中度品类,平台应加强与头部品牌的战略合作,确保货源与曝光;对于分散品类,可引入更多品牌以满足用户多样化需求,并通过榜单、评测等内容引导消费决策。
新品接受度偏低:购买过上市30天内新品的用户仅占全部购买用户的4.03%,反映出新品推广效率有待提升。建议在新品上市初期给予更多曝光资源(如标注“新品”、首页推荐位),并结合用户历史偏好进行精准推送;同时可开展新品试用、限时折扣等活动。
(三)用户忠诚度分析
用户忠诚度是衡量用户与品牌关系的重要指标。为评估用户的忠诚度,本项目采用RFM模型,通过用户的近期购买行为、购买频率以及消费价值三个维度进行综合评分,进而对用户进行分层,识别高忠诚度用户群体。
Recency(R):用户最近一次购买行为距离所给数据中最大日期的天数。该值越小,代表用户越活跃,再次购买的潜力越大。
Frequency(F):用户的购买总次数。购买次数越多,表明用户对平台的粘性越高,忠诚度基础越好。
Monetary(M):用户累计消费金额,直接反映用户的价值贡献。然而,由于原始数据表中缺少消费金额字段,本项目采用以下行为指标加权替代的方式从侧面反映用户的消费潜力:
①购买品类数:购买品类越丰富,说明用户需求多元,对平台依赖度更高。
②购买品牌数:品牌多样性反映了用户的探索意愿和跨品牌消费能力。
③购买店铺数:跨店消费表明用户对平台生态的信任。
由于上述指标的数值范围不同,因此采用NTILE窗口函数对每个指标进行六等分评分,将原始数值转化为统一的1至6分得分。然后根据将R、F、M的得分对用户进行分层,阈值设为4。
此为正确数据
(四)行为漏斗分析
漏斗分析能够量化用户从初步浏览到最终转化的完整路径,通过追踪各环节的流失情况,定位转化瓶颈,为优化运营策略提供依据。本节将关注(Follow)作为下单后的深化行为,构建“浏览→加购→下单→关注”的四阶段漏斗,用以评估用户从认知、兴趣、购买到建立长期关系的完整过程,从而更全面地衡量用户的转化效率。
浏览(PageView):用户接触商品,产生初步认知。
加购(SavedCart):用户表达兴趣,但尚未支付。
下单(Order):用户完成交易,实现核心转化。
关注(Follow):用户主动关注店铺或商品,建立长期连接,预示复购潜力。
该结果与正确结果有些许偏差
正确数据结果解读
①浏览→加购转化率仅2.35%。也就是说12万浏览用户中,仅有不到3000人将商品加入购物车。这是整个漏斗中流失最严重的环节(流失率97.65%)。说明商品详情页的吸引力严重不足,或者用户意图以比价、随意浏览为主,缺乏明确的购买冲动。
②加购→下单转化率异常。下单用户数远超加购用户数,导致该转化率超过100%。大量用户跳过加购直接下单,直接点击“立即购买”完成了交易。这说明平台的购买路径满足了那些决策果断、目标明确的用户需求。
③下单→关注转化率 19.94%。也就是说每100个下单用户中,约有20人关注了店铺或商品。
这是漏斗中表现相对较好的环节。尽管前端流量流失严重,但一旦用户完成购买体验,他们对品牌的认可度相对较高,愿意与之建立长期连接,对后续复购有积极意义。
④浏览→下单转化率 8.51%。该指标是衡量平台成交能力的核心。8.51%在电商行业中属于中等水平,仍有优化空间。
⑤ 浏览→关注转化率 1.70%。该指标受前端流失严重影响,偏低属于正常。它反映了从海量流量中沉淀粉丝的效率,是长期用户运营的基础。
(五)店铺运营情况分析
1.店铺综合表现
通过计算店铺的评分、粉丝数、会员数与店铺总销量之间的相关系数,评估这些店铺特征对销售业绩的影响。
2.店铺经营能力
根据店铺注册日期划分新老店铺(注册时间在最近3个月内的定义为“新店”,其余为“老店”),对比两类店铺的数量、平均销量。
部分结果:
3.店铺种类分布
按店铺主营类目统计总销量、平均销量、类目内部的头部店铺销售量占比,识别热门类目和竞争强度。
4.正确数据结论
店铺综合表现:粉丝数与销量的相关系数为 0.1466。粉丝关注反映了店铺的曝光度和潜在客群规模,但粉丝转化为实际购买的比例可能受内容质量、促销活动等因素影响,因此相关性稍弱。会员数与销量的相关系数为 0.2010,表明店铺的会员数量对销量有一定正向促进作用。会员通常具有更高的忠诚度和复购率,因此会员基数较大的店铺更容易获得稳定销量。评分数与销量的相关系数仅为 0.0372,几乎可以忽略不计,说明店铺评分的高低与销量之间不存在线性关联。可能的原因是大多数店铺评分集中在较高区间,变异性不足,导致无法区分销量差异。
店铺经营能力:老店数量占绝对主导地位(约95.9%),而新店仅250家(约4.1%)。且老店的平均销量是新店的约2.6倍。这反映出平台当前的店铺以成熟老店为主,在销量上具有显著优势。可以通过会员体系、大促活动、个性化推荐等方式维持其销售活力,同时挖掘老店复购潜力,巩固其稳定贡献。新店入驻数量相对有限,销售表现也较弱。可以通过提供流量扶持、营销工具优惠、新手教程等,帮助新店快速完成首批用户积累和销售突破。
店铺类目分布:Beauty Makeup 虽总销量第一、平均销量最高,但与Food 、Clothes 类目一样头部占比低,说明该赛道虽拥挤,但整体健康度高,中小店铺仍有较大发展空间,可通过流量扶持、运营指导帮助优质店铺脱颖而出,优化类目生态。Outdoor Sports 和 Electronics 总销量相对较低,但头部店铺垄断明显,可能由于产品专业性强、品牌效应显著,建议新入局者谨慎评估竞争壁垒。Food 和 Clothes 作为传统热门类目,总销量高且头部占比适中,属于成熟稳定的市场,适合作为重点运营方向。
五、可视化仪表盘设计
六、未解决的问题
日期格式化错误
产品-偏好分析,用户忠诚度分析和行为漏斗分析的个别代码的结果没有显示,只有OK运行完成标志。