1. 程式人生 > >R——航空公司客戶價值分析

R——航空公司客戶價值分析

用KMeans實現航空公司客戶價值分析,程式碼如下:


###航空公司客戶價值分析


##設定工作空間
setwd("D:/my study/R資料分析與挖掘實戰/data&code/7/上機實驗")

##資料探索分析
#資料讀取
datafile=read.csv("./data/air_data.csv",header=T)
#確定要探索分析的變數
col=c(15:18,20:29)#去掉日期型變數
#輸出變數最值、缺失情況
summary(datafile[,col])

##資料清洗
#丟棄票價為空的記錄
delet_na<-datafile[-which(is.na(datafile$SUM_YR_1)|
                           is.na(datafile$SUM_YR_2)),]
#丟棄票價為0、平均折扣率不為0、總飛行公里數大於0的記錄
index<-((delet_na$SUM_YR_1==0&delet_na$SUM_YR_2==0)
        *(delet_na$avg_discount!=0)
        *(delet_na$SEG_KM_SUM>0))
deletdata<-delet_na[-which(index==1),]
#儲存清洗後的資料
cleanedfile<-deletdata

##資料標準化處理
#資料讀取
datafile=read.csv("./data/zscoredata.csv",he=T)
#資料標準化
zscoredfile=scale(datafile)
colnames(zscoredfile)=c("ZL","ZR","ZF","ZM","ZC")
#資料寫入
write.csv(zscoredfile,"./zjchen.code/zscoreddtata.csv")

##K-Means聚類演算法模型
#資料讀取
inputfile<-read.csv("./data/zscoreddata.csv",he=T)
#聚類分析
result<-kmeans(inputfile,5)
#結果輸出
type<-result$cluster
table(type)#檢視類別分佈
centervec<-result$center



 程式碼執行結果如下:

> ###航空公司客戶價值分析
> 
> 
> ##設定工作空間
> setwd("D:/my study/R資料分析與挖掘實戰/data&code/7/上機實驗")
> 
> ##資料探索分析
> #資料讀取
> datafile=read.csv("./data/air_data.csv",header=T)
> #確定要探索分析的變數
> col=c(15:18,20:29)#去掉日期型變數
> #輸出變數最值、缺失情況
> summary(datafile[,col])
    SUM_YR_1         SUM_YR_2     
 Min.   :     0   Min.   :     0  
 1st Qu.:  1003   1st Qu.:   780  
 Median :  2800   Median :  2773  
 Mean   :  5355   Mean   :  5604  
 3rd Qu.:  6574   3rd Qu.:  6846  
 Max.   :239560   Max.   :234188  
 NA's   :551      NA's   :138     
   SEG_KM_SUM     WEIGHTED_SEG_KM 
 Min.   :   368   Min.   :     0  
 1st Qu.:  4747   1st Qu.:  3219  
 Median :  9994   Median :  6978  
 Mean   : 17124   Mean   : 12777  
 3rd Qu.: 21271   3rd Qu.: 15300  
 Max.   :580717   Max.   :558440  
                                  
 AVG_FLIGHT_COUNT    AVG_BP_SUM     
 Min.   : 0.2500   Min.   :    0.0  
 1st Qu.: 0.4286   1st Qu.:  336.0  
 Median : 0.8750   Median :  752.4  
 Mean   : 1.5422   Mean   : 1421.4  
 3rd Qu.: 1.8750   3rd Qu.: 1690.3  
 Max.   :26.6250   Max.   :63163.5  
                                    
 BEGIN_TO_FIRST   LAST_TO_END   
 Min.   :  0.0   Min.   :  1.0  
 1st Qu.:  9.0   1st Qu.: 29.0  
 Median : 50.0   Median :108.0  
 Mean   :120.1   Mean   :176.1  
 3rd Qu.:166.0   3rd Qu.:268.0  
 Max.   :729.0   Max.   :731.0  
                                
  AVG_INTERVAL     MAX_INTERVAL
 Min.   :  0.00   Min.   :  0  
 1st Qu.: 23.37   1st Qu.: 79  
 Median : 44.67   Median :143  
 Mean   : 67.75   Mean   :166  
 3rd Qu.: 82.00   3rd Qu.:228  
 Max.   :728.00   Max.   :728  
                               
 ADD_POINTS_SUM_YR_1 ADD_POINTS_SUM_YR_2
 Min.   :     0.0    Min.   :     0.0   
 1st Qu.:     0.0    1st Qu.:     0.0   
 Median :     0.0    Median :     0.0   
 Mean   :   540.3    Mean   :   814.7   
 3rd Qu.:     0.0    3rd Qu.:     0.0   
 Max.   :600000.0    Max.   :728282.0   
                                        
 EXCHANGE_COUNT     avg_discount   
 Min.   : 0.0000   Min.   :0.0000  
 1st Qu.: 0.0000   1st Qu.:0.6120  
 Median : 0.0000   Median :0.7119  
 Mean   : 0.3198   Mean   :0.7216  
 3rd Qu.: 0.0000   3rd Qu.:0.8095  
 Max.   :46.0000   Max.   :1.5000  
                                   
> 
> ##資料清洗
> #丟棄票價為空的記錄
> delet_na<-datafile[-which(is.na(datafile$SUM_YR_1)|
+                            is.na(datafile$SUM_YR_2)),]
> #丟棄票價為0、平均折扣率不為0、總飛行公里數大於0的記錄
> index<-((delet_na$SUM_YR_1==0&delet_na$SUM_YR_2==0)
+         *(delet_na$avg_discount!=0)
+         *(delet_na$SEG_KM_SUM>0))
> deletdata<-delet_na[-which(index==1),]
> #儲存清洗後的資料
> cleanedfile<-deletdata
> 
> ##資料標準化處理
> #資料讀取
> datafile=read.csv("./data/zscoredata.csv",he=T)
> #資料標準化
> zscoredfile=scale(datafile)
> colnames(zscoredfile)=c("ZL","ZR","ZF","ZM","ZC")
> #資料寫入
> write.csv(zscoredfile,"./zjchen.code/zscoreddtata.csv")
> 
> ##K-Means聚類演算法模型
> #資料讀取
> inputfile<-read.csv("./data/zscoreddata.csv",he=T)
> #聚類分析
> result<-kmeans(inputfile,5)
Warning message:
Quick-TRANSfer stage steps exceeded maximum (= 3102550) 
> #結果輸出
> type<-result$cluster
> table(type)#檢視類別分佈
type
    1     2     3     4     5 
12407 12408 12414 12413 12409 
> centervec<-result$center