作者:i阿极
作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页
😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍
📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪
文章目录
随着互联网在经济活动中的广泛运用,人们对网络的依赖越来越强烈,网络正在不知不觉中改变着当今社会的生活状态和生活方式。电子商务的兴起,开创了全球性的商务革命和经营革命,并逐步成为一种极重要的商务方式。中国互联网信息中心的第15次中国互联网络发展状况统计显示,2004年庞大的网上用户群中,选择网上购物的人数仅占0.1%。这一方面反映了我国消费者网上购物仍有巨大的潜在市场;另一方面也表明我国网络营销还处于不成熟阶段。对企业而言,网上购物能提供增加收入的机会和吸引顾客的新手段,并能促进与原有顾客的关系。同传统营销一样,网络营销需要了解消费者行为,对消费者网上购买动机进行分析有利于企业针对性地开展市场营销活动。(数据来源于网络)
从本质上讲,消费者是由一个希望满足他们需求的欲望而驱动的。被人们感觉到的需求能够分为两大类:实用主义的需求,引导消费者去考虑目的,产品的功能属性;享乐的或经验的需求,引导消费者去考虑主观方面,产品的舒适性,美学等。在一个购买决定中,两类需求都被考虑是很普遍的。比如,一个消费者也许为了实用目的,驾车上下班,而去购买一辆车,但同时考虑到享乐目的,享受驾驶,最终会选择一辆跑车。当消费者存在未被满足的需求时,通常会产生一股力量,即动力——使一个人对需求做出反应的力量,它来自内部刺激,是由愿望状态到实际状态的趋势所引起的。有了力量,人们再通过恰当行动的学习,最终导致一种动机或一系列动机的发展。消费者期望基于动机上的行动能够产生结果,这就形成一个目标,最终导致一个能够完成此目标的行动。
导入所需要用到的模块
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom datetime import datetime%matplotlib inlineplt.style.use('ggplot') #更改绘图风格,R语言绘图库的风格plt.rcParams['font.sans-serif'] = ['SimHei']
导入数据。
user_id:用户ID,order_dt:购买日期,order_products:购买产品数量,order_amount:购买金额。
数据时间:1997年1月~1998年6月用户行为数据,约6万条。
columns = ['user_id','order_dt','order_products','order_amount']df = pd.read_table(r"C:\Users\XWJ\Desktop\CDNOW_master.txt",names=columns,sep='\s+') df.head()
注意:sep=’\s+’:匹配任意个空格
为了方便后面对数据的处理方便,需要将日期格式需要转换,同时有数据得出,存在同一个用户一天内购买多次行为。
使用describe()函数,计算数据集中每列的总数、均值、标准差、最小值、25%、50%、75%分位数以及最大值。
df.describe()
用户平均每笔订单购买2.4个商品,标准差2.3,稍微有点波动,属于正常。然而75%分位数的时候,说明绝大多数订单的购买量都不多,围绕在2~3个产品左右;
购买金额,反映出大部分订单消费金额集中在中小额,30~45左右
使用函数info():数据表的基本信息(维度,列名称,数据格式,所占空间等)
df.info()
数据处理
df['order_date'] = pd.to_datetime(df['order_dt'],format='%Y%m%d')df['month'] = df['order_date'].astype('datetime64[M]') #[M] :控制转换后的精度df.head()
- format参数:按照指定的格式去匹配要转换的数据列。
- %Y:四位的年份1994 %m:两位月份05 %d:两位月份31
- %y:两位年份94 %h:两位小时09 %M:两位分钟15 %s:两位秒
- 将order_date转化成精度为月份的数据列
- [M] :控制转换后的精度
用户整体消费趋势分析,按月份统计产品购买数量,消费金额,消费次数,消费人数。
plt.figure(figsize=(20,15)) #单位时英寸# 每月的产品购买数量plt.subplot(221) #两行两列,占据第一个位置df.groupby(by='month')['order_products'].sum().plot() #默认折线图plt.title('每月的产品购买数量')# 每月的消费金额plt.subplot(222) #两行两列df.groupby(by='month')['order_amount'].sum().plot() #默认折线图plt.title('每月的消费金额')# 每月的消费次数plt.subplot(223) #两行两列df.groupby(by='month')['user_id'].count().plot() #默认折线图plt.title('每月的消费次数')# 每月的消费人数(根据user_id进行去重统计,再计算个数)plt.subplot(224) #两行两列df.groupby(by='month')['user_id'].apply(lambda x:len(x.drop_duplicates())).plot() #默认折线图plt.title('每月的消费人数')
分析结果:
图一可以看出,前三个月销量非常高,而以后销量较为稳定,并且稍微呈现下降趋势。
图二可以看出,依然前三个月消费金额较高,与消费数量成正比例关系,三月份过后下降严重,并呈现下降趋势,思考原因?:跟月份有关,
在我国来1,2,3月份处于春节前后。2.公司在1,2,3,月份的时候是否加大了促销力度。
图三可以看出,前三个月订单数在10000左右,后续月份的平均消费单数在2500左右。
图四可以看出,前三个月消费人数在8000~10000左右,后续平均消费消费在2000不到的样子。
总结:所有数据显示,97年前三月消费事态异常,后续趋于常态化。
用户消费金额,消费次数(产品数量)描述统计。
user_grouped = df.groupby(by='user_id').sum()print(user_grouped.describe())print('用户数量:',len(user_grouped))
从用户的角度:用户数量23570个,每个用户平均购买7个CD,但是中位数只有3,并且最大购买量为1033,平均值大于中位数,属于典型的右偏分布(替购买量<7的用户背锅)。
从消费金额角度:平均用户消费106,中位数43,并且存在土豪用户13990,结合分位数和最大值来看,平均数与75%分位数几乎相等,属于典型的右偏分布,说明存在小部分用户(后面的25%)高额消费(这些用户需要给消费金额<106的用户背锅,只有这样才能使平均数维持在106)。
绘制每个用户的产品的购买量与消费金额散点图。
df.plot(kind='scatter',x='order_products',y='order_amount')
从图中可知,用户的消费金额与购买量呈现线性趋势,每个商品均价15左右,
订单的极值点比较少(消费金额>1000,或者购买量大于60),对于样本来说影响不大,可以忽略不记。
用户消费分布图。
plt.figure(figsize=(12,4)) plt.subplot(121)plt.xlabel('每个订单的消费金额')df['order_amount'].plot(kind='hist',bins=50) #bins:区间分数,影响柱子的宽度,值越大柱子越细。宽度=(列最大值-最小值)/bins#消费金额在100以内的订单占据了绝大多数plt.subplot(122)plt.xlabel('每个uid购买的数量')df.groupby(by='user_id')['order_products'].sum().plot(kind='hist',bins=50)
图二可知,每个用户购买数量非常小,集中在50以内。
两幅图得知,我们的用户主要是消费金额低,并且购买小于50的用户人数占据大多数(在电商领域是非常正常的现象)。
用户累计消费金额占比分析(用户的贡献度)。
进行用户分组,取出消费金额,进行求和,排序,重置索引
user_cumsum = df.groupby(by='user_id')['order_amount'].sum().sort_values().reset_index()user_cumsum
每个用户消费金额累加
user_cumsum['amount_cumsum'] = user_cumsum['order_amount'].cumsum()user_cumsum.tail()
用户的总贡献率
amount_total = user_cumsum['amount_cumsum'].max() #消费金额总值user_cumsum['prop'] = user_cumsum.apply(lambda x:x['amount_cumsum']/amount_total,axis=1)user_cumsum.tail()
可视化
user_cumsum['prop'].plot()
由图分析可知,前20000名用户贡献总金额的40%,剩余3500名用户贡献了60%。
首次购买的时间
df.groupby(by='user_id')['order_date'].min().value_counts().plot()
最后一次购买时间。
df.groupby(by='user_id')['order_date'].max().value_counts().plot()
大多数用户最后一次购买时间集中在前3个月,说明缺少忠诚用户。
随着时间的推移,最后一次购买商品的用户量呈现上升趋势,猜测:这份数据选择是的前三个月消费的用户在后面18个月的跟踪记录。
人生很短,不要看轻自己,努力一些;人生不公,不要折磨自己,看淡一些;人生的谷底,变成我重建人生的坚实基石。所以不要畏惧失败;只要活着就必然要面对失败,除非你小心翼翼到仿佛一生都没有活过。如果这样,你的失败将来自于放弃生活。