实战1--航空公司客户价值分析(画图篇)

数据基本信息的探索

第一步:根据数据的实际情况的掌握(数据的空值数量,最大值,最小值,四分位等等)

# 对数据进行基本的探索
import pandas as pd

# 第一行为标签
data_file = '读取文件地址'
# 数据探索结果表
result_file = '.结果存入地址'
# 需要用文本编辑器将数据转换为UTF-8编码
data = pd.read_csv(data_file, encoding='utf-8')
# 包括对数据的基本描述使用discribe()函数;percentiles 参数是指定计算多少的分位数表
# .T 转置
explore = data.describe(percentiles=[], include='all').T
# describe()函数自动计算非空值数,所以需要手动计算空值数
explore['null'] = len(data) - explore['count']
# 输出中文有问题,所以改成了英文。原来是:explore = explore[[u'空值数', u'最大值',u '最小值']]
explore = explore[['null', 'max', 'min']]
# 表头重命名
explore.columns = ['null_num', 'max', 'min']

# 导出结果
explore.to_csv(result_file)

在代码中只是导出了缺失值、最大值和最小值,对数据的观测还需进一步的观察。
通常用画图的方式更为直观,其次在文章的最后补上各个颜色的名字,便于配色。

第二步:绘制各个属性的图片,更为直观的观察数据
第一类:直方图

data_file = '数据文件位置'
# 读取
data = pd.read_csv(data_file, encoding='utf-8')
# 取出日期字段,并规范化
ffp = data['FFP_DATE'].apply(lambda x: datetime.strptime(x, '%Y/%m/%d'))
# 读出年份
ffp_year = ffp.map(lambda x: x.year)

# 绘制各年份会员入会人数直方图
# 设置画布大小
fig = plt.figure(figsize=(8, 5))
# 设置字体以及字符显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.hist(ffp_year, bins='auto', color='#0504aa')
plt.xlabel('年份')
plt.ylabel('入会人数')
plt.title('各年份会员入会人数')
plt.show()
plt.close

第二类:饼图

# 查看性别比例
male = pd.value_counts(data['GENDER'])['男']
female = pd.value_counts(data['GENDER'])['女']
# 绘制会员性别比例饼图
fig = plt.figure(figsize=(7, 4))
plt.pie([male, female], labels=['男', '女'], colors=['lightskyblue', 'lightpink'], autopct='%1.1f%%')
plt.title('标题')
plt.show()
plt.close()

第三类:条形图

# 提取不同级别会员的人数
lv_four = pd.value_counts(data['FFP_TIER'])[4]
lv_five = pd.value_counts(data['FFP_TIER'])[5]
lv_six = pd.value_counts(data['FFP_TIER'])[6]
# 绘制会员各级别人数条形图
fig = plt.figure(figsize=(8, 5))
plt.bar(x=range(3), height=[lv_four, lv_five, lv_six], width=0.4, alpha=0.8, color='hotpink')
plt.xticks([index for index in range(3)], [4, 5, 6])
plt.xlabel('会员等级')
plt.ylabel('会员人数')
plt.title('会员各级别人数')
plt.show()
plt.close()

第四类:箱型图

# 提取会员年龄
print(data['AGE'])
# dropna()可用于删除空值,也可以设置值,删除符合条件的数据。通常用于清洗空值、异常值等用途
age = data['AGE'].dropna()
age = age.astype('int64')
# 绘制会员年龄分布箱型图
fig = plt.figure(figsize=(5, 10))
plt.boxplot(age, patch_artist=True, labels=['会员年龄'],
            # 设置填充颜色
            boxprops={'facecolor':'lightblue'})
plt.title('会员年龄分布箱型图')
# 显示y坐标轴的底线
plt.grid(axis='y')
plt.show()
plt.close()

第三步:观察数据的相关性(个人认为可以放在异常数据清洗后面)
本部分采用的是热力图来查看数据之间的相关性。
1.找出所需要观察的属性整合成一个新的组合
2.计算相关性矩阵
(相关性矩阵分析:每个位置的取值范围为[-1, 1];对角线为A与A本身的关系均为1;数值大于0时,为正相关也就是A会与B同方向变动;数值小于0时,为负相关,也就是A与B反方向变动;数值等于0时,则表示不相关)
3.绘制热力图

