版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章增强可视化效果章节简介本章主要介绍如何通过画布划分和坐标轴设计,增强数据图表的整体表达效果。我们将学习如何对画布进行均匀与非均匀划分,并在同一图表中展示多个子图。此外,还将探讨坐标轴与刻度的多样化选择及调整,以提升图表的可读性和美观性。本章还将深入讲解共享坐标轴的常见应用及其实现方法,以减少多图比较中的冗余并突出数据关系。通过Python编程实践,读者将掌握相关技巧,理解这些可视化方法在不同分析任务中的实际应用价值。6.1画布划分第6章·增强可视化效果多维度图表组合的价值多维度的图表组合能够让可视化的结果更加全面、直观。全面性多张图表组合展示,覆盖更多维度信息直观性并排对比,结论一目了然灵活性支持相同大小或主副图等多种组合方式主图/副图的组合方式画布划分支持两种典型组合:相同大小图表对多种参数实验结果进行展示,各图地位平等主图+副图由主图、副图对不同维度属性进行分析的论证相同大小图表组合的用途这种组合既可以是相同大小的图表对多种参数实验结果的展示,也可以是由主图、副图对不同维度属性进行分析的论证。多参数对比同一实验在不同参数下的结果并排呈现均匀布局各子图占据相同面积,视觉权重一致实验展示适合呈现系列实验或批量对比分析场景主图副图论证不同维度属性主图承载核心数据,占据更大画幅副图提供补充视角,辅助说明细节二者结合,完整呈现多维分析结论主图核心趋势/全局视图副图细节放大/辅助维度图6-1:主副图组合示例该图展示了在同一画布中,主图与副图如何协同呈现多维度分析结果,是画布划分的典型应用案例。6.1.1均匀划分通过运用Matplotlib库中的相关函数和方法,可以组合多张小图并放在一张大图内进行显示。subplot函数语法函数签名matplotlib.pyplot.subplot(nrows,ncols,index)可用于指定子图位置。nrows网格行数ncols网格列数index当前子图位置编号nrows、ncols、index含义参数nrows、ncols、index表示在包含nrows行ncols列的网格中,当前子图占据第index个位置。nrows(行数)ncols(列数)index(位置)三个参数共同确定子图在整个画布网格中的精确位置。index计数规则计数方向index自最左上角向右下角从1开始计数。从左至右:第1行依次为1、2、3…从上到下:第1行结束后进入第2行编号从1开始,不是0示例:plt.subplot(2,2,1)对图6-2中左上角第一个子图进行绘制,可以通过plt.subplot(2,2,1)定位到子图1的位置。plt.subplot(2,2,1)2行nrows=22列ncols=21号位index=1即主图中包含2行2列网格,当前定位的子图为1号子图。子图排序方式子图排序方式为从左至右,从上到下。pos参数引入还可以利用参数pos其作用与nrows、ncols、index相同。plt.subplot(pos)等价关系pos是nrows、ncols、index的紧凑写法,功能完全一致使用场景网格规模较小时,pos写法更简洁pos是3位整数pos是一个3位的整数,3位数分别代表行数nrows、列数ncols以及索引index。百位数nrows(行数)十位数ncols(列数)个位数index(位置索引)pos使用限制⚠️注意事项使用pos时,3个数字均需小于10。合法nrows、ncols、index均为个位数(1–9)不合法任意一个参数≥10时,必须改用逗号分隔形式等效示例:subplot(2,3,1)与subplot(231)subplot(2,3,1)与subplot(231)是等效的。标准写法plt.subplot(2,3,1)2行3列,第1号子图pos简写plt.subplot(231)效果完全相同,更简洁示例:plt.subplot(222)plt.subplot(222)定位到第二行第二列的子图。第一列左第一行低第二列右第二行高右下:未选中子图左下:未选中子图右上:目标子图左上:未选中子图pos写法222即:2行、2列、第2号位→右上角子图。定位后绘制子图核心流程01定位子图调用subplot()指定位置02绘制内容调用plt.plot()等绘图方法03重复操作对每个子图依次定位并绘制说明定位子图后即可对子图进行绘制,绘制方法与前面讲解的相同。subplot()只负责"选中"当前子图,后续所有绘图操作均作用于该子图。图6-2:均匀划分的子图该图展示了2行2列共4个等大小子图的标准均匀划分效果,各子图面积相同,依次编号1–4。均匀划分代码:总览均匀划分子图代码如下。本示例在2×2网格中分别绘制4条不同斜率的折线。导入库importmatplotlib定位+绘制subplot→plot×4布局优化tight_layout+show代码①导入库importmatplotlib.pyplotasplt导入Matplotlib的pyplot模块,并约定别名plt,后续所有绘图操作均通过plt调用。代码②定位子图1plt.subplot(2,2,1)将画布划分为2行2列,并将当前绘图焦点切换到第1号子图(左上角)。代码③在子图1中绘制折线plt.plot([0,1],[0,1])在当前激活的子图(子图1)中,绘制从(0,0)到(1,1)的折线,斜率为1。代码④定位子图2(pos写法)plt.subplot(222)使用pos简写:2行2列第2号位,定位到右上角子图。与plt.subplot(2,2,2)完全等效。代码⑤在子图2中绘制折线plt.plot([0,1],[0,2])在子图2中绘制从(0,0)到(1,2)的折线,斜率为2,比子图1更陡。代码⑥定位子图3plt.subplot(223)定位到2行2列网格中的第3号位,即左下角子图。代码⑦在子图3中绘制折线plt.plot([0,1],[0,3])在子图3中绘制从(0,0)到(1,3)的折线,斜率为3。代码⑧定位子图4plt.subplot(224)定位到第4号位,即右下角子图,完成2×2网格的最后一个位置。代码⑨在子图4中绘制折线plt.plot([0,1],[0,4])在子图4中绘制从(0,0)到(1,4)的折线,斜率为4,4个子图斜率依次递增。代码⑩自动调整布局plt.tight_layout()自动调整各子图之间的间距,防止标签或标题重叠,使整体布局更加美观整洁。代码⑪显示图表plt.show()渲染并弹出图形窗口,展示最终的2×2均匀划分子图效果。6.1.1均匀划分·要点回顾1函数语法matplotlib.pyplot.subplot(nrows,ncols,index)指定子图位置2index计数自最左上角向右下角从1开始计数;排序从左至右,从上到下3pos简写pos是3位整数,3个数字均需小于10;subplot(2,3,1)与subplot(231)等效4绘制方式定位子图后,绘制方法与前面讲解的相同6.1.2非均匀划分当某一子图需要突出显示时,可将其放大,实现主次分明的画布布局。非均匀划分的适用场景当子图中某一个图表包含的数据更多、信息量更大,或单纯地希望其突出显示某个重要图表时,可以将某一个或几个子图放大。数据量更大某子图承载的数据点或系列更多,需要更大显示区域重要图表突出核心结论图表需要视觉上的优先级,通过放大实现主副图分工大图为主图,小图为辅助说明,层次清晰图6-2:主图效果如果把第1个子图放在第一行,剩下的3个子图放在第二行,那么第1个子图就会呈现出主图的效果,其余3个子图作为辅助说明。这正是非均匀划分的典型用法:突出核心图表,辅图提供补充视角。图6-3:主图+辅助说明效果图6-3第1个子图呈现出主图效果,其余3个子图可作辅助说明。plt.subplot(2,1,1):分2行1列plt.subplot(2,1,1)使用plt.subplot(2,1,1)将整个图像窗口分为2行1列,当前位置为1。分割画布将画布分为2行1列。设置当前位置将当前子图位置设为第1行。在第1个位置创建子图plt.plot([0,1],[0,1])通过plt.plot([0,1],[0,1])在第1个位置创建一个子图,此时该子图占据画布上半部分全部宽度。plt.subplot(2,3,4):重新划分画布plt.subplot(2,3,4)使用plt.subplot(2,3,4)重新将整个图像窗口分为2行3列,当前位置为4。注意:每次调用subplot()都是针对整个画布重新划分,而非针对剩余区域。在第4个位置创建子图plt.plot([0,1],[0,2])通过plt.plot([0,1],[0,2])在第4个位置创建一个子图。在2×3网格中,第4号位位于第2行第1列(左下角)。重要结论:划分针对整个画布可以看出对于画布的划分是针对整个画布的,而不是针对画布的剩余部分。每次重新划分subplot()每次调用都重新定义整个画布的网格结构不累积操作不会在上次划分的基础上继续细分剩余区域网格的作用:更清晰的对比在线条或者图表下添加网格会使可视化效果更加清晰,让用户通过肉眼即可轻松看出图片的不同,并能够帮助用户比较图表中细微的差异。grid()函数matplotlib.pyplot.grid()可以使用matplotlib.pyplot.grid()来设置网格的可见度、密度和风格。可见度控制网格是否显示(True/False)密度控制网格线的疏密程度风格控制线型、颜色等视觉样式网格划分的另一优势:子图大小变化网格划分的另一个优势在于子图可以覆盖不同数量的网格,从而实现图片的大小变化。生成不均匀子图为子图分配格跨度定义虚拟网格多子图展示提供更多选择灵活布局子图可跨越任意数量的逻辑网格单元自定义尺寸不同子图可拥有完全不同的显示面积突出重点通过尺寸差异引导视线,强化信息层次subplot2grid:灵活定制布局pyplot.subplot2grid()可通过pyplot.subplot2grid()函数灵活定制画布子图布局。网格≠可见格子线逻辑划分方式此处网格并非实际可见的格子线,而是用于确定画布划分行列数的逻辑划分方式。网格是虚拟的概念框架,不会在最终图表中显示为线条。在虚拟网格中放置子图可以在这些虚拟网格中放置子图,通过设置rowspan和colspan参数实现子图跨行跨列的非均匀排布。rowspan/colspan:跨行跨列rowspan子图跨越的行数,实现垂直方向上的放大colspan子图跨越的列数,实现水平方向上的放大通过组合使用rowspan和colspan,可以实现任意尺寸的子图非均匀排布。subplot2grid基本调用格式subplot2grid(shape,loc,rowspan,colspan)该函数基本调用格式为subplot2grid(shape,loc,rowspan,colspan),参数说明如下。参数shape:行列数shape=(rows,cols)shape为(rows,cols)格式的元组,指定画布划分的行列数。例如shape=(3,3)表示将画布逻辑划分为3行3列的虚拟网格。参数loc:子图起始位置loc=(row,col)loc表示(row,col)坐标,用于指定子图起始位置,行列编号从0开始计数。⚠️与subplot()的index不同,subplot2grid的行列编号从0开始,不是1。参数rowspan/colspanrowspan/colspan确定子图跨越的行数或列数。1默认值为1如果没有明确指明参数colspan和rowspan的值,默认跨度为12跨多格放大设置大于1的值,子图将覆盖更多网格单元,面积相应增大图6-4:非均匀划分示意图利用subplot2grid()函数可实现非均匀划分,图中展示了各子图在3×3逻辑网格中的跨行跨列排布方式。图6-4解读:3行3列逻辑划分在图6-4中,以最小尺寸的子图(左下1、左下2)作为单位,画布划分为3行3列。3×3是虚拟逻辑网格,并非每个格子都对应一个独立子图。默认跨度为1如果没有明确指明参数colspan和rowspan的值,默认跨度为1。rowspan默认子图仅占1行高度colspan默认子图仅占1列宽度最小单元默认即为一个逻辑网格单元大小子图1定位示例matplotlib.pyplot.subplot2grid((3,3),(0,0),colspan=3)子图1的定位即为上述代码:从(0,0)起始,列跨度为3,占满第0行全部宽度。子图2定位示例matplotlib.pyplot.subplot2grid((3,3),(1,0),colspan=2)下面来创建第2个子图,使用上述函数从第1行第0列开始作图,列的跨度为2。后续子图以此类推后续子图以此类推。01确定网格规模通过shape参数设定整体逻辑网格的行列数02指定起始位置通过loc参数(从0计数)定位子图左上角03设置跨越范围通过rowspan/colspan控制子图占据的网格单元数量04绘制内容使用plt.plot()等方法在当前子图中绘制图形6.1.2非均匀划分·要点回顾核心函数pyplot.subplot2grid()用于灵活定制非均匀画布布局。网格概念基于虚拟逻辑网格,并非实际可见的格子线。shape参数shape=(rows,cols)定义整体虚拟网格的行列数。loc参数loc=(row,col)指定子图起始位置,行列编号从0开始。跨度参数rowspan和colspan确定子图跨越的行/列数,默认为1。6.2坐标轴与刻度坐标轴与刻度坐标轴与刻度为什么重要?坐标轴作为可视化图形的重要组成部分,对可视化效果起着不容忽视的作用。样式线型、粗细、边框颜色轴线与刻度配色刻度主/次刻度控制标签文字长度与旋转需要考虑的坐标轴属性一个好的可视化图形,需要考虑坐标轴的样式、颜色、刻度、标签等多种属性。样式与颜色影响整体视觉风格刻度间距决定数据精度表达标签文字传递轴含义与单位本节目标本节将展示常用的坐标轴样式及其实现方法。认识坐标轴理解轴线、范围与方向刻度与标签设置刻度样式与文本多折线与共享轴绘制多线并共享坐标轴通过本节学习,能够灵活控制Matplotlib图表中坐标轴的视觉表现,提升可视化作品的专业度。6.2.1颜色与标签坐标轴标签的清晰度直接影响图表的可读性。本小节聚焦刻度标签的常见问题与解决方案。简短标签春夏秋冬,表达清晰长标签问题菜品名称重叠,不易阅读倾斜解决设置旋转角度,优化显示图6-6(a):标签清晰示例图6-6(a)为在3.1节实现的柱形图,x轴标签"春""夏""秋""冬"表达清晰。简短的单字标签不会产生重叠,是理想的刻度标签形式。标签因过长产生重叠,需进一步处理。图6-6(b):标签过长导致重叠然而并不是所有的刻度标签都可以通过这种简单的方式表达。问题根源图中因菜品名称标签过长而导致文字重叠,不易阅读。典型场景菜品名、日期字符串等长文本标签均易出现此问题。解决方案:设置文字倾斜角度当刻度标签文字过长时,可以通过设置文字的倾斜角度来解决,如图6-7所示。在新闻、报纸中表达与日期相关的标签时,我们经常能看到这种调整。旋转角度通常设置为30°–80°,兼顾可读性与空间利用。日期标签的常见调整在新闻、报纸中表达与日期相关的标签时,我们经常能看到这种调整。为了对刻度进行强调,还可以设置相关的图示修饰刻度点。旋转标签通过rotation参数倾斜标签文字,避免重叠修饰刻度点设置刻度线颜色、长度、宽度,强调关键刻度位置日期场景年季度标签字符较长,旋转显示是标准处理方式强调刻度:修饰刻度点为了对刻度进行强调,还可以设置相关的图示修饰刻度点。set_color()设置刻度线颜色set_markersize()设置刻度线长度set_markeredgewidth()设置刻度线宽度图6-7公司季度销售总值折线图该折线图展示2012—2017年某公司季度销售数据,x轴为时间,y轴为销售业绩(万元),并包含旋转刻度标签与修饰刻度点效果。数据源:2012—2017年季度销售数据下面利用2012—2017年某公司季度销售数据绘制折线图。该折线图的数据源为data.npz。数据范围2012—2017年,按季度划分文件格式data.npz(NumPy打包文件).npy文件与数组名.npy文件是NumPy保存数组的二进制文件,文件名对应数组名。文件后缀.npy存储内容单个NumPy数组命名规则文件名即为数组名.npz文件:打包文件格式.npz文件是包含多个.npy文件的打包文件。.npy单数组二进制文件.npz多个.npy文件的压缩打包访问方式通过数组名作为关键字索引load()识别.npz并返回类似字典对象NumPy的load()函数能够自动识别.npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容。类似字典的对象支持data['数组名']语法直接提取目标数组,使用方便直观。name.npy与values.npy分别存放什么文件data.npz包含两个二进制数组文件name.npy和values.npy,name存放表头数据,values存放记录数据。name.npy存放表头数据(列名)values.npy存放记录数据(具体数值)图6-8data.npz数据集数据集展示了name与values两个数组的结构,name为表头,values为多列数值记录,包含时间、各品类销售额等字段。load()读取并提取values数组下面通过NumPy提供的load()方法读取数据集,并提取values数组。data=np.load('data.npz')values=data['values']#提取其中的values数组两行代码完成数据读取与提取,data['values']利用字典式访问获取记录数组。获取x轴:year_seasons列表推导式获取"时间"列作为x轴的代码为:year_seasons=[values[i][1]foriinrange(len(values))]通过列表推导式遍历values数组,提取每行索引为1的元素(即"时间"列),构成x轴刻度标签列表。获取y轴:random_y0(厨房电器)获取销售数据作为y轴的代码如下。random_y0=values[:,3]#厨房电器销售数据values[:,3]使用NumPy切片语法,提取所有行第3列,对应厨房电器的销售数据。获取y轴:random_y1(空调与电视)random_y1=values[:,4]#空调与电视销售数据提取第4列,对应空调与电视品类的各季度销售业绩,作为第二条折线的数据源。获取y轴:random_y2(生活小家电)random_y2=values[:,5]#生活小家电销售数据提取第5列,对应生活小家电品类的各季度销售业绩,作为第三条折线的数据源。三列数据y0/y1/y2分别对应三条折线,共同绘制于同一图表中。subplots()返回值:Figure与Axes对象matplotlib.pyplot.subplots()的返回值是一个元组。这个元组包含一个Figure对象和Axes对象集合。Figure对象整幅图像的容器,管理图像级属性Axes对象集合包含所有子图的可操作坐标系对象fig变量的作用fig变量可以修改Figure层级(figure-level)的属性,或者将Figure保存成图片,如fig.savefig('temp.png')。修改图像属性背景色、尺寸等figure-level设置保存图片fig.savefig('temp.png')ax变量的作用ax变量中保存着所有子图的可操作Axes对象。保存子图引用ax中包含每个子图的Axes对象,可分别操作精确控制通过ax对象调用方法,设置标题、标签、刻度等等价写法(一):fig=plt.figure()fig,ax=plt.subplots()等价于如下代码:fig=plt.figure()当采用fig,ax=matplotlib.pyplot.subplots()这样的用法时,相当于把返回的元组解压成了fig和ax两个变量。等价写法(二):ax=fig.add_subplot(1,1,1)ax=fig.add_subplot(1,1,1)add_subplot(1,1,1)表示创建1行×1列的子图网格中第1个子图,与plt.subplots()在单子图场景下完全等价。rotation参数:设置刻度标签旋转角度通过Axes.set_xticklabels()方法中的参数rotation为x轴刻度标签设置旋转角度:ax1.set_xticklabels(year_seasons,rotation=80,fontsize=12)rotation=80将标签旋转80°,fontsize=12控制字号,两者协同提升长标签的可读性。get_ticklines():返回刻度线对象列表在Matplotlib库中,get_ticklines()是一个用于获取坐标轴刻度线对象的方法,它返回一个包含刻度线对象的列表,这些对象代表坐标轴上的主刻度线或次刻度线。get_ticklines()无直接参数,返回Line2D对象列表,可对每条刻度线逐一设置样式。可修改的刻度线属性get_ticklines()返回的Line2D对象支持以下属性修改:.set_color()设置刻度线颜色.set_markersize()设置刻度线长度.set_markeredgewidth()设置刻度线宽度多折线图绘制流程概述接下来绘制多折线图。首先通过fig,ax1=plt.subplots(figsize=(10,6))创建图像对象fig和坐标轴对象ax1。添加标签与保存绘制三条折线设置坐标轴刻度创建图像对象多折线图:设置刻度线与刻度标签刻度线设置forticklineinax1.xaxis.get_ticklines():tickline.set_color('r')#刻度线颜色:红色tickline.set_markeredgewidth(9)#刻度线宽度:9tickline.set_markersize(5)#刻度线长度:5刻度标签设置forticklabelinax1.get_xmajorticklabels():ticklabel.set_fontsize(12)#字体大小:12ticklabel.set_rotation(50)#旋转角度:50°"get_ticklines()":遍历x轴刻度线对象,逐一设置颜色、宽度与长度"get_xmajorticklabels()":获取主刻度标签,统一设置字号与旋转角度,避免长标签重叠多折线图:绘制三条折线+保存图片使用ax1.plot()方法绘制表示厨房电器、空调与电视、生活小家电销售数据的三条折线,添加坐标轴标签、标题、图例和y轴网格线。最后通过plt.savefig()将绘制结果保存为图片文件。多折线图实现代码如下。代码段1/10import与rcParams设置导入依赖库并配置中文字体与负号显示。importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#指定中文字体plt.rcParams['axes.unicode_minus']=False#正常显示负号代码段2/10np.load+names/values提取读取.npz文件并分别提取names与values数组。data=np.load('data.npz')name=data['names']#提取其中的names数组values=data['values']#提取其中的values数组代码段3/10year_seasons+random_y0/y1/y2构建x轴时间列表与三条折线的y轴数据。#获取"时间"列作为x轴year_seasons=[values[i][1]foriinrange(len(values))]random_y0=values[:,3]#厨房电器销售数据random_y1=values[:,4]#空调与电视销售数据random_y2=values[:,5]#生活小家电销售数据代码段4/10fig,ax1=plt.subplots+x刻度位置创建图像与坐标轴对象,定义x轴刻度位置数组。fig,ax1=plt.subplots(figsize=(10,6))#绘制折线图x=np.arange(0,10,1)#x轴刻度位置代码段5/10ax1.plot第1条折线(厨房电器)绘制厨房电器销售折线,蓝色实线,数据点为正方形。ax1.plot(year_seasons,random_y0,'b-',label='厨房电器',marker='s')#marker='s',数据点的形状为正方形'b-',蓝色实线代码段6/10forticklineinax1.xaxis.get_ticklines()遍历x轴刻度线对象,设置颜色、宽度与长度。forticklineinax1.xaxis.get_ticklines():tickline.set_color('r')#刻度线颜色tickline.set_markeredgewidth(9)#刻度线宽度tickline.set_markersize(5)#刻度线长度代码段7/10forticklabelinax1.get_xmajorticklabels()遍历x轴主刻度标签,设置字号与旋转角度。#设置x轴刻度标签样式forticklabelinax1.get_xmajorticklabels():ticklabel.set_fontsize(12)#标签字号设置为12ticklabel.set_rotation(50)#标签旋转50°代码段8/10第2条与第3条折线绘制空调与电视(青色虚线)和生活小家电(绿色虚线)两条折线。ax1.plot(year_seasons,random_y1,'c--',label='空调与电视',marker='o')#marker='o',数据点的形状为圆形'c--',青色虚线ax1.plot(year_seasons,random_y2,'g--',label='生活小家电',marker='o')#marker='o',数据点的形状为圆形'g--',绿色虚线代码段9/10xlabel/ylabel/title/legend/grid添加坐标轴标签、图表标题、图例与y轴网格线。plt.xlabel('年份')#添加x轴标签plt.ylabel('销售业绩/万元')#添加y轴标签plt.title('2012—2017年各业务季度销售总值折线图')#添加图表标题plt.legend(['厨房电器','空调与电视','生活小家电'])#图例plt.grid(axis='y',ls='--',alpha=0.4)#y轴网格线代码段10/10savefig+show将图表保存为图片文件并显示。plt.savefig('sale.png')#保存为图片文件plt.show()至此,多折线图完整代码结束。图片保存至sale.png,可在报告或文档中直接引用。6.2.2共享坐标轴6.2.2共享坐标轴当需要从多个维度对数据进行展现时,可在一幅图像中绘制多个图形。多维度展现:为什么需要共享坐标轴?多个图形的表达意图和单位可能完全不同,此时可以采用共享坐标轴的方式同时绘制两种图形,即共享一个x轴,y轴分别使用左右两个刻度来标识。常见场景:柱形图(盈利额)与折线图(比例)叠加展示于同一图表。共享方式:共享x轴,左右y轴分别标识共享一个x轴,y轴分别使用左右两个刻度来标识。可以利用函数Axes.twinx()、Axes.twiny()来生成坐标轴实例以共享x轴或者y轴。Axes.twinx()共享x轴,生成独立y轴(右侧)Axes.twiny()共享y轴,生成独立x轴(上方)生成共享坐标轴:twinx()与twiny()可以利用函数Axes.twinx()、Axes.twiny()来生成坐标轴实例以共享x轴或者y轴。twinx()新建坐标系与原坐标系共享x轴,右侧新增独立y轴twiny()新建坐标系与原坐标系共享y轴,上方新增独立x轴subplots()一次性创建多个子图在Matplotlib中,可以通过matplotlib.pyplot.subplots(nrows,ncols,sharex=False,sharey=False)方法一次性创建多个子图。matplotlib.pyplot.subplots(nrows,ncols,sharex=False,sharey=False)subplots()参数说明matplotlib.pyplot.subplots()方法各参数说明如下。nrows指定子图的行数ncols指定子图的列数sharex控制x轴刻度的共享方式sharey控制y轴刻度的共享方式share方式:False或None共享方式的参数取值含义如下。False或None各子图独立显示刻度,互不影响这是sharex与sharey的默认值,子图拥有完全独立的坐标轴。share方式:True或'all'True或'all'所有子图共享同一组刻度适用于所有子图数据范围一致、需要统一刻度对比的场景。share方式:'row'与'col''row'同一行的子图共享x轴刻度'col'同一列的子图共享y轴刻度注意:sharex='col'的刻度标签显示当sharex='col'时,默认只在当前列最底部的子图显示x轴刻度标签。若需在其他行的子图显示标签,可使用tick_params()进行调整。使用ax.tick_params(labelbottom=True)可强制在指定子图显示x轴刻度标签。数据集dish_profit.xls字段说明数据集dish_profit.xls记录了某餐厅10种畅销菜品的盈利数据,包含以下三个字段:菜品ID菜品唯一标识菜品名称菜品显示名盈利各菜品盈利金额(元)图6-9菜品盈利共享坐标轴1图表采用双坐标轴设计,左y轴为盈利额(柱形图),右y轴为累计盈利比例(折线图),x轴为菜品名称。三轴含义:x/lefty/righty菜品名称为横坐标(x轴)、盈利额为左纵坐标(lefty轴)、累计盈利比例为右纵坐标(righty轴)。x轴菜品名称(分类)lefty轴盈利额(元)righty轴累计盈利比例(%)绘制步骤:ax1柱形图+ax2折线图创建主坐标系ax1说明:使用fig,ax1=plt.subplots(figsize=(10,6))创建图像对象fig和主坐标系ax1在ax1上绘制盈利柱形图创建副坐标系ax2说明:通过ax2=ax1.twinx()创建共享x轴的副坐标系ax2在ax2上绘制累计盈利比例折线图ax1(主坐标系)左y轴,绘制盈利额柱形图ax2(副坐标系)右y轴,绘制累计盈利比例折线图,通过twinx()共享x轴多坐标系:必须针对具体ax对象操作当图表包含多个坐标系时,必须针对具体的ax对象进行操作,不能直接通过fig或plt.pyplot模块修改图表内容。ax1对象操作左y轴柱形图的标签、刻度、颜色ax2对象操作右y轴折线图的标签、刻度、颜色避免用plt.xlabel()等全局方法在多坐标系场景下引起混乱。区分左右y轴颜色:spines设置为区分左右两侧的y轴,可以通过以下语句为坐标轴设置不同的颜色:ax2.spines['right'].set_color('r')#设置右侧坐标轴颜色为红色ax2.spines['left'].set_color('g')#设置左侧坐标轴颜色为绿色颜色区分使双轴图表一目了然,帮助读者快速对应各坐标轴含义。6.2小节总结6.2重点回顾:坐标轴与刻度1刻度与标签定制掌握调整刻度标签(如旋转角度、字体大小)和刻度线(颜色、宽度、长度)的方法,确保图表清晰可读。2多折线图绘制通过实际案例,学习如何在单一图表上绘制多条折线,并有效管理它们的显示。3共享坐标轴应用理解共享坐标轴(twinx(),twiny())的原理及subplots()中sharex和sharey参数的灵活运用,实现多维度数据展示。4多坐标系操作原则明确在多坐标系环境下,所有绘图和样式设置必须针对具体的Axes对象进行,避免混淆。本节深入探讨了Matplotlib中坐标轴和刻度的定制化,从基础调整到高级的多坐标轴应用,为制作专业且易读的数据可视化图表打下了坚实基础。6.3知识拓展:数据可视化原则6.3知识拓展:数据可视化原则在数据可视化领域,有一些被广泛认可的原则,以确保图表能够清晰、准确、有效地传达信息。其中,信息设计领域的权威人物爱德华·塔夫特(EdwardTufte)提出了多项关于有效数据可视化的经典原则。数据—墨水比最大化(Data—InkRatio)尽量减少非数据元素,使图表呈现更多有意义的内容,专注于核心信息。去掉图表中所有不必要的装饰(如多余的网格线、边框、阴影),让数据本身说话。6.3知识拓展:数据可视化原则多维数据表示多维数据表示通过合适的图形展示多个变量之间的关系,揭示复杂数据背后的模式和洞察。选择正确的图表类型(散点图、气泡图、热力图等)是多维数据可视化的关键。6.3知识拓展:数据可视化原则避免误导性的图表设计避免误导性的图表设计确保图表准确无误地传达数据信息,防止因设计不当而产生视觉欺骗或错误解读。常见误区包括:截断y轴、不等比例缩放、3D效果扭曲等。6.4本章小结本章小结本章深入探讨了Matplotlib中的画布划分、坐标轴与刻度样式设置,以及共享坐标轴的应用。这些内容旨在帮助用户创建更具表现力、清晰易读的数据可视化图表。画布划分掌握画布的均匀与非均匀划分,有效组织多个可视化视图,提升信息密度和直观性。坐标轴与刻度定制学习调整坐标轴颜色、刻度样式、标签字体和旋转角度,确保图表细节清晰,易于理解。共享坐标轴理解双坐标轴的必要性与实现方式(twinx(),twiny()),有效结合不同量纲的数据,进行多维度分析。感谢聆听数据是语言,可视化是表达。愿本章所学,助你以图表之力,洞见数据之美。第6章第7章可视化探索大数据数据可视化·探索式分析·缺失值处理第7章信息化与数字化时代的大数据可视化在信息化和数字化的时代背景下,大数据可视化技术已成为提升数据分析和决策制定效率的重要工具。通过将海量复杂的数据转化为直观易懂的图形,用户能够更深入地挖掘数据价值。海量复杂数据→直观图形通过将海量复杂的数据转化为直观易懂的图形,用户能够更深入地挖掘数据价值。海量数据原始数据庞杂难以直接解读可视化转化借助图形工具直观呈现规律挖掘价值辅助决策、提升分析效率本章聚焦:简化分析流程,提高工作效率本章内容聚焦于如何运用先进的可视化工具和技术手段,进一步简化数据分析流程,提高工作效率。可视化工具missingno/Seaborn简化流程自动化探索与评估提升效率快速洞察数据质量missingno:数据集质量的自动化探索本章将探讨如何借助可视化包missingno的力量,实现对数据集质量的自动化探索与评估,以高效、透明的方式确保数据资源的质量可靠,为后续的数据分析奠定坚实基础。自动化探索无需手工逐字段检查可视化评估缺失模式一目了然质量保障为建模分析奠定基础高效透明:确保数据资源质量可靠以高效、透明的方式确保数据资源的质量可靠,为后续的数据分析奠定坚实基础。Seaborn:回归预测初步分析利用Seaborn这一强大的统计图形库,用户无须完成复杂的建模过程,仅需简单几步操作即可完成对数据回归预测的初步分析。无须复杂建模,几步操作即可完成回归预测初步分析。预测结果直观展示:便利性与准确性将预测结果以直观、生动的图片形式展示出来,极大提升了数据解读的便利性和准确性。直观生动预测结果以图片形式呈现,易于理解便利高效简单操作完成复杂分析任务准确可靠提升数据解读的准确性推动应用:提升数字素养,构建智慧型社会推动社会各界广泛应用数据可视化技术,可以提升人民群众的数字素养,构建智慧型社会。7.1探索式分析数据分析可分为验证式分析和探索式分析两大类型,各有侧重,适用场景不同。数据分析的两种模式数据分析可分为验证式分析和探索式分析。验证式分析自上而下,先有假设再用数据验证探索式分析数据驱动,通过可视化发现规律验证式分析:自上而下的分析模式验证式分析是一种自上而下的分析模式,先设定业务指标,然后提出分析需求,最后根据相关需求进行报表定制。设定业务指标明确目标与关键度量报表定制根据需求生成报表提出分析需求定义假设与数据需求验证式分析的典型工作流程。验证式分析:先有想法,再验证这种模式必须先有想法,再通过数据进行验证。所以验证式分析对数据质量的要求很高,如果数据本身存在问题,那么即便通过科学的数据建模方法进行分析,结果也肯定是错误的。核心逻辑:假设在前,数据在后;数据质量是结果正确性的前提。数据本身存在问题→建模再科学也会出错如果数据本身存在问题,那么即便通过科学的数据建模方法进行分析,结果也肯定是错误的。探索式分析:对数据质量要求相对较低相比于验证式分析,探索式分析对数据质量的要求相对较低,同时不需要进行复杂的数据建模。数据质量门槛低即使存在缺失也可开展探索无需复杂建模可视化手段即可揭示规律探索式分析:不需要复杂的数据建模相比于验证式分析,探索式分析对数据质量的要求相对较低,同时不需要进行复杂的数据建模。验证式需要高质量数据+复杂建模探索式数据质量要求较低+无需复杂建模探索式分析的意义探索式分析的意义在于,它允许分析人员或决策者在不清楚数据规律、不知道如何进行数据建模的情况下,通过查看数据本身所呈现出的可视化特征进行数据分析。即使面对陌生数据、不清楚规律,也能通过可视化特征开展有效分析。7.1.1探索数据缺失情况探索数据缺失情况数据缺失是数据分析中经常遇到的问题之一,探索缺失情况是数据预处理的重要第一步。没有高质量的数据,就没有高质量的数据挖掘结果数据质量决定挖掘质量没有高质量的数据,就没有高质量的数据挖掘结果。再好的模型,如果没有好的数据和特征质量,训练出来的效果也不会令人满意。数据与特征质量的重要性数据质量对数据分析而言是至关重要的,有时候它的重要性会在某种程度上会胜过模型算法。有时数据质量的重要性胜过模型算法本身。数据缺失:数据分析中经常遇到的问题数据缺失是数据分析中经常遇到的问题之一。3主要缺失原因信息无法获取/信息遗漏/属性不可用3主要处理方法删除记录/数据填补/不处理缺失原因(1):信息暂时无法获取例如在医疗数据库中,并非所有病人的所有临床检验结果都能在给定的时间内得到,致使一部分属性值空缺。典型场景:医疗数据库中部分检验结果在特定时间内无法获取。缺失原因(2):信息被遗漏可能是因为输入时认为不重要、忘记填写了或对数据理解错误而遗漏,也可能是因为数据采集设备的故障、存储介质的故障、传输媒体的故障、一些人为因素等而遗漏。人为遗漏认为不重要、忘记填写、理解错误设备/介质故障采集设备、存储介质、传输媒体故障缺失原因(3):对象属性不可用有些对象的某个或某些属性是不可用的。例如,一个未婚者的配偶姓名、一个儿童的固定收入状况等。未婚者的配偶姓名该属性对此对象本身不适用儿童的固定收入状况该属性对此对象本身不适用缺失值影响:增强数据不确定性在数据挖掘中,缺失值的存在会增强数据的不确定性;包含空值的数据可能导致数据挖掘过程出现偏差,产生不可靠的结果。缺失值影响:可能导致偏差与不可靠结果包含空值的数据可能导致数据挖掘过程出现偏差,产生不可靠的结果。算法侧重避免过度拟合→难以有效处理缺失值数据挖掘算法本身侧重于避免对模型进行过度拟合,这一特性使其难以有效处理缺失值。这正是在建模前必须先处理缺失值的根本原因之一。获得初始数据集后:先探索缺失值因此,在获得初始数据集后,首先要对缺失值进行探索,分析缺失值的数量和分布情况。处理缺失值探索缺失值获取数据这是数据预处理的标准起点。选择合适的方法处理缺失值分析缺失值的数量和分布情况后,选择合适的方法处理缺失值,最终判断数据质量是否适合进行进一步的分析和挖掘。1探索分析缺失数量与分布2处理选择合适方法处理缺失值3判断评估数据质量是否适合进一步分析判断数据质量是否适合进一步分析和挖掘最终判断数据质量是否适合进行进一步的分析和挖掘。质量达标可进行进一步建模与分析质量不达标需返回处理步骤或重新采集数据手工逐字段检查缺失:烦琐、效率低在数据处理中,缺失值是必须重点考虑的问题。逐个字段手工检查缺失情况不仅烦琐,而且效率较低。当字段数量庞大时,手工检查几乎不可行。missingno:快速直观展示缺失模式missingno库提供了简洁易用的可视化工具,可以快速直观地展示数据集的缺失模式。missingno.matrix()输出:左侧矩阵missingno.matrix()方法的输出由以下两部分组成。左侧矩阵每列代表一个字段,每行代表一条记录,黑色方格表示该位置有数据,空白方格表示该位置缺失。右侧折线估计了这一行数据缺失的情况。左侧矩阵含义详解左侧矩阵:每列代表一个字段,每行代表一条记录,黑色方格表示该位置有数据,空白方格表示该位置缺失。通过矩阵可以直观地看到不同字段的缺失分布情况。列→字段每列对应数据集的一个属性/变量行→记录每行对应数据集的一条数据记录黑色→有数据该位置存在有效数据值空白→缺失该位置数据缺失missingno.matrix()输出:右侧折线missingno.matrix()方法的输出由以下两部分组成。左侧矩阵直观显示每列字段的缺失分布右侧折线估计了这一行数据缺失的情况。折线向左凸起的越多,表示这一行缺失的数据越多。右侧折线含义:凸起越多,缺失越多右侧折线:估计了这一行数据缺失的情况。折线向左凸起的越多,表示这一行缺失的数据越多。折线是对整行完整性的快速视觉评估,向左凸起幅度大=该行缺失严重。图7-1:利用missingno.matrix()查看数据集的缺失值左侧矩阵揭示了缺失值在数据集中的具体分布情况。右侧折线直观显示每条数据的完整度。案例引入:气候变化指标数据集下面以气候变化指标数据集为例,说明使用missingno探索数据质量的过程。该数据集来自Kaggle,包含不同国家和地区的气候变化指标。数据来源:KAGGLE数据集范围:1961–2022,每年更新一次该数据集来自Kaggle,包含不同国家和地区的气候变化指标。从1961年到2022年,该数据集每年更新一次。11961年数据集起始年份2每年更新持续追踪气候变化指标32022年当前最新数据年份数据规模:225条记录,72个属性原始数据集由225条记录组成,每条记录有72个属性,为了便于展示,只对前10个属性进行可视化。225数据记录数原始数据集的行数72属性数量每条记录包含的字段数10可视化属性数为便于展示,仅取前10个属性图7-2:缺失值可视化结果缺失值可视化结果如图7-2所示。该矩阵图直观展示了前10个属性的缺失分布情况。代码段:导入依赖库导入pandas和missingno两个必要的库。importpandasaspdimportmissingnoasmsno代码段:加载数据集使用pd.read_csv()加载气候变化指标数据文件。#加载CSV文件data=pd.read_csv("climate_change_indicators.csv")代码段:提取前10列提取前10个属性列,赋值给extracted_data以便后续可视化。#提取前10列columns_to_extract=data.columns[:10]extracted_data=data[columns_to_extract]代码段:绘制缺失值矩阵图调用msno.matrix()对前10列数据进行缺失值可视化。msno.matrix(extracted_data)运行此代码将输出missingno矩阵图,包含左侧缺失矩阵和右侧完整度折线。figsize参数:指定图像大小在Python中,可以通过figsize参数指定图像大小,例如,使用missingno.matrix(collisions.sample(250),figsize=(12,5))可以绘制数据缺失情况的矩阵图。missingno.matrix(collisions.sample(250),figsize=(12,5))图7-2解读:上方显示属性名称如图7-2所示,该矩阵图上方显示了数据集中所有属性的名称,图中的空白部分代表该属性出现了缺失值。矩阵图上方显示数据集中所有属性的名称图中空白部分代表该属性出现了缺失值连续大块空白:说明连续、大量缺失值若出现空白块,则说明出现了连续、大量的缺失值。连续缺失通常比随机缺失更难处理,需格外警惕。柱形图替换:missingno.matrix()→missingno.bar()相似地,也可以选择柱形图对数据缺失情况进行显示,只需将missingno.matrix()方法替换为missingno.bar()。msno.bar(extracted_data)柱形图优势:更直观看出缺失比例与数量利用柱形图可以更直观地看出每个变量缺失比例和具体数量情况,如图7-3所示。矩阵图展示缺失的位置分布柱形图展示缺失比例与具体数量图7-3:使用柱形图查看每个变量缺失比例和具体数量利用柱形图可以更直观地看出每个变量缺失比例和具体数量情况,如图7-3所示。缺失值:不存在万能方法要根据不同的需要选择合适的方法,因为并不存在一个可以解决所有问题的万能方法。常见预处理方法:均值法大部分数据挖掘的预处理阶段都会使用比较方便的方法来处理缺失值,比如均值法。均值法用该字段的均值填充缺失值,操作简便,适用于连续型变量适用前提数据分布较为均匀,无极端偏态数据量大、缺失占比不多:常采用删除法当数据量比较大,缺失值占比不多时,也常常采用删除法。数据量大删除少量缺失记录不影响整体分析缺失占比小删除法简单有效,不引入额外偏差缺失值处理:三类核心方法①删除数据记录直接剔除含缺失值的样本行②数据填补用统计量、模型或虚拟变量补全缺失③不处理保留缺失值,交由模型原生处理三类方法各有适用场景,选择时需结合样本量大小、缺失比例及下游模型类型综合判断。三类处理方法概览1删除数据记录操作简单,但牺牲数据量,可能造成信息丢失2数据填补分为填补法、模型预测法、虚拟变量法三种子策略3不处理直接保留缺失值,适用于原生支持缺失值的模型方法一1.删除数据记录删除数据记录是处理缺失值最直接的方式。其核心思路是将含有缺失值的样本行从数据集中完全移除,保留仅包含完整数据的记录进行后续分析。删除法的优点核心优势操作简单,无需额外建模或统计推断,实现成本极低,是数据清洗中最容易上手的方法。适用前提数据集样本量十分充足缺失值比例相对较少缺失值随机分布(MCAR)满足以上条件时,删除法既快速又可靠。删除法的缺点牺牲大量数据删除含缺失值的记录会导致可用样本量减少,在缺失比例较高时损失尤为显著。重要信息丢失被删除的记录中可能包含对分析极具价值的特征信息,删除后无法还原。数据分布变化当缺失数据非随机分布时,直接删除可能改变整体数据的统计特性。缺失比例高或非随机分布时的风险原始数据正态分布,样本均匀完整删除后数据分布偏离,样本发生偏移核心风险当缺失数据比例较高,或缺失数据非随机分布时,直接删除数据记录可能导致数据分布发生变化。如原本的正态分布可能变为非正态分布,严重影响后续统计分析的有效性。分布变化示例:正态→非正态例如,若缺失值集中在数据的某一端(如高值或低值区域),删除后分布偏斜,均值、方差等统计量均受影响,模型训练可能产生系统性偏差。删除法的适用场景建议使用样本量十分大且缺失值不多的情况下,删除少量记录对整体数据影响极小,方法非常有效。❌不建议使用样本量本身不大且缺失值比较多时,删除会大幅缩减可用数据,不建议采用此方法。样本量与缺失量的决策矩阵根据样本量与缺失比例的组合,灵活决定是否采用删除法,避免盲目操作。删除法适用条件小结操作简单无需复杂建模,直接移除含缺失值的行记录前提条件严格需样本量充足、缺失比例低、且缺失为完全随机(MCAR)风险不可忽视非随机缺失或高缺失比例下,可能导致分布偏移、信息损失谨慎决策小样本高缺失场景下,应优先考虑数据填补等其他方法当样本量有限或缺失比例较高时,数据填补成为更合理的选择。填补法不丢弃数据,而是通过统计、模型或标记手段"补全"缺失,最大程度保留信息。方法二2.数据填补对缺失值进行数据填补的处理方法可分为3种:填补法、模型预测法、虚拟变量法。数据填补的三种子方法填补法利用数据中的非缺失信息补充缺失值,包括均值、中位数、众数及相似样本填补模型预测法通过其他特征建立预测模型估计缺失值,如回归分析和多重插补法虚拟变量法添加新变量标记数据是否缺失,在建模时保留缺失信息填补法(1)填补法填补法利用数据中已有的非缺失信息来补充缺失值,是最直观、应用最广泛的一类缺失值处理策略。常用方法包括均值填补、中位数填补、众数填补及相似样本填补。填补法:四种常用方式均值填补用特征均值替代缺失,适合近似正态分布的数值型数据中位数填补适合存在异常值或分布偏态的数值型数据众数填补适用于分类型数据,用出现频率最高的类别填补相似样本填补寻找与缺失样本最相似的记录,用其对应值填补①简单统计量填补:分类数据众数填补示例某学校男生500人、女生50人,若性别数据存在缺失,可使用人数较多的"男生"来填补缺失值。原则:选取出现频率最高的类别(众数)作为填补值,保证整体分布尽量不受影响。分类数据→使用众数填补多数类别→男生(500人)①简单统计量填补:数值型数据身高填补示例某班级部分学生的身高数据缺失时,可用全班同学身高的平均值或中位数填补。数据近似正态分布→均值填补效果较好存在异常值或偏态分布→更适合中位数填补近似正态分布:均值填补效果较好当数据近似正态分布时,均值≈中位数≈众数,三者高度一致。此时使用均值填补对整体分布影响极小,是简单统计量中最优选择。异常值或偏态分布:中位数更稳健为什么选中位数?当数据存在异常值或分布偏态时,均值会被极端值拉偏,导致填补值失真。中位数对异常值不敏感,能更稳健地代表数据的"中心位置",填补效果更可靠。简单统计量填补的缺点降低数据真实性用统一的统计量替代真实缺失值,压缩了数据的自然变异性可能引入噪声填补值与真实值之间存在偏差,积累后可能干扰模型学习改变原有数据分布大量使用统计量填补会拉平方差,改变特征分布形态MCAR:均值/中位数填补影响较小MCAR定义MissingCompletelyatRandom(完全随机缺失):缺失与任何变量无关,纯属随机发生。影响分析在MCAR假设下,缺失样本是整体数据的随机子集,使用均值或中位数填补对总体分布影响较小,统计结论基本不受干扰。非完全随机缺失:分布可能被扭曲若数据非完全随机缺失(如缺失与某特征值相关),使用简单的统计量填补可能导致数据的特征分布被扭曲,影响后续模型的公平性与准确性,此时应考虑更复杂的填补方法。②热卡填补:供体概念与候选选取核心思路热卡填补法在完整数据中寻找与缺失样本最相似的记录(即"供体"),用该记录对应变量的值来填补缺失。通常从一组候选"供体"中随机或按规则选取一个作为填充值。热卡填补:相似性判定标准变量匹配基于关键特征变量的取值直接匹配,选择具有相同或相近特征的记录作为供体统计距离计算样本间的欧氏距离、马氏距离等,选择距离最近的记录作为供体综合判定结合多个指标综合评估相似性,能利用数据间相关性更准确估计缺失值热卡填补的难点核心难点该方法的难点在于相似标准的定义和选择。不同标准可能导致选出不同的供体,进而使填补结果出现偏差。主要挑战相似度定义因数据类型不同而差异较大候选供体选择规则影响结果稳定性高维数据中距离度量可能失效③冷卡填补:外部参考数据集与热卡的区别冷卡填补法与热卡法类似,也通过"供体"来填补缺失值,但它不是从同一数据集中寻找相似对象,而是从外部的、预先准备好的参考数据集(即"冷卡")中选取合适的值进行填补。热卡同一数据集内部寻找供体冷卡外部参考数据集中选取供体冷卡填补:优势与缺点优势可以引入外部可靠信息,填补结果稳定性较高,不受原数据集内部噪声干扰。❌缺点需要事先具备高质量的外部数据集,否则可能导致结果出现偏差,对外部数据依赖性强。④K均值聚类填补:基本流程用簇中心填补计算簇均值聚类划分K均值聚类首先将所有样本划分为若干簇,再用各簇的均值(簇中心)填补该簇样本的缺失值,基于相似群体进行插补。K均值聚类:填补效果的决定因素聚类质量决定填补质量该方法填补效果取决于聚类质量。若聚类划分合理,簇内样本高度相似,用簇中心填补误差小;若聚类质量差,填补结果可能严重偏离真实值。K均值聚类的局限性对初始中心点敏感K均值聚类的结果高度依赖初始中心点的选取,不同初始化可能产生截然不同的聚类结果容易陷入局部最优解算法基于贪心迭代策略,无法保证收敛到全局最优,可能停留在局部最优解导致聚类偏差(1)填补法小结:四种方法对比1简单统计量填补均值/中位数/众数;简单快速,但可能降低真实性2热卡填补同一数据集寻找最相似供体;利用相关性,但定义难3冷卡填补外部参考数据集供体;引入外部信息,依赖数据质量4K均值聚类先聚类再用簇中心填补;效果依赖聚类质量模型预测法(2)模型预测法模型预测法是指利用其他特征变量作为输入,将缺失变量作为预测目标来建立预测模型并填补缺失值。模型预测法:定义与原理核心原理以其他完整特征变量为自变量(输入),以含缺失的变量为因变量(目标),训练预测模型,用模型输出值填补缺失位置。填补缺失训练模型相关性弱:预测缺乏参考价值若相关性较弱,则预测结果缺乏参考价值。当输入特征与缺失变量之间几乎没有统计相关性时,模型无法从输入中获取有效信号,预测值接近随机猜测,填补结果毫无意义,甚至引入额外噪声。相关性过强:信息冗余风险过强相关性的问题若相关性过强,虽然能得到较准确的预测值,但可能导致信息冗余,使模型在后续分析中重复利用相同信息,影响特征独立性。理想区间特征间相关性应处于适中水平——既有足够预测力,又不至于造成信息冗余,此时模型预测法通常能获得较好的填补效果。相关性适中:填补效果最佳弱预测无效结果缺乏参考价值,近似随机中效果最佳通常能获得较好的填补效果强信息冗余预测准确但特征冗余风险高强制使用无相关性时的风险如果毫无合理相关性时仍强制使用模型预测法,可能引入额外偏差或虚假相关,进而影响后续数据分析的可靠性,导致错误的建模结论。⚠️使用模型预测法前,务必先评估特征间的相关性是否达到合理水平。①回归预测法原理利用完整数据建立回归模型,将缺失变量作为因变量,其他变量作为自变量进行预测填补。数值型变量:线性回归等分类变量:逻辑回归等回归预测法:适用范围与局限适用场景主要适用于数值型变量,对于分类变量也可采用逻辑回归等模型进行预测。适用范围广,实现相对成熟。⚠️核心局限该方法效果高度依赖变量间的相关性,相关性过低时将严重影响预测准确性,填补结果可能产生系统性偏差。回归预测法:相关性依赖性分析高相关性回归预测准确,填补可靠低相关性回归预测不准,填补失真关键结论回归预测法的准确性与变量间相关性成正比。在使用前,应通过相关系数或可视化手段预先评估特征相关性,再决定是否采用该方法。②极大似然估计(MLE)适用缺失类型当缺失类型为随机缺失(MAR)时,可采用极大似然估计法对未知参数进行估计EM算法实际应用中常使用期望最大化算法(EM算法)估计参数,假设模型对完整数据是正确的,通过观测数据的边际分布估计参数优点与缺点大样本下可获得渐近无偏且近似正态的估计值;但计算复杂度高,可能仅获得次优解,且收敛速度较慢③多重插补法贝叶斯假设待插补值被视为随机变量初始估计基于观测数据计算初始预测添加噪声引入不同噪声生成多组候选选择最优按准则评估并确定最终插补理论基础多重插补法基于贝叶斯估计理论,认为待插补值具有随机性,这些待插补值可能来自已观测数据。通过添加不同噪声生成多组候选值,最后根据特定准则选择最优插补值,有效量化了插补不确定性。(2)模型预测法小结回归预测建立回归模型填补;依赖特征相关性;数值型为主极大似然估计MAR条件下;EM算法;大样本渐近无偏;计算复杂多重插补贝叶斯理论;加噪生成多组候选;选最优插补值三种方法复杂度依次递增,填补精度与不确定性量化能力也逐步增强。虚拟变量法(3)虚拟变量法虚拟变量法是一种通过创建新变量来标记数据缺失情况的方法,在不丢失任何原始信息的前提下,将缺失本身转化为可用特征。虚拟变量法:基本定义核心思路为存在缺失值的特征生成一个二分类指示变量,将"是否缺失"这一信息显式地编码为新特征,供模型使用。本质不填补缺失值本身,而是标记缺失的存在,让模型自行学习缺失模式与目标变量之间的关系。虚拟变量法:二分类指示变量新变量B的定义若特征A存在缺失值,可以创建新特征B作为指示变量,以二值(0/1)编码缺失状态特征A缺失→B=1当特征A的值缺失时,新特征B取值为1特征A不缺失→B=0当特征A的值不缺失时,新特征B取值为0虚拟变量法:编码逻辑示意缺失映射示意特征A缺失新特征B=1(已缺失)特征A有值新特征B=0(不缺失)通过二值编码,模型可以将"缺失"本身作为一种信号加以利用,尤其在缺失模式与预测目标相关时效果显著。虚拟变量法小结保留缺失信息不删除、不填补,以新变量形式保留"缺失"这一信息创建指示变量为含缺失特征生成二分类变量B,编码是否缺失(0/1)适合下游建模让模型自行学习缺失模式的预测价值,尤其适合树模型等从填补到不处理填补策略(统计量/模型/虚拟变量)涵盖了主动干预缺失值的核心方法。而在某些特殊场景下,不处理也是一种合理且有效的选择——前提是所用模型具备原生处理缺失值的能力。方法三3.不处理不处理是指直接保留数据中的缺失值进行处理,而不进行任何形式的填补。这种方式避免了因不恰当的填补而改变原始数据分布或引入噪声。不处理的核心优势保护数据原貌避免因不恰当的填补而改变原始数据分布或引入额外噪声,最大程度保留数据的自然状态。适用前提是否可以采用"不处理"取决于所使用的模型类型。部分模型无法直接处理缺失值,此时必须填补部分模型原生支持缺失值,可直接使用模型类型决定是否需要填补必须填补的模型线性回归、SVM、KNN等大多数传统机器学习模型无法处理含缺失值的数据,必须先进行填补才能使用可不处理的模型部分模型原生支持缺失值,可在有缺失的数据上直接训练,无需额外处理,保留了数据的原始缺失信息原生支持缺失值的模型XGBoost通过学习缺失值的默认分支方向,原生支持含缺失数据的训练与预测随机森林决策树类模型可在分裂节点时将缺失值视为独立类别,不影响模型构建LightGBM同样支持缺失值的原生处理,在大规模数据集上表现尤为高效
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年黑龙江省同江市高三历史上册期末考试检测卷及完整答案(夺冠系列)
- 2025年江西省井冈山市高三历史上册期末考试测试卷(含答案)
- 2026澳航面试题目及答案解析
- 2026安全专监面试题库及答案
- 4-3.项目四 人工智能+文化娱乐:电影影评情感分析-自然语言处理技术分类
- 随钻测量工安全宣教测试考核试卷含答案
- 小风电利用工岗前基础晋升考核试卷含答案
- 无线电监测与设备运维员冲突管理考核试卷含答案
- 化妆品配方师班组安全评优考核试卷含答案
- 挤压模具工安全专项测试考核试卷含答案
- 2026高渗高血糖综合征课件
- 【地理】 东南亚第2课时课件-2025-2026学年湘教版(2024)七年级地理下学期
- 成人手术后疼痛评估与护理
- 2026中国硅烷偶联剂行业现状动态与需求趋势预测报告
- 2026年湖北省公务员录用考试《申论》试卷解析
- 第9章 访问控制
- 法布尔介绍课件
- 2026年江苏省高中学业水平合格性考试地理试卷(含答案详解)
- 《出塞》课件教学课件
- 应急局招聘面试题及答案
- 国家能源集团榆林化工煤制油重大项目筹建处招聘笔试题库2025
评论
0/150
提交评论