数据可视化 课件 第10章 银行产品客户复购数据可视化分析案例_第1页
数据可视化 课件 第10章 银行产品客户复购数据可视化分析案例_第2页
数据可视化 课件 第10章 银行产品客户复购数据可视化分析案例_第3页
数据可视化 课件 第10章 银行产品客户复购数据可视化分析案例_第4页
数据可视化 课件 第10章 银行产品客户复购数据可视化分析案例_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1数据可视化第一章Matplotlib的基本使用第二章Matplotlib的进阶使用第三章…第四章目录Contents…第五章数据可视化概述2第十章银行产品客户复购数据可视化分析案例1234数据查看与准备客户基本特征分析复购影响因素分析可视化大屏3数据查看与准备1.41数据查看与准备本章的案例数据为阿里云天池大赛关于金融数据分析赛题(银行客户认购产品预测)所用数据*,数据包括客户个人基本特征、银行营销数据以及宏观经济数据。本章选用公开的“train”子数据集文件。51数据查看与准备字段说明age年龄job工作marital婚姻education受教育程度default是否违约housing是否有房贷loan是否有贷款contact联系方式month上一次联系的月份day_of_week上一次联系是星期几duration上一次联系时长(秒)campaign联系次数pdays上一次联系后的间隔天数previous本次活动前联系次数poutcome之前的营销结果emp_var_rate就业变动率cons_price_index消费者价格指数cons_conf_index消费者信心指数lending_rate3m银行同业拆借率3个月利率nr_employed雇员人数subscribe是否复购*数据来源/competition/entrance/531993/information,注册后即可下载61数据查看与准备(1)查看train数据集importpandas

aspd#导入模块pandas,便于处理数据file_path=r'D:\数据分析教材'

#数据文件路径data=pd.read_csv(file_path+'\\train.csv')#导入数据data.head()#查看数据前5行运行结果如图10.171数据查看与准备(2)查看是否存在缺失值运行结果如图10.2data.isnull().any()#查看数据是否存在缺失值81数据查看与准备(3)修改字段名将数据集字段名以及“subscribe”字段数据转换成为中文。#将数据列名更改为中文,方便数据处理new_col=['序号','年龄','工作','婚姻','受教育程度',

'是否违约','是否有房贷','是否有贷款','联系方式',

'上一次联系月份','上一次联系星期','上一次联系时长(秒)',

'联系次数','上一次联系后的间隔天数','本次活动前联系次数',

'之前营销结果','就业变动率','消费者价格指数','消费者信心指数',

'银行同业拆借率3个月利率','雇员人数','是否复购']data.columns=new_col#将subscribe(是否复购)的值更改为'复购'与'未复购',便于理解data.loc[:,'是否复购'].replace({'yes':'复购','no':'未复购'},inplace=True)9客户基本特征分析2.102客户基本特征分析(1)客户年龄特征分析

数据集中关于客户基本特征的相关数据包含了客户的年龄数据,若想要直观地查看客户群体的年龄分布规律,可以利用Matplotlib库绘制客户年龄直方图。importmatplotlib.pyplotasplt#导入matplotlib.pyplot模块绘图plt.rcParams['font.family']='SimHei'

#将字体设置为黑体

plt.rcParams['axes.unicode_minus']=False#显示负号

plt.figure(figsize=(12,8),dpi=72)#设置图片大小

plt.title('客户年龄分布直方图',fontsize=20)#设置标题,并将字体大小设置为20plt.hist(data['年龄'],color='cornflowerblue')#绘制直方图,并设置颜色plt.grid(True)#显示网格plt.xlabel('年龄(岁)',size=25)#设置x轴

plt.ylabel('人数(人)',size=25)#设置y轴plt.xticks(size=20)#设置x轴刻度,并将字体大小设置为20plt.yticks(size=20)#将y轴刻度字体设置为20

plt.show()#显示图像

112客户基本特征分析(2)客户年龄特征分析数据集中银行与客户的上一次联系时长数据为一组连续型数据,为了查看上一次联系时长的分布情况,可以利用Matplotlib库绘制联系时长直方图。plt.figure(figsize=(12,8),dpi=72)#设置图片大小

plt.title('上一次联系时长分布直方图',fontsize=20)#设置标题,并将字体大小设置为20plt.hist(data['上一次联系时长(秒)'],color='mediumslateblue')#绘制直方图,并设置颜色plt.grid(True)#显示网格plt.xlabel('时长(秒)',size=25)#设置x轴

plt.ylabel('人数(人)',size=25)#设置y轴plt.xticks(size=20)#设置x轴刻度,并将字体大小设置为20plt.yticks(size=20)#将y轴刻度,并将字体大小设置为20

