《Python大数据可视化方法与实践(微课版)》课件 第五章 关系数据可视化_第1页
《Python大数据可视化方法与实践(微课版)》课件 第五章 关系数据可视化_第2页
《Python大数据可视化方法与实践(微课版)》课件 第五章 关系数据可视化_第3页
《Python大数据可视化方法与实践(微课版)》课件 第五章 关系数据可视化_第4页
《Python大数据可视化方法与实践(微课版)》课件 第五章 关系数据可视化_第5页
已阅读5页,还剩188页未读 继续免费阅读

下载本文档

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

文档简介

第5章关系数据可视化本章导入在现代社会中,数据作为信息的载体,在各个行业与领域发挥着重要的作用。关系数据的价值关系数据不仅体现了事物之间错综复杂的内在联系,更反映了事物的价值和影响。可视化的意义通过可视化手段揭示变量之间的相关关系,有助于我们把握全局、洞察趋势,从而做出科学决策,实现精准施策。本章核心内容本章核心内容本章将深入探讨关系数据可视化的价值与意义。通过散点图、气泡图、直方图等典型表现形式,引导读者运用科学方法和技术工具,挖掘隐藏在海量数据背后的社会现象和规律性信息。散点图气泡图直方图5.1散点图核心定义散点图也叫X-Y图,它将所有的数据以点的形式展现在直角坐标系上,以展示变量之间的相互关系,点的位置由变量的数值决定。关键词:X-Y图·直角坐标系·点的位置由数值决定如何通过散点图判断相关关系?通过观察散点图上数据点的分布,可以推断出变量间的相关关系。读图分析的第一步:观察分布形态,进而推断变量间是否存在关联。随机分布——无相关关系的特征无相关关系时的表现如果变量之间不存在相关关系,那么在散点图上就会表现为随机分布的离散的点。特征点分布均匀、无规律可循结论两变量间不存在相关性趋势集中——存在相关关系的特征如果存在某种相关关系,那么大部分的数据点会相对集中,并以某种趋势呈现。数据点的集中程度与趋势方向是判断相关性强弱与方向的核心依据。离群点:偏离点集群的异常点离群点的定义那些离点集群较远的点称为离群点或者异常点。别名离群点/异常点特征远离主体点集群,偏差明显意义需重点关注,可能影响分析结论5.1.1单一散点图单一散点图通常用于展示两组数值型变量之间的关系,通过因变量和自变量的对应值生成坐标点。坐标点分布的判断作用坐标点分布的意义坐标点的分布可为判断两个变量之间是否存在相关关系提供帮助。通过观察坐标点的聚集形态与分布趋势,研究者可以对变量间的相关性作出初步判断。单一散点图的适用数据类型单一散点图通常用于显示和比较数值数据,如科学数据、统计数据和工程数据。科学数据实验测量、自然观测等统计数据调查结果、样本分析等工程数据传感器读数、性能指标等绘制散点图的方法总览可以使用方法matplotlib.pyplot.scatter(x,y,s,c,marker)绘制散点图,下面介绍常用的参数。"导入matplotlib准备x/y数据调用scatter()设置参数掌握各参数含义,是灵活控制散点图外观的基础。scatter()参数一览1x指定散点图的x轴数据2y指定散点图的y轴数据3s点的大小,默认为204c点的颜色,默认为蓝色5marker点的形状,默认为圆形参数详解参数x:指定x轴数据x:指定散点图的x轴数据。x参数接收一组数值序列,每个元素对应散点图中某个数据点在水平方向上的位置。通常传入PandasSeries或NumPy数组参数详解参数y:指定y轴数据y:指定散点图的y轴数据。y参数与x一一对应,共同确定每个数据点在坐标系中的位置。x与y的长度必须一致。x与y共同决定点的坐标(xᵢ,yᵢ)参数详解参数s:点的大小s:指定散点图中点的大小,默认为20。默认值20取值正数或数值数组可传入单一数值(所有点同大小)或等长数组(每点独立大小)。参数详解参数c:点的颜色c:指定散点图中点的颜色,默认为蓝色。默认值蓝色取值颜色字符串或颜色列表如color='g'表示绿色,也可传入颜色数组实现分类着色。参数详解参数marker:点的形状marker:指定散点图中点的形状,默认为圆形。默认值圆形("o")常用取值"o"圆·"s"方·"^"三角参数默认值小结s·c·marker三参数默认值对比s(大小)默认为20c(颜色)默认为蓝色marker(形状)默认为圆形三个参数均可省略,省略时按默认值绘制。5.1.1数据集fmri数据集介绍数据集来源本小节利用功能性磁共振成像数据集fmri绘制散点图。fmri是Seaborn自带的数据集。fmri(功能性磁共振成像)是神经科学领域的经典数据集,记录了不同时间点的脑区信号变化。在线导入fmri数据集使用以下语句通过Seaborn在线载入:importseabornassnsfmri=sns.load_dataset('fmri')需要网络连接;国内环境可能受限,建议提前准备离线方案。网络限制与离线解决方案离线替代方案自带数据集的导入通常受到网络环境的限制,此时可将离线数据集fmri.txt作为数据源。在线方式:sns.load_dataset('fmri')离线替代:使用本地fmri.txt文件用head()查看数据集基本情况可以通过head()方法查看数据集的基本情况。importpandasaspdtips=pd.read_csv('fmri.txt',index_col=False)print(tips.head())head()默认显示前5行,便于快速确认数据结构与字段内容是否正确。fmri数据集的5个属性subject被试的编号或标识符timepoint时间点event事件或刺激条件region脑区signal信号强度fmri数据集包含5个属性:被试的编号或标识符、时间点、事件或刺激条件、脑区、信号强度。查看数据集大小:fmri.shapeshape方法可以通过fmri.shape方法查看数据集大小,结果为(1064,5)。行数1064条记录列数5个属性两种绘制方法两种绘制散点图的函数Matplotlib库提供了2个函数可用于绘制散点图。方法一pyplot.plot()通过设置标记参数实现散点图方法二pyplot.scatter()专用散点图绘制函数,参数更丰富方法一:pyplot.plot()实现散点图关键说明一个是pyplot.plot()函数。通过在参数中将linestyle设置为'o'标记来实现。这里采用"ro"设置标记点:r代表红色,o代表圆点形状。plt.plot(fmri['timepoint'],fmri['signal'],'ro')plot()默认折线vs设置"ro"散点左子图未设置标记点,默认将绘制折线图,右子图采用plt.plot(fmri['timepoint'],fmri['signal'],'ro')设置标记点形状即可呈现为散点图。左子图(默认)未设置marker→折线图右子图("ro")设置'ro'→红色圆点散点图方法二:pyplot.scatter()绘制散点图scatter()调用示例pyplot.scatter()函数:plt.scatter(fmri['timepoint'],fmri['signal'],color='g')scatter()是专用函数,参数控制能力更强,推荐优先使用。plt.plot()vsplt.scatter()对比小结完整代码·第1段代码段一:导入库导入所需库importseabornassnsimportmatplotlib.pyplotaspltseaborn用于加载fmri数据集matplotlib.pyplot用于绘制散点图与设置样式完整代码·第2段代码段二:字体设置解决中文字体与负号显示问题plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=FalseSimHei(黑体)确保中文标题正常渲染;unicode_minus=False防止负号显示异常。完整代码·第3段代码段三:载入fmri数据指定数据集名称并载入dataset_name="fmri"fmri=sns.load_dataset(dataset_name)通过变量dataset_name存储数据集名称,再调用sns.load_dataset()完成加载。如网络受限,可改用离线fmri.txt+pd.read_csv()方式替代。完整代码·第4段代码段四:绘制散点图调用scatter()绘图plt.scatter(fmri['timepoint'],fmri['signal'],color='g')x轴fmri['timepoint']——时间点y轴fmri['signal']——信号强度color'g'——绿色点完整代码·第5段代码段五:标题与坐标轴标签为图表添加可读性标注plt.title('fmri散点图')plt.xlabel('时间点/秒')plt.ylabel('信号强度(百分比变化)')plt.show()title图表主标题xlabelx轴说明:时间点/秒ylabely轴说明:信号强度(百分比变化)show()渲染并显示图形完整代码·汇总完整代码一览importseabornassnsimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedataset_name="fmri"fmri=sns.load_dataset(dataset_name)plt.scatter(fmri['timepoint'],fmri['signal'],color='g')plt.title('fmri散点图')plt.xlabel('时间点/秒')plt.ylabel('信号强度(百分比变化)')plt.show()峰值区间通过散点图可以看出大部分样本在5秒到7.5秒之间达到变化速率的峰值。这是对fmri散点图的关键读图结论——峰值集中在5秒至7.5秒区间内。散点图的优势:展现大规模数据聚集核心优势展现大规模数据的聚集程度是散点图的优势之一。数据量过小难以体现出散点图的优势数据量庞大需关注点重叠问题alpha透明度的使用如果数据集规模庞大,则应通过参数alpha设置点的透明度,避免大规模数据点重叠造成的视觉干扰。合理设置透明度可以使得数据聚集程度通过色彩的饱和度清晰地呈现出来。读图结论与注意事项总结峰值区间大部分样本在5秒到7.5秒之间达到变化速率的峰值。样本规模要求如果数据集规模过小,则难以体现出散点图的优势。alpha透明度应通过参数alpha设置点的透明度,避免大规模数据点重叠造成的视觉干扰。饱和度呈现聚集合理设置透明度可以使得数据聚集程度通过色彩的饱和度清晰地呈现出来。知识点回顾低实践需求低理论要求高实践设置高理论理解fMRI数据集操作绘图方法与读图注意事项单一散点图用途与参数散点图定义与判读掌握以上四大板块,即可独立完成从数据载入到散点图绘制与解读的全流程。5.1.2分类散点图第5章分类散点图的主要用途分类散点图主要用于在同一坐标系下比较多个类别或分组的数据。分类散点图的核心定位——在同一坐标系中,同时展示并比较多个类别或分组的数据分布。同一坐标系下比较多个类别/分组分类散点图主要用于在同一坐标系下比较多个类别或分组的数据。将多个类别的数据点叠加绘制在同一坐标系内,是分类散点图区别于单一散点图的核心特征。表达方式:颜色与形状区分类别通过为不同类别的数据点设置不同的颜色或形状,可以清晰呈现类别间的差异与分布规律。颜色区分为每个类别指定独立颜色,视觉直觉最强形状区分使用圆形、三角、方形等不同标记形状颜色+形状多类别时联合使用,区分效果更清晰适用场景1:数据分布分析分类散点图适用于数据分布分析、聚类特征识别和类别比较,尤其适合样本量较大的情况。数据分布分析场景——观察各类别数据点的集中趋势与离散程度。适用场景2:聚类特征识别分类散点图适用于数据分布分析、聚类特征识别和类别比较,尤其适合样本量较大的情况。聚类特征识别场景——通过散点图直观判断各类别是否形成可分离的簇群。适用场景3:类别比较分类散点图适用于数据分布分析、聚类特征识别和类别比较,尤其适合样本量较大的情况。数据分布分析观察各类别数据点的集中趋势与离散范围聚类特征识别判断各类别是否形成可分离的簇群结构类别比较直接对比多个类别在特征空间中的差异适用条件:样本量较大的情况分类散点图适用于数据分布分析、聚类特征识别和类别比较,尤其适合样本量较大的情况。样本量较大时,每类的点足够多,分布规律更加清晰,聚类特征更易识别。样本量过少时,散点图结论可信度下降。默认显示:圆形数据点默认情况下,数据点以圆形显示,当涉及多个类别时,通常采用不同的颜色、形状加以区分。默认形状圆形(circle)——Seaborn与Matplotlib的默认标记类型单类别默认圆形即可满足展示需求多类别需采用颜色或形状进行区分,避免混淆多类别区分策略:颜色与形状默认情况下,数据点以圆形显示,当涉及多个类别时,通常采用不同的颜色、形状加以区分。不同颜色最常用策略,视觉直觉强,适合打印和屏幕展示不同形状适合黑白打印场景,或与颜色联合使用增强区分度案例引入:Iris数据集以Iris数据集为例。Iris数据集是一个经典的机器学习数据集。Iris数据集是机器学习领域最经典的入门数据集之一,结构清晰、类别分明,是学习分类散点图的理想案例。Iris样本量:150个样本Iris数据集是一个经典的机器学习数据集,它包含150个样本。150样本总数每类50个样本,共3个鸢尾花种类3类别数量setosa、versicolor、virginica50每类样本数三类样本量均衡,适合类别比较Iris特征结构:4个特征每个样本有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。1花萼长度sepallength(cm)2花萼宽度sepalwidth(cm)3花瓣长度petallength(cm)4花瓣宽度petalwidth(cm)Iris目标变量:1个目标变量1个目标变量(鸢尾花的种类)。目标变量species(鸢尾花的种类)类别1Irissetosa(山鸢尾)类别2Irisversicolor(变色鸢尾)类别3Irisvirginica(维吉尼亚鸢尾)本节分析目标:花瓣长度vs花瓣宽度若要分析花瓣长度和花瓣宽度的关系,可以绘制按种类分类的散点图。分析目标:以花瓣长度为X轴,花瓣宽度为Y轴,按种类着色,绘制分类散点图。绘图目标:按种类分类的散点图若要分析花瓣长度和花瓣宽度的关系,可以绘制按种类分类的散点图。选取特征选择轴按种类着色生成散点图明确绘图目标,是选择合适工具与参数的前提。分组方法:DataFrame.groupby()pandas库中的DataFrame.groupby()方法可用于分组操作。所属库pandas库方法名DataFrame.groupby()主要用途按指定列对数据进行分组操作groupby返回对象:DataFrameGroupBy该方法会返回一个分组对象(DataFrameGroupBy),可用于统计分析或提取特定分组数据。返回的DataFrameGroupBy对象是一个中间对象,本身不直接输出数据,需配合聚合函数(如.agg())才能得到统计结果。groupby用途:统计分析或提取特定分组数据该方法会返回一个分组对象(DataFrameGroupBy),可用于统计分析或提取特定分组数据。统计分析计算各组的均值、标准差、计数等聚合统计量提取特定分组通过.get_group()提取指定类别的子数据集另一种方法:Seabornlmplot()此外,也可使用Seaborn库的lmplot()函数。除pandas分组手动绘图外,Seaborn的lmplot()提供了更简洁的一体化解决方案,可自动完成分类与可视化。lmplot能力1:自动区分类别数据点该函数能自动区分不同类别的数据点,并为每个类别单独拟合回归线。自动区分类别——只需传入hue参数,lmplot()即可按类别自动着色,无需手动循环分组绘图。lmplot能力2:为每个类别单独拟合回归线该函数能自动区分不同类别的数据点,并为每个类别单独拟合回归线,便于直观比较各类别的分布特征和线性趋势。自动着色按hue参数指定列,为每类分配独立颜色单独回归线为每个类别独立拟合线性回归线置信区间默认显示回归线的95%置信区间阴影lmplot价值:直观比较分布与线性趋势便于直观比较各类别的分布特征和线性趋势,如图5-5所示。分布特征比较一图呈现各类别数据点的集中趋势与离散程度,便于横向对比线性趋势比较每类独立回归线,直观揭示各类别特征间的线性关系强弱与方向图示:图5-5Iris数据集的分类散点图便于直观比较各类别的分布特征和线性趋势,如图5-5所示。图5-5Iris数据集的分类散点图]上图为lmplot()函数绘制的带回归线分类散点图,三种鸢尾花的数据点以不同颜色区分,并各自附有线性回归拟合线与置信区间。代码讲解·第1段加载Iris数据集#加载Iris数据集iris=load_iris()使用sklearn.datasets中的load_iris()函数加载数据集,返回一个Bunch对象,包含数据矩阵、特征名称和目标标签。代码讲解·第2段构建DataFrame与列名df=pd.DataFrame(data=iris.data,columns=iris.feature_names)将Iris数据矩阵转换为pandasDataFrame,并以iris.feature_names作为列名,列名包含花萼/花瓣的长度与宽度。代码讲解·第3段species字段生成df['species']=iris.targetdf['species']=df['species'].apply(lambdax:iris.target_names[x])先将数值型目标变量(0/1/2)赋给species列,再通过apply+lambda将数值映射为对应的种类名称字符串。代码讲解·第4段分组与统计:aggmean/std/countgrouped=df.groupby('species')[['petallength(cm)','petalwidth(cm)']].agg(['mean','std','count'])groupby('species')按种类列进行分组[['petallength','petalwidth']]选取花瓣长度与宽度两列.agg(['mean','std','count'])同时计算均值、标准差、样本量代码讲解·第5段输出分组统计结果print(grouped)执行print(grouped)将在控制台打印一个多级列索引的DataFrame,行为三个种类,列为花瓣长度/宽度的mean、std、count统计值,便于核验分组数据的基本统计特征。代码讲解·第6段设置Seaborn样式importseabornassnsimportmatplotlib.pyplotasplt#设置Seaborn样式sns.set(style="whitegrid")sns.set(style="whitegrid")将绘图背景设置为白色网格,有助于数据点的阅读与精确定位。此处同时导入seaborn和matplotlib.pyplot。代码讲解·第7段绘制带回归线的散点图:lmplot#绘制带回归线的散点图sns.lmplot(x='petallength(cm)',y='petalwidth(cm)',hue='species',data=df,palette='bright')x/y花瓣长度为X轴,花瓣宽度为Y轴hue按species列自动分类着色data传入df(完整DataFrame)palettebright调色板,颜色鲜明易区分代码讲解·第8段显示图表:plt.show()#显示图表plt.show()plt.show()触发图形渲染并弹出交互式图形窗口(或在JupyterNotebook中内联显示)。这是matplotlib绘图流程的最后一步,缺少此调用时图形可能不会显示。图5-5复盘:lmplot输出效果此外,也可使用Seaborn库的lmplot()函数,该函数能自动区分不同类别的数据点,并为每个类别单独拟合回归线,便于直观比较各类别的分布特征和线性趋势,如图5-5所示。运行上述代码后,生成如图5-5所示的分类散点图,三类鸢尾花数据点颜色各异,并附有各自的线性回归拟合线。分类散点图关键设置:x/y/hue当使用Seaborn进行分类散点图绘制时,只需设置x轴为花瓣长度,y轴为花瓣宽度,并将hue参数设置为species,按鸢尾花种类进行颜色区分。hue含义:按鸢尾花种类进行颜色区分并将hue参数设置为species,按鸢尾花种类进行颜色区分。hue='species'是Seaborn分类可视化的核心参数,告知Seaborn用species列的不同取值来分配不同颜色。图示:图5-6按鸢尾花种类进行分类如图5-6所示,运行代码后将生成一个分类散点图,其中不同种类的鸢尾花用不同的颜色表示。使用scatterplot()函数绘制的分类散点图,三种鸢尾花以不同颜色区分,无回归线,更突出数据点的分布形态。读图目标:直观理解两变量关系这样可以直观地理解花瓣长度与花瓣宽度之间的关系。读图目标之一:观察两个连续变量(花瓣长度vs花瓣宽度)之间是否存在正相关、负相关或无明显线性关系。读图目标:看不同种类在两个特征的分布情况并且可以清晰地看到不同种类在这两个特征上的分布情况。类别可分性观察三种鸢尾花的数据点是否在特征空间中形成可分离的簇群分布范围与重叠判断各类别的数据点范围及类别间的重叠程度完整代码·第1段示例2:SCATTERPLOT导入库importseabornassnsimportmatplotlib.pyplotaspltfromsklearn.datasetsimportload_irisimportpandasaspdseaborn高级统计可视化库matplotlib.pyplot底层绘图与图表显示sklearn.datasets加载Iris等经典数据集pandas数据处理与DataFrame操作完整代码·第2段加载Iris并构建DataFrame#加载Iris数据集iris=load_iris()df=pd.DataFrame(data=iris.data,columns=iris.feature_names)load_iris()加载数据集,pd.DataFrame()将iris.data(150×4的NumPy数组)转换为DataFrame,并以iris.feature_names作为列标题。完整代码·第3段species字段处理df['species']=iris.targetdf['species']=df['species'].apply(lambdax:iris.target_names[x])赋值数值目标将iris.target赋给df['species']映射为字符串用apply+lambda转为类别名称两行代码完成数值到字符串的映射,使species列可直接用于Seaborn的hue参数。完整代码·第4段设置Seaborn样式#设置Seaborn样式sns.set(style="whitegrid")本页聚焦:sns.set(style="whitegrid")将全局绘图样式设为白色网格背景。与示例1一致,这是Seaborn推荐的基础样式之一,适合数据点密集的散点图。完整代码·第5段绘制分类散点图:scatterplot#绘制分类散点图plt.figure(figsize=(8,6))scatter=sns.scatterplot(x='petallength(cm)',y='petalwidth(cm)',hue='species',data=df,palette='bright')plt.figure(figsize=(8,6))预设画布尺寸为8×6英寸sns.scatterplot()纯散点图,无回归线,更突出分布形态hue='species'按种类自动着色区分三类鸢尾花palette='bright'bright调色板,颜色鲜明,对比度高总结①:分类散点图核心概念目的与特点分类散点图主要用于在同一坐标系下比较多个类别或分组的数据。通过为不同类别的数据点设置不同的颜色或形状,可以清晰呈现类别间的差异与分布规律。适用场景与区分分类散点图适用于数据分布分析、聚类特征识别和类别比较,尤其适合样本量较大的情况。默认情况下,数据点以圆形显示,当涉及多个类别时,通常采用不同的颜色、形状加以区分。总结②:Iris案例与分组绘图方法以Iris数据集为例,若要分析花瓣长度和花瓣宽度的关系,可以绘制按种类分类的散点图。DataFrame.groupby()方法pandas库中的分组方法,返回DataFrameGroupBy对象,可用于统计分析或提取特定分组数据。Seabornlmplot()函数能自动区分不同类别的数据点,并为每个类别单独拟合回归线,便于直观比较各类别的分布特征和线性趋势。总结③:Seaborn绘图参数与读图要点当使用Seaborn进行分类散点图绘制时,只需设置x轴为花瓣长度,y轴为花瓣宽度,并将hue参数设置为species,按鸢尾花种类进行颜色区分。关键参数设置x='petallength(cm)',y='petalwidth(cm)',hue='species',hue参数告知Seaborn用species列的不同取值来分配不同颜色,按鸢尾花种类进行颜色区分。读图目标直观理解花瓣长度与花瓣宽度之间的关系,并清晰看到不同种类在这两个特征上的分布情况(类别可分性、分布规律)。第5章5.2气泡图BubbleChart·三变量关系的可视化表达气泡图的定义与用途气泡图(BubbleChart)可用于展示3个变量之间的关系。气泡图是散点图的扩展形式,能够在二维平面上同时呈现三个数据维度,适用于多变量关系的直观对比与分析。三变量表达:x轴与y轴绘制时将一个变量放在x轴,另一个变量放在y轴。与散点图相同,气泡图首先确定两个核心变量——分别映射到横轴(x轴)与纵轴(y轴),构成坐标系的基础维度。第三个变量:用气泡大小表示第一维x轴变量第二维y轴变量第三维气泡大小第三个变量则用气泡的大小来表示。气泡的面积大小直接编码第三个变量的数值,数值越大气泡越大,实现了在二维图中传达三维信息的目的。与散点图的相同点气泡图与散点图类似,绘制时将一个变量放在x轴,另一个变量放在y轴。气泡图继承了散点图的核心结构:相同的坐标轴布局、相同的点状标记方式,是散点图在功能上的自然延伸。与散点图的不同点气泡图与散点图的不同之处在于:气泡图允许在图表中额外加入一个表示大小的变量进行对比。这一额外的"大小变量"使气泡图能够同时比较三个数据维度,信息密度显著高于普通散点图。过渡页先绘制随机散点图首先利用随机函数绘制一个简单的散点图,再在此散点图的基础上延伸出气泡图。学习路径:先掌握基础散点图的代码结构,再逐步引入气泡图的关键参数,实现功能升级。图5-7随机散点图图示说明本图展示使用np.random生成100个随机点后,调用plt.scatter(X,Y)所得到的基础散点图效果。x轴为均匀分布随机数,y轴为标准正态分布随机数,点的大小与颜色为默认样式。代码段1/5随机散点图代码:导入库importmatplotlib.pyplotaspltimportnumpyasnp导入matplotlib.pyplot用于绘图,导入numpy用于生成随机数据。这两行是几乎所有数据可视化脚本的标准开头。代码段2/5随机散点图代码:生成XX=np.random.rand(100)此行生成100个在[0,1)区间内均匀分布的随机数,作为散点的x轴坐标。np.random.rand(100)返回形状为(100,)的一维数组,每个值介于0到1之间,模拟x轴的随机分布数据。代码段3/5随机散点图代码:生成YY=np.random.randn(100)此行生成100个服从标准正态分布(均值为0,标准差为1)的随机数,作为散点的y轴坐标。np.random.randn与np.random.rand不同:前者为正态分布,数值可超出[0,1]范围,数据更具统计意义。代码段4/5随机散点图代码:plt.scatter(X,Y)plt.scatter(X,Y)参数X点的横坐标数组参数Y点的纵坐标数组plt.scatter(X,Y)是绘制散点图的核心函数调用。此处仅传入x和y两个位置参数,其余参数(大小、颜色等)均使用默认值。代码段5/5随机散点图代码:plt.show()plt.show()调用plt.show()将绘制好的图表渲染并显示在屏幕上。生成数据X=rand(100),Y=randn(100)绘制图形plt.scatter(X,Y)显示输出plt.show()素材C·参数S参数s:设置标记点尺寸此时可以利用参数s来设置标记点的尺寸大小。参数s是plt.scatter()的重要可选参数,直接控制每个散点的面积大小,是实现气泡图效果的关键。s的类型1:s是标量标量所有点大小相同s可以是一个标量。当s为单一数值(标量)时,图中所有数据点将以相同的尺寸显示。例如s=200表示每个点的面积均为200个单位。s的类型2:s是与X同长度的数组数组每个点大小各异s也可以是和X同长度的数组。当s为与X等长的数组时,每个数据点将拥有独立的尺寸,从而将第三个变量的数值信息编码为视觉上的气泡大小。示例调用示例调用:linewidth/s/alpha对应原文调用语句:plt.scatter(X,Y,linewidth=2.5,s=200,alpha=0.8)linewidth=2.5标记点边框线宽s=200标记点尺寸(标量)alpha=0.8透明度(0~1)图5-8为点设置尺寸的散点图图示说明本图展示将s=200、linewidth=2.5、alpha=0.8传入plt.scatter()后,所有点以统一的较大尺寸显示的效果。与图5-7相比,点的面积明显增大,轮廓线清晰,透明度使重叠区域可见。关键升级点s为数组时→第三维信息当s为数组时,可以额外显示第三个维度的信息。将s设置为与数据等长的数组后,每个气泡的面积独立反映该数据点在第三个维度上的大小,使图表从二维跃升为三维信息载体。散点图→气泡图散点图展示x轴与y轴两个维度。气泡图引入气泡大小作为第三维度。通过将参数s由标量改为数组,散点图完成质的升级,正式成为能够展示三个变量关系的气泡图。图5-9气泡图图示说明本图展示s为数组时的气泡图效果:各数据点的气泡大小各不相同,直观反映第三个维度的数值差异。与图5-8(统一大小)相比,图5-9的气泡大小存在明显差异,信息维度更为丰富。第四维引入:color参数第一维x轴位置第二维y轴位置第三维气泡大小s第四维颜色color结合color参数,还可以用颜色表示第四个维度信息。color参数接受与数据等长的数值数组,通过颜色深浅或色调变化,将第四个维度的数值映射为视觉颜色,进一步丰富图表的信息密度。第四维引入:cmap参数结合cmap参数,还可以用颜色表示第四个维度信息。cmap(colormap)参数指定颜色映射方案,例如'RdYlBu'表示从红色到黄色再到蓝色的渐变色谱,使第四维数值的视觉区分更加直观清晰。cmap典型风格(一):顺序型与发散型顺序型(Sequential)代表:'Blues''Greens''Oranges''viridis''plasma'特点:颜色从浅到深单向渐变,适合表示从低到高的连续数值,例如温度、密度、销售额等。用法示例代码:cmap='viridis'发散型(Diverging)代表:'RdYlBu''coolwarm''bwr''seismic'特点:以中间色为中性值,两端颜色向两个方向发散,适合表示有正负或中心基准的数据,例如涨跌幅、温度偏差等。用法示例代码:cmap='RdYlBu'选择合适的cmap类型,能让数据的含义一目了然。cmap典型风格(二):定性型与其他常用定性型(Qualitative)代表:'tab10'、'tab20'、'Set1'、'Set2'、'Paired'特点:由多种差异明显的颜色组成,无顺序关系,适合区分不同类别或分组,例如不同国家、不同产品线等。用法示例代码:cmap='tab10'其他常用代表:'hot'、'cool'、'jet'、'gray'、'rainbow'特点:'hot':黑→红→黄→白,适合热力图'cool':青→品红,冷色调渐变'jet':彩虹色,视觉冲击强但不推荐用于科学图表'gray':灰度图,适合打印用法示例代码:cmap='hot'气泡图中推荐使用'viridis'或'RdYlBu',视觉效果好且对色盲友好。结论展示更丰富的数据关系结合color参数和cmap参数,还可以用颜色表示第四个维度信息,展示更丰富的数据关系。气泡图通过位置(x、y)、大小(s)、颜色(color+cmap)四个视觉通道,在一张图中同时呈现四个变量的关系,是多维数据分析的有力工具。完整代码随机气泡图完整代码以下各页将逐行拆解完整代码,帮助理解每一行语句的作用与参数含义,最终实现带颜色映射的四维气泡图。完整代码段1/7完整代码:导入matplotlibimportmatplotlib.pyplotasplt导入matplotlib的pyplot模块并简写为plt,这是后续所有绘图函数(plt.scatter、plt.colorbar、plt.show等)的调用前缀。完整代码段2/7完整代码:导入numpyimportnumpyasnp导入numpy并简写为np,用于后续生成随机数组。np.random.rand和np.random.randn均属于numpy的随机数生成模块。完整代码段3/7完整代码:生成XX=np.random.rand(100)生成100个在[0,1)区间内均匀分布的随机数作为x轴坐标。在完整气泡图代码中,X同时还参与了气泡尺寸的计算(见代码段5)。完整代码段4/7完整代码:生成YY=np.random.randn(100)生成100个服从标准正态分布的随机数作为y轴坐标。Y同样参与了后续气泡尺寸的计算表达式X**2+Y**2,使气泡大小与数据点的"距原点距离"相关。完整代码段5/7完整代码:bubble=plt.scatter(...)bubble=plt.scatter(X,Y,color=np.random.rand(100),cmap='RdYlBu',s=100*(X**2+Y**2))color=np.random.rand(100)每点随机颜色值(第四维)cmap='RdYlBu'红-黄-蓝颜色映射方案s=100*(X**2+Y**2)气泡大小=距原点距离(第三维)完整代码段6/7完整代码:plt.colorbar(bubble)plt.colorbar(bubble)plt.colorbar(bubble)在图表旁边添加颜色条图例,将颜色映射的数值范围可视化显示。传入bubble(scatter返回的对象)作为参数,使颜色条与图中气泡的颜色映射保持一致。完整代码段7/7完整代码:plt.legend()+plt.show()plt.legend()plt.show()plt.legend()显示图例,标注各数据系列的含义plt.show()渲染并弹出最终气泡图窗口本小节总结:气泡图的核心要点气泡图是散点图的延伸,通过引入尺寸和颜色,可在二维平面上展示三至四个维度的数据关系。1X轴位置映射第一个变量的数值。2Y轴位置映射第二个变量的数值。3气泡大小(s)第三个变量,数值越大气泡越大。4气泡颜色(color&cmap)第四个变量(可选),通过色深或色调变化增强信息。熟练掌握气泡图的参数配置,能有效地将复杂的多维数据转化为直观易懂的视觉表达。5.3直方图数据分布的可视化利器第5章直方图是什么直方图是一种统计图表,用于表示数据的分布情况。它将数据划分为不同的区间(也称为"箱子"或"柱子"),并显示每个区间中数据的频数或频率。分箱概念:区间/箱子/柱子核心思想将连续数据划分为若干个不重叠的区间,每个区间即一个"箱子",在图表中以一根"柱子"呈现。原始数据连续的数值序列分箱划分区间(箱子)绘柱每箱对应一根柱子横轴与纵轴的含义横轴直方图的横轴表示数据的范围,即各分箱区间的边界值。纵轴直方图的纵轴表示频数或频率,反映落在该区间内的数据数量。柱子高度表达什么柱子越高该区间内数据越多,频数越大柱子越低该区间内数据越少,频数越小直方图通过柱子的高度反映数量的多少,能清晰表现不同区间数值的差异。引入:图像直方图示例与价值下面以图像直方图为例来说明其工作原理。在图像处理领域,直方图常作为图像后期调整的参考工具,大多数人可能都只是用它来观察一张照片的曝光分布。图像处理中的用途曝光判断帮助判断照片曝光是否合适,亮部与暗部比例一目了然。细节层次帮助判断曝光与细节层次,评估图像的动态范围。信息丰富实际上直方图提供的信息非常丰富,许多关键信息都隐藏在直方图之中。数据分析中的用途两大核心价值揭示分布特征快速了解数据集中趋势与离散程度识别异常值无论是在数据分析中用于揭示分布特征和异常值,均可直观呈现直方图信息很丰富许多关键信息都隐藏在直方图之中。无论是在数据分析中用于揭示分布特征和异常值,还是在图像处理中帮助判断曝光与细节层次,直方图都是不可或缺的分析工具。图5-10:图像直方图图5-10展示了一幅典型的图像亮度直方图,横轴为亮度值,纵轴为像素数量,凸起分布反映照片的曝光特征。图5-10:横轴亮度解释横轴含义横轴表示亮度,从左到右表示亮度从低到高。亮度值从0(纯黑)到最大值(纯白),完整覆盖图像的明暗范围。亮度轴亮度低亮度轴亮度高高亮度光滑无噪点低亮度噪点明显高亮度细节保留低亮度高对比细节图5-10:纵轴像素数量解释纵轴表示像素数量,从下到上数值依次增大,单位为像素个数(整数)。纵轴的本质是一个计数轴,它记录了图像中各亮度区间内像素的绝对数量。纵轴的数值为非负整数,所有分箱的纵轴数值之和等于图像的总像素数(即图像宽度×高度)。纵轴的最大值由图像内容决定:像素分布越集中,峰值越高;分布越均匀,各柱高度越接近。纵轴的本质计数轴——统计落入每个亮度区间的像素绝对数量,数值为非负整数。纵轴的总量关系所有分箱纵轴数值之和=图像总像素数(宽×高),可用于验证统计完整性。图5-10:凸起高度的含义直方图在某个亮度区间的凸起越高,就表示在这个亮度区间内的像素越多。凸起高→像素多该亮度区间像素密集凸起低→像素少该亮度区间像素稀疏核心规律凸起的位置=主要亮度区域凸起的高度=该亮度的像素数量图5-10:亮度整体偏低的结论例如,这幅直方图的凸起主要集中在左侧,也就是说这张照片的亮度整体偏低。Matplotlib与NumPyhistogram的关系封装与扩展Python中Matplotlib库对NumPy库的histogram函数进行了多样化的封装,并提供了丰富的可视化功能。NumPy底层统计计算Matplotlib可视化封装与绘图hist函数全名与参数列表可以利用函数matplotlib.pyplot.hist(x,bins,color,label,alpha,orientation,rwidth)绘制直方图,参数说明如下。x数据bins分箱数color填充色label标签alpha透明度orientation方向rwidth宽度%参数x:指定绘图数据参数①xx:指定要绘制直方图的数据。说明x是hist()函数最核心的参数,通常传入一个一维数组或列表,代表待分析的原始数值序列。plt.hist(x=data)参数bins:指定分箱数参数②binsbins:指定直方图条形的个数。常用取值整数如bins=20,固定分箱数量'auto'自动选择最优分箱数参数color:设置填充色参数③colorcolor:设置直方图的填充色。示例plt.hist(x=d,color='#0504aa')支持颜色名称字符串、十六进制色码,或RGB元组等多种格式。参数label:设置标签参数④labellabel:设置直方图的标签。使用场景当图表中包含多组数据时,通过label参数为每组数据命名,配合plt.legend()显示图例,便于区分不同数据系列。参数alpha:设置透明度参数⑤alphaalpha:设置直方图的透明度。取值范围0完全透明0.7半透明(常用)1完全不透明参数orientation:设置摆放方向参数⑥orientationorientation:设置直方图的摆放方向,默认为垂直方向。'vertical'默认,柱子竖立,横轴为数值'horizontal'柱子横放,纵轴为数值参数rwidth:设置条形宽度百分比参数⑦rwidthrwidth:设置直方图条形宽度的百分比。示例与效果plt.hist(x=d,rwidth=0.85)取值0~1之间,rwidth=0.85表示每根柱子占分箱宽度的85%,柱间留有间隙,视觉更清晰。数学意义:分箱→频数/频率→概率密度近似从数学意义上来看,直方图是将数据分箱后映射到频数或频率的一种方式,用于能近似估计变量的概率密度函数。样本量足够大时逼近真实分布小样本粗略直方图增大样本逼近真实分布当样本数量足够大时,直方图会逼近数据的真实分布。这是直方图作为概率密度近似工具的核心数学保证,样本量越大,估计越可靠。分箱越细,逼近效果越好1231粗分箱形状模糊,细节丢失2中等分箱基本轮廓可见3细分箱逼近真实概率密度函数分箱越细,逼近效果越好。但分箱过细也可能导致过拟合,实践中需要在精度与稳定性之间找到平衡,或使用bins='auto'自动优化。实操:编写程序绘制直方图下面编写Python程序绘制直方图。首先使用numpy.random.laplace()函数从拉普拉斯分布中抽取随机样本。生成数据:numpy.random.laplace()函数调用d=np.random.laplace(loc=15,scale=3,size=500)使用numpy.random.laplace()函数从拉普拉斯分布中抽取随机样本。参数一览loc=15位置参数(均值)scale=3尺度参数(扩散)size=500样本数量拉普拉斯分布的别名双重名称拉普拉斯分布(又称双指数分布),因其概率密度函数形如两个指数分布背靠背拼合而得名。首先使用numpy.random.laplace()函数从拉普拉斯分布(又称双指数分布)中抽取随机样本。拉普拉斯分布的"厚尾"特征标准正态分布薄尾,极端值概率低重合区中心形状相似,中间概率相近拉普拉斯分布厚尾,极端值发生更频繁拉普拉斯分布比标准正态分布具有更厚的尾部。厚尾意味着极端值出现的概率更高,在金融风险、信号处理等领域有重要应用价值。位置参数μ=15参数①位置参数位置参数μ=15决定众数位置。分布的峰值(众数)出现在x=15处。几何意义位置参数相当于分布的"中心",控制整个分布在数轴上左右平移的位置,与正态分布的均值μ作用类似。尺度参数b=3参数②尺度参数尺度参数b=3控制分布的扩散程度和尾部厚度。几何意义b越大,分布越扁平,尾部越厚,数据越分散;b越小,分布越尖锐,数据越集中于均值附近。图5-11:峰值与衰减描述如图5-11所示,数据在x≈15附近达到峰值,并向两侧逐渐衰减,展现出拉普拉斯分布的典型特征。这种"尖峰厚尾"形态是拉普拉斯分布区别于正态分布的显著标志,在直方图中清晰可见。分箱与统计:matplotlib.pyplot.hist()核心步骤然后使用matplotlib.pyplot.hist()函数,对样本进行分箱并统计各箱的频数。n,bins,patches=plt.hist(x=d,bins='auto',...)输入随机样本数组d操作自动分箱并统计频数输出n、bins、patchesbins='auto':自动选择分箱数自动分箱其中bins参数设为'auto',以自动选择分箱数。原理Matplotlib会综合使用Sturges规则和Freedman-Diaconis估计器,取二者中能产生更细分箱的方案,保证直方图形状合理、信息完整。hist返回值:n/bins/patchesn各分箱的频数数组,长度等于分箱数。bins各分箱的边界数组,长度为分箱数+1。patches柱形对象列表,可对每根柱子单独设置样式。函数返回值包括频数n、箱边界bins和柱形对象patches。图5-11:拉普拉斯直方图图5-11展示了从拉普拉斯分布抽取500个样本后绘制的直方图,峰值集中于x≈15,向两侧快速衰减,体现出"尖峰厚尾"的典型形态。代码:导入matplotlib完整代码·第1步importmatplotlib.pyplotasplt导入Matplotlib的pyplot模块,并约定别名plt,用于后续所有绘图操作。代码:导入numpy完整代码·第2步importnumpyasnp导入NumPy库并约定别名np,用于生成随机数据及数组运算。代码:生成拉普拉斯分布数据完整代码·第3步d=np.random.laplace(loc=15,scale=3,size=500)从拉普拉斯分布中抽取500个随机样本,位置参数loc=15,尺度参数scale=3,结果存入变量d。代码:调用hist()绘制直方图完整代码·第4步n,bins,patches=plt.hist(x=d,bins='auto',color='#0504aa',alpha=0.7,rwidth=0.85)调用plt.hist()对数据d进行自动分箱,设置填充色为深蓝、透明度0.7、条形宽度比例0.85,返回频数n、边界bins和柱形对象patches。代码:添加网格线完整代码·第5步plt.grid(axis='y',alpha=0.75)仅在y轴方向添加网格线,透明度设为0.75,使频数对比更直观,同时不干扰主体图形。代码:设置轴标签完整代码·第6步plt.xlabel('Value')plt.ylabel('Frequency')分别为横轴和纵轴添加文字说明:横轴标注数值范围Value,纵轴标注频数Frequency,使图表含义清晰。代码:设置标题与文本注释完整代码·第7步plt.title('Histogram')plt.text(23,45,r'$\mu=15,b=3$')设置图表标题为Histogram,并在坐标(23,45)处添加LaTeX格式的参数注释,直接在图中标明分布参数。代码:设置y轴最大值完整代码·第8步maxfreq=n.max()#设置y轴的最大值plt.ylim(ymax=np.ceil(maxfreq/10)*10ifmaxfreq%10elsemaxfreq+10)取频数最大值,并向上取整至10的倍数作为y轴上限,确保最高柱子顶端不超出画布边界。代码:显示图形完整代码·第9步plt.show()调用plt.show()将绘制完成的直方图渲染并显示在屏幕上,是Matplotlib绘图流程的最后一步。KDE定义:非参数方法与概率密度核密度估计(KernelDensityEstimation,KDE)是一种非参数方法,用于估计随机变量的概率密度函数。KDE如何产生连续密度曲线连续密度曲线核函数平滑离散样本点它通过核函数对离散的样本点进行平滑处理,从而得到连续的密度曲线。核函数(如高斯核)在每个样本点处放置一个小"帽子",将所有帽子叠加后形成平滑的连续曲线。KDE与直方图对比直方图依赖分箱选择,不同bins产生不同形状,为离散近似。KDEKDE能够更平滑地描述数据的分布特征,避免了因分箱选择不同而导致的形状差异。pandasplot.kde()的用途快速绘制核密度曲线pandas库的plot.kde()函数可用于快速绘制核密度曲线,该方法支持Series和DataFrame数据结构。支持Series与DataFrameSeries单列数据,绘制单条KDE密度曲线,适合单变量分析。DataFrame多列数据,自动为每列分别估计并在同一坐标系中绘制,便于横向比较。多变量时分别估计并同图比较当数据集中包含多个变量时,plot.kde()会分别计算每个变量的密度估计,并将结果可视化在同一坐标系中,便于比较不同数据的分布情况。直方图+KDE结合的价值保留原始特征直方图忠实反映原始数据的频数分布展示平滑趋势KDE曲线清楚展示概率密度的集中区域和总体分布趋势核心价值将直方图与KDE曲线结合使用,既可以保留原始数据的分布特征,又能更清楚地展示概率密度的集中区域和总体分布趋势。图5-12:KDE直方图图5-12同时展示了两个正态分布样本(one与two)的直方图与KDE曲线,直观对比两组数据的中心位置与扩散程度。KDE直方图代码:导入三个库KDE代码·第1步importmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspd同时导入Matpl

温馨提示

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

最新文档

评论

0/150

提交评论