# 相关性分析
# 提取属性合并为新数据集
data_corr = data[['FFP_TIER', 'FLIGHT_COUNT', 'LAST_TO_END', 'SEG_KM_SUM', 'EXCHANGE_COUNT', 'Points_Sum']]
# fillna,针对缺失值进行填充:fillna(0)填充为0也可以用字典填充
# 其次fillna(0,inplace=True)中inplace 的参数True代表在直接修改原对象;而False则是创建副本,修改副本
age1 = data['AGE'].fillna(0)
print(data_corr)
print(age1.astype('int64')[2])
data_corr.loc['AGE'] = age1.astype('int64')
# 添加字段(因为year字段是经过处理的所以不从原数据提取)
data_corr['ffp_year'] = ffp_year

# 计算相关性矩阵
dt_corr = data_corr.corr(method='pearson')
print('相关性矩阵为:\n{0}'.format(dt_corr))

# 绘制热力图
import seaborn as sns
# 横纵坐标值一致,所以设置画布为正方形画布
plt.subplots(figsize=(9, 9))
sns.heatmap(dt_corr, annot=True, vmax=1, square=True, cmap='Blues')
plt.show()
plt.close()

注:在添加新列的过程中有报warning,emmmm试了各样的方法还没有解决掉QAQ,但是结果还是正确的,希望有高手可以告知~蟹蟹

注释:数据以及项目背景均来自书《Python数据分析与挖掘实战(第二版)》
附录一:plt.rcParams属性总结

plt.rcParams[’font.sans-serif’] = ‘SimHei’ # 设置字体
plt.rcParams[’axes.unicode_minus’] = False # 字符显示
plt.rcParams[’lines.linewidth’] = 3 # 线条宽度
plt.rcParams[’lines.linestyle’] = ‘-.’ # 线条样式
plt.rcParams[’lines.color’] = ‘blue’ # 线条颜色
plt.rcParams[’lines.marker’] = None # 默认标记
plt.rcParams[’lines.markersize’] = 6 # 标记大小
#x轴,y轴的字体大小
plt.rcParams[’xtick.labelsize’]
plt.rcParams[’ytick.labelsize’]
#x轴,y轴的最大刻度
plt.rcParams[’xtick.major.size’]
plt.rcParams[’ytick.major.size’]
plt.rcParams[’axes.titlesize’] # 子图的标题大小
plt.rcParams[’axes.labelsize’] # 子图的标签大小
plt.rcParams[’figure.dpi’] # 图像分辨率
plt.rcParams[’figure.figsize’] # 图像显示大小
plt.rcParams[’savefig.dpi’] # 图片像素

附录二:颜色目录

