调用kmeans_聚类分析—KMeans

1b9161bf0e6378f9b22d576586eb28cb.png

K-Means(K均值)是聚类最常用的方法之一,基于点与点距离的相似度来计算最佳类别归属。

数据来源业务部门,这些数据是关于客户的,苦于没有分析入手点希望数据部门通过对这些数据的分析,给业务部门一些启示,或者提供数据后续分析或者业务思考的建议。

基于以上的场景的描述和需求,由于业务部门可以自己做一些描述性的统计分析,以及此次数据属于探索性数据分析,没有之前的参考案例。故考虑对客户进行聚类分析,分析客户的一些特点。

数据源链接:https://pan.baidu.com/s/1gx0q2k9HtTBM-T7xW3oD2Q

提取码:1k95

数据描述:

  • USER_ID:客户id
  • AVG_ORDERS:平均用户订单数量
  • AVG_MONEY:平均订单价值
  • IS_ACTIVE:是否活跃
  • SEX:性别(0,1,2分别代表未知,男,女)

1.导入库

# 导入库
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltfrom sklearn.cluster import KMeans #Kmeans
from sklearn.preprocessing import MinMaxScaler#数据标准化包
# x效果评估模块
from sklearn.metrics import silhouette_score , calinski_harabaz_score#忽略警告信息
import warnings
warnings.filterwarnings('ignore')#解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

2.导入数据文件

# 导入数据文件
raw_data = pd.read_csv('F:pythonpython数据分析与数据运营课本数据chapter4cluster.txt')
# 数值型特征
numeric_features = raw_data.iloc[:,1:3]
raw_data.head()

dc0126383cd05fb6d848323ec171d4ca.png
numeric_features.head()

69f792ab851bc5fb3db5bda5d646611d.png

3.数据标准化

# 数据标准化
scaler = MinMaxScaler()
scaled_numeric_features = scaler.fit_transform(numeric_features)
print(scaled_numeric_features[:,:2])

4.训练模型

