数据挖掘:航空公司的客户价值分析

news2024/11/5 16:35:07

需求分析

理解并掌握聚类分析方法,掌握数据的标准化,掌握寻找最佳聚类数,掌握聚类的绘图,掌握聚类分析的应用场景。

系统实现

实验流程分析

  • 借助航空公司数据,对客户进行分类
  • 对不同类别的客户进行特征分析,比较不同类别客户的价值
  • 对不同价值的客户类别进行个性化服务,制定相应的营销策略

数据准备

  • 加载本次实验所需要用到的包

打开spyder,输入以下代码

import pandas as pd
import numpy as np
from sklearn.metrics import silhouette_score
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans,AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import datetime
plt.rcParams['font.sans-serif']=['SimHei']  #中文正常显示
plt.rcParams['axes.unicode_minus']=False   #让负号正常显示
  • 读取数据,查看数据和整理数据信息

  https:staticfile.eduplus.netldataSetsystemLiblc3b5c0f37fe24797808613bc713d5585.rar。压缩包中的数据为csv数据,解压并将该数据移动到c:/数据分析/data目录中

读取并查看数据

 

取出SUM_YR_1和SUM_YR_2不为空的样本
 

去除掉第一年、第二年票价均为0,同时平均折扣系数大于零和飞行里程大于零的数据
 

  • 取出LRFMC模型数据,并整理

取出LRFMC模型数据

计算入会天数 

L = pd.to_datetime(new_data['LOAD_TIME'])-pd.to_datetime(new_data['FFP_DATE'])
L = np.int64(L.astype(str).str.split().str[0])  # 会员入会天数          
L=pd.DataFrame(L,columns=['Days'])
air_features = pd.concat([L, new_data.iloc[:, 2:]], axis=1)   # 横向拼接
print(air_features.head())

更改列名,描述性统计 

 重置索引

数据标准化

 

寻找最佳聚类个数

  • 绘制拐点图,寻找下降最剧烈的点
sse=[]
for i in range(2,10):
    result=KMeans(i,random_state=100).fit(data_scale)
    sse.append(result.inertia_)
plt.figure()
plt.plot(range(2,10),sse,marker='o')
plt.xlabel('k')
plt.ylabel('sse')
plt.show()

k=3/4时最激烈 

  • 绘制轮廓系数图,寻找轮廓系数高的点
sil=[]
for i in range(2,8):
    result=KMeans(i,random_state=100).fit(data_scale)
    sil.append(silhouette_score(air_features,result.labels_))
plt.figure()
plt.plot(range(2,8),sil,marker='o')
plt.xlabel('k')
plt.ylabel('sil')
plt.show()

 k=2/3轮廓系数最高,综合k=3

建立聚类模型

  • 绘制聚类图,观察聚类情况

kmeans聚类

绘制聚类图

结果分析

  • 合并数据,并加入分类

  • 聚合各类,对各特征计算平均值

  • 加入客户分类并画图
def customer_type(cluser):
    if cluser==0:
        return '重要发展客户'
    elif cluser==1:
        return '最重要客户'
    else:
        return '一般客户'

air_features['客户类型']=air_features['cluster'].apply(customer_type)
print(air_features.head())

 绘制图像

customer_count=air_features['客户类型'].value_counts()
plt.figure()
plt.subplot(1,2,1)
plt.bar(customer_count.index,customer_count.values)
#添加文本
for a,b in zip(customer_count.index,customer_count.values):
    plt.text(a,b,b,ha='center',va='bottom',color='b')
plt.subplot(1,2,2)
plt.pie(customer_count.values,labels=list(customer_count.index),autopct='%.1f%%', textprops={'color':'r'},shadow=True)
plt.legend(loc=1)
plt.show()

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

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

相关文章

2024最新算法:美洲狮优化算法(Puma Optimizar Algorithm ,POA)求解23个基准函数(提供MATLAB代码)

一、美洲狮优化算法 美洲狮优化算法(Puma Optimizar Algorithm ,POA)由Benyamin Abdollahzadeh等人于2024年提出,其灵感来自美洲狮的智慧和生活。在该算法中,在探索和开发的每个阶段都提出了独特而强大的机制&#xf…

亚信安慧AntDB:数据管理的创新先锋

在亚信安慧AntDB数据库中,其卓越的创新能力得以充分体现,其独特之处在于融合统一与实时处理这两大关键领域。AntDB以其独特的技术和理念,引领着数据库领域的发展潮流,成为众多企业和机构首选的数据库解决方案。在这个信息化时代&a…

OXK3添加字段以及Coding Block Dump

用OXK3为MSEG以及ACDOCA添加字段 SE11激活MSEG发生Coding Black Dump 用CDS视图为结构NSDM_V_MSEG添加字段 CDS相关操作详见eclipse 创建SAP CDS视图事前准备_多喝开水丶的博客-CSDN博客 SAP eclipse创建简单的CDS视图_多喝开水丶的博客-CSDN博客 SE14调整表 AbapCatalog.sql…

什么是微前端

微前端是一种web应用构建方式。 微前端在2016年ThoughtWorks Technology Radar正式被提出。微服务这个被广泛应用于服务端的技术范式扩展到前端领域。现代的前端应用的发展趋势正在变得越来越富功能化,富交互化,也就是SPA应用;这样越来越复杂…

Muduo库编译学习(1)

1.muduo库简介 muduo是由Google大佬陈硕开发,是一个基于非阻塞IO和事件驱动的现代C网络库,原生支持one loop per thread这种IO模型,该库只支持Linux系统,网上大佬对其褒贬不一,作为小白用来学习就无可厚非了。 git仓库…

