【Python】基于KMeans的航空公司客户数据聚类分析

💐大家好!我是码银~,欢迎关注💐:
CSDN:码银
公众号:码银学编程

实验目的和要求

  • 会用Python创建Kmeans聚类分析模型
  • 使用KMeans模型对航空公司客户价值进行聚类分析
  • 会对聚类结果进行分析评价

实验环境

  • pycharm2020
  • Win11
  • Python3.7
  • Anaconda2019

KMeans聚类算法简介

KMeans聚类算法是一种基于中心点的聚类方法,其目标是将数据点划分为K个簇,使得每个簇内的数据点与簇中心的距离之和最小。算法的基本步骤包括:

  1. 初始化:随机选择K个数据点作为初始簇中心。
  2. 分配:将每个数据点分配到最近的簇中心,形成K个簇。
  3. 更新:重新计算每个簇的中心点。
  4. 迭代:重复步骤2和3,直到簇中心不再变化或达到最大迭代次数。

数据的加载和分析

数据集的获取:搜索微信公众号“码银学编程”。回复:航空数据集
在这里插入图片描述
ZL:入会至当前时长,反映客户的活跃时间。
ZR:最近消费时间间隔,反映客户的最近活跃程度。
ZF:消费频次,反映客户的忠诚度。
ZM:消费里程总额,反映客户对航空公司服务的依赖程度。
ZC:舱位等级对应折扣系数,通常舱位等级越高,折扣系数越大。

首先,使用Pandas库加载CSV格式的环境监测数据文件。

def load_data(filepath):"""加载CSV数据文件"""return pd.read_csv(filepath, header=0)

聚类分析

接着,使用Scikit-learn库中的KMeans模型对数据进行聚类分析。通过设置不同的参数,如最大迭代次数、簇的数量等,可以对模型进行调整以适应不同的数据集。

def perform_kmeans(data, n_clusters):"""执行KMeans聚类分析"""model = KMeans(max_iter=300, n_clusters=n_clusters, random_state=None, tol=0.0001)model.fit(data)return model

结果可视化

为了直观展示聚类结果,使用Matplotlib库绘制聚类图。通过将数据点和簇中心在二维平面上表示,可以清晰地观察到数据的分布和簇的划分情况。

def plot_clusters(model, data):"""绘制聚类结果"""plt.figure(figsize=(10, 6))  # 设置图表大小plt.xlabel("ZL-ZR-ZF-ZM-ZC")  # 假设环境指标plt.ylabel("Cluster-center-value")plt.title("聚类分析结果图")colors = ['r', 'g', 'y', 'b', 'k']for i in range(model.n_clusters):plt.plot(data.columns, model.cluster_centers_[i], label=f'Cluster {i}', color=colors[i], marker='o')plt.legend()plt.grid(True)plt.show()

在这里插入图片描述

主函数

def main():# 加载数据data = load_data("air_data.csv")print("数据形状:", data.shape)print("数据前五行:")print(data.head())# 聚类分析kmodel = perform_kmeans(data, 5)print("聚类类别数目统计:")print(pd.Series(kmodel.labels_).value_counts())# 聚类中心cluster_centers = pd.DataFrame(kmodel.cluster_centers_)print("聚类中心:")print(cluster_centers)# 聚类中心与类别数目cluster_info = pd.concat([cluster_centers, pd.Series(kmodel.labels_).value_counts()], axis=1)cluster_info.columns = list(data.columns) + ['Cluster Count']print("聚类中心与类别数目:")print(cluster_info)# 绘制聚类结果图plot_clusters(kmodel, data)if __name__ == "__main__":main()

结果图

分析与讨论

这个结果展示了使用K-Means聚类算法对航空公司客户数据进行分析后得到的聚类中心和每个聚类的样本数量。每一列(ZL、ZR、ZF、ZM、ZC)代表数据集中的一个特征,这些特征分别表示:

  • ZL:入会至当前时长,反映客户的活跃时间。
  • ZR:最近消费时间间隔,反映客户的最近活跃程度。
  • ZF:消费频次,反映客户的忠诚度。
  • ZM:消费里程总额,反映客户对航空公司服务的依赖程度。
  • ZC:舱位等级对应折扣系数,通常舱位等级越高,折扣系数越大。

