1、数据可视化数据可视化 数据探索阶段的重要方法 数据以图形图像形式表示 揭示隐藏的数据特征,直观传达关揵信息 Matplotlib库 专门用于开发二维(包括三维)图表的工具包 实现图像元素精细化控制,绘制专业的分析图表 Pandas封装了Matplotlib的主要绘图功能 Series和DataFrame提供绘图函数 简便快捷地创建标准化图表认识基本图形 按照数据值特性,可视图形大致可以分为3类 展示离散数据:散点图、柱状图、饼图等;展示连续数据:直方图、箱须图、折线图、半对数图等;展示数据的区域或空间分布:统计地图、曲面图等4.1.2 Pandas快速绘图 基本步骤 导入matplotlib、
2、Pandas 准备数据使用Series或DataFrame封装数据 绘图调用Series.plot()或DataFrame.plot()函数完成绘图例例4-14-1:绘制2010-2016年我国GDP折线图import matplotlib.pyplot as plt#导入pyplot,用于图形显示from pandas import DataFramegdp=41.3,48.9,54.0,59.5,64.4,68.9,74.4data=DataFrame(GDP:Trillion:gdp,index=2010,2011,2012,2013,2014,2015,2016)data.plot()
3、plt.show()#显示图形显示图形4.1.2 Pandas快速绘图例例4-14-1(续):绘制2010-2016年我国GDP折线图data.plot(title=20102016 GDP,LineWidth=2,marker=o,linestyle=dashed,color=r,grid=True,alpha=0.9,use_index=True,yticks=35,40,45,50,55,60,65,70,75)参参 数数 名名说说 明明x xx轴数据,默认值为Noney yy轴数据,默认值为Nonekindkind绘图类型。line:折线图,默认值;bar:垂直柱状图;barh:水平柱
4、状图;hist:直方图;box:箱形图;kde:Kernel核密度估计图;density与kde相同;pie:饼图;scatter:散点图titletitle图形标题,字符串colorcolor画笔颜色。用颜色缩写,如r、b,或者RGB值,如#CECECE。主要颜色缩写:b:blue、c:cyan、g:green、k:black、m:magenta、r:red、w:white、y:yellowgridgrid图形是否有网格,默认值为Nonefontsizefontsize坐标轴(包括x轴和y轴)刻度的字体大小。整数,默认值为Nonealphaalpha图表的透明度,值为01,值越大颜色越深us
5、e_indexuse_index默认为True,用索引作为x轴刻度linewidthlinewidth绘图线宽linestylelinestyle绘图线型。:实线;:破折线;.:点画线;::虚线markermarker标记风格。.:点;,:像素(极小点);o:实心圈;v:倒三角;:上三角;:右三角;)plt.text(1.8,70,GDP keeps booming!,fontsize=larger)plt.xlabel(Year,fontsize=12)plt.ylabel(GDP:Trillion,fontsize=12)保存图表到文件 保存函数figure.savefigfigure.s
6、avefig(filename,dpi,bbox_inchesfilename,dpi,bbox_inches)plt.savefigplt.savefig(filename,dpi,bbox_inchesfilename,dpi,bbox_inches)参数说明:参数说明:filenamefilename文件路径及文件名,文件类型可以是jpg、png、pdf、svg、ps等dpidpi图片分辨率,每英寸点数,默认100bbox_inchesbbox_inches图表需保存的部分,设置为“tight”可以剪除当前图表周围的空白部分 将例4-2绘制图形保存到当前文件夹fig.savefig(20
7、10-2012GDP.jpg,dpi=400,bbox_inches=tight)思考与练习1.20122017年我国人均可支配收入为1.47,1.62,1.78,1.94,2.38,2.60(单位:万元)。按照要求绘制以下图形。1)模仿例4-1和4-3,绘制人均可支配收入折线图。用小矩形标记数据点,红色虚线,用注解标注最高点,图标题“Income chart”,设置坐标轴标题,最后将图形保存为JPG文件。一维数组访问。2)模仿例4-2,使用多个子图分别绘制人均可支配收入的折线图、箱须图以及柱状图。【提示:】1)创建3个子图分别使用(2,2,1)、(2,2,2)和(2,1,2)作为参数。2)使
8、用plt.subplots_adjust()函数调整子图间距离,以便添加图标题。4.2.1 绘制常用图形 函数绘图 散点图 柱状图 折线图 直方图 密度图 饼图 箱须图函数绘图 函数 描述了变量y随自变量x的变化过程 plt.plot()根据给定的x、y坐标值绘图例4-4:绘制 和 的函数图 给定x的范围采样生成x列表 计算对应y值xey-)sin(xy import numpy as np#导入numpy#生成x数组x=np.linspace(0,6.28,50)#start,end,num-pointsy=np.sin(x)#计算y=sin(x)数组plt.plot(x,y,color=r
9、)#用红色绘图y=sin(x)plt.plot(x,np.exp(-x),c=b)#用蓝色绘图y=exp(-x)散点图(Scatter diagram)描述两个一维数据序列之间的关系 将两组数据分别作为点的横坐标和纵坐标DataFrame.plot(kind=scatter,x,y,title,grid,xlim,ylim,label,.)DataFrame.plot.scatter(x,y,title,grid,xlim,ylim,label,.)参数说明:参数说明:x xDataFrame中x轴对应的数据列名y yDataFrame中y轴对应的数据列名labellabel图例标签plt.s
10、catter(x,y,.)Matplotlib的scatter函数也可以绘制散点图 图元的设置需要采用独立的语句散点图绘制例例4-54-5:绘制散点图观察学生身高和体重之间的关系stdata=pd.read_csv(datastudents.csv)#读文件stdata.plot(kind=scatter,x=Height,y=Weight,title=Students Body Shape,marker=*,grid=True,xlim=150,200,ylim=40,80,label=(Height,Weight)#绘图学生的身高与体重具有正相关性,但不显著#将数据按男生和女生分组data
11、1=datadataGender=0#筛选出男生data2=datadataGender=1#筛选出女生#分组绘制男生、女生的散点图plt.figure()plt.scatter(data1Height,data1Weight,c=r,marker=s,label=Male)plt.scatter(data2Height,data2Weight,c=b,marker=,label=Female)plt.xlim(150,200)#x轴范围plt.ylim(40,80)#y轴范围plt.title(Students Body Shape)#标题plt.xlabel(Weight)#x轴标题plt
12、.ylabel(Height)#y轴标题plt.grid()#网格线plt.legend(loc=upper right)#图例显示位置男女生身高、体重明显存在差异性分组散点图清晰显示数据聚集特性使用不同的图例标识分组散点图矩阵 同时观察多组数据之间的关系例例4-64-6:绘制散点图矩阵观察学生各项信息之间的关系 身高、体重、年龄、成绩 pd.plotting.scatter_matrix(data,diagonal,.)参数说明:参数说明:datadata包含多列数据的DataFrame对象d diagonaliagonal对角线上的图形类型。通常放置该列数据的密度图或直方图data=std
13、ataHeight,Weight,Age,Score#准备数据pd.plotting.scatter_matrix(data,diagonal=kde,color=k)#绘图柱状图(Bar Chart)用多个柱体描述单个总体处于不同状态的数量 柱体高度或长度与该状态下的数量成正比 分为垂直柱状形图和水平柱状图Series.plot(kind,xerr,yerr,stacked,.)DataFrame.plot(kind,xerr,yerr,stacked,.)参数说明:参数说明:kindkindbar:垂直柱状图;barh:水平柱状xerr,yerrxerr,yerrx、y轴向误差线stack
14、edstacked是否为堆叠图,默认为Falserotrot刻度标签旋转度数,值0360 堆叠柱状图 多个总体同一状态的直条叠加柱状图绘制 从population.csv文件中读取人口数据,绘制各性别的出生人口比较图YearYearTotalTotalBoysBoysGirlsGirlsRatioRatio年度年度出生人口总数男孩数女孩数男女比例#读取数据data=pd.read_csv(datapopulation.csv,index_col=Year)data1=dataBoys,Girlsmean=np.mean(data1,axis=0)#计算均值std=np.std(data1,ax
15、is=0)#计算标准差#创建图fig=plt.figure(figsize=(6,2)#设置图片大小plt.subplots_adjust(wspace=0.6)#设置两个图之间的纵向间隔#绘制均值的垂直和水平柱状图,标准差使用误差线来表示ax1=fig.add_subplot(1,2,1)mean.plot(kind=bar,yerr=std,color=cadetblue,title=Average of Births,rot=45)ax2=fig.add_subplot(1,2,2)mean.plot(kind=barh,xerr=std,color=cadetblue,title=Av
16、erage of Births)#绘制复式柱状图和堆叠柱状图data1.plot(kind=bar,title=Births of Boys&Girls)data1.plot(kind=bar,stacked=True,title=Births of Boys&Girls)堆叠柱状图折线图 用线条描述事物的发展变化及趋势 普通折线图:横、纵坐标轴上都使用算术刻度 半对数折线图:横、纵坐标分别使用算术刻度与对数刻度 比较的两种或多种事物的数据值域相差较大 指标“相对增长量”的变化关系从GDP.csv文件中读取数据,绘制国民经济生产总值GDP和居民人均可支配收入Income的折线图与半对数折现图d
17、ata=pd.read_csv(GDP.csv,index_col=Year)#读取数据#绘制GDP和Income的折线图data.plot(title=GDP&Income,LineWidth=2,marker=o,linestyle=dashed,grid=True,use_index=True)#绘制GDP和Income的半对数折线图data.plot(logy=True,LineWidth=2,marker=o,linestyle=dashed,color=G)无法反应Income的变化直方图(Histogram)描述总体的频数分布情况 将横坐标按区间个数等分 每个区间上长方形的高度表
18、示该区间样本的频率,面积表示频数Series.plot(kind=hist,bins,normed,.)参数说明:参数说明:binsbins横坐标区间个数normednormed是否标准化直方图,默认值False直方图绘制例例4-94-9:从student.csv文件中读取学生信息,绘制身高分布直方图。将身高155185划分为6个区间stdata=pd.read_csv(datastudents.csv)#读文件stdataHeight.plot(kind=hist,bins=6,title=Students Height Dstribution)#绘图分箱的数量与数据集大小和分布本身相关,通
19、过改变分箱bins的数量,可以改变分布的离散化程度密度图(Kernel Density Estimate)基于样本数据拟合概率密度函数 采用平滑的峰值函数:核函数 常用高斯核 模拟真实的概率分布曲线 与直方图(标准化后)一起绘制,对比Series.plot(kind=kde,style,.)参数说明:参数说明:stylestyle风格字符串,包括颜色和线型,如ko,r-stdataHeight.plot(kind=hist,bins=6,normed=True,title=Students Height Dstribution)#绘图stdataHeight.plot(kind=kde,tit
20、le=Students Height Dstribution,xlim=155,185,style=k-)#绘制密度图在例4-9基础上,增加密度图饼图(Pie Chart)描述总体的样本值构成比 扇形图 反映部分与部分、部分与整体之间的数量关系Series.plot(kind=pie,explode,shadow,startangle,autopct,.)参数说明:参数说明:explodeexplode列表,表示各扇形块离开中心的距离shadowshadow扇形块是否有阴影,默认Falsestartanglestartangle起始绘制角度,默认从x轴正方向逆时针开始autopctautopc
21、t百分比格式,可用format字符串或者format function,%1.1f%指小数点前后各1位(不足空格补齐)饼图绘制例例4-104-10:从advertising.csv中读取营销数据,绘制各类广告投入占比的饼图TVTVWeiboWeiboWeChatWeChatSalesSales1 1230.137.869.222.12 244.539.345.110.43 317.245.969.39.3计算各类渠道的广告总投入,绘制饼图表示各类广告占比#准备数据,计算各类广告投入费用总和data=pd.read_csv(data/advertising.csv)piedata=dataTV,
22、Weibo,WeChatdatasum=piedata.sum()#绘制饼图datasum.plot(kind=pie,figsize=(6,6),title=Advertising Expenditure,fontsize=14,explode=0,0.2,0,shadow=True,startangle=60,autopct=%1.1f%)箱须图(Box plot)表达数据的分位数分布,观察异常值 将样本居中的50%值域用一个长方形表示 较小和较大的四分之一值域各用一根线表示 异常值用“o”表示Series.plot(kind=box,.)例例4-104-10:从advertising.c
23、sv中读取营销数据,绘制各类广告投入投入的箱须图data=pd.read_csv(dataAdvertising.csv)advdata=dataTV,Weibo,WeChat#绘制各类经费投入的箱须图advdata.plot(kind=box,figsize=(6,6),title=Advertising Expenditure)箱须图(Box plot)Pandas提供专门绘制箱须图的函数boxplot 方便将观察样本按照其他特征进行分组对比DataFrame.boxplot(by,.)例例4-104-10:从students.csv中读取学生数据,按性别绘制学生成绩的箱须图参数说明:参数
24、说明:byby用于分组的列名stdata=pd.read_csv(datastudents.csv)stdata1=stdataGender,Scorestdata1.boxplot(by=Gender,figsize=(6,6)Dataframe对象要包括绘制列和分组列思考与练习1.数据文件high-speed rail.csv存放着世界各国高速铁路的情况CountryCountryOperationOperationUnder-constructionUnder-constructionPlanningPlanning国家国家运营里程(公里)在建里程(公里)计划里程(公里)1)各国运营里程
25、对比柱状图,标注China为“Longest”2)各国运营里程现状和发展堆叠柱状图3)各国运营里程占比饼图,China扇形离开中心点【提示】:从文件中读取数据时,使用第一列数据作为indexdata=pd.read_csv(High-speed rail.csv,index_col=Country),获取中国对应的数据行,使用data China课后作业文件bankpep.csv存放着银行储户的基本信息ididageagesexsexregionregionincomeincomemarriedmarriedchildrenchildrencarcarsave_actsave_actcurrent_accurrent_act tmortgagemortgagepeppep编号编号年龄性别区域收入婚否孩子数有车否存款账户现金账户是否抵押接受新业务请通过绘图对这些客户数据进行探索性分析。1)客户年龄分布的直方图和密度图2)客户年龄和收入关系的散点图3)绘制散点图观察账户(年龄,收入,孩子数)之间的关系,对角线显示直方图4)按区域展示平均收入的柱状图,并显示标准差5)多子图绘制:账户中性别占比饼图,有车的性别占比饼图,按孩子数的账户占比饼图6)各性别收入的箱须图