本文是基于《Python数据分析与挖掘实战》的第七章的数据——《航空公司客户价值分析》做的分析对部分代码,做出补充,对原文中的雷达图进行了实现。
1. 背景与目标分析
此项目旨在根据航空公司提供的数据,对其客户进行分类,并且比较不同类别客户的价值,为能够更好的为客户提供个性化服务做参考。
2. 整体流程如下
import pandas as pd
import numpy as np
data = pd.read_csv('air_data.csv', encoding='utf8')
data.head()
MEMBER_NO | FFP_DATE | FIRST_FLIGHT_DATE | GENDER | FFP_TIER | WORK_CITY | WORK_PROVINCE | WORK_COUNTRY | AGE | LOAD_TIME | ... | ADD_Point_SUM | Eli_Add_Point_Sum | L1Y_ELi_Add_Points | Points_Sum | L1Y_Points_Sum | Ration_L1Y_Flight_Count | Ration_P1Y_Flight_Count | Ration_P1Y_BPS | Ration_L1Y_BPS | Point_NotFlight | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 54993 | 2006/11/02 | 2008/12/24 | 男 | 6 | . | 北京 | CN | 31.0 | 2014/03/31 | ... | 39992 | 114452 | 111100 | 619760 | 370211 | 0.509524 | 0.490476 | 0.487221 | 0.512777 | 50 |
1 | 28065 | 2007/02/19 | 2007/08/03 | 男 | 6 | NaN | 北京 | CN | 42.0 | 2014/03/31 | ... | 12000 | 53288 | 53288 | 415768 | 238410 | 0.514286 | 0.485714 | 0.489289 | 0.510708 | 33 |
2 | 55106 | 2007/02/01 | 2007/08/30 | 男 | 6 | . | 北京 | CN | 40.0 | 2014/03/31 | ... | 15491 | 55202 | 51711 | 406361 | 233798 | 0.518519 | 0.481481 | 0.481467 | 0.518530 | 26 |
3 | 21189 | 2008/08/22 | 2008/08/23 | 男 | 5 | Los Angeles | CA | US | 64.0 | 2014/03/31 | ... | 0 | 34890 | 34890 | 372204 | 186100 | 0.434783 | 0.565217 | 0.551722 | 0.448275 | 12 |
4 | 39546 | 2009/04/10 | 2009/04/15 | 男 | 6 | 贵阳 | 贵州 | CN | 48.0 | 2014/03/31 | ... | 22704 | 64969 | 64969 | 338813 | 210365 | 0.532895 | 0.467105 | 0.469054 | 0.530943 | 39 |
5 rows × 44 columns
import chardet
f = open('air_data.csv', 'rb')
data_1 = f.read()
print(chardet.detect(data_1))
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
print(type(data))
# print(data.head())
data.isnull().sum()
<class 'pandas.core.frame.DataFrame'>
MEMBER_NO 0
FFP_DATE 0
FIRST_FLIGHT_DATE 0
GENDER 3
FFP_TIER 0
WORK_CITY 2269
WORK_PROVINCE 3248
WORK_COUNTRY 26
AGE 420
LOAD_TIME 0
FLIGHT_COUNT 0
BP_SUM 0
EP_SUM_YR_1 0
EP_SUM_YR_2 0
SUM_YR_1 551
SUM_YR_2 138
SEG_KM_SUM 0
WEIGHTED_SEG_KM 0
LAST_FLIGHT_DATE 0
AVG_FLIGHT_COUNT 0
AVG_BP_SUM 0
BEGIN_TO_FIRST 0
LAST_TO_END 0
AVG_INTERVAL 0
MAX_INTERVAL 0
ADD_POINTS_SUM_YR_1 0
ADD_POINTS_SUM_YR_2 0
EXCHANGE_COUNT 0
avg_discount 0
P1Y_Flight_Count 0
L1Y_Flight_Count 0
P1Y_BP_SUM 0
L1Y_BP_SUM 0
EP_SUM 0
ADD_Point_SUM 0
Eli_Add_Point_Sum 0
L1Y_ELi_Add_Points 0
Points_Sum 0
L1Y_Points_Sum 0
Ration_L1Y_Flight_Count 0
Ration_P1Y_Flight_Count 0
Ration_P1Y_BPS 0
Ration_L1Y_BPS 0
Point_NotFlight 0
dtype: int64
data.describe()
MEMBER_NO | FFP_TIER | AGE | FLIGHT_COUNT | BP_SUM | EP_SUM_YR_1 | EP_SUM_YR_2 | SUM_YR_1 | SUM_YR_2 | SEG_KM_SUM | ... | ADD_Point_SUM | Eli_Add_Point_Sum | L1Y_ELi_Add_Points | Points_Sum | L1Y_Points_Sum | Ration_L1Y_Flight_Count | Ration_P1Y_Flight_Count | Ration_P1Y_BPS | Ration_L1Y_BPS | Point_NotFlight | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 62988.000000 | 62988.000000 | 62568.000000 | 62988.000000 | 62988.000000 | 62988.0 | 62988.000000 | 62437.000000 | 62850.000000 | 62988.000000 | ... | 62988.000000 | 62988.000000 | 62988.000000 | 62988.0000 | 62988.000000 | 62988.000000 | 62988.000000 | 62988.000000 | 62988.000000 | 62988.000000 |
mean | 31494.500000 | 4.102162 | 42.476346 | 11.839414 | 10925.081254 | 0.0 | 265.689623 | 5355.376064 | 5604.026014 | 17123.878691 | ... | 1355.006223 | 1620.695847 | 1080.378882 | 12545.7771 | 6638.739585 | 0.486419 | 0.513581 | 0.522293 | 0.468422 | 2.728155 |
std | 18183.213715 | <