Kaggle英国电商数据分析--k-means与RFM模型结合进行用户群体划分

此次的数据集来自kaggle的关于在线零售业务的交易数据,该公司主要销售礼品,大部分出售对象是面向批发商。
数据链接
数据集字段介绍
数据包含541910行,8个字段,字段内容为:
InvoiceNo: 订单编号,每笔交易有6个整数,退货订单编号开头有字母’C’。
StockCode: 产品编号,由5个整数组成。
Description: 产品描述。
Quantity: 产品数量,有负号的表示退货
InvoiceDate: 订单日期和时间。
UnitPrice: 单价(英镑),单位产品的价格。
CustomerID:客户编号,每个客户编号由5位数字组成。
Country: 国家的名称,每个客户所在国家/地区的名称。

数据处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D 
import seaborn as sns
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import datetime
plt.rcParams['font.sans-serif']=['Simhei']
data=pd.read_csv('data.csv')
data.info()

在这里插入图片描述

缺失值处理

#缺失值占比
data.isnull().mean()

在这里插入图片描述
CustomerID 约25%的数据记录是空的,这意味着有约25%的数据记录没有分配给任何客户。而我们不可能把这些记录的值映射到任何客户。所以这些对于目前是没有用的,因此我们可以将其删除。

data.dropna(axis = 0, subset = ['CustomerID'],inplace = True)

删除重复值

print('重复的数据条目: {}'.format(data.duplicated().sum()))
data.drop_duplicates(inplace = True)

异常值处理

data.describe()

在这里插入图片描述
quantity指的是购买的数量,不可能存在负数;UnitPrice是单价,不可能存在负值。将异常值直接删除。

data=data.loc[(data['Quantity']>0) & (data['UnitPrice']>0)]

RFM划分用户群

data['total_sales'] = data['UnitPrice'] * data['Quantity']

rfm=data.groupby(['CustomerID']).agg({
   
    'InvoiceDate':'max',
    'InvoiceNo':'nunique',
    'total_sales':'sum'
}).sort_index()

rfm.InvoiceDate=rfm.InvoiceDate.dt.date

#创建一个新的变量,计算R(recency)的时候用
Nowdate=max(rfm
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值