基于Kmeans的航空用户数据分析(高分课设+可视化)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

航空数据分析具有重要意义,本项目基于Kmeans展开航空数据分析,提供全部数据集和代码

一、数据选取与清洗

随机选取30000条数据,然后对数据进行清洗,删除SUM_YR_1、SUM_YR_2、avg_discount为零的数据,具体实现代码如下:

 数据读取
data =pd.read_csv('air_data.csv',encoding='ISO-8859-1')
# 随机抽取数据
data = data.sample(30000)
print("已随机抽取"+str(len(data))+'条数据')
# 数据清洗
data = data[data['SUM_YR_1'].notnull() & data['SUM_YR_2'].notnull()]  # 保留总票价非空值
term_1 = data['SUM_YR_1'] != 0
term_2 = data['SUM_YR_2'] != 0
term_3 = data['avg_discount'] == 0
data = data[term_1 | term_2 | term_3]  # 保留票价非零值或平均折扣率为零的值
# 重排序
data = data.reset_index(drop=True)

二、构建LRFMC特征

通过调研文献与网络资料,可知在航空数据分析领域,LRFCM模型可有效挖掘用户的价值,其中,L表示客户关系长度,即客户加入会员的日期至观测窗口结束日期的间隔,该特征反映了用户可能的活跃时长。R表示最近一次乘机时间,即最近一次乘机日期至观测窗口结束日期的间隔,该特征反映用户当前的活跃状态。F表示乘机频率,即客户在观测窗口期内乘坐飞机的次数,该特征反映了客户的忠诚度。M表示飞行总里程,即客户在观测窗口期内的飞行总里程。g该特征反映了客户对乘机的依赖性。C表示平均折扣率,即客户在观测窗口期内的平均折扣率,该特征侧面反映客了户价值高低。
LRFMC特征构造实现代码如下:

# 选取特征字段
data = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]
# 将数据字段转换成LRFMC
data['LOAD_TIME'] = pd.to_datetime(data['LOAD_TIME'])
data['FFP_DATE'] = pd.to_datetime(data['FFP_DATE'])
data_LRFMC = pd.DataFrame()
data_LRFMC['L'] = ((data['LOAD_TIME'] - data['FFP_DATE']) / np.timedelta64(1, 'D')) / 30
data_LRFMC['R'] = data['LAST_TO_END']
data_LRFMC['F'] = data['FLIGHT_COUNT']
data_LRFMC['M'] = data['SEG_KM_SUM']
data_LRFMC['C'] = data['avg_discount']

三、数据标准化与基于KMeans的用户分类

基于sklearn,采用KMeans聚类算法对用户进行分类,聚类特征为LRFMC五个特征,聚类类簇个数为5,在聚类之前,对数据进行了标准化,具体实现代码如下:

# 对LRFMC进行规格化处理
data_LRFMC = (data_LRFMC - data_LRFMC.mean(axis=0)) / (data_LRFMC.std(axis=0))
data_LRFMC.columns = ['Z'+i for i in data_LRFMC.columns]
# KMeans聚类
clf_KMeans = KMeans(n_clusters=5).fit(data_LRFMC)

四、聚类结果分析与展示

为进一步分析聚类结果,采用图表的形式对结果进行可视化展示,首先,在LRFMC特征数据集上添加聚类类别列,然后统计聚类中心,最后采用图表的形式进行展示,具体实现代码如下:

 添加类别列
r = pd.concat([data_LRFMC, pd.Series(clf_KMeans.labels_, index=data_LRFMC.index)], axis=1)
r.columns = list(data_LRFMC.columns) + ['mem_class']
# 获取聚类中心点结果
r1 = pd.Series(clf_KMeans.labels_).value_counts()  # 统计各个类别的数目
r2 = pd.DataFrame(clf_KMeans.cluster_centers_)  # 找出聚类中心
max_v = r2.values.max()
min_v = r2.values.min()
r_center = pd.concat([r2, r1], axis=1)  # 横向连接(0是纵向),得到聚类中心对应的类别下的数目
r_center.columns = list(data_LRFMC.columns) + ['mem_class']

# 查看每个类别下,每个数值得分布数据
for i in range(5):
    data_LRFMC[r['mem_class'] == i].plot(kind='kde', linewidth=2, subplots=True, sharex=False,
                                             layout=(1, data_LRFMC.shape[1]), figsize=(16, 2))

    plt.legend()
plt.show()

# 将各个类别中心点值在同一图形上展示(便于对比)
clu = clf_KMeans.cluster_centers_
feature = ['L', 'R', 'F', 'M', 'C']
colors = ['red', 'green', 'yellow', 'blue', 'black']
for i in range(5):
    plt.plot(feature, clu[i], label='clustre ' + str(i), linewidth=2, color=colors[i], marker='o')
plt.ylabel('values')
plt.show()

# 以雷达图得方式展示(更加直观)
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, polar=True)
center_num = r_center.values
N = len(feature)
for i, v in enumerate(center_num):
    # 设置雷达图的角度,用于平分切开一个圆面
    angles = np.linspace(0, 2 * np.pi, N, endpoint=False)
    # 为了使雷达图一圈封闭起来,需要下面的步骤
    center = np.concatenate((v[:-1], [v[0]]))
    angles = np.concatenate((angles, [angles[0]]))
    # 绘制折线图
    ax.plot(angles, center, 'o-', linewidth=2, label="category_%d : %d" % (i + 1, v[-1]))
    # 填充颜色
    ax.fill(angles, center, alpha=0.25)
    # 添加每个特征的标签
    ax.set_thetagrids(angles * 180 / np.pi, feature, fontsize=15)
    # 设置雷达图的范围
    ax.set_ylim(min_v - 0.1, max_v + 0.1)
    # 添加标题
    plt.title('LRFCM', fontsize=20)
    # 添加网格线
    ax.grid(True)
    # 设置图例
    plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1.0), ncol=1, fancybox=True, shadow=True)
# 显示图形
plt.show()

聚类结果展示如图1-1、1-2、1-3、1-4、1-5、1-6、1-7所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

忠诚客户:根据上诉图表分析结果可知,类别5客户F、M特征值非常高,L特征值较高,在乘机次数和飞行里程以及会员资历上具有较大优势,属于经常乘机的老客户,忠诚度较高,在营销时可加大对这类客户的资源投入,维持此类客户的忠诚度。
发展客户:根据上诉图表分析结果可知,类别2客户C特征值较高,即客户机票票价高,不在意机票折扣,但是,乘机次数不多,在营销时,可加大对此类用户的互动,正确将此类用户发展为乘机次数较多的忠诚客户。
潜在价值客户:根据上诉图表分析结果可知,类别4客户R特征值平均较高,即最近有乘机记录,但是其余特征值均较低,属于发展客户,在营销时,可适当予以优惠等政策,增加该类用户的满意度,努力发展为忠诚用户。
一般客户:根据上诉图表分析结果可知,类别3客户L特征值较高,即会员资历较老,但是F和M值以及R却较低,即乘机次数和里程较少,且最近无乘机,在营销时,可针对性的对此类用户进行回访和优惠,争取挽回此类用户。
低价值用户:根据上诉图表分析结果可知,类被1客户所有特征值均较低,属于低价值用户,在营销时,可较少对此类用户的互动。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VIT19980106

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值