• 大小: 15.64MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-17
  • 语言: 其他
  • 标签: python  代码  数据  

资源简介

航空公司客户价值分析完整代码 项目背景:为某航空公司需要以客户为中心,按照客户的需求,在对客户的特点了解上使用不同的营销手段,目的是争取更多新客户,降低客户流失率,降低服务成本,提高业务收入,增加ARPU值(average revenue per user每个用户的平均收益,一般以月为单位),精准的市场营销策略制定。 详见博客:https://blog.csdn.net/u010963246/article/details/90484644

资源截图

代码片段和文件信息

#-*- coding: utf-8 -*- 
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

data = pd.read_csv(r‘.\\data\\air_data.csv‘ encoding=“utf-8“)
print(data.shape)
print(data.info())

data = data[data[“SUM_YR_1“].notnull() & data[“SUM_YR_2“].notnull()]
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]
print(data.shape)

filter_data = data[[ “FFP_DATE“ “LOAD_TIME“ “FLIGHT_COUNT“ “SUM_YR_1“ “SUM_YR_2“ “SEG_KM_SUM“ “AVG_INTERVAL“  “MAX_INTERVAL“ “avg_discount“]]
filter_data[0:5]

data[“LOAD_TIME“] = pd.to_datetime(data[“LOAD_TIME“])
data[“FFP_DATE“] = pd.to_datetime(data[“FFP_DATE“])
data[“入会时间“] = data[“LOAD_TIME“] - data[“FFP_DATE“]
data[“平均每公里票价“] = (data[“SUM_YR_1“] + data[“SUM_YR_2“]) / data[“SEG_KM_SUM“]
data[“时间间隔差值“] = data[“MAX_INTERVAL“] - data[“AVG_INTERVAL“]
deal_data = data.rename(
    columns = {“FLIGHT_COUNT“ : “飞行次数“ “SEG_KM_SUM“ : “总里程“ “avg_discount“ : “平均折扣率“}
    inplace = False

filter_data = deal_data[[“入会时间“ “飞行次数“ “平均每公里票价“ “总里程“ “时间间隔差值“ “平均折扣率“]]
print(filter_data[0:5])
filter_data[‘入会时间‘] = filter_data[‘入会时间‘].astype(np.int64)/(60*60*24*10**9)
print(filter_data[0:5])
print(filter_data.info())

filter_zscore_data = (filter_data - filter_data.mean(axis=0))/(filter_data.std(axis=0))
filter_zscore_data[0:5]


def distEclud(vecA vecB):
    “““
    计算两个向量的欧式距离的平方,并返回
    “““
    return np.sum(np.power(vecA - vecB 2))


def test_Kmeans_nclusters(data_train):
    “““
    计算不同的k值时,SSE的大小变化
    “““
    data_train = data_train.values
    nums = range(2 10)
    SSE = []
    for num in nums:
        sse = 0
        kmodel = KMeans(n_clusters=num n_jobs=4)
        kmodel.fit(data_train)
        # 簇中心
        cluster_ceter_list = kmodel.cluster_centers_
        # 个样本属于的簇序号列表
        cluster_list = kmodel.labels_.tolist()
        for index in range(len(data)):
            cluster_num = cluster_list[index]
            sse += distEclud(data_train[index :] cluster_ceter_list[cluster_num])
        print(“簇数是“ num “时; SSE是“ sse)
        SSE.append(sse)
    return nums SSE


nums SSE = test_Kmeans_nclusters(filter_zscore_data)

#画图,通过观察SSE与k的取值尝试找出合适的k值
# 中文和负号的正常显示
plt.rcParams[‘font.sans-serif‘] = ‘SimHei‘
plt.rcParams[‘font.size‘] = 12.0
plt.rcParams[‘axes.unicode_minus‘] = False
# 使用ggplot的绘图风格
plt.style.use(‘ggplot‘)
## 绘图观测SSE与簇个数的关系
fig=plt.figure(figsize=(10 8))
ax=fig.add_subplot(111)
ax.plot(numsSSEmarker=“+“)
ax.set_xlabel(“n_clusters“ fontsize=18)
ax.set_ylabel(“SSE“ fontsize=18)
fig.suptitle(“KMeans“ fontsize=20)
plt.show()

kmodel = KMeans(n_clusters=5 n_jobs=4)
kmodel.fit(filter_zscore_data)
# 简单打印结果
r1 = pd.Series(kmodel.labels_).value_counts()  # 统计各个类别的数目
r2 = pd.Dataframe(kmodel.cluster_centers_)  # 找出聚类中心
# 所有簇中心坐标值中最大值和最小值
max = r2.value

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-07-05 16:10  aircustmer\
     文件        5428  2019-05-23 16:17  aircustmer\AirTest2.py
     目录           0  2019-07-05 16:09  aircustmer\data\
     文件    14478308  2015-12-05 21:05  aircustmer\data\air_data.csv
     文件    31963648  2019-05-29 14:54  aircustmer\data\result2.xls

评论

共有 条评论