前言
本文主要对航空公司的客户进行价值分析
提示:以下是本篇文章正文内容
一、步骤
1.导入数据
import pandas as pd、
air_data=pd.read_csv('D:/jupter notebook tmp/air_data.csv',encoding='gb18030')
2.数据探索
data.head()
air_data.info()
#发现票价(SUM_YR_1,SUM_YR_2)有为空的记录:可能客户不存在
#发现异常记录,票价为0。平均折扣价为0,总飞行公里数为0的记录
#发现'FFP_DATE','LOAD_TIME','FLIGHT_COUNT','LAST_TO_END','avg_discount','SEG_KM_SUM'为有效特征
3.数据预处理
#丢弃票价(SUM_YR_1,SUM_YR_2)为空的记录:可能客户不存在
exp1=air_data['SUM_YR_1'].notnull()
exp2=air_data['SUM_YR_2'].notnull()
air_data_notnull=air_data[exp1&exp2]
air_data_notnull.head()
print('票价不为空的形状',air_data_notnull.shape)
#删除异常记录,丢弃票价为0。平均折扣价为0,总飞行公里数为0的记录
index1=air_data_notnull['SUM_YR_1']!=0
index2=air_data_notnull['SUM_YR_2']!=0
index3=air_data_notnull['avg_discount']!=0
index4=air_data_notnull['SEG_KM_SUM']>0
airline=air_data_notnull[((index1|index2)&index3&index4)]
print(airline.shape)
4.特征选取和特征处理
airline_selection=airline[['FFP_DATE','LOAD_TIME','FLIGHT_COUNT','LAST_TO_END','avg_discount','SEG_KM_SUM']
L=pd.to_datetime(airline_selection['LOAD_TIME'])-pd.to_datetime(airline_selection['FFP_DATE'])
L=L.astype('str').str.split().str[0]#提取天数——字符串
L=L.astype('int')/30#将天数字符串转换为月数--整形
#合并L和其余特征
airline_feature=pd.concat([L,airline_selection.iloc[:,2:]],axis=1)
5.模型构建和模型训练
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
#标准化数据
data=StandardScaler().fit_transform(airline_feature)
#构建K-Means客户聚类模型
kmeans_model=KMeans(n_clusters=5).fit(data)
#获取聚类中心
kmeans_model.cluster_centers_
#查看聚类标签
kmeans_model.labels_
6.模型可视化
#聚类结果可视化
#自定义绘制雷达图的函数
import matplotlib.pyplot as plt
import numpy as np
def plot(kmeans_model,columns=None):
plt.figure(figsize=(8,6),dpi=80)
plt.rcParams['font.sans-serif']='SimHei'
#设置背景样式
plt.style.use('ggplot')
N=len(columns)#特征数
#设置雷达图的角度
angles=np.linspace(0,2*np.pi,N,endpoint=False)
#数组首尾拼接(让雷达图封闭)
angles=np.concatenate((angles,[angles[0]]))
#h绘图
feature=columns#特征名称
fig=plt.figure()
#设置坐标轴格式,pokar=True,表示极轴
ax=fig.add_subplot(1,1,1,polar=True)
# 添加特征标签
ax.set_thetagrids(angles*180/np.pi,feature)
#设置雷达图的范围
ax.set_ylim(kmeans_model.cluster_centers_.min(),kmeans_model.cluster_centers_.max())
#添加标题
plt.title('客户群特征分布特征图')
#添加网格线
plt.grid()
#线条样式
sam=['r-','o-','g-','b-','p-']
# 绘制折线
lab=[]
for i in range(len(kmeans_model.cluster_centers_)):
values=kmeans_model.cluster_centers_[i]
#使得具体的值首尾相接,(让雷达图封闭)
values=np.concatenate((values,[values[0]]))
#绘制折线
ax.plot(angles,values,sam[i],linewidth=2)
#填充颜色
lab.append('客户群'+str(i))
ax.fill(angles,values,alpha=0.25)
plt.legend()
plt.show()
plot(kmeans_model,airline_feature.columns)
总结
本文仅作者对该题的理解,如有异议,欢迎评论