【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.mzph.cn/news/867678.shtml

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

相关文章

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

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

介绍东芝TB62262FTAG芯片:高性能两相双极步进电机驱动器

在当今快速发展的科技领域,高性能的电机驱动器对于许多工程项目来说至关重要。东芝的TB62262FTAG这款两相双极步进电机驱动器采用PWM斩波技术,集成了多个先进功能,适用于各种工业和消费类应用。本文将详细介绍TB62262FTAG的参数、性能、优势及…

《向量数据库指南》——Milvus Cloud检索器增强的深度探讨:句子窗口检索与元数据过滤

检索器增强的深度探讨:句子窗口检索与元数据过滤 在信息爆炸的时代,高效的检索系统成为了连接用户与海量数据的关键桥梁。为了进一步提升检索的准确性和用户满意度,检索器增强技术应运而生,其中句子窗口检索与元数据过滤作为两大…

【Qt】day3 自定义控件、框架、定时器、QPainter、QFile

文章目录 自定义控件封装自定义框架定时器第一种方式第二种方式 (推荐) 事件分发器QPainter基本操作高级设置抗锯齿移动坐标原点 画家画资源图片,并实现手动移动 作业QPaintDevice绘图设备QPixmapQimageQPicture QFile文件读写操作QFileInfo文…

移动校园(3):处理全校课程数据excel文档,实现空闲教室查询与课程表查询

首先打开教学平台 然后导出为excel文档 import mathimport pandas as pd import pymssql serverName 127.0.0.1 userName sa passWord 123456 databaseuniSchool conn pymssql.connect(serverserverName,useruserName,passwordpassWord,databasedatabase) cursor conn.cur…

昇思11天

基于 MindSpore 实现 BERT 对话情绪识别 BERT模型概述 BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年开发并发布的一种新型语言模型。BERT在许多自然语言处理(NLP)任务中发挥着重要作用&am…

【C++】map和set详解

目录 1. 关联式容器 2. 键值对pair 3. 树形结构的关联式容器 4. set 4.1 set的介绍 4.2 set的构造 4.3 set的迭代器 4.4 set的容量 4.5 set的常用函数 5. multiset 6. map 6.1 map的介绍 6.2 map的构造 6.3 map的迭代器 6.4 map的容量 6.5 map的operator[] 6.6…

【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例

一、课程体系 1 学前必读 2 Character类相关基础 -人物移动控制 -动画蓝图 3 常见游戏机制基础 -碰撞器、触发器 -物体使用接口 -视角切换 4其他相关设计 -背包系统 -锻造系统 -物体破碎效果 -简易种植系统 -互动物体动画 5课程结语 二、UI部分 思维导图部分 实操部分 …

如何借助AI在20分钟内写一个springboot单表的增删改查

目录 1. AI工具介绍2. 写代码的正确顺序2.1 编写 Entity 类:2.2 编写 Mapper 接口:2.3 编写 Mapper XML 文件(如果使用 MyBatis):2.4 编写 Service 接口:2.5 编写 Service 实现类(ServiceImpl&a…

【pyhton学习】深度理解类和对象

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 一、一切皆对象1.1 对象的概念1.2 如何创建类对象1.3 类型检测 二、属性与方法2.1 如何查看属性与方法2.2 属性和方法…

C语言 | Leetcode C语言题解之第220题存在重复元素III

题目&#xff1a; 题解&#xff1a; struct HashTable {int key;int val;UT_hash_handle hh; };int getID(int x, long long w) {return x < 0 ? (x 1ll) / w - 1 : x / w; }struct HashTable* query(struct HashTable* hashTable, int x) {struct HashTable* tmp;HASH_F…

leetcode每日一题-3101 交替子数组计数

暴力遍历&#xff1a;看起来像是回溯,实际上就是递归 class Solution { private:long long _res 0; public:long long countAlternatingSubarrays(vector<int>& nums) {backtrack(nums, 0);return _res;}void backtrack(vector<int>& nums, long long st…

查询某个县区数据,没有的数据用0补充。

加油&#xff0c;新时代打工人&#xff01; 思路&#xff1a; 先查出有数据的县区&#xff0c;用县区编码判断&#xff0c;不存在县区里的数据。然后&#xff0c;用union all进行两个SQL拼接起来。 SELECTt.regionCode,t.regionName,t.testNum,t.sampleNum,t.squareNum,t.crop…

普中51单片机:数码管显示原理与实现详解(四)

文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言 数码管&#xff08;Seven-Segment Display&#xff09;是一种常见的显示设备&#xff0c;广…

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类 1 安装Visual studio 20203,并安装插件1.1 下载并安装 Visual Studio1.2 步骤二:安装 installer projects 扩展插件2 创建安装项目2.1 创建Windows安装项目2.2 新建应用程序安装文件夹2.3 添加…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道&#xff0c;属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…

SQL脚本初始化数据

创建或选择某个数据库&#xff0c;运行窗口输入&#xff1a;source,再拖入文件&#xff0c;回车即可&#xff1b; 虽然也可以使用图形化工具初始化数据&#xff0c;但是他会有内存限制&#xff0c;也就是较大的sql文件不可以初始化&#xff0c;而运行窗口没有sql文件大小限制&…

本周23个Github有趣项目llama-agents等

23个Github有趣的项目、工具和库 1、Positron 下一代数据科学 IDE。 您使用 VS Code 进行数据科学&#xff08;Python 或 R&#xff09;&#xff0c;但希望它包含专用控制台、变量窗格、数据浏览器和其他用于特定数据工作的功能。您使用 Jupyterlab 进行数据科学&#xff08;…

python读取csv出错怎么解决

Python用pandas的read_csv函数读取csv文件。 首先&#xff0c;导入pandas包后&#xff0c;直接用read_csv函数读取报错OSError&#xff0c;如下&#xff1a; 解决方案是加上参数&#xff1a;enginepython。 运行之后没有报错&#xff0c;正在我欣喜之余&#xff0c;输出一下d…

centos7部署mysql8.0

1.安装MySQL的话会和MariaDB的文件冲突&#xff0c;所以需要先卸载掉MariaDB。查看是否安装mariadb rpm -qa | grep mariadb 2. 卸载mariadb rpm -e --nodeps 查看到的文件名 3.下载MySQL安装包 MySQL官网下载地址: MySQL :: Download MySQL Community Serverhttps://dev.mys…