电商用户大数据分析实际案例和代码,RFM模型用Python 具有可视化结果
时间: 2024-03-06 14:46:11 浏览: 174
以下是一个电商平台的用户RFM模型分析案例和对应的Python代码及可视化结果:
1. 计算每个用户的R、F、M值
```python
import pandas as pd
from datetime import datetime
# 读取购买记录表
purchase_data = pd.read_csv('purchase_table.csv')
# 将购买时间转换成datetime类型
purchase_data['purchase_time'] = pd.to_datetime(purchase_data['purchase_time'])
# 计算R、F、M值
now = datetime.now()
RFM = purchase_data.groupby('user_id').agg({'purchase_time': lambda x: (now - x.max()).days,
'amount': 'sum',
'purchase_time': 'count'})
RFM.rename(columns={'purchase_time': 'F', 'amount': 'M', 'purchase_time': 'R'}, inplace=True)
```
2. 对R、F、M值进行分组,并计算每个组的平均值和标准差
```python
# 对R、F、M值进行分组,并计算每个组的平均值和标准差
def rfm_group(df):
r_group = pd.cut(df.R, bins=[-1, 30, 60, 90, df.R.max()], labels=['1. 0-30', '2. 31-60', '3. 61-90', '4. 91+'])
f_group = pd.cut(df.F, bins=[0, 2, 4, 6, df.F.max()], labels=['1. 1-2', '2. 3-4', '3. 5-6', '4. 7+'])
m_group = pd.cut(df.M, bins=[-1, 100, 200, 500, df.M.max()], labels=['1. 0-100', '2. 101-200', '3. 201-500', '4. 501+'])
return pd.concat([r_group, f_group, m_group], axis=1)
RFM_group = RFM.groupby(rfm_group(RFM)).agg({'user_id': 'count',
'R': 'mean',
'F': 'mean',
'M': 'mean'})
RFM_group.rename(columns={'user_id': 'user_count', 'R': 'avg_R', 'F': 'avg_F', 'M': 'avg_M'}, inplace=True)
RFM_group['std_R'] = RFM.groupby(rfm_group(RFM))['R'].std()
RFM_group['std_F'] = RFM.groupby(rfm_group(RFM))['F'].std()
RFM_group['std_M'] = RFM.groupby(rfm_group(RFM))['M'].std()
```
3. 可视化RFM模型结果
```python
import seaborn as sns
# 绘制R、F、M的分布直方图
sns.histplot(data=RFM, x='R', kde=True)
sns.histplot(data=RFM, x='F', kde=True)
sns.histplot(data=RFM, x='M', kde=True)
# 绘制RFM模型的热力图
sns.heatmap(data=RFM_group[['avg_R', 'avg_F', 'avg_M']].T, cmap='YlOrRd', annot=True, fmt='.1f')
```
以上是一个简单的电商用户RFM模型分析案例和对应的Python代码及可视化结果。实际应用中,还需要根据具体业务场景进行适当调整和补充。
阅读全文