颜色
‘aliceblue’‘#F0F8FF’,
‘antiquewhite’‘#FAEBD7’,
‘aqua’‘#00FFFF’,
‘aquamarine’‘#7FFFD4’,
‘azure’‘#F0FFFF’,
‘beige’‘#F5F5DC’,
‘bisque’‘#FFE4C4’,
‘black’‘#000000’,
‘blanchedalmond’‘#FFEBCD’,
‘blue’‘#0000FF’,
‘blueviolet’‘#8A2BE2’,
‘brown’‘#A52A2A’,
‘burlywood’‘#DEB887’,
‘cadetblue’‘#5F9EA0’,
‘chartreuse’‘#7FFF00’,
‘chocolate’‘#D2691E’,
‘coral’‘#FF7F50’,
‘cornflowerblue’‘#6495ED’,
‘cornsilk’‘#FFF8DC’,
‘crimson’‘#DC143C’,
‘cyan’‘#00FFFF’,
‘darkblue’‘#00008B’,
‘darkcyan’‘#008B8B’,
‘darkgoldenrod’‘#B8860B’,
‘darkgray’‘#A9A9A9’,
‘darkgreen’‘#006400’,
‘darkkhaki’‘#BDB76B’,
‘darkmagenta’‘#8B008B’,
‘darkolivegreen’‘#556B2F’,
‘darkorange’‘#FF8C00’,
‘darkorchid’‘#9932CC’,
‘darkred’‘#8B0000’,
‘darksalmon’‘#E9967A’,
‘darkseagreen’‘#8FBC8F’,
‘darkslateblue’‘#483D8B’,
‘darkslategray’‘#2F4F4F’,
‘darkturquoise’‘#00CED1’,
‘darkviolet’‘#9400D3’,
‘deeppink’‘#FF1493’,
‘deepskyblue’‘#00BFFF’,
‘dimgray’‘#696969’,
‘dodgerblue’‘#1E90FF’,
‘firebrick’‘#B22222’,
‘floralwhite’‘#FFFAF0’,
‘forestgreen’‘#228B22’,
‘fuchsia’‘#FF00FF’,
‘gainsboro’‘#DCDCDC’,
‘ghostwhite’‘#F8F8FF’,
‘gold’‘#FFD700’,
‘goldenrod’‘#DAA520’,
‘gray’‘#808080’,
‘green’‘#008000’,
‘greenyellow’‘#ADFF2F’,
‘honeydew’‘#F0FFF0’,
‘hotpink’‘#FF69B4’,
‘indianred’‘#CD5C5C’,
‘indigo’‘#4B0082’,
‘ivory’‘#FFFFF0’,
‘khaki’‘#F0E68C’,
‘lavender’‘#E6E6FA’,
‘lavenderblush’‘#FFF0F5’,
‘lawngreen’‘#7CFC00’,
‘lemonchiffon’‘#FFFACD’,
‘lightblue’‘#ADD8E6’,
‘lightcoral’‘#F08080’,
‘lightcyan’‘#E0FFFF’,
‘lightgoldenrodyellow’‘#FAFAD2’,
‘lightgreen’‘#90EE90’,
‘lightgray’‘#D3D3D3’,
‘lightpink’‘#FFB6C1’,
‘lightsalmon’‘#FFA07A’,
‘lightseagreen’‘#20B2AA’,
‘lightskyblue’‘#87CEFA’,
‘lightslategray’‘#778899’,
‘lightsteelblue’‘#B0C4DE’,
‘lightyellow’‘#FFFFE0’,
‘lime’‘#00FF00’,
‘limegreen’‘#32CD32’,
‘linen’‘#FAF0E6’,
‘magenta’‘#FF00FF’,
‘maroon’‘#800000’,
‘mediumaquamarine’‘#66CDAA’,
‘mediumblue’‘#0000CD’,
‘mediumorchid’‘#BA55D3’,
‘mediumpurple’‘#9370DB’,
‘mediumseagreen’‘#3CB371’,
‘mediumslateblue’‘#7B68EE’,
‘mediumspringgreen’‘#00FA9A’,
‘mediumturquoise’‘#48D1CC’,
‘mediumvioletred’‘#C71585’,
‘midnightblue’‘#191970’,
‘mintcream’‘#F5FFFA’,
‘mistyrose’‘#FFE4E1’,
‘moccasin’‘#FFE4B5’,
‘navajowhite’‘#FFDEAD’,
‘navy’‘#000080’,
‘oldlace’‘#FDF5E6’,
‘olive’‘#808000’,
‘olivedrab’‘#6B8E23’,
‘orange’‘#FFA500’,
‘orangered’‘#FF4500’,
‘orchid’‘#DA70D6’,
‘palegoldenrod’‘#EEE8AA’,
‘palegreen’‘#98FB98’,
‘paleturquoise’‘#AFEEEE’,
‘palevioletred’‘#DB7093’,
‘papayawhip’‘#FFEFD5’,
‘peachpuff’‘#FFDAB9’,
‘peru’‘#CD853F’,
‘pink’‘#FFC0CB’,
‘plum’‘#DDA0DD’,
‘powderblue’‘#B0E0E6’,
‘purple’‘#800080’,
‘red’‘#FF0000’,
‘rosybrown’‘#BC8F8F’,
‘royalblue’‘#4169E1’,
‘saddlebrown’‘#8B4513’,
‘salmon’‘#FA8072’,
‘sandybrown’‘#FAA460’,
‘seagreen’‘#2E8B57’,
‘seashell’‘#FFF5EE’,
‘sienna’‘#A0522D’,
‘silver’‘#C0C0C0’,
‘skyblue’‘#87CEEB’,
‘slateblue’‘#6A5ACD’,
‘slategray’‘#708090’,
‘snow’‘#FFFAFA’,
‘springgreen’‘#00FF7F’,
‘steelblue’‘#4682B4’,
‘tan’‘#D2B48C’,
‘teal’‘#008080’,
‘thistle’‘#D8BFD8’,
‘tomato’‘#FF6347’,
‘turquoise’‘#40E0D0’,
‘violet’‘#EE82EE’,
‘wheat’‘#F5DEB3’,
‘white’‘#FFFFFF’,
‘whitesmoke’‘#F5F5F5’,
‘yellow’‘#FFFF00’,
‘yellowgreen’‘#9ACD32’
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值