plt.show()#显示图像

122客户基本特征分析(3)客户婚姻状况分析数据集中客户婚姻字段,有married、single、divorced、unknown四个类别,可以利用Matplotlib库中的pie()函数绘制饼图。plt.figure(figsize=(12,8),dpi=72)#设置图片大小

plt.title('婚姻状况统计饼图',fontsize=20)#设置标题,并将字体大小设置为20y=data['婚姻'].value_counts()#对“婚姻”字段进行分类计数plt.pie(y,labels=y.index,#设置标签为婚姻状况的4个类别autopct='%3.1f%%',#显示小数点后1位colors=['cornflowerblue','mediumslateblue','violet','hotpink'],#设置饼图颜色textprops={'fontsize':20,'color':'black'})#设置标签字体大小及颜色

plt.legend(loc=[0.8,0.8],fontsize=20)#设置图例,指定位置为右上角plt.show()#显示图像

132客户基本特征分析(4)客户房贷状况分析数据集中客户是“否有房贷”字段有yes、no、unknown三个类别,想得知客户群体中承担房贷人群的分布比例,通过Matploylib库中的pie()函数绘制环形图。plt.figure(figsize=(12,8),dpi=72)#设置图片大小

plt.title('房贷状况统计饼图',fontsize=20)#设置标题,并将字体大小设置为20y=data['是否有房贷'].value_counts()#对“是否有房贷”字段进行分类计数plt.pie(y,labels=y.index,#设置标签为房贷状况的3个类别autopct='%3.1f%%',#显示小数点后1位colors=['cornflowerblue','mediumslateblue','violet'],#设置环形图颜色textprops={'fontsize':20,'color':'black'},#设置标签字体大小及颜色

wedgeprops={'width':0.5})#设置环形图宽度plt.legend(loc=[0.8,0.8],fontsize=20)#设置图例,指定位置为右上角plt.show()#显示图像

142客户基本特征分析(5)客户违约情况分析客户违约情况字段有yes、no、unknown三个类别,可以利用玫瑰图进行可视化。玫瑰图通过每块扇形代表数值的大小,面积越大则表示数值越大,可以有效地凸显不同类别之间的差异。利用pyecharts.charts模块中Pie()函数进行绘制。frompyecharts.chartsimportPie#导入pyecharts.charts模块用于绘图frompyechartsimportoptionsasopts#导入options模块设置格式

y=data['是否违约'].value_counts()#对违约情况进行计数

