2021-04-12


前言

本文主要对航空公司的客户进行价值分析


提示:以下是本篇文章正文内容

一、步骤

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)

总结

本文仅作者对该题的理解,如有异议,欢迎评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值