Python数据分析之航空公司客户价值分析
-
01-data_explore.py
1 #-*- coding: utf-8 -*- 2 3 # 代码7-1 4 5 # 对数据进行基本的探索 6 # 返回缺失值个数以及最大最小值 7 8 import pandas as pd 9 10 datafile= '../data/air_data.csv' # 航空原始数据,第一行为属性标签 11 resultfile = '../tmp/explore_2.csv' # 数据探索结果表 12 13 # 读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码) 14 data = pd.read_csv(datafile, encoding = 'utf-8') 15 16 # 包括对数据的基本描述,percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等) 17 explore = data.describe(percentiles = [], include = 'all').T # T是转置,转置后更方便查阅 18 explore['null'] = len(data)-explore['count'] # describe()函数自动计算非空值数,需要手动计算空值数 19 20 explore = explore[['null', 'max', 'min']] 21 explore.columns = ['空值数', '最大值', '最小值'] # 表头重命名 22 ''' 23 这里只选取部分探索结果。 24 describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、 25 freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值) 26 ''' 27 28 explore.to_csv(resultfile) # 导出结果

-
02-data_distribution.py
1 #-*- coding: utf-8 -*- 2 3 # 代码7-2 4 5 # 对数据的分布分析 6 7 import pandas as pd 8 import matplotlib.pyplot as plt 9 10 datafile= '../data/air_data.csv' # 航空原始数据,第一行为属性标签 11 12 # 读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码) 13 data = pd.read_csv(datafile, encoding = 'utf-8') 14 15 # 客户信息类别 16 # 提取会员入会年份 17 from datetime import datetime 18 ffp = data['FFP_DATE'].apply(lambda x:datetime.strptime(x,'%Y/%m/%d')) 19 ffp_year = ffp.map(lambda x : x.year) 20 # 绘制各年份会员入会人数直方图 21 fig = plt.figure(figsize = (8 ,5)) # 设置画布大小 22 plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示 23 plt.rcParams['axes.unicode_minus'] = False 24 plt.hist(ffp_year, bins='auto', color='#0504aa') 25 plt.xlabel('年份') 26 plt.ylabel('入会人数') 27 plt.title('各年份会员入会人数') 28 plt.show() 29 plt.close 30 31 # 提取会员不同性别人数 32 male = pd.value_counts(data['GENDER'])['男'] 33 female = pd.value_counts(data['GENDER'])['女'] 34 # 绘制会员性别比例饼图 35 fig = plt.figure(figsize = (7 ,4)) # 设置画布大小 36 plt.pie([ male, female], labels=['男','女'], colors=['lightskyblue', 'lightcoral'], 37 autopct='%1.1f%%') 38 plt.title('会员性别比例') 39 plt.show() 40 plt.close 41 42 # 提取不同级别会员的人数 43 lv_four = pd.value_counts(data['FFP_TIER'])[4] 44 lv_five = pd.value_counts(data['FFP_TIER'])[5] 45 lv_six = pd.value_counts(data['FFP_TIER'])[6] 46 # 绘制会员各级别人数条形图 47 fig = plt.figure(figsize = (8 ,5)) # 设置画布大小 48 plt.bar(left=range(3), height=[lv_four,lv_five,lv_six], width=0.4, alpha=0.8, color='skyblue') 49 plt.xticks([index for index in range(3)], ['4','5','6']) 50 plt.xlabel('会员等级') 51 plt.ylabel('会员人数') 52 plt.title('会员各级别人数') 53 plt.show() 54 plt.close() 55 56 # 提取会员年龄 57 age = data['AGE'].dropna() 58 age = age.astype('int64') 59 # 绘制会员年龄分布箱型图 60 fig = plt.figure(figsize = (5 ,10)) 61 plt.boxplot(age, 62 patch_artist=True, 63 labels = ['会员年龄'], # 设置x轴标题 64 boxprops = {'facecolor':'lightblue'}) # 设置填充颜色 65 plt.title('会员年龄分布箱线图') 66 # 显示y坐标轴的底线 67 plt.grid(axis='y') 68 plt.show() 69 plt.close 70 71 72 73 # 代码7-3 74 75 # 乘机信息类别 76 lte = data['LAST_TO_END'] 77 fc = data['FLIGHT_COUNT'] 78 sks = data['SEG_KM_SUM'] 79 80 # 绘制最后乘机至结束时长箱线图 81 fig = plt.figure(figsize = (5 ,8)) 82 plt.boxplot(lte, 83 patch_artist=True, 84 labels = ['时长'], # 设置x轴标题 85 boxprops = {'facecolor':'lightblue'}) # 设置填充颜色 86 plt.title('会员最后乘机至结束时长分布箱线图') 87 # 显示y坐标轴的底线 88 plt.grid(axis='y') 89 plt.show() 90 plt.close 91 92 # 绘制客户飞行次数箱线图 93 fig = plt.figure(figsize = (5 ,8)) 94 plt.boxplot(fc, 95 patch_artist=True, 96 labels = ['飞行次数'], # 设置x轴标题 97 boxprops = {'facecolor':'lightblue'}) # 设置填充颜色 98 plt.title('会员飞行次数分布箱线图') 99 # 显示y坐标轴的底线 100 plt.grid(axis='y') 101 plt.show() 102 plt.close 103 104 # 绘制客户总飞行公里数箱线图 105 fig = plt.figure(figsize = (5 ,10)) 106 plt.boxplot(sks, 107 patch_artist=True, 108 labels = ['总飞行公里数'], # 设置x轴标题 109 boxprops = {'facecolor':'lightblue'}) # 设置填充颜色 110 plt.title('客户总飞行公里数箱线图') 111 # 显示y坐标轴的底线 112 plt.grid(axis='y') 113 plt.show() 114 plt.close 115 116 117 118 # 代码7-4 119 120 # 积分信息类别 121 # 提取会员积分兑换次数 122 ec = data['EXCHANGE_COUNT'] 123 # 绘制会员兑换积分次数直方图 124 fig = plt.figure(figsize = (8 ,5)) # 设置画布大小 125 plt.hist(ec, bins=5, color='#0504aa') 126 plt.xlabel('兑换次数') 127 plt.ylabel('会员人数') 128 plt.title('会员兑换积分次数分布直方图') 129 plt.show() 130 plt.close 131 132 # 提取会员总累计积分 133 ps = data['Points_Sum'] 134 # 绘制会员总累计积分箱线图 135 fig = plt.figure(figsize = (5 ,8)) 136 plt.boxplot(ps, 137 patch_artist=True, 138 labels = ['总累计积分'], # 设置x轴标题 139 boxprops = {'facecolor':'lightblue'}) # 设置填充颜色 140 plt.title('客户总累计积分箱线图') 141 # 显示y坐标轴的底线 142 plt.grid(axis='y') 143 plt.show() 144 plt.close 145 146 147 148 # 代码7-5 149 150 # 提取属性并合并为新数据集 151 data_corr = data[['FFP_TIER','FLIGHT_COUNT','LAST_TO_END', 152 'SEG_KM_SUM','EXCHANGE_COUNT','Points_Sum']] 153 age1 = data['AGE'].fillna(0) 154 data_corr['AGE'] = age1.astype('int64') 155 data_corr['ffp_year'] = ffp_year 156 157 # 计算相关性矩阵 158 dt_corr = data_corr.corr(method = 'pearson') 159 print('相关性矩阵为:\n',dt_corr) 160 161 # 绘制热力图 162 import seaborn as sns 163 plt.subplots(figsize=(10, 10)) # 设置画面大小 164 sns.heatmap(dt_corr, annot=True, vmax=1, square=True, cmap='Blues') 165 plt.show() 166 plt.close











浙公网安备 33010602011771号