调用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,一经查实,立即删除!

相关文章

linux下 udf提权_mysql——udf提权

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

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

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

国外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人士还是普通大众,不管用电脑还是手机,上网已变成大家生活中的一部分。什么是上网?简单点讲就是打开网页,说的详细一…

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

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

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

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

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

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

电容的q值计算公式_在设计电路中电容容量大小、耐压等级选取详解 (转)

原文链接:在设计电路中电容容量大小、耐压等级选取详解 作者:张飞电容的计算 我们对电容的计算,目的是要知道,我们在电路中需要一个多大的电容。为什么要需要这么个电容?它的电压要多高?它的容量要多大?这是…

一个显示器分两个屏幕_桌面改造计划2.0:一个显示器不够那就两个,桌面好物分享...

日常生活节奏快,工作压力大应该目前年轻人的共识。为了适应快节奏的生活,使得大家往往不得不接受996或者997甚至更长的工作时间。而随着更长的工作时间也导致大家在电脑显示器前的时间更长,从而带来更多的不良影响,这两年过劳死的…

python寻找屏幕上的特定字符_库Turtle:用Python指挥小海龟在屏幕上绘图,流行的儿童编程...

海龟绘图(Turtle Graphics)是向儿童介绍编程的流行方式,源于Wally Feurzig和Seymour Papert1966年开发的LOGO语言。Python内置了Turtle库,基本包含所有原始功能。想象绘图区左上角有一只小海龟,代码就是指挥它动作的命…

flutterapp部分手机无法打开_Flutter run无法在iPhone上打开应用,直接在iphone也无法打开...

在电脑端运行flutter run后,报错信息如下:$ flutter runLaunching lib/main.dart on yuan的 iPhone in debug mode...Automatically signing iOS for device deployment using specified development team in Xcode project: 9D2Q3H854TRunning Xcode bu…

centos7 mysql 安装_CentOS7安装MySQL8.0图文教程(相对最齐全)

登录主机,然后进行下载第一步:在mysql官网下载源文件第二步:Select Operating System: 选择 Red Hat ,CentOS 是基于红帽的,Select OS Version: 选择 linux 7第三步:选择 RPM Bundle 点击 Download第四步&a…

cesium等高线_Cesium开源三维地球离线地图发布源码示例功能

一、概述Cesium开源三维地球离线地图发布源码提供了地图切换、查询定位、模型加载、专题图叠加显示和测量功能等,旨在为用户提供一个可以在Cesium快速加载离线地图或在线地图的解决方案,并提供技术支持。除了现有基本功能之外,还可以根据用户…

python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理以下文章来源于啤酒就辣条 ,作者啤酒就辣条一、网页分析爬取贝壳网石家庄二手房信息,先打开链接https://sjz.ke.com/ershoufang…

hive mysql5.7_安装并使用mysql5.7作为hive的metastore

前言hive的metastore默认是使用derby来作为metastore,但是derby有一个缺点是不能支持多用户链接,虽然你可以通过切换目录来支持,但是不同目录的metastore会不一致,所以这里使用mysql来作为hive的metastore。在linux上安装mysql数据…

gitee如何搭建mysql_Windows基于gitee使用hexo搭建个人博客笔记

声明"全局变量"(以后我提到的站点配置文件和主题配置文件地址):"站点配置文件"位置为 hexo/_config.yml"主题配置文件"位置为 hexo/themes/next/_config.yml搭建hexo安装hexo命令行中输入以下命令(npm即为Node.js环境,如果…

mysql error nr.2003_[MySQL]在安装windows版MySQL时遇到过如下问题Error Nr.1045和Error.Nr.2003,相应解决办法如下...

1、准备mysql server-5.0.27.exe2、按照指导安装,在安装到最后一步时遇到如下两个错误:2.1、出现错误Error Nr.1045解决办法:a).停止MySQL服务:我的电脑-->右键-->管理-->服务和应用程序-->服务 找到名为"MySQL&…