当前位置: 首页 > 后端技术 > Python

4种更快更简单的Python数据可视化方法

时间:2023-03-26 11:25:52 Python

热力图、二维密度图、蜘蛛网图和树状图,这些可视化方法你都用过吗?热图是数据的矩阵表示,其中每个矩阵元素的值由一种颜色表示。不同的颜色代表不同的值,需要比较的两个或两个特征通过矩阵的索引关联在一起。热图非常适合展示多个特征变量之间的关系,因为可以通过颜色直接知道那个位置的矩阵元素的大小。通过查看热图中的其他点,您还可以了解每个关系与数据集中其他关系的比较情况。颜色是如此直观,以至于它为我们提供了一种非常简单的方法来解释数据。现在让我们看一下实现代码。与“matplotlib”相比,“seaborn”可以用来绘制更高级的图形,这通常需要更多的组件,例如多种颜色、图形或变量。“matplotlib”可以用来显示图形,“NumPy”可以用来生成数据,“pandas”可以用来处理数据!绘图只是“seaborn”的一个简单功能。importseabornassnsimportpandasaspdimportnumpyasnpiportmatplotlib.pyplotasplt#创建一个随机数据集data=pd.DataFrame(np.random.random((10,6)),columns=["IronMan","CaptainAmerica","黑寡妇","雷神","绿巨人","鹰眼"])print(data)#绘制热图heatmap_plot=sns.heatmap(data,center=0,cmap='gist_ncar')plt.show()II二维密度图(2DDensityPlot)是一维版本密度图的直观扩展。与一维版本相比,它的优势在于可以看到两个变量的概率分布。例如,在下面的二维密度图中,右侧的比例图使用颜色来表示每个点的概率。我们的数据出现概率最大的地方(也就是数据点最集中的地方)好像是size=0.5和speed=1.4左右。正如您现在所知,二维密度图对于快速找出我们的数据最集中的位置非常有用,有两个变量,而不是像一维密度图那样只有一个变量。当您有两个对输出很重要的变量并且想了解它们如何协同工作以影响输出的分布时,使用二维密度图查看数据非常有用。再次证明使用“seaborn”写代码非常方便!这一次,我们将创建一个偏态分布,使数据可视化更有趣。您可以调整大部分可选参数以使可视化更清晰。importseabornassnsimportmatplotlib.pyplotaspltfromscipy.statsimportskewnorm#创建数据speed=skewnorm.rvs(4,size=50)size=skewnorm.rvs(4,size=50)#创建并缩短2D密度plotax=sns.kdeplot(speed,size,cmap="Reds",shade=False,bw=.15,cbar=True)ax.set(xlabel='speed',ylabel='size')plt.show()蜘蛛webGraphSpiderPlots是显示一对多关系的最佳方式之一。也就是说,您可以绘制和查看与某个变量或类别相关的多个变量的值。在蛛网图中,一个变量相对于另一个变量的重要性是显而易见的,因为覆盖的区域和距离中心的长度在特定方向上变得更大。如果您想了解这些变量描述的几个不同类别的对象有何不同,您可以将它们并排绘制。在下面的图表中,很容易比较复仇者联盟的不同属性,看看他们各自擅长的地方!(注意,这些数据是随机设置的。)这里,我们可以直接使用“matplotlib”而不是“seaborn”来创建可视化结果。我们需要让每个属性在圆周上等距分布。我们将在每个角上设置标签,然后将值绘制为一个点,该点距中心的距离取决于其值/大小。最后,为了清楚起见,我们将使用半透明颜色来填充由连接属性点的线所包围的区域。importpandasaspdimportseabornassnsimportnumpyasnpimportmatplotlib.pyplotasplt#获取数据df=pd.read_csv("avengers_data.csv")print(df)"""#名称攻击防御速度射程Health01钢铁侠838075707012美国队长606263808023雷神80828310010033绿巨人8010067449244黑寡妇524360506555鹰眼5864588065""".#Irondatanparray(["Attack","Defense","Speed","Range","Health"])stats=df.loc[0,labels].values#对plotangles=np.linspace(0,2*np.pi,len(labels),endpoint=False)stats=np.concatenate((stats,[stats[0]]))angles=np.concatenate((angles,[angles[0]]))#绘图stufffig=plt.figure()ax=fig.add_subplot(111,polar=True)ax.plot(angles,stats,'o-',linewidth=2)ax.fill(angles,stats,alpha=0.25)ax.set_thetagrids(angles*180/np.pi,labels)ax.set_title([df.loc[0,"Name"]])ax.grid(True)plt.show()Dendrogram我们从小学就开始用树状图(TreeDiagram)!树状图自然且直观,这使得它们易于解释。直接连接的节点密切相关,而具有多个连接的节点不太相似。在下面的可视化中,我根据Kaggle统计数据(健康、攻击、防御、特殊攻击、特殊防御、速度)绘制了Pokemon游戏数据集的一小部分的树状图。因此,统计上最接近的匹配神奇宝贝将紧密地联系在一起。比如上图,Arbo和Jay是直接相连的,如果我们看数据的话,Arbo的总分是438分,Jay是442分,非常接近!但是如果我们看Lada,我们可以看到它的总分是413,跟Arbor和Jay有很大的不同,所以他们在树状图中是分开的!当我们向上移动树时,绿色组的神奇宝贝彼此之间的相似性比它们与红色组中的任何神奇宝贝之间的相似度更高,即使这里没有直接的绿色连接。对于树状图,我们实际上需要使用“Scipy”来绘制它。读取数据集中的数据后,我们将删除字符串列。这样做只是为了使可视化更加直观和易于理解,但在实践中将这些字符串转换为分类变量会提供更好的结果和比较。我们还设置了数据框的索引,以便它可以用作正确引用每个节点的列。最后,我需要告诉你,在“Scipy”中计算和绘制树状图只需要一行简单的代码。importpandasasppdffrommatplotlibimportpyplotaspltfromscipy.clusterimporthierarchyimportnumpyasnp#Readinthedataset#Dropanyfieldsthatarestrings#只获取前40个,因为这个数据集是bigdf=pd.read_csv('Pokemon.csv')df=df.set_index('Name')deldf.index.namedf=df.drop(["Type1","Type2","Legendary"],axis=1)df=df.head(n=40)#计算每个样本之间的距离Z=hierarchy.linkage(df,'ward')#定位我们的treehierarchy.dendrogram(Z,orientation="left",labels=df.index)plt.show()文渊网络,仅供学习,如有侵权,请联系删除。我的公众号【Python圈】汇集了优质的技术文章和经验总结。学习Python的路上肯定会遇到困难,不要慌张,我这里有一套学习资料,包括40+电子书,600+教学视频,涉及Python基础、爬虫、框架、数据分析、机学习等等,别怕学不会!