Python 数据挖掘之航空公司客户价值分析

  • 综述
  • 数据探索分析
  • 数据清洗
  • 标准差标准化
  • K-Means聚类分析
  • DBSCAN聚类分析
  • 结果
  • K-Means聚类分析结果图
  • DBSCAN聚类分析结果图


综述

对航空公司客户数据进行挖掘分析,首先进行数据清洗,然后对数据进行标准差标准化,然后分别使用 KMeans聚类DBSCAN聚类 进行聚类分析,实现对客户的价值分析。完整代码与数据可在我的GitHub中找到,链接在此

数据探索分析

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

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)  # 导出结果

.

数据清洗

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

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)  # 导出结果

标准差标准化

# 标准差标准化

import pandas as pd

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

# 标准化处理
data = pd.read_excel(datafile)
data = (data - data.mean(axis=0)) / (data.std(axis=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 = 'zscoreddata.xls'  # 待聚类的数据文件
k = 5  # 需要进行的聚类类别数

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

# 调用k-means算法,进行聚类分析
kmodel = KMeans(n_clusters=k, n_jobs=4)  # n_jobs是并行数,一般等于CPU数较好
kmodel.fit(data)  # 训练模型

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

DBSCAN聚类分析

# DBSCAN聚类算法

from sklearn.cluster import DBSCAN
import pandas as pd

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

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

# 调用k-means算法,进行聚类分析
kmodel = DBSCAN()  # n_jobs是并行数,一般等于CPU数较好
kmodel.fit(data)  # 训练模型

print(kmodel)

结果

K-Means聚类分析结果图

航空公司客户分类代码python 航空公司客户数据爬取_聚类

DBSCAN聚类分析结果图

航空公司客户分类代码python 航空公司客户数据爬取_python_02