本案例数据预处理主要包括数据清洗、属性规约与数据变换。
数据清洗
本案例数据及代码请自行下载:航空公司客户价值数据以及代码
数据中需要去除缺失值,票价为0的值,折扣率为0且总行程公里大于0的值。
import pandas as p
file_path = 'C:\\Users\\yangyukuan\\Desktop\\yan\\编程学习\\python\\chapter7\\demo\\data\\air_data.csv'
cleaned_file = 'C:\\Users\\yangyukuan\\Desktop\\cleaned.csv'
def main():
data = pd.read_csv(file_path,encoding='utf-8')
#去除空值所在的行
data.dropna()
#过滤列名为SUM_YR_1和SUM_YR_2的空值数据,只保留票价金额不空的人
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
#只考虑一种,折扣率为0,总里程数为0,没坐过飞机,把他视为潜在客户
index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0)
data = data[index1 | index2 | index3]
#导出为csv文档
data.to_csv(cleaned_file)
if __name__ == '__main__':
main()
数据规约
原始数据中属性太多,很多都用不到。我们只选择与我们要建的的模型相关的属性,选择与LRFMC指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END。
import pandas as pd
file_path = 'C:\\Users\\yangyukuan\\Desktop\\cleaned.csv'
cleaned_file = 'C:\\Users\\yangyukuan\\Desktop\\guiyue.csv'
def main():
data = pd.read_csv(file_path,encoding='utf-8')
#构建一个表结构,只选择所需要的几列
a = pd.DataFrame(data,columns = ['FFP_DATE','LOAD_TIME','FLIGHT_COUNT','AVG_DISCOUNT','SEG_KM_SUM','LAST_TO_END'])
a.to_csv(cleaned_file)
if __name__ == '__main__':
main()
数据变换
数据变换是将数据转换为适当的格式,以适应挖掘及算法的需要。本案例中数据变换方式为属性构造和数据标准化。
其中
- L = LOAD_TIME - FFP_DATE
- R = LAST_TO_END
- F = FLIGHT_COUNT
- M = SEG_KM_SUM
- C = AVG_DISCOUNT
import pandas as pd
file_path = 'C:\\Users\\yangyukuan\\Desktop\\z1.csv'
cleaned_file = 'C:\\Users\\yangyukuan\\Desktop\\z2.csv'
def main():
data = pd.read_csv(file_path,encoding='utf-8')
#标准化处理
data = (data - data.mean())/data.std()
data.columns = ['Z'+i for i in data.columns]
data.to_csv(cleaned_file)
if __name__ == '__main__':
main()
之后对处理后的数据进行聚类分析。