#设置聚类数量
n_clusters = 3 
# random_state = 0的目的是保证每次训练时的初始值一致
model_kmeans = KMeans(n_clusters = n_clusters,random_state = 0) 
model_kmeans.fit(scaled_numeric_features)''’对象持久化:将模型保存至硬盘,便于后期使用时直接调用'''
import pickle
# dump:将python对象序列化保存至本地文件
pickle.dump(model_kmeans,open('my_model_object.pk1','wb'))
#load:从本地文件读取python对象并恢复实例对象
model_kmeans = pickle.load(open('my_model_object.pk1','rb'))

5.模型效果指标评估

# 输出总样本量,总特征数
n_sample,n_feature = raw_data.iloc[:,1:].shape
print('n_sample: %d n n_feature: %d'%(n_sample,n_feature))

n_sample: 1000
n_feature: 4

# 非监督式评估方法
# 平均轮廓系数
silhouette_s = silhouette_score (scaled_numeric_features,model_kmeans.labels_,metric ='euclidean')
# calinski和harabaz得分
calinski_harabaz_s = calinski_harabaz_score(scaled_numeric_features,model_kmeans.labels_)
print('silhouette_s: %f n calinski_harabaz_s: %f'%(silhouette_s,calinski_harabaz_s))

silhouette_s: 0.634086
calinski_harabaz_s: 2860.821834

silhouette_s大于0.5,说明聚类质量较优。优秀与否的基本原则是不同类别间是否具有显著的区分效果。

6.合并数据和特征

# 整合上面的聚类标签到原始数据中
kmeans_labels = pd.DataFrame(model_kmeans.labels_ , columns= ['labels'])
#组合原始数据与标签
kmeans_data = pd.concat((raw_data,kmeans_labels),axis = 1)
kmeans_data.head()

7.计算不同类别的样本量和占比

#计数
label_count = kmeans_data.groupby('labels')['SEX'].count()
#占比
label_count_rate = label_count/kmeans_data.shape[0]
kmeans_record_count = pd.concat((label_count,label_count_rate),axis=1)
kmeans_record_count.columns = ['record_count','record_rate']kmeans_record_count

92792a32ae9247413521ecd42b76a2b9.png
# 计算样本容量
customer_count =  kmeans_record_count.record_count.sum()
customer_count

1000

# 画图
plt.pie(kmeans_record_count.record_rate,autopct="%3.1f%%",labels=kmeans_record_count.index       )
plt.title('不同类别的样本量和占比')

2a211e99aa2aaa4a5cf480e05cb3684d.png

样本数量共1000人

1)分类为‘0’332人,占33.2%,

2)分类为‘1’337人,占33.7%,

3)分类为‘2’331人,占33.1人

8.计算不同聚类类别数值型特征

# 查看一下数值型特征的均值情况
kmeans_numeric_features = kmeans_data.groupby('labels')[['AVG_ORDERS','AVG_MONEY']].mean()
kmeans_numeric_features

c68332661fb1c795d688c7a8f8eb19ef.png
kmeans_numeric_features.plot()

501cc58f278bdc4708e8c0c7cca73f18.png

3个分类中,AVG_ORDERS和AVG_MONEY有轻微变化。

9.计算不同聚类类别分类类型特征

9.1 不同活跃度在不同标签中的占比

kmeans_data['n']=1
kmeans_active_count = kmeans_data.groupby(['labels','IS_ACTIVE'])['n'].count().unstack()
kmeans_active_count

27be5cdcd058b88f575166eb00fd2a04.png
# 'labels = 0' 时,活跃与不活跃用户占比
plt.pie(kmeans_active_count.iloc[0,:],autopct="%3.1f%%",labels=kmeans_active_count.columns)
plt.title('labels = 0')

622ac52bd910ab714ac6e9feee021013.png
# 'labels = 1' 时,活跃与不活跃用户占比
plt.pie(kmeans_active_count.iloc[1,:],autopct="%3.1f%%",labels=kmeans_active_count.columns)
plt.title('labels = 1')

4e45a7af005290a9fa54a525d4378916.png
# 'labels = 2' 时,活跃与不活跃用户占比plt.pie(kmeans_active_count.iloc[2,:],autopct="%3.1f%%",labels=kmeans_active_count.columns)
plt.title('labels = 2')

51df246855d231c59b61046803a4ec06.png

由上面的3个饼图可知,用户是否活跃对标签的影响不大,在各分类中,活跃与不活跃用户基本各占50%。

9.2不同性别在不同标签中的占比

kmeans_sex_count = kmeans_data.groupby(['labels','SEX'])['n'].count().unstack()
kmeans_sex_count

9739c1a034ae56ffbef36a4f6f42982d.png
# 'labels = 0' 时,各性别用户占比
plt.pie(kmeans_sex_count.iloc[0,:],autopct="%3.1f%%",labels=kmeans_sex_count.columns)
plt.title('labels = 0')

7e5f02413fe72a2ba532fa017cf33d9b.png
# 'labels = 1' 时,各性别用户占比
plt.pie(kmeans_sex_count.iloc[1,:],autopct="%3.1f%%",labels=kmeans_sex_count.columns)
plt.title('labels = 1')

c48f34a8591d98b3b81a7a6c1a71e593.png
# 'labels = 2' 时,各性别用户占比
plt.pie(kmeans_sex_count.iloc[2,:],autopct="%3.1f%%",labels=kmeans_sex_count.columns)
plt.title('labels = 2')

a0f0593df7e9bc446264bec9e82cb067.png

由上面的3个饼图可知,性别对分类的影响比较大,近似可以看做每个性别类型对应一个分类。

总结:

通过kmeans聚类分析主要得出以下结论:

  1. 使用 kmeans对客户信息进行聚类,共3个分类,silhouette_s大于0.5,说明聚类质量较优;
  2. 样本数量共1000人
    1. 分类为‘0’332人,占33.2%,
    2. 分类为‘1’337人,占33.7%,
    3. 分类为‘2’331人,占33.1人
  3. 3个分类中,AVG_ORDERS和AVG_MONEY有轻微变化;
  4. 用户是否活跃对标签的影响不大,在各分类中,活跃与不活跃用户基本各占50%;
  5. 用户性别对分类的影响比较大,近似可以看做每个性别类型对应一个分类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某计算机系统20位地址线 8位数据线,同济大学2009-2010(1)微机原理期终考试试题(B卷)...

可作为考研复试真题参考。这是一套资料的其中一部分。同济大学课程考核试卷(B卷) 2009—2010学年第一学期命题教师: 审核教师:课号:100202 课名:微机原理及接口技术(双语) 考试考查:考试 此卷选为:期中考试…

linux下 udf提权_mysql——udf提权

01前言udf ‘user defined function‘,即‘用户自定义函数’。文件后缀为‘.dll’,常用c语言编写。通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令。将MYSQL账号root转化为系统system权限。02思路1.将ud…

软件测试工资高还是运维高,IT行业的6大热门岗位,薪酬都有多高?

IT行业作为当今发展前途最大的几大行业之一,获得了前所未有的广泛关注,且随着科技的发展,这一趋势将更加明显。但是,对于IT行业新人来说,想要在IT行业有所建树,首先应该选择适合的职位。那么IT行业究竟有哪…

卡内基梅隆大学和斯坦福计算机,卡内基梅隆大学并列全美榜首的专业--计算机专业...

不同于别的计算机系的是,卡内基梅隆大学计算机学院异常庞大,专业设置异常众多,要了解清楚确实不易。根据多年的申请经验对卡内基梅隆大学计算机学院进行深层解答。专业排名卡内基梅隆大学在美国排名23名,但是卡内基梅隆大学计算机…

usb扩展坞同时接键盘鼠标_笔记本扩展伴侣,轻松解决接口烦恼,毕亚兹USB-C扩展坞体验...

俗话说,鱼和熊掌不可兼得。生活工作中的数码产品也同样如此,就拿日常工作学习必备的笔记本产品来说,功能和便携同样是难以取舍。大家都知道,伴随近几年笔记本轻量化和高功能的发展,笔记本在接口方面也发生了很大的变化…

css设置 ul的内外边距,9月3日学习CSS选择器,背景设置,及内外边距知识总结

实例html>选择器p:nth-of-type(2) {background-color: crimson;}猪哥朱老师西门大官人欧阳克潘金莲运行实例 点击 "运行实例" 按钮查看在线实例演示:padding 对盒子大小的影响与解决方案!在下面html文档中,div包含了一张像素为200px的图片&…

python一些简单操作_python列表的基本操作有哪些

python列表的基本操作有:1、创建列表,只要把逗号分隔的不同的数据项使用方括号括起来;2、添加新的元素;3、遍历列表;4、访问列表中的值;5、从list删除元素。相关免费学习推荐:python教程(视频)p…

国外ipv6服务器网站,国外 ipv6 服务器地址

国外 ipv6 服务器地址 内容精选换一换安全组创建后,您可以在安全组中设置出方向、入方向规则,这些规则会对安全组内部的云服务器出入方向网络流量进行访问控制,当云服务器加入该安全组后,即受到这些访问规则的保护。入方向&#x…

与context的关系_你还不知道 OpenGL ES 和 EGL 的关系?

什么是 EGLEGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用:与设备的原生窗口系统通信;查询绘图表面的可用类型和配置;创建绘图表面;在OpenGL ES 和其他图形渲染API之间同步渲染&a…

ivew 的ajax,iView-Upload组件分析

源码分析xhr相关知识点Ajax要点分析拖拽事件以及粘贴事件具体实现总结xhr相关知识点XMLHttpRequest.upload 属性返回一个 XMLHttpRequestUpload对象,用来表示上传的进度。通过onprogress属性进行监听,是在 XMLHttpRequest 完成之前周期性调用的函数。xhr.upload.onp…

安装thymeleaf 插件_史上最详细的WordPress安装教程(四):安装mysql 5.7

安装mysql添加源rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm#或wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpmrpm -ivh mysql57-community-release-el7-9.noarch.rpm安装yum -y install mysql-community-ser…

域名与网页服务器的什么对应,简述网站从域名到网页的访问流程

简述网站从域名到网页的访问流程时间:2019-12-301384 次浏览大家对上网并不陌生,不管是IT人士还是普通大众,不管用电脑还是手机,上网已变成大家生活中的一部分。什么是上网?简单点讲就是打开网页,说的详细一…

通过思科构造局域网_cisco设备构建典型局域网

典型局域网----三层交换机VLAN间路由和DHCP配置综合实验作者:Jason_Chenxz日期:2009.8.21内容:在一个典型局域网中实现三层交换机VTP、VLAN创建、VLAN间路由、上联设置以及DHCP服务,为各个VLAN分配IP地址、保留部分地址用于手动分…

分布式系统主从服务器,基于主从服务器的分布式存储系统的设计与实现

摘要:随着计算机网络,特别是Internet的迅猛发展,传统的信息系统概念发生了巨大的变化,基于网络的分布式信息系统在各个领域得到了广泛的应用,在整个社会生活中正发挥着日益突出的作用。Internet已经越来越多地成为构建信息系统的一个关键组成部分。如何在更为广域和…

中山大学曾兆阳_2010—2011学年度中山大学信科院优秀学生奖学金评选结果名单...

院系:信息科学与技术学院一等奖:获奖人数:沈招益姚良超张华张艺腾张起彤马楠熠刘宇熙陈水明赵钦耀张永福程嘉朗赖沛骏陈锦浩林舟驰林庆忠张嘉方晓敏符昊明薛政陈铮涛邓子恒刘冶马俊铖黄哲刘宸亨黄奕丰何浩汪翔郑东学章小强黄晓月二等奖&#…

如何修改7 服务器配置,centos7修改服务器配置

centos7修改服务器配置 内容精选换一换简要介绍Oases是一个转录组组装器,旨在没有任何基因组组装的情况下从短读测序技术生成转录本。开发语言:C一句话描述:基因组装软件开源协议:GPL 3.0建议的版本建议使用版本为最新版本&#x…

常用英雄胜率怎么刷_单排刷英雄胜率或者炸鱼方法。

适用对象:想刷英雄胜率又找不到车队一起刷的,亦或者单纯想炸鱼娱乐一下。适用英雄:有神装二打五终结比赛能力的射手,打野以及部分战士英雄,并且个人水准能使用以上英雄打上王者。准备工具:两个微信or qq号&…

贴纸效果_(新)AE插件:时尚印刷贴纸效果动画帽子眼镜胡须嘴唇图标社交标题库(3001)...

如何获取 | 点击底部“阅读原文”获取▎ 素材说明Live Stickers库为您提供无限的机会!除了动画贴纸外,在项目中,您还将找到许多其他类别。外观类别包括眼睛情感,面具(如Snapchat应用程序中的面具),凉爽的帽子&#xff…

逆向so_安卓逆向 | 分析调试与so调用实战

声明:本教程用于学习交流,如有侵权联系本人删除!点击上方“逆向小白”,选择“加为星标”第一时间关注逆向技术干货!使用fiddler抓取某app登录接口的时候,没有看到任何相关的数据包,猜测app做了防…

ide打开项目运行和调试按钮都是灰色的_如何开发一个IDE

IDE对于语言来说非常重要,让新手能更快入门,让老手能有更高的开发效率。所以我摸索着开发了Fanx语言的IDE。这里分享一些IDE内部工作原理和经验。IDE和编译器IDE为了实现功能,需要对源码进行解析。经过词法分析、语法分析、语义分析。相当于编…