ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-11-02

2021-11-02 14:06:11  阅读:189  来源: 互联网

标签:11 02 plt 订单 2021 counts data rfm user


import pymysql
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

db_info = {
‘host’:‘192.168.1.80’,
‘user’:‘admin’,
‘password’:‘123’,
‘database’:‘management_systems’, # 这里说明我要连接哪个库
‘charset’:‘utf8’
}
conn = pymysql.connect(**db_info)
cursor = conn.cursor()

sql = ‘select * from customer’
data = pd.read_sql(sql,conn)

data.head()

索引重新设置

data = data.set_index(‘id’)
data.head()
在这里插入图片描述

修改列名

data.columns = [‘用户id’,‘订单时间’,‘订单数量’,‘订单金额’]
data.head()
在这里插入图片描述

data.describe()
在这里插入图片描述

data.info()
在这里插入图片描述

修改字段属性

data[‘订单时间’] = data[‘订单时间’].astype(‘datetime64’)
data[‘订单数量’] = data[‘订单数量’].astype(‘int’)
data[‘订单金额’] = data[‘订单金额’].astype(‘int’)
data.info()
在这里插入图片描述

data.head()
在这里插入图片描述

data.describe()
在这里插入图片描述

user_group = data.groupby(‘用户id’).sum()
user_group.head()
在这里插入图片描述

user_group.describe()
在这里插入图片描述

data[‘月份’] = data[‘订单时间’].dt.month

data.head()
在这里插入图片描述

font = {
“family”:“SimHei”,
“size”:20
}
plt.rc(‘font’,**font)
plt.figure(figsize=(20,5))
plt.plot(data.groupby(‘月份’)[‘订单金额’].sum())
plt.xlabel(‘月份’)
plt.ylabel(‘消费金额’)
plt.title(‘不同月份的用户消费金额’)
在这里插入图片描述

d = data.groupby(‘月份’)[‘订单数量’].sum()
plt.figure(figsize=(20,5))
plt.plot(d)
plt.xlabel(‘月份’)
plt.ylabel(‘商品个数’)
plt.title(‘不同月份的商品购买量’)
在这里插入图片描述

plt.figure(figsize=(20,5))
data.groupby(‘月份’)[‘用户id’].count().plot()
plt.xlabel(‘月份’)
plt.ylabel(‘消费次数’)
plt.title(‘不同月份的消费次数’)
在这里插入图片描述

plt.figure(figsize=(20,5))
data.groupby(‘月份’)[‘用户id’].nunique().plot()
plt.xlabel(‘月份’)
plt.ylabel(‘消费人数’)
plt.title(‘不同月份的消费人数’)
在这里插入图片描述

个体行为分析

data.groupby(‘用户id’).sum().head()
在这里插入图片描述

plt.figure(figsize=(20,5))
user_consume = data.groupby(‘用户id’).sum()
plt.scatter(user_consume[‘订单数量’], user_consume[‘订单金额’])
plt.xlabel(‘购买产品个数’)
plt.ylabel(‘消费金额’)
plt.title(‘用户消费金额和购买产品个数的关系’)
在这里插入图片描述

consume_products = user_consume[‘订单数量’]
consume_amount = user_consume[‘订单金额’]

fig = plt.figure(figsize=(20,5))
fig.add_subplot(1,2,1)
plt.hist(consume_products)
plt.title(‘用户购买数量分布’)
plt.xlabel(‘购买数量’)
plt.ylabel(‘人数’)

fig.add_subplot(1,2,2)
plt.hist(consume_amount)
plt.title(‘用户购买金额分布’)
plt.xlabel(‘购买金额’)
plt.ylabel(‘人数’)
在这里插入图片描述

计算首月消费

data.groupby(‘用户id’)[‘月份’].min().value_counts()
在这里插入图片描述

plt.figure(figsize=(20,5))
d = data.groupby(‘用户id’)[‘月份’].min().value_counts()
d.sort_index(inplace=True)
plt.plot(d)
plt.title(‘第一次消费人数和时间’)
plt.xlabel(‘第一次消费时间’)
plt.ylabel(‘人数’)
在这里插入图片描述

复购和回购

统计用户消费次数

pivoted_counts = data.pivot_table(index=‘用户id’, columns=‘月份’,values=‘订单时间’,aggfunc=‘count’).fillna(0)
pivoted_counts
在这里插入图片描述

pivoted_counts.transf = pivoted_counts.applymap(lambda x: 1 if x > 1 else np.NaN if x ==0 else 0)
pivoted_counts.transf.head()
在这里插入图片描述

每月复购率

plt.figure(figsize=(20,5))
month_counts_reorder_rate = pivoted_counts.transf.sum()/pivoted_counts.transf.count()
plt.plot(month_counts_reorder_rate)
plt.title(‘每月用户复购率’)
plt.xlabel(‘月份’)
plt.ylabel(‘百分比’)
在这里插入图片描述

a,b = plt.subplots(figsize=(20,5))
b.plot(pivoted_counts.transf.count())
b.plot(pivoted_counts.transf.sum())
legends = [‘消费人数’,‘二次消费以上的人数’]
b.legend(legends)

plt.title(‘每月消费和二次消费用户数’)
plt.xlabel(‘月份’)
plt.ylabel(‘用户数’)
在这里插入图片描述

RFM

  • R: 最近一次消费
  • F: 消费频率
  • M: 消费金额

user_rfm = data.pivot_table(index=‘用户id’
,values=[‘订单时间’,‘订单数量’,‘订单金额’]
,aggfunc={‘订单时间’:‘max’, ‘订单数量’:‘count’, ‘订单金额’:‘sum’})
user_rfm.head()
在这里插入图片描述

R:最近一次消费我们假设计算时间为2021-1-1

user_rfm[‘最近一次消费’] = (pd.to_datetime(‘2021-01-01 00:00:00’)-user_rfm[‘订单时间’])/np.timedelta64(1,‘D’)
user_rfm[‘最近一次消费’]
在这里插入图片描述

user_rfm = user_rfm.rename(columns={‘最近一次消费’:“R”, ‘订单数量’:“F”, ‘订单金额’:“M”})
user_rfm.head()
在这里插入图片描述

def rfm_func(x):
level = x.apply(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

user_rfm[‘label’] = user_rfm[[‘R’,“F”,‘M’]].apply( lambda x:x-x.mean()).apply(rfm_func,axis=1)
user_rfm.head(10)
在这里插入图片描述

user_rfm.groupby(‘label’).count()
在这里插入图片描述

plt.figure(figsize=(20,10))
plt.pie(user_rfm.groupby(‘label’).count()[‘F’]
,labels=[‘一般保持客户’,‘一般发展客户’,‘潜在客户’,‘重点保持客户’,‘重点发展用户’,‘重点挽留客户’,‘高价值客户’]
,autopct=’%.2f%%’
,explode=(0,0,0,0.1,0.3,0.3,0.5))
plt.title(‘用户分层占比’)
plt.show()
在这里插入图片描述

标签:11,02,plt,订单,2021,counts,data,rfm,user
来源: https://blog.csdn.net/KongQiDeNvEr/article/details/121098598

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有