聚类中心(Cluster Centers)是每个聚类中所有点的均值,可以看作是该聚类的“代表”或“典型”客户。在这个例子中,我们有5个聚类中心和它们的统计数据:

  1. 第一个聚类中心(Cluster 0)的ZL值较低,ZR值较高,ZF和ZM值较低,ZC值也较低。这可能代表一群活跃时间较短、最近消费间隔较长、消费频次和里程较低的客户,他们可能对航空公司的忠诚度和依赖程度不高。

  2. 第二个聚类中心(Cluster 1)的ZL值较高,ZR值较低,ZF值较低,ZM值较低,ZC值较低。这可能代表一群活跃时间较长但最近不太活跃的客户,他们的消费频次和里程也较低。

  3. 第三个聚类中心(Cluster 2)的ZL和ZR值都较低,ZF值较低,ZM值较低,ZC值较高。这可能代表一群活跃时间较短且最近消费间隔较长的客户,他们的消费频次和里程较低,但可能购买了较高舱位等级的机票。

  4. 第四个聚类中心(Cluster 3)的ZL和ZR值都较高,ZF和ZM值较高,ZC值也较高。这可能代表一群活跃时间较长、最近消费频繁、消费里程高且购买了较高舱位等级机票的客户,他们对航空公司的忠诚度和依赖程度很高。

  5. 第五个聚类中心(Cluster 4)的ZL值较低,ZR值较低,ZF值较低,ZM值较低,ZC值较高。这可能代表一群最近活跃且购买了较高舱位等级机票的客户,但他们的总体消费频次和里程较低。

完整代码

import pandas as pd
from matplotlib import pyplot as plt
from sklearn.cluster import KMeansdef load_data(filepath):"""加载CSV数据文件"""return pd.read_csv(filepath, header=0)def perform_kmeans(data, n_clusters):"""执行KMeans聚类分析"""model = KMeans(max_iter=300, n_clusters=n_clusters, random_state=None, tol=0.0001)model.fit(data)return modeldef plot_clusters(model, data):"""绘制聚类结果"""plt.figure(figsize=(10, 6))  # 设置图表大小plt.xlabel("ZL-ZR-ZF-ZM-ZC")plt.ylabel("Cluster-center-value")plt.rcParams['font.sans-serif'] = ['SimHei']  # 确保中文标签正常显示plt.title("聚类分析结果图")cluster_centers = model.cluster_centers_colors = ['r', 'g', 'y', 'b', 'k']for i in range(len(cluster_centers)):plt.plot(data.columns, cluster_centers[i], label=f'Cluster {i}', color=colors[i], marker='o')plt.legend()plt.grid(True)  # 添加网格线plt.show()def main():# 加载数据data = load_data("air_data.csv")print("数据形状:", data.shape)print("数据前五行:")print(data.head())# 聚类分析kmodel = perform_kmeans(data, 5)print("聚类类别数目统计:")print(pd.Series(kmodel.labels_).value_counts())# 聚类中心cluster_centers = pd.DataFrame(kmodel.cluster_centers_)print("聚类中心:")print(cluster_centers)# 聚类中心与类别数目cluster_info = pd.concat([cluster_centers, pd.Series(kmodel.labels_).value_counts()], axis=1)cluster_info.columns = list(data.columns) + ['Cluster Count']print("聚类中心与类别数目:")print(cluster_info)# 绘制聚类结果图plot_clusters(kmodel, data)if __name__ == "__main__":main()

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

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

相关文章

linux-5.10.110内核源码分析 - Freescale ls1012a pcie host驱动

1、dts pcie设备树 1.1、pcie设备树 pcie1: pcie3400000 {compatible "fsl,ls1012a-pcie";reg <0x00 0x03400000 0x0 0x00100000 /* controller registers */0x40 0x00000000 0x0 0x00002000>; /* configuration space */reg-names "regs", &…

尚硅谷k8s 2

p54-56 k8s核心实战 service服务发现 Service:将一组 Pods 公开为网络服务的抽象方法。 #暴露Deploy,暴露deploy会出现在svc kubectl expose deployment my-dep --port8000 --target-port80#使用标签检索Pod kubectl get pod -l appmy-depapiVersion: v1 kind: Service metad…

Python酷库之旅-第三方库Pandas(006)

目录 一、用法精讲 10、pandas.DataFrame.to_excel函数 10-1、语法 10-2、参数 10-3、功能 10-4、返回值 10-5、说明 10-6、用法 10-6-1、数据准备 10-6-2、代码示例 10-6-3、结果输出 11、pandas.ExcelFile类 11-1、语法 11-2、参数 11-3、功能 11-4、返回值 …

您的私人办公室!-----ONLYOFFICE8.1版本的桌面编辑器测评

随时随地创建并编辑文档&#xff0c;还可就其进行协作 ONLYOFFICE 文档是一款强大的在线编辑器&#xff0c;为您使用的平台提供文本文档、电子表格、演示文稿、表单和 PDF 编辑工具。 网页地址链接&#xff1a; https://www.onlyoffice.com/zh/office-suite.aspxhttps://www…

Zynq系列FPGA实现SDI视频编解码,基于GTX高速接口,提供5套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx--Kintex系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB图像缓存视频读取控制HDMI输出RGB转BT1120Gv8500 驱…

Docker 运行Nacos无法访问地址解决方法

参考我的上一篇文章去配置好镜像加速器&#xff0c;镜像加速器不是配置越多越好&#xff0c;重试次数多了会失败 Dockerhub无法拉取镜像配置阿里镜像加速器-CSDN博客 错误的尝试 最开始按照网上的方式去配了一大堆&#xff0c;发现下不下来。 镜像源地址&#xff1a;https:…

Kafka-服务端-副本同步-源码流程

杂 在0.9.0.0之前&#xff0c;Kafka提供了replica lag.max.messages 来控制follower副本最多落后leader副本的消息数量&#xff0c;follower 相对于leader 落后当超过这个数量的时候就判定该follower是失效的&#xff0c;就会踢出ISR&#xff0c;这里的指的是具体的LEO值。 对…

工程文件参考——CubeMX+LL库+SPI主机 阻塞式通用库

文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI&#xff0c;想了很久没想明白其DMA或者IT比较好用的方法&#xff0c;可能之后也会写一个 我个人使用场景大数据流不多&#xff0c;如果是大批量数据交互自然是DMA更好用&#xff0c;但考…

如何摆脱反爬虫机制?

在网站设计时&#xff0c;为了保证服务器的稳定运行&#xff0c;防止非法数据访问&#xff0c;通常会引入反爬虫机制。一般来说&#xff0c;网站的反爬虫机制包括以下几种&#xff1a; 1. CAPTCHA&#xff1a;网站可能会向用户显示CAPTCHA&#xff0c;要求他们在访问网站或执行…

华为实训案例

案例下载 案例内包含空拓扑图、配置完整的拓扑、以及步骤脚本文档&#xff0c;可按需下载。 拓扑图 任务清单 &#xff08;一&#xff09;基础配置 根据附录1拓扑图、附录2地址规划表、附录3设备编号表&#xff0c;配置设备接口及主机名信息。 将所有终端超时时间设置为永不…

【nvm】如何使用nvm优雅的管理Node.js

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、什么是nvm?2.1 概念2.1 安装2.1.1 对于Mac系统2.1.2 对于Windows系统2.1.3 对于…

逻辑这回事(八)---- 时钟与复位

时钟设计总结 时钟和复位是FPGA设计的基础&#xff0c;本章总结了一些逻辑时钟复位设计、使用中出现的问题&#xff0c;给出了设计要点&#xff0c;避免后续问题重犯。时钟和复位&#xff0c;本文都先从板级谈起&#xff0c;再到FPGA芯片级&#xff0c;最后到模块级别。仅在此…

基于单片机的粉尘检测报警防护系统研究

摘要 &#xff1a; 粉尘检测是环境保护的重要环节&#xff0c;传统的粉尘检测防护系统的预防方式较为单一。本文设计了一种基于单片机的粉尘检测报警防护系统&#xff0c;能有效地检测粉尘浓度&#xff0c;进行多种方式的报警防护&#xff0c;以保证工作人员的生命健康和安全。…

软件设计之Java入门视频(11)

软件设计之Java入门视频(11) 视频教程来自B站尚硅谷&#xff1a; 尚硅谷Java入门视频教程&#xff0c;宋红康java基础视频 相关文件资料&#xff08;百度网盘&#xff09; 提取密码&#xff1a;8op3 idea 下载可以关注 软件管家 公众号 学习内容&#xff1a; 该视频共分为1-7…

Floyd判圈算法——环形链表(C++)

Floyd判圈算法(Floyd Cycle Detection Algorithm)&#xff0c;又称龟兔赛跑算法(Tortoise and Hare Algorithm)&#xff0c;是一个可以在有限状态机、迭代函数或者链表上判断是否存在环&#xff0c;求出该环的起点与长度的算法。 …

汽车信息安全--欧盟汽车法规

目录 General regulation 信息安全法规 R155《网络安全及网络安全管理系统》解析 R156《软件升级与软件升级管理系统》解析 General regulation 欧洲的汽车行业受到一系列法律法规的约束&#xff0c;包括 各个方面包括&#xff1a; 1.安全要求&#xff1a;《通用安全条例&a…

基于uniapp(vue3)H5附件上传组件,可限制文件大小

代码&#xff1a; <template><view class"upload-file"><text>最多上传5份附件&#xff0c;需小于50M</text><view class"" click"selectFile">上传</view></view><view class"list" v…

Halcon OCR字符识别(极坐标转换,字符识别)

Halcon OCR字符识别&#xff08;极坐标转换&#xff0c;字符识别&#xff09; 代码 * 1.加载图片 *************************************************** dev_close_window () read_image (Image, ./img) get_image_size (Image, Width, Height) dev_get_window (WindowHandle…

PyCharm

一、介绍 PyCharm 是 JetBrains 公司开发的一款功能强大的 Python 集成开发环境&#xff08;IDE&#xff09;。它专为 Python 开发设计&#xff0c;提供了一系列强大的工具和功能&#xff0c;帮助开发者更高效地编写、调试和维护 Python 代码。以下是对 PyCharm 的详细介绍&am…

MySQL之备份与恢复(六)

备份与恢复 文件系统快照 先决条件和配置 创建一个快照的消耗几乎微不足道&#xff0c;但还是需要确保系统配置可以让你获取在备份瞬间的所有需要的文件的一致性副本。首先&#xff0c;确保系统满足下面这些条件。 1.所有的InnoDB文件(InnoDB的表空间文件和InnoDB的事务日志…