java枚举类总结

java枚举类总结 一、枚举类的使用1. 定义2. 属性和方法3. 使用 总结 本文记录一下java枚举类的使用与枚举实现原理。 一、枚举类的使用 枚举类是Java中一种特殊的数据类型,用于定义一组常量。下面一起看看枚举类的相关语法吧。 1. 定义 枚举类使用 enum 关键字来定…

SDL基础使用01( 项目创建,绘制矩形)

SDL在VS编译环境下的使用 创建一个VS项目将下载的sdl库include和lib文件夹放到项目工程下添加附加包含目录路径 添加依赖路径 1. 项目创建 #include <iostream> /* SDL项目基本使用 */// 1. 在cpp文件中调用C函数包含头文件时需要用extern "C"包一下…

信息检索(七):Transformer Memory as a Differentiable Search Index

Transformer Memory as a Differentiable Search Index 摘要1. 引言2. 相关工作3. 可微搜索索引3.1 索引策略3.1.1 索引方法3.1.2 文档表示策略 3.2 用于检索的 Docids 表示3.3 训练和优化 4. 实验4.1 基线4.2 实验结果 5. 结论参考资料 原文链接&#xff1a;https://proceedin…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的口罩识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发口罩识别系统对于提升公共卫生安全和疫情防控具有重要意义。本篇博客详细介绍了如何利用深度学习构建一个口罩识别系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并结合了YOLOv7、YOLOv6、YOLOv5的对比&#xff0c;给出…

【接口测试】常见HTTP面试题

目录 HTTP GET 和 POST 的区别 GET 和 POST 方法都是安全和幂等的吗 接口幂等实现方式 说说 post 请求的几种参数格式是什么样的&#xff1f; HTTP特性 HTTP&#xff08;1.1&#xff09; 的优点有哪些&#xff1f; HTTP&#xff08;1.1&#xff09; 的缺点有哪些&#x…

django的模板渲染中的【高级定制】:按数据下标id来提取数据

需求&#xff1a; 1&#xff1a;在一个页面中显示一张数据表的数据 2&#xff1a;不能使用遍历的方式 3&#xff1a;页面中的数据允许通过admin后台来进行修改 4&#xff1a;把一张数据表的某些内容渲染到[xxx.html]页面 5&#xff1a;如公司的新商品页面&#xff0c;已有固定的…

【Redis | 第四篇】基于布隆过滤器解决Redis穿透问题

文章目录 4.基于布隆过滤器解决Redis穿透问题4.1什么是redis的穿透问题4.2解决穿透问题4.3布隆过滤器4.3.1思想4.3.2特点4.3.3缺点 4.4基于Springboot实现布隆过滤器4.4.1导入依赖4.4.2yml配置4.4.3两个工具类&#xff08;1&#xff09;BloomFilterHelper&#xff08;2&#xf…

李沐动手学习深度学习——4.2练习

1. 在所有其他参数保持不变的情况下&#xff0c;更改超参数num_hiddens的值&#xff0c;并查看此超参数的变化对结果有何影响。确定此超参数的最佳值。 通过改变隐藏层的数量&#xff0c;导致就是函数拟合复杂度下降&#xff0c;隐藏层过多可能导致过拟合&#xff0c;而过少导…

KubeSphere平台安装系列之二【Linux单节点部署KubeSphere】(2/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…

Matlab 机器人工具箱 运动学

文章目录 R.fkine()R.ikine()R.ikine6s()R.jacob0、R.jacobn、R.jacob_dotjtrajctraj参考链接官网:Robotics Toolbox - Peter Corke R.fkine() 正运动学,根据关节坐标求末端执行器位姿 mdl_puma560; % 加载puma560模型 qz % 零角度 qr

备战蓝桥杯---状态压缩DP基础2之TSP问题

先来一个题衔接一下&#xff1a; 与上一题的思路差不多&#xff0c;不过这里有几点需要注意&#xff1a; 1.因为某一列的状态还与上上一行有关&#xff0c;因此我们令f[i][j][k]表示第i行状态为j,第i-1行状态为k的最大炮兵数。 因此&#xff0c;我们可以得到状态转移方程&…

IDEA的安装教程

1、下载软件安装包 官网下载&#xff1a;https://www.jetbrains.com/idea/ 2、开始安装IDEA软件 解压安装包&#xff0c;找到对应的idea可执行文件&#xff0c;右键选择以管理员身份运行&#xff0c;执行安装操作 3、运行之后&#xff0c;点击NEXT&#xff0c;进入下一步 4、…

电子科技大学《数据库原理及应用》(持续更新)

前言 电子科技大学的数据库课程缩减了部分的课时&#xff0c;因此&#xff0c;可能并不适合所有要学习数据库的宝子们&#xff0c;但是&#xff0c;本人尽量将所有数据库的内容写出来。本文章适用于本科生的期中和期末的复习&#xff0c;电子科技大学的考生请在复习前先看必读…

【算法】顺时针打印矩阵(图文详解,代码详细注释

目录 题目 代码如下: 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这一道题乍一看,没有包含任何复杂的数据结构和…

Android Gradle开发与应用 (三) : Groovy语法概念与闭包

1. Groovy介绍 Groovy是一种基于Java平台的动态编程语言&#xff0c;与Java是完全兼容&#xff0c;除此之外有很多的语法糖来方便我们开发。Groovy代码能够直接运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;也可以被编译成Java字节码文件。 以下是Groovy的一些…