首页 > 其他分享 >大数据-客户价值分析

大数据-客户价值分析

时间:2024-05-11 10:35:00浏览次数:21  
标签:分析 plt pd period month 客户 cdata 价值 data

(1)导入所需要使用的包


import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import re

from sklearn.cluster import KMeans

from datetime import datetime

(2)读取文件


datafile="/data/bigfiles/data2.csv"

data = pd.read_csv(datafile)

(3)查看数据的基本统计信息


data.info()


len(data)


data.describe()

(4)提取属性列


data.columns


data.订单状态.unique()


data = data[data.订单状态 == '交易成功']


data


#提取需要的列

# 这里需要买家id,支付金额,支付时间,最后付款时间

data=data.filter(items=['买家会员名','打款商家金额','订单付款时间'])

(5)处理异常数据


# 统计数据缺失的值

datas=data.isnull().sum()

datas


# 查看完全重复行

result=data.duplicated()

df=data[result]

df


# 删除完全重复的行

data=data.drop_duplicates()


#删除未付款的行

data.drop(data.loc[data['打款商家金额']=='0.00元'].index, inplace=True)


data['订单付款时间'] = data.订单付款时间.map(lambda x: datetime.strptime(x, '%Y/%m/%d'))


data.打款商家金额 = data.打款商家金额.map(lambda x: re.sub('元','',x))

data.打款商家金额 = data.打款商家金额.map(lambda x: float(x))


# print(data)

data =data.groupby("买家会员名").agg({"打款商家金额":"sum","订单付款时间":"max","买家会员名":"count"})


data = data.rename(columns = {'打款商家金额':'总金额','买家会员名':'付款次数'})

(6)计算R并进行标准化,更改列名


# 计算R

# 数据采集时间减去订单付款时间

exdata_date=datetime(2018,12,31)

start_date=datetime(2017,1,2)

data['R(最后一次消费时间)']=exdata_date-data['订单付款时间']

data

(7)计算F并进行标准化,更改列名


from math import ceil

# 计算最后一次消费事件和起始时间

period_day=data['订单付款时间']-start_date

#创建空列表统计月数

period_month=[]

for i in period_day:

    period_month.append(ceil(i.days/30))


# 第一次输出月数统计

print(period_month)


# 遍历清除0值

for i in range(0,len(period_month)):

    if period_month[i]==0:

        period_month[i]=1

# 第二次统计月数

print(period_month)


# 计算f

data['F(月平消费次数)']=data['付款次数']/period_month

data

(8)更改M为列名,对数据进行标准化


data['m(月平均消费金额)']=data['总金额']/period_month

data


# 标准化

cdata=data[['R(最后一次消费时间)','F(月平消费次数)','m(月平均消费金额)']]


# 修改索引

cdata.index = data.index

cdata


z_cdata=(cdata-cdata.mean())/cdata.std()

#重命名列名

z_cdata.columns=['R(标准化)','F(标准化)','m(标准化)']

z_cdata

(9)存储预处理后的文件(不运行)


data.to_csv('/data/bigfiles/client.csv')

(1)读取预处理后的文件(不运行)


data=pd.read('/data/bigfiles/client.csv')

(2)利用肘部法确定k的值(图像展示)


# 用SSE来记录每次聚集类后样本到中心的欧式距离

SSE=[]

# 分别聚类为1~9个类别

for k in range(1,9):

    estimator =KMeans(n_clusters=k)

    estimator.fit(z_cdata)

# 样本到最近聚类中心的距离平方之和

    SSE.append(estimator.inertia_)

#设置x轴数据

X=range(1,9)

#设置字体

plt.rcParams['font.sans-serif']=['SimHei']


#开始绘图

plt.plot(X,SSE,'o-')

plt.xlabel('k')

plt.ylabel('SSE')

plt.title("肘部图")

plt.show()

(3)建立KMeans模型


# 聚类分析

kmodel=KMeans(n_clusters=4,n_init=4,max_iter=100,random_state = 0)

kmodel.fit(z_cdata)

(4)输出各个簇的质心


#查看每条数据所属的聚类类别 

kmodel.labels_

#查看聚类中心坐标

kmodel.cluster_centers_

(5)存储客户类型文件


# 统计所属各个类别的数据个数

r1=pd.Series(kmodel.labels_).value_counts()

r2=pd.DataFrame(kmodel.cluster_centers_)

# 连接labels_与z_cdata

result=pd.concat([r2,r1],axis=1)

#重命名列名

result.columns=['R','F','M']+['类别']

result


# 连接labels_与z_cdata

KM_data=pd.concat([z_cdata,pd.Series(kmodel.labels_,index=z_cdata.index)],axis=1)

data1=pd.concat([data,pd.Series(kmodel.labels_,index=data.index)],axis=1)

#重命名列名

data1.columns=list(data.columns)+['类别']

KM_data.columns=['R','F','M']+['类别']

KM_data.head()

#买家会员名列与类名标签对应

KM_data['买家会员名']=KM_data.index

3、数据可视化(对每个类型客户标准化后的R、F、M数据分别进行图像展示)


# 分组统计求均值

