《数据分析与挖掘 第七章 航空公司客户价值分析》

航空公司客户价值分析

数据探索
拿到数据,对属性的观测,空值情况,最大最小值情况等:

#对数据进行基本的探索
#返回缺失值个数以及最大最小值

import pandas as pd

datafile= 'air_data.csv' #航空原始数据,第一行为属性标签
resultfile = 'explore.xls' #数据探索结果表

data = pd.read_csv(datafile, encoding = 'utf-8') #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)

explore = data.describe(percentiles = [], include = 'all').T
#包括对数据的基本描述,percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等);T是转置,转置后更方便查阅

explore['null'] = len(data)-explore['count']
#describe()函数自动计算非空值数,需要手动计算空值数

explore = explore[['null', 'max', 'min']]
#这里只选取部分探索结果。
explore.columns = [u'空值数', u'最大值', u'最小值'] #表头重命名
#describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)

explore.to_excel(resultfile) #导出结果

describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)
所以这里先得到的explore是:
在这里插入图片描述
所示为44个属性的情况,然后手动计算其空值个数,并加在explore新的一列:
在这里插入图片描述
然后只取空数值,最大值,最小值,三列重新构成explore表:
在这里插入图片描述
数据清洗
由于空值,异常数据占的比例较少,所以采用丢弃这些数据的处理方法:

#数据清洗,过滤掉不符合规则的数据

import pandas as pd

datafile= 'air_data.csv' #航空原始数据,第一行为属性标签
cleanedfile = 'data_cleaned.csv' #数据清洗后保存的文件

data = pd.read_csv(datafile,encoding='utf-8') #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)

data = data[data['SUM_YR_1'].notnull()&data['SUM_YR_2'].notnull()] #票价非空值才保留


#只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录。
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM_YR_2'] != 0
index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0) #该规则是“与”
data = data[index1 | index2 | index3] #该规则是“或”

data.to_csv(cleanedfile) #导出结果

本次操作分为两个步骤:
第一步,先把表格中未填写的空值null清除掉:原本62988条数据,清除空值之后还剩下62299条数据
第二步,把表格中非正常的零清除出来,只保留非零的,或者平均折扣和飞行公里数同时为零的记录,其他都是非正常的零
index1,index2,index3都是bool型,计算其中有多少个ture,可以乘1,然后算其中有多少个1,即求和即可
sum(index31)
0
sum(index2
1)
51038
sum(index1*1)
52522
发现三种情况下分别有这么多条数据,然后取‘或’,得到总共的是哪些数据,得到62044条数据
清理结果就只剩下62044条数据

属性规约
挑选其中重要的几个属性,其他属性在后面不看,最后选择了六个属性:LOAD_TIME,FFP_DATE,LAST_TO_END,FLIGHT_COUNT,SEG_KM_SUM,avg_discount,构成LRFMC模型。

数据变换
六个属性变成五个指标:
会员入会时间=观测窗口的结束时间-观测窗口的开始时间(单位:月)
L=LOAD_TIME- FFP_DATE
客户最近一次乘坐飞机距离窗口结束的月数=最后一次乘机时间至观测窗口结束时长(单位:月)
R= LAST_TO_END
客户在观测窗口乘坐飞机的次数=观测窗口的飞行次数(单位:次)
F= FLIGHT_COUNT
客户在观测时间内的累计飞行里程=观测窗口的总飞行公里数(单位:公里)
M= SEG_KM_SUM
客户在观测时间内乘坐舱位所对应的的折扣系数的平均值=平均折扣率(单位:无)
C= avg_discount
从62044条数据中提取出每条数据的这五个属性,得到zscoredata.xls

标准化

import pandas as pd

datafile = 'zscoredata.xls' #需要进行标准化的数据文件;
zscoredfile = 'zscoreddata2.xls' #标准差化后的数据存储路径文件;

#标准化处理
data = pd.read_excel(datafile)

data = (data - data.mean(axis = 0))/(data.std(axis = 0))
#简洁的语句实现了标准化变换,类似地可以实现任何想要的变换。
#标准化之后使数据方差为1,均值为0
data.columns=['Z'+i for i in data.columns] #表头重命名。

data.to_excel(zscoredfile, index = False) #数据写入

用聚类进行分类

k-means:

#K-Means聚类算法

import pandas as pd
from sklearn.cluster import KMeans #导入K均值聚类算法

inputfile = 'zscoreddata2.xls' #待聚类的数据文件
k = 5                       #需要进行的聚类类别数

#读取数据并进行聚类分析
data = pd.read_excel(inputfile) #读取数据

#调用k-means算法,进行聚类分析
kmodel = KMeans(n_clusters = k, n_jobs = 8) #n_jobs是并行数,一般等于CPU数较好

kmodel.fit(data) #训练模型

##kmodel.cluster_centers_ #查看聚类中心
##kmodel.labels_ #查看各样本对应的类别

聚类中心:
array([[-0.70078007, -0.4151549 , -0.16073055, -0.16047301, -0.25649954],
[ 0.05226325, -0.00276072, -0.23074075, -0.23502806, 2.17833018],
[ 1.16040163, -0.37741482, -0.08707755, -0.09504673, -0.15842632],
[ 0.48347647, -0.79941777, 2.48236495, 2.42356419, 0.30943042],
[-0.31412102, 1.68662184, -0.57386183, -0.53662079, -0.17228032]])

data['classified_label'] = kmodel.labels_

给data后面加上分类号:
在这里插入图片描述
一共分了五个类:0,1,2,3,4
然后我们要查看每个类包含的情况:

counter0 = data[data['classified_label'] == 0]

在这里插入图片描述
这就是分类为0的
在这里插入图片描述
一共有24625个

分析
根据聚类中心,可以看出每个分的类的个属性的特征,在哪几个特征上比较突出,就可以看出这个类是属于什么类的消费者了,就可以进行下一步对策

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值