消费者行为

导入库和数据文件

在这里插入图片描述

第一部分:数据预处理

1.1数据加载
df = pd.read_csv('./data/CDNOW_master.txt',header=None,sep='\s+',names=['user_id','order_dt','order_product','order_amount'])
1.2查看数据类型
df.info()

在这里插入图片描述

1.3order_dt转换成时间类型
df['order_dt'] = pd.to_datetime(df['order_dt'],format='%Y%m%d')
df.info()

在这里插入图片描述

1.4查看数据的统计描述
df.describe()

在这里插入图片描述

1.5添加一列表示月份
df['month'] = df['order_dt'].astype('datetime64[M]')
df.head()

在这里插入图片描述

第二部分:按月数据分析

2.1用户每月花费曲线图
df.groupby(by='month')['order_amount'].sum().plot()

在这里插入图片描述

2.2所有用户每月消费次数
df.groupby(by='month')['user_id'].count()

在这里插入图片描述

2.3每月的消费人数
df.groupby(by='month')['user_id'].nunique()

在这里插入图片描述

第三部分:用户个体消费数据分析

3.1用户消费金额和消费总次数的关系
df.groupby(by='user_id')['order_amount'].sum()
df.groupby(by='user_id').count()['order_dt']

在这里插入图片描述

3.2用户消费金额和消费次数的散点图
user_amount_sum = df.groupby(by='user_id')['order_amount'].sum()
user_product_sum = df.groupby(by='user_id')['order_product'].sum()
plt.scatter(user_product_sum,user_amount_sum)

在这里插入图片描述

3.3各用户消费总金额直方分布(1000内)
df.groupby(by='user_id').sum().query('order_amount<=1000')['order_amount'].hist()

在这里插入图片描述

3.4各用户消费中数量直方分布(100内)
df.groupby(by='user_id').sum().query('order_product<=100')['order_product'].hist()

在这里插入图片描述

第四部分:消费者行为分析

4.1用户第一次消费的月份和人数
df.groupby(by='user_id')['month'].min()
df.groupby(by='user_id')['month'].min().value_counts().plot()

在这里插入图片描述

4.2用户最后一次消费的时间和人数
df.groupby(by='user_id')['month'].max().value_counts().plot()

在这里插入图片描述

4.3新老用户的占比
new_old_user_df = df.groupby(by='user_id')['order_dt'].agg(['min','max'])
new_old_user_df['min'] == new_old_user_df['max']
(new_old_user_df['min'] == new_old_user_df['max']).value_counts()

在这里插入图片描述

4.4用户分层
  • RFM设计
  • R表示客户最近交易时间间隔
  • F表示购买商品的总数
  • M表示交易的金额
rfm = df.pivot_table(index='user_id',aggfunc={'order_product':'sum','order_amount':'sum','order_dt':'max'})
#R表示用户最近一次交易时间间隔
max_dt = df['order_dt'].max()
rfm['R'] = -(df.groupby(by='user_id')['order_dt'].max()-max_dt)/np.timedelta64(1,'D')
rfm

在这里插入图片描述

rfm.drop(labels='order_dt',axis=1,inplace=True)
rfm.columns = ['M','F','R']
rfm

在这里插入图片描述

def rfm_func(x):
    level = x.map(lambda x : '1' if x >= 0 else '0')
    label = level.R + level.F + level.M
    d = {
        '111':'重要价值客户',
        '011':'重要保持客户',
        '101':'重要挽留客户',
        '001':'重要发展客户',
        '110':'一般价值客户',
        '010':'一般保持客户',
        '100':'一般挽留客户',
        '000':'一般发展客户'
    }
    result = d[label]
    return result
rfm['label'] = rfm[['R','F','M']].apply(lambda x : x -x.mean()).apply(rfm_func,axis = 1)
rfm.head()

在这里插入图片描述

第五部分:用户生命周期

5.1统计每个用户每个月是否消费,消费为1反之为0
user_month_count_df = df.pivot_table(index='user_id',values='order_dt',aggfunc='count',columns='month').fillna(0)
df_purchase=user_month_count_df.applymap(lambda x:1 if x >=1 else 0 )
def active_status(data):
    status = []
    for i in range(18):
        if data[i] ==0:
            if len(status) > 0 :
                if status[i-1] == 'unreg':
                    status.append('unreg')
                else:
                    status.append('unactive')
            else:
                status.append('unreg')
                
        else:
            if len(status) == 0:
                status.append('new')
            else:
                if status[i-1] == 'unactive':
                    status.append('return')
                if status[i-1] == 'unreg':
                    status.append('new')
                else:
                    status.append('active')
                
    return status

pivoted_status = df_purchase.apply(active_status,axis = 1)
pivoted_status.head()                                     

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值