用户行为分析项目

该文展示了如何使用Python的pandas库读取CSV文件,转换时间格式,进行数据清洗,以及通过matplotlib进行数据可视化,包括用户每月消费总金额、产品购买量、消费总次数和消费人数的统计。此外,还涉及用户行为分析,如首次和最后一次消费的月份分布,新老用户比例,以及RFM模型在用户分层中的应用。
摘要由CSDN通过智能技术生成
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
pd.set_option('display.max_rows', None) # 展示所有行
pd.set_option('display.max_columns', None) # 展示所有列

file_path=r"D:\学习\3数据分析案例\CDNOW_master.txt"
b=['user_id','oder_dt','oder_pd','oder_money']
t1=pd.read_csv(file_path,header=None,sep="\s+",names=b)
# print(type(t1))
# t1=pd.DataFrame(t1,columns=b)

#装换时间格式
# #方法一:
# t1['oder_dt']=pd.to_datetime(t1['oder_dt'],format='%Y-%m-%d')
# t1['oder_dt2']=t1['oder_dt'].dt.date #提取年月日
# t1['oder_dt3']=t1['oder_dt'].dt.time#提取时分秒
# t1.drop(labels='oder_dt',axis=1,inplace=True) #删除原始日期
# print(t1.head())
#方法二:
t1['oder_dt']=pd.to_datetime(t1['oder_dt'],format='%Y%m%d')
print(t1.head())
print(t1.isnull().any())

#查看数据描述
print(t1.describe().astype("i8"))

#添加一列表示月份
t1['month']=t1['oder_dt'].astype('datetime64[M]')
print(t1.head(5))

#用户每月花费总金额
# t2=t1.groupby(by='month')['oder_money'].sum()
# print(t2)
# #方法一
# plt.plot(t2)
# plt.show()
# #方法二
# t2.plot()
# plt.show()
# #方法三
# plt.plot(range(len(t2.index)),t2.values)
# plt.xticks(range(len(t2.index))[::5],list(t2.index)[::5])
# plt.show()

# #所有用户每月的产品购买量
# t3=t1.groupby(by="month")['oder_pd'].sum()
# print(t3.head(5))

# #所有用户的消费总次数
# t4=t1.groupby(by="month")['oder_pd'].count()
# print(t4.head(5))

# #统计每月的消费人数
# t5=t1.groupby(by="month")["user_id"].nunique() #nunique  表示去重后的个数
# print(t5)

# #用户消费总金额和消费总次数的统计描述
# t6=t1.groupby(by="user_id")['oder_money'].sum()
# t7=t1.groupby(by="user_id")['oder_pd'].sum()

# #用户消费金额和消费产品数量的散点图
# plt.scatter(t7,t6)
# plt.show()

# #各个用户消费总金额的直方分布图(金额小于1000)
# #各个用户的消费总量的直方分布图(商品数量小于100)
# t8=t1.groupby(by="user_id").sum().query("oder_money<=1000")
# t8.hist()
# plt.show()


# #用户行为分析
# #用户第一次消费的月份分布和人数统计
# t9=t1.groupby(by=["user_id"])["month"].min().value_counts() #.value_counts() 统计每个值出现的次数
# t9.plot()
# plt.show()
# print(t9)

# #用户最后一次消费的时间分布
# t10=t1.groupby(by=["user_id"])["month"].max().value_counts()
# t10.plot()
# plt.show()

# #新老用户的占比,消费一次为新用户,消费多次为老用户
# total_amount=t1["user_id"].nunique()
# t11=t1.groupby(by="user_id")['oder_dt'].agg(['min','max'])
# x=(t11['min']==t11['max']).value_counts()
# print(x)

# #用户分层
# #分析每个用户总购买量和总消费金额和最近一个消费时间得RFM表格
# rfm=t1.pivot_table(index="user_id",aggfunc={"oder_pd":"sum","oder_money":"sum","oder_dt":"max"})
# print(rfm.head(5))
#
# #rfm模型涉设计
# #R表示最近一次交易时间得间隔
# max_dt=t1['oder_dt'].max() #今天的日期
# last_dt=t1.groupby(by='user_id')['oder_dt'].max() #用户最后购买时间
# rfm["R"]=(max_dt-last_dt)/np.timedelta64(1,'D') #np.timedelta64(1."D")去除 days单位
# rfm.sort_values(by="R",ascending=True,inplace=True)
# rfm.drop(labels="oder_dt",axis=1,inplace=True)
# rfm.columns=["M","F","R"]
# print(rfm.head(5))

#将客户进行分类操作
def rfm_func(x):
    level=x.map(lambda x:'1' if x>=0 else "0")

    label=level.R+level.F+level.M+level.K
    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)
# print(rfm.head(5))

# #用户生命周期
# #统计每个用户每个月的消费次数
# t12=t1.pivot_table(index="user_id",values="oder_dt",aggfunc="count",columns="month")
# print(t12.head(5))
#
# #统计每个用户每个月是否消费,消费记录为1,否则记为0
# t13=t12.applymap(lambda x:1 if x>=1 else 0) #applymap为对每个元素进行操作,而apply则对行或者列进行操作
# print(t13.head(5))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值