pie1=Pie(init_opts=opts.InitOpts(width='1000px',#设置图像大小及背景颜色

height='800px',bg_color='white'))pie1.add(series_name='是否违约',data_pair=[list(i)foriinzip(y.index,y)],#设置数据radius=['20%','80%'],#设置环形大小center=['50%','50%'],#设置玫瑰图在画布上的位置rosetype='radius'

#将图片展示为玫瑰图).set_series_opts(label_opts=opts.LabelOpts(position='poutside',#将标签显示位置设置于图外部formatter='{b}:{c}',font_size=25)#设置标签文字格式

).set_global_opts(title_opts=opts.TitleOpts(title='违约情况玫瑰图',#设置图像标题pos_left='400',#设置标题左右位置pos_top='20',#设置标题上下位置#设置标题字体颜色及大小title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=25)),legend_opts=opts.LegendOpts(is_show=True,#设置显示图例pos_left='600',#设置图例左右位置pos_top='2',#设置图例上下位置textstyle_opts=opts.TextStyleOpts(font_size=25))#设置图例大小

).set_colors(['mediumslateblue','violet','hotpink']#设置图形颜色).render('违约情况玫瑰图.html')#设置文件名称152客户基本特征分析(6)客户复购率分析①在数据集中包含之前的营销结果和是否复购两个字段,可以通过这两项数据计算客户复购率。为了更直观地查看客户复购率,可以借助仪表盘图或水球图进行可视化。利用pyecharts.charts模块中Gauge()函数绘制仪表盘图。frompyecharts.chartsimportGauge#导入pyecharts.charts模块用于绘图frompyechartsimportoptionsasopts#导入options模块设置格式

importmath#导入math模块便于计算

y=y=data['是否复购'].value_counts()['复购']/data['是否复购'].

count()#计算复购率#设置图像大小及背景颜色gauge=Gauge(init_opts=opts.InitOpts(width='1000px',height='800px',bg_color='white'))gauge.add(series_name='复购率',#设置名称data_pair=[('复购率',math.floor(y*10000)/100)],#传入数据,显示小数点后两位radius='80%',#设置半径detail_label_opts=opts.LabelOpts(formatter="{value}%",font_size=32,color="red",font_family="MicrosoftYaHei"),#数值标签的格式设定axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=[(0.25,'cornflowerblue'),(0.5,'mediumslateblue'),(0.75,'violet'),(1,'hotpink')],width=40)),#设置仪表盘宽度pointer=opts.GaugePointerOpts(is_show=True,#显示指针length='80%',#设置指针宽度为仪表盘80%

width=10)#设置指针宽度).set_global_opts(title_opts=opts.TitleOpts(title='复购率仪表盘图',#设置图像标题pos_left='400',#设置标题左右位置pos_top='20',#设置标题上下位置#设置标题字体颜色及大小title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=20)),legend_opts=opts.LegendOpts(is_show=True,#设置显示图例pos_left='600',#设置图例左右位置pos_top='40')#设置图例上下位置).render('复购率仪表盘图.html')#设置文件名称162客户基本特征分析(6)客户复购率分析②利用pyecharts.charts模块中Liquid()函数绘制仪表盘图。frompyecharts.chartsimportLiquid#导入pyecharts.charts模块用于绘图frompyechartsimportoptionsasopts#导入options模块设置格式

importmath#导入math模块便于计算

y=data['是否复购'].value_counts()['复购']/data['是否复购'].

count()#计算复购率#设置图像大小及背景颜色liquid=Liquid(init_opts=opts.InitOpts(width='1000px',height='800px',bg_color='white'))liquid.add('复购率',#设置指标名称

[y],#传入数据center=['50%','50%'],#设置水球在画布中位置shape='circle',#选择水球形状#设置数据标签显示样式,此处保留2位小数label_opts=opts.LabelOpts(formatter='复购率:'+str(math.floor(y*10000)/100)+'%',position='inside')#设置标签显示位置为图中).set_global_opts(title_opts=opts.TitleOpts(title='复购率水球图',#设置标题名称pos_left='450',#设置标题左右位置pos_top='150',#设置标题上下位置

#设置标题字体颜色及大小title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=20))).render('复购率水球图.html')#设置文件名称172客户基本特征分析(7)客户复购与未复购群体了解客户复购与未复购群体有何差异,可用于后续分析复购的影响因素。可以用雷达图进行可视化。雷达图也称为蜘蛛图,该图标由多个从中心向外辐射的坐标轴组成,每个坐标轴代表一个维度,随后使用线将每个坐标轴上的数据点相连。frompyecharts.chartsimportRadar#导入pyecharts.charts模块用于绘图frompyechartsimportoptionsasopts#导入options模块设置格式

importmath#导入math模块便于计算

#计算复购类别下四个指标的平均值并保留两位小数y1_data=data.groupby('是否复购').get_group('复购')[['上一次联系时长(秒)','联系次数','上一次联系后的间隔天数','本次活动前联系次数']].mean().apply(lambdax:round(x,2))#计算未复购类别下四个指标的平均值并保留两位小数y2_data=data.groupby('是否复购').get_group('未复购')[['上一次联系时长(秒)','联系次数','上一次联系后的间隔天数','本次活动前联系次数']].mean().apply(lambdax:round(x,2))radar.add_schema(schema=[opts.RadarIndicatorItem(name='上一次联系时长(秒)',max_=1500),opts.RadarIndicatorItem(name='联系次数',max_=8),opts.RadarIndicatorItem(name='上一次联系后的间隔天数',max_=900),opts.RadarIndicatorItem(name='本次活动前联系次数',max_=2)],).add(series_name='不购买',#绘制购买类别图像data=[y2_data.values.tolist()],#将数据转换为二维列表linestyle_opts=opts.LineStyleOpts(color='blue',width=2),#设置线条颜色和粗细areastyle_opts=opts.AreaStyleOpts(opacity=0.5)#设置阴影比例).add(series_name='购买',#绘制不购买类别图像data=[y1_data.values.tolist()],#将数据转换为二维列表linestyle_opts=opts.LineStyleOpts(color='greenyellow',width=2),#设置颜色以区别第一条线areastyle_opts=opts.AreaStyleOpts(opacity=0.5)#设置阴影比例).set_global_opts(title_opts=opts.TitleOpts(title='复购与未复购群体特征比较雷达图’,

pos_left=350,pos_top=0),#设置标题格式).set_colors(['mediumslateblue','greenyellow']#设置颜色).render('复购与未复购群体特征比较雷达图.html')#设置文件名称18复购影响因素分析3.193复购影响因素分析(1)客户婚姻情况对复购的影响分析使用多维饼图呈现复购与未复购人群婚姻状况,可以通过Matplotlib库实现。labels=['复购:married','复购:single','复购:divorced','复购:unknown',

