航空公司客戶價值分析


根據抽取的數據,進行數據探索分析,本案例的探索分析,主要是缺失值分析和異常值分析,通過觀察數據,我們得知,數據存在票價為空值,票價最小值為0,折扣率最小值為0,總飛行公里數大於0的情況。

票價為空,可能是客戶不存在乘機記錄造成的,其它客戶可能是因為客戶乘坐0折機票或者積分兌換產生的。

然后計算出每個屬性對應的空值的屬性和最大值和最小值,然后再進行數據的清洗和變換,數據探索的代碼如下:

# -*- coding: utf-8 -*-
import pandas as pd
inputfile='F:\\python數據挖掘\\chapter7\\demo\\data\\air_data.csv'
outputfile='F:\\python數據挖掘\\chapter7\\demo\\tmp\\tansuo.xls'
data=pd.read_csv(inputfile,encoding='utf-8')
tansuo=data.describe(percentiles=[],include='all').T
tansuo['null']=len(data)-tansuo['count']
tansuo=tansuo[['null','max','min']]
tansuo.columns=[u'空值數',u'最大值',u'最小值']
tansuo.to_excel(outputfile)
#print(tansuo)

得出的結果為:各個屬性的空值數和最大值和最小值,保存到相對應的路徑。

對數據的清洗:

去掉票價為空值,保存票價不為o,然后折扣為0,總的飛行路線為0的情況。

最后得出結果,保存到excel文檔中。

相對應的代碼如下:

# -*- coding: utf-8 -*-
import pandas as pd
inputfile='F:\\python數據挖掘\\chapter7\\demo\\data\\air_data.csv'
outputfile='F:\\python數據挖掘\\chapter7\\demo\\tmp\\clean_data.xls'
data=pd.read_csv(inputfile,encoding='utf-8')
data=data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()]
index=data['SUM_YR_1']!=0
index1=data['SUM_YR_2']!=0
index2=(data['avg_discount']==0) & (data['SEG_KM_SUM']==0)
clean=data[index | index1 | index2]
#print(clean)
clean.to_excel(outputfile)

因為給出的數據太多,所以需要進行數據規約:

數據規約如下:

 進行提取主要影響的因素,進行數據的規約,最后根據這個數據進行模型構建,最后得出結果:

首先涉及幾個因素,主要是時間的提取天數:

計算時間的天數,可以根據numpy.timedelta64進行計算得出:

結果為:

res = d_load - d_ffp
data['L'] = res.map(lambda x: x / np.timedelta64(30 * 24 * 60, 'm'))

數據規約如下:

import numpy as np
import pandas as pd
inputfile='F:\\python數據挖掘\\chapter7\\demo\\tmp\\clean_data.xls'
outputfile='F:\\python數據挖掘\\chapter7\\demo\\tmp\\zs_data.xls'
data=pd.read_excel(inputfile,encoding='utf-8')
#data = pd.read_excel(inputfile, encoding='utf-8')
data = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]
# data['L']=pd.datetime(data['LOAD_TIME'])-pd.datetime(data['FFP_DATE'])
# data['L']=int(((parse(data['LOAD_TIME'])-parse(data['FFP_ADTE'])).days)/30)
####這四行代碼費了我3個小時
d_ffp = pd.to_datetime(data['FFP_DATE'])
d_load = pd.to_datetime(data['LOAD_TIME'])
res = d_load - d_ffp
data['L'] = res.map(lambda x: x / np.timedelta64(30 * 24 * 60, 'm'))

data['R'] = data['LAST_TO_END']
data['F'] = data['FLIGHT_COUNT']
data['M'] = data['SEG_KM_SUM']
data['C'] = data['avg_discount']
data = data[['L', 'R', 'F', 'M', 'C']]
data.to_excel(outputfile)
print('finish')

存入的結果為:

接下來進行數據的標准化:

而且更改列名:

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
inputfile='F:\\python數據挖掘\\chapter7\\demo\\tmp\\zs_data.xls'

outputfile='F:\\python數據挖掘\\chapter7\\demo\\tmp\\zs_code_data.xls'
data=pd.read_excel(inputfile,encoding='utf-8')
data=data-data.mean(axis=0)/data.std(axis=0)
data.columns=['Z'+i for i in data.columns]
#print(data.columns)
data.to_excel(outputfile)
print('finish')

得出的結果為:

接下來就是對模型的構建,因為需要判斷客戶的價值,所以就分為幾種客戶,根據類別,可以給聚類中心賦值為5

 

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from itertools import cycle
 
datafile='./tmp/zscore.xls'
k=5
classoutfile='./tmp/class.xls'
resoutfile='./tmp/result.xls'
data=pd.read_excel(datafile)
 
kmodel=KMeans(n_clusters=k,max_iter=1000)
kmodel.fit(data)
 
# print(kmodel.cluster_centers_)
r1=pd.Series(kmodel.labels_).value_counts()
r2=pd.DataFrame(kmodel.cluster_centers_)
r=pd.concat([r2,r1],axis=1)
r.columns=list(data.columns)+['類別數目']
# print(r)
# r.to_excel(classoutfile,index=False)
 
r=pd.concat([data,pd.Series(kmodel.labels_,index=data.index)],axis=1)
r.columns=list(data.columns)+['聚類類別']
# r.to_excel(resoutfile,index=False)

def density_plot(data):
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    p=data.plot(kind='kde',linewidth=2,subplots=True,sharex=False)
    [p[i].set_ylabel('密度') for i in range(k)]
    [p[i].set_title('客戶群%d' %i) for i in range(k)]
    plt.legend()
    return plt

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM