第4章【综合练习题】文件bankpep.csv存放着银行储户的基本信息,数据格式如下表所示,请通过绘图对这些客户数据进行探索性分析。客户年龄分布的直方图和密度图

本书中所有的数据文件保存在data文件夹中,链接如下:

https://pan.baidu.com/s/1Tu__B-YfXDz_yXzbzNKB4A?pwd=sfw2 
提取码:sfw2

 P86综合练习题

1.文件bankpep.csv存放着银行储户的基本信息,数据格式如下表所示:

id

age

sex

region

income

married

children

car

save_act

current_act

mortgage

pep

编号

年龄

性别

区域

收入

婚否

孩子数

有车否

存款账户

现金账户

是否抵押

接受新业务

请通过绘图对这些客户数据进行探索性分析。

1)客户年龄分布的直方图和密度图,如下图:

import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('data/bankpep.csv')
#1)
data['age'].plot(kind = 'hist',bins = 10,normed = True,title = 'Customer Age')
data['age'].plot(kind = 'kde',style = 'k-')
plt.xlabel('Age')
plt.ylabel('Density')
plt.show()

2)客户年龄和收入关系的散点图,如下图:

列举以下两种方法:

【方法一】:采用DataFrame.plot(kind = 'scatter',x,y,title,label,grid,xlim,marker,s)绘图。

【方法二】:采用散点图plt.scatter(x,y,marker,s)函数绘图

#2)
#方法一
data[['age','income']].plot(kind = 'Scatter',x = 'age',y = 'income',marker = 's',s = 8,title = 'Customer Income',label = '(age,income)',grid = True,
                            xlim = [0,80])     #s设置点大小
plt.xlabel('Age')
plt.ylabel('Income')
plt.show()


#方法二:采用scatter函数绘图
plt.figure(figsize = (10,6))         #更改图片大小与背景
plt.scatter(data['age'],data['income'],marker = 's',s = 10)   #s设置点大小
plt.grid()
plt.title('Customer Income')
plt.xlabel('Age')
plt.ylabel('Income')
plt.xlim([0,80])
plt.legend(('(age,income)',))        #加“,”使图例显示完整
plt.show()

3)绘制散点图观察账户(年龄,收入,孩子数)之间的关系,对角线显示直方图,如下图:

#3)
pd.plotting.scatter_matrix(data[['age','income','children']],c = 'm')   #c用来设置颜色:m为红紫色
plt.show()

4)按区域展示平均收入的柱状图,并显示标准差,如下图:

列举以下两种方法: 

【方法一】:采用DataFrame.plot(kind = 'bar',yerr = std,rot,title,color)绘制垂直柱状图(yerr = std标y轴的轴向误差线)

【方法二】:采用柱状图plt.bar(x,height,width,yerr = std,color)函数绘图。注:bar函数中的x值、height值、yerr为Series或列表

#4)
#方法一
import numpy as np
mean = data.groupby(['region']).agg({'income':np.mean})
std = data.groupby(['region']).agg({'income':np.std})
mean.plot(kind = 'bar',yerr = std ,rot = 45,title = 'Customer Income',legend = False,color = 'r')
plt.xlabel('Region')
plt.show()


#方法二:bar函数
import numpy as np
mean = data.groupby(['region']).agg({'income':np.mean})
std = data.groupby(['region']).agg({'income':np.std})
plt.bar(mean.index,mean.income,color = 'r',width = 0.5,yerr = std.income.tolist())    # bar函数中的x值、height值、yerr为Series或列表。
plt.xlabel('Region')
plt.xticks(rotation = 45)
plt.title('Customer Income')
plt.show()

 5)多子图绘制:账户中性别占比饼图,有车的性别占比饼图,按孩子数的账户占比饼图,如下图:

【方法一】:figure.add_subplot()函数,Series.plot函数绘图。Series类型的可不加ax=ax1,ax2,ax3

【方法二】:figure.add_subplot()函数,plt.pie(x,labels,startangle,autopct')函数绘图

【方法三】与【方法四】均采用plt.subplot()函数绘图。用法同figure.add_subplot()

#5)
#方法一:Series.plot绘图,fig.add_subplot()函数,Series类型的可不加ax=ax1,ax2,ax3
sex_data = data.groupby(['sex'])['sex'].count()
car_data = data[data['car'] =='YES'].groupby(['sex'])['sex'].count()
children_data = data.groupby(['children'])['children'].count()
fig = plt.figure(figsize = (7,6))
fig.add_subplot(2,2,1)
sex_data.plot(kind = 'pie',title ='Customer Sex',startangle = 60,autopct = '%1.1f%%')
fig.add_subplot(2,2,2)
car_data.plot(kind = 'pie',title = 'Customer Car Sex',startangle = 60,autopct = '%1.1f%%')
fig.add_subplot(2,2,3)
children_data.plot(kind = 'pie',title = 'Customer Children',startangle = 60,autopct = '%1.1f%%')
plt.savefig('饼图.jpg',dpi = 400,bbox_inches = 'tight')
plt.show()


#方法二:采用pie函数,fig.add_subplot()函数
sex_data = data.groupby(['sex'])['sex'].count()
car_data = data[data['car'] =='YES'].groupby(['sex'])['sex'].count()
children_data = data.groupby(['children'])['children'].count()
fig = plt.figure(figsize = (7,6))
fig.add_subplot(221)    #221可加可不加逗号
plt.pie(x = sex_data,labels = sex_data.index,startangle = 60,autopct = '%1.1f%%')
plt.title('Customer Sex')
plt.ylabel('sex')
fig.add_subplot(222)
plt.pie(x = car_data,labels = sex_data.index,startangle = 60,autopct = '%1.1f%%')
plt.title('Customer Car Sex')
plt.ylabel('sex')
fig.add_subplot(223)
plt.pie(x = children_data,labels = children_data.index,startangle = 60,autopct = '%1.1f%%')
plt.title('Customer Children')
plt.ylabel('Children')
plt.show()

6)按客户的性别、收入绘制的箱形图,如下图:

列举以下三种方法:

【方法一】:采用DataFrame.boxplot(by,figsize)画图。(by为用于分组的列名

【方法二】:采用DataFrame.plot(kind = 'box',title,...)画图。

【方法三】:采用plt.box(x,labels,boxprops,medianprops,whiskerprops...)画图。

#6)
#方法一
data[['income','sex']].boxplot(by = 'sex',figsize = (6,6))
plt.show()


#方法二
import pandas as pd
MALE_data = data[data['sex']=='MALE']['income']
FEMALE_data = data[data['sex']=='FEMALE']['income']
sex_data1 = pd.concat([FEMALE_data,MALE_data],axis = 1)   #使用pd.concat函数合并两个series组成DataFrame
sex_data1.plot(kind = 'box',title = 'Boxplot grouped by sex income',grid = True,figsize = (6,6))   #df.plot中可设置画布大小
plt.xticks(range(1,3),['FEMALE','MALE'])
plt.xlabel('[sex]')
plt.show()


#方法三
plt.figure(figsize = (6,6))
MALE_data = data[data['sex']=='MALE']['income']
FEMALE_data = data[data['sex']=='FEMALE']['income']
labels = 'FEMALE','MALE'    
#括号可加可不加,或者在下面加plt.boxplot([FEMALE_data,MALE_data],labels =( 'FEMALE','MALE')) 
#或者单独加plt.xticks(range(1,3),['FEMALE','MALE'])
plt.boxplot([FEMALE_data,MALE_data],labels = labels,boxprops = {'color':'#1F77B4'},medianprops = {'color':'green'},whiskerprops={'color':'#1F77B4'})    #画多个箱线图要加[]
plt.grid()
plt.title('Boxplot grouped by sex income')
plt.xlabel('[sex]')
plt.show()

  • 21
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,我来回答你的问题。首先,我们需要明确一下频率分布直方图和边际密度函数的概念。 频率分布直方图是一种用于展示数据分布情况的,它将数据分成若干个区间,并用矩形条示每个区间中数据的频率或数量。一般情况下,我们可以通过统计数据的频数或频率来绘制频率分布直方图。 而边际密度函数则是一种用于展示数据概率密度分布情况的,它通过在一定区间内的概率密度来描述数据分布情况。在Matlab中,我们可以使用“histogram”函数来绘制频率分布直方图,使用“ksdensity”函数来绘制边际密度函数。 下面是一个简单的示例代码,展示如何在Matlab中绘制频率分布直方图和边际密度函数: ```matlab % 生成随机数据 data = randn(1000,1); % 绘制频率分布直方图 figure; histogram(data,'Normalization','probability'); title('Frequency distribution histogram'); % 绘制边际密度函数 figure; ksdensity(data); title('Marginal density function'); ``` 在这个例子中,我们生成了一个包含1000个随机数的数据集,并使用“histogram”函数绘制了它的频率分布直方图。我们使用了“Normalization”参数来将频率转换为概率。另外,我们还使用了“title”函数来为添加标题。 接着,我们使用“ksdensity”函数绘制了数据的边际密度函数。同样地,我们也为添加了标题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是学数据分析的阿龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值