'未复购:married','未复购:single','未复购:divorced','未复购:unknown']

#设置标签名称plt.pie(data.groupby('是否复购').get_group('复购')['婚姻'].value_counts(),#设置数据colors=['slateblue','mediumturquoise','lightblue','lightsteelblue'],#设置颜色pctdistance=0.85,#数据显示位置autopct='%3.1f%%',#数据显示格式radius=4,#环形宽度textprops={'fontsize':20,'color':'black'})#设置标签格式plt.pie(data.groupby('是否复购').get_group('未复购')['婚姻'].value_counts(),#设置数据colors=['goldenrod','darkKhaki','gold','lightyellow'],#设置颜色pctdistance=0.5,#数据显示位置autopct='%3.1f%%',#数据显示格式radius=3,#环形宽度plt.title('婚姻对复购影响因素分析饼图',fontsize=20,x=0.5,y=2.5)#设置标题大小及位置plt.show()#显示图像203复购影响因素分析(2)客户房贷状况对复购的影响分析为了探究房贷对于复购率的影响,即计算在不同房贷情况的群体中的复购情况,可通过Matplotlib库绘制多维柱形图进行可视化展示。#计算不同房贷情况下是否复购行为的占比y1_data=[data.groupby('是否有房贷').get_group('yes')['是否复购'].value_counts()[0]/data.groupby('是否有房贷').get_group('yes')['是否复购'].count(),data.groupby('是否有房贷').get_group('no')['是否复购'].value_counts()[0]/data.groupby('是否有房贷').get_group('no')['是否复购'].count(),data.groupby('是否有房贷').get_group('unknown')['是否复购'].value_counts()[0]/data.groupby('是否有房贷').get_group('unknown')['是否复购'].count()]y2_data=[data.groupby('是否有房贷').get_group('yes')['是否复购'].value_counts()[1]/data.groupby('是否有房贷').get_group('yes')['是否复购'].count(),data.groupby('是否有房贷').get_group('no')['是否复购'].value_counts()[1]/data.groupby('是否有房贷').get_group('no')['是否复购'].count(),data.groupby('是否有房贷').get_group('unknown')['是否复购'].value_counts()[1]/data.groupby('是否有房贷').get_group('unknown')['是否复购'].count()]

x1_width=range(0,3)#设置第一条柱状图位置x2_width=[i+0.3foriinx1_width]#设置第二条柱形图位置

plt.bar(x1_width,y1_data,lw=0.5,fc='mediumslateblue',width=0.3)#绘制第一条柱状图plt.bar(x2_width,y2_data,lw=0.5,fc='greenyellow',width=0.3)#绘制第二条柱状图plt.xticks(range(0,3),data['是否有房贷'].value_counts().index,fontsize=20)#设置x坐标轴plt.yticks(fontsize=20)#设置y坐标轴plt.legend(data.groupby('是否有房贷').get_group('yes')['是否复购'].value_counts().index,fontsize=20)#设置图例plt.xlabel('是否有房贷',size=25)#设置x轴标签plt.ylabel('复购率',size=25)#设置y轴标签

index=np.arange(len(y1_data))fora,binzip(index,y1_data):#在图上显示数据plt.text(a*1.03,b*1.03,'%.3f%%'%(b*100),ha='center',va='center',fontsize=20)fora,binzip(index,y2_data):#在图上显示数据plt.text(a*1.02+0.3,b*1.02+0.3,'%.3f%%'%(b*100),ha='center',va='bottom',fontsize=20)plt.show()#显示图像213复购影响因素分析(3)之前营销结果对复购的影响分析若要直观呈现在之前营销成功的群体中复购的比例,可以通过pyecharts.charts模块的Pie()函数绘制玫瑰图进行可视化展示。frompyecharts.chartsimportPie#导入pyecharts.charts模块用于绘图frompyechartsimportoptionsasopts#导入options用于初始化

