1.数据背景描述:
这是一份用户消费行为的分析报告 数据来源于国外,是用户在一家CD网站上的消费记录。内容包含了1997-1998年全年的消费记录,列字段主要有购买时间,购买金额,用户Id,购买次数。
2.提出需求:
2.1用户分析消费趋势(每月)包括以下类目:
2.1.1每月的消费总金额
2.1.2每月消费次数
2.1.3每月产品购买量
2.1.4每月消费人数
2.2用户个体消费分析
2.2.1用户消费金额和消费散点图用户消费金额,消费次数的描述统计。
2.2.2用户消费金额分布图
2.2.3用户消费次数的分布图
2.2.4用户累计消费金额占比
2.3)用户消费行为
2.3.1用户第一次消费
2.3.2用户最后一次消费
2.3.3新老消费比
2.3.4使用RFM对新老用户分层
3.总结
------------------------分割线----------------------------------------------------------------------------------------------------
分析前的工作
我们先导入pandas包和numpy包。
我们先给列字段命名
import pandas as pd
import numpy as np
columns=['user_id','order_dt','order_amount']
user_id:用户id
order_dt:购买时间
order_products:购买产品数
order_amount:购买金额
此时由于源数据为txt格式我们这里使用pandas下的read_table,而且因为源数据使用的是空格来分割数据我们这里在read_table方法例加上sep=’\s+'这里主要是使用的类似正则表达式
如下:
df=pd.read_table('CDNOW_master.txt',names=columns,sep='\s+')
我们先看看这个表的概况:
df.head()
df.info() 和 df.describe()
用describe下的表可以看出大部分订单只消费了少量商品(平均只有2.4) 存在极值干扰。
用户的消费金额比较稳定,平均消费35源,中位数35,存在极值干扰。
使用pandas下的to_datetime把时间解析此时数据格式为C语言下时间的格式。
df['order_dt']=pd.to_datetime(df.order_dt,format='%Y%m%d')
我们把月份转换为时间格式 作用就是我们可以直接调用month月份 这里的M也可以变成Y 那就是调取年份了
df['month']=df.order_dt.values.astype('datetime64[M]')
2.1进行用户消费趋势的分析(按月)
2.1.1每月的消费总金额
由于是按月分析我们先将month聚合
grouped_month=df.groupby('month')
因为是要对每月的消费金额进行统计我们对聚合好的数据使用sum()函数
order_month_amount=grouped_month.order_amount.sum()
结果如下
我们此时使用图表来让数据可视化
import matplotlib.pyplot as plt
%matplotlib inline
这里的%是为了调用jupyter的内置函数主要的目的就是将可视化显示在页面
plt.style.use('ggplot')
更改设计风格
order_month_amount.plot()
让order_month_amount可视化
效果图如下
小结:有上图可知,消费金额在前3个月到达最高峰,后续消费金额稳定,有轻微下跌趋势。
2.1.2每月消费次数