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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-03-08 10:19  苒若  阅读(204)  评论(0)    收藏  举报