y=data.groupby('之前营销结果').get_group('success')['是否复购'].value_counts()/data.groupby('之前营销结果').get_group('success')['是否复购'].count()#对之前营销结果进行统计y=round(y,3)#保留3位有效数字#设置图像大小及背景颜色pie=Pie(init_opts=opts.InitOpts(width='1000px',height='800px',bg_color='white'))pie.add(series_name='是否复购',data_pair=[list(i)foriinzip(y.index,y)],#设置数据radius=['20%','80%'],#设置环形大小center=['50%','50%'],#设置环形在画布中的位置rosetype='radius'#将图片展示为玫瑰图).set_series_opts(label_opts=opts.LabelOpts(position='poutside',#将标签显示位置设置于图外部formatter='{b}:{c}')#设置标签文字格式).set_global_opts(title_opts=opts.TitleOpts(title='复购比例玫瑰图',#设置图像标题pos_left='400',#设置标题左右位置pos_top='10',#设置标题上下位置#设置标题字体颜色及大小title_textstyle_opts=opts.TextStyleOpts(color='black',font_size=20)),legend_opts=opts.LegendOpts(is_show=True,#设置显示图例pos_left='700',#设置图例左右位置pos_top='50',#设置图例上下位置,textstyle_opts=opts.TextStyleOpts(font_size=20))#设置图例字体大小).set_colors(['mediumslateblue','greenyellow']#设置图形颜色).render('复购比例玫瑰图.html')#设置文件名称223复购影响因素分析(4)前期联系情况及年龄与复购相关性分析①数据集中上一次联系时长、年龄、上一次联系后的间隔天数、联系次数四个字段为连续性数据,可以借助小提琴图或箱图进行可视化展示。#数据准备y1_data=[data.groupby('是否复购').get_group('复购')[['上一次联系时长(秒)']],data.groupby('是否复购').get_group('未复购')[['上一次联系时长(秒)']]]y2_data=[data.groupby('是否复购').get_group('复购')[['年龄']],data.groupby('是否复购').get_group('未复购')[['年龄']]]

foriinrange(1,3):plt.subplot(1,4,i)d=[y1_data,y2_data][i-1]sns.violinplot(data=d,palette='Set2_r',scale='width')#绘制小提琴图plt.title('{}'.format(d[0].columns[0]+'小提琴图'),fontsize=20)#设置标题plt.xticks(range(0,2),['复购','未复购'],fontsize=20)#设置x轴plt.yticks(fontsize=20)#设置y轴plt.xlabel('是否复购',fontsize=20)plt.show()233复购影响因素分析(4)前期联系情况及年龄与复购相关性分析②数据集中上一次联系时长、年龄、上一次联系后的间隔天数、联系次数四个字段为连续性数据,可以借助小提琴图或箱图进行可视化展示。#数据准备col=['是否复购','上一次联系后的间隔天数','联系次数']y1_data=data[col]

plt.figure(figsize=(24,6),dpi=72)#设置图像大小order=['复购','未复购']foriinrange(1,3):plt.subplot(1,4,i)sns.boxplot(x='是否复购',y=col[i],data=y1_data,linewidth=3,order=order,palette='Set2_r',notch=True)#绘制箱线图plt.title('{}'.format(col[i]+'箱线图'),fontsize=20)#设置标题plt.xticks(range(0,2),data['是否复购'].value_counts().index,fontsize=20)#设置x轴坐标plt.yticks(fontsize=20)#设置y轴坐标plt.xlabel('是否复购',fontsize=20)#设置x轴标签plt.ylabel(col[i],fontsize=20)#设置y轴标签plt.show()243复购影响因素分析(5)本次活动前联系次数与复购相关性分析想要了解复购与未复购群体中本次活动前联系次数的分布差异,可以利用Matplotlib库绘制多维条形图进行可视化展示。#计算不同房贷情况下是否复购行为的占比y1_data=data.groupby('是否复购').get_group('复购')['本次活动前联系次数']y2_data=data.groupby('是否复购').get_group('未复购')['本次活动前联系次数']

plt.hist([y1_data,y2_data],color=['greenyellow','mediumslateblue'])#绘制条形图plt.xticks(fontsize=20)#设置x坐标轴plt.yticks(fontsize=20)#设置y坐标轴plt.legend(['复购','未复购'],fontsize=20)#设置图例plt.xlabel('是否复购',size=25)#设置x轴标签plt.ylabel('本次活动前联系次数',size=25)#设置y轴标签plt.show()253复购影响因素分析(6)不同联系次数与上一次联系时长相关性分析想了解不同的本次活动前联系次数与上一次的联系时长是否存在相关性,可以借助Matplotlib库绘制折线图进行可视化展示。

#数据准备y1_data=data.groupby('本次活动前联系次数')[['上一次联系时长(秒)']].mean()

plt.figure(figsize=(12,8),dpi=72)#设置图像大小plt.grid(True)#显示网格sns.lineplot(x='本次活动前联系次数',y='上一次联系时长(秒)',data=y1_data,markers=True)plt.title('不同联系次数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论