kmeans_analysis =KM_data.groupby(KM_data['类别']).mean()

#重命名列名

kmeans_analysis.columns=['R','F','M']

kmeans_analysis


#绘制柱状图

kmeans_analysis.plot(kind ='bar',rot=0,yticks=range(-1,9))

#完善图表

plt.title("聚类结果统计柱状图")

plt.xticks(range(0,4),['第0类','第1类','第2类','第3类'])

plt.grid(axis='y',color='grey',linestyle='--',alpha=0.5)

plt.ylabel("R,F,M 3个指标均值")

plt.savefig("聚类结果统计柱状图",dpi=128)

标签:分析,plt,pd,period,month,客户,cdata,价值,data
From: https://www.cnblogs.com/Xqiao/p/18185925

相关文章

  • 城市三维模型CIM轻量化的应用分析
    城市三维模型CIM轻量化的应用分析 城市三维模型CIM(CityInformationModeling)在城市规划、管理和可视化方面具有重要的应用价值。然而,由于大规模城市模型的复杂性和庞大的数据量,对于实时应用和高效性能的要求越来越高。为了解决这一挑战,CIM的轻量化技术应运而生,以提高模型的性......
  • 故障分析 | TCP 缓存超负荷导致的 MySQL 连接中断
    1.背景在执行跑批任务的过程中,应用程序遇到了一个问题:部分任务的数据库连接会突然丢失,导致任务无法完成。从数据库的错误日志中,发现了 Abortedconnection 的信息,这说明客户端和服务器之间的通信被异常中断了。2.分析为了找出问题的原因,我们首先根据经验,分析了可能导致连接被......
  • 0511分析类
    1逻辑推理题分为推理类和分析类(一般都从题干中提到最多的信息入手)2.分析类分文真假分析和范畴分析3.真假分析:方法1:找矛盾3种情况1.A和非A(A且B与非A或非B)(A或B和非A且非B)2.A=》B和A且非B3.所有和有些不有些和所有不可能和必然不方法2:假设某人为真,判断其他会不会也为......
  • 关于Karush-Kuhn-Tucker(KKT)条件的分析
    KKT条件约束优化中非常关键的条件,与算法的设计与收敛性分析息息相关。1.拉格朗日乘子我们以简单的一类问题做为讨论KKT条件的序言。一般来说,任何有\(n\)个元素的变量\(x=(x_{1},\ldots,x_{n})^{T}\)和\(m\)个等式约束的优化问题可以写成\[\min_{x\in\mathbb{R}^{n}}\quadf(x......
  • Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列
    全文链接:https://tecdat.cn/?p=33885原文出处:拓端数据部落公众号本文描述了帮助客户使用马尔可夫链蒙特卡洛(MCMC)方法通过贝叶斯方法估计基本的单变量随机波动模型,就像Kim等人(1998年)所做的那样。定义模型以及从条件后验中抽取样本的函数的代码也在Python脚本中提供。  ......
  • synchronized原理-字节码分析、对象内存结构、锁升级过程、Monitor
    本文分析的问题:synchronized字节码文件分析之monitorenter、monitorexit指令为什么任何一个Java对象都可以成为一把锁?对象的内存结构锁升级过程Monitor是什么、源码查看字节码分析synchronized的3种使用方式作用于实例方法,对对象加锁作用于静态方法,......
  • BOSHIDA AC/DC电源模块的市场发展与前景分析
    BOSHIDAAC/DC电源模块的市场发展与前景分析AC/DC电源模块是一种将交流电转化为直流电的电子设备,广泛应用于各种电子设备和系统中。随着电子技术的快速发展,AC/DC电源模块的市场也在不断扩大,并且具有良好的发展前景。 一,AC/DC电源模块在电子设备中的重要性越来越大。现代电子......
  • 记一次网络诈骗者站点的全过程与套路分析
    这是一则漫长又跌宕起伏的故事,小伙伴们请随意就坐,自备茶点;全文包含信息收集与攻克的详细全过程,以及对该类型诈骗思路的分析拆解,以提高防范意识;0x00梦的开始那是一个阳光明媚的晌午,日常的搬砖过程中收到一封公司邮件,看到这熟悉的措辞,又瞄了一眼下面的附件内容,熟悉的气息扑面而来,就......
  • 私域流量优化:如何利用 AIPL 模型洞察客户生命周期价值
    在当今这个数字化时代,商业战场的硝烟从未如此浓烈。随着互联网红利的逐渐消退,公域流量的成本水涨船高,企业间对于有限用户资源的争夺已进入白热化阶段。每一次点击、每一个曝光背后,都是企业不得不承担的高昂代价。在此背景下,传统的依赖公域流量获取新客的模式正遭受前所未有的挑战,......
  • 传统互联网和 Web 3.0 在客户隐私和安全防护上的区别
    传统互联网和Web3.0在客户隐私和安全防护上的区别主要体现在数据管理和处理的方式上。下面详细解释这两种模型的区别:**传统互联网(Web1.0和Web2.0): 中心化数据存储:用户数据通常存储在中心化的服务器上,由服务提供商管理。这种模式存在数据被非法访问或黑客攻击的风险。......