数据可视化是任何数据科学或机器学习项目中非常重要的一部分。通常,你需要在项目早期做探索性数据分析(EDA)来获得对数据的一些理解,而创建可视化确实可以让分析任务更清晰、更容易理解,尤其是对于大规模高维数据集.在项目接近尾声时,以清晰、简洁和引人注目的方式呈现最终结果也非常重要,这样您的听众(通常是非技术客户)才能理解。读者可能看过我之前的文章,点击查看5个快速易用的Matplotlib数据可视化模板。通过那篇文章,我介绍了5种基本的数据可视化方法:散点图、折线图、直方图、条形图和箱线图。这些是简单而强大的可视化效果,您可以通过它们深入了解数据集。在本文中,我们将看到另外4种可视化数据的方法!本文对这些方法进行了更详细的介绍,在阅读了上一篇文章中的基本方法后可以用来从数据中提取更深入的信息。热图是数据的矩阵表示,其中每个矩阵元素的值由一种颜色表示。不同的颜色代表不同的值,需要比较的两个或两个特征通过矩阵的索引关联在一起。热图非常适合展示多个特征变量之间的关系,因为可以通过颜色直接知道那个位置的矩阵元素的大小。通过查看热图中的其他点,您还可以了解每个关系与数据集中其他关系的比较情况。颜色是如此直观,以至于它为我们提供了一种非常简单的方法来解释数据。现在让我们看一下实现代码。与“matplotlib”相比,“seaborn”可以用来绘制更高级的图形,这通常需要更多的组件,例如多种颜色、图形或变量。“matplotlib”可以用来显示图形,“NumPy”可以用来生成数据,“pandas”可以用来处理数据!绘图只是“seaborn”的一个简单功能。#Importinglibsimportseabornassnsimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt#创建一个随机数据集data=pd.DataFrame(np.random.random((10,6)),columns=["IronMan","CaptainAmerica","BlackWidow","Thor","Hulk","Hawkeye"])print(data)#绘制热图heatmap_plot=sns.heatmap(data,center=0,cmap='gist_ncar')plt.show()二维密度图二维密度图(2DDensityPlot)是一维版本密度图的直观扩展。与一维版本相比,它的优势在于可以看到两个变量的概率分布。例如,在下面的二维密度图中,右侧的比例图使用颜色来表示每个点的概率。我们的数据出现概率最大的地方(也就是数据点最集中的地方)好像是size=0.5和speed=1.4左右。正如您现在所知,二维密度图对于快速找出我们的数据最集中的位置非常有用,有两个变量,而不是像一维密度图那样只有一个变量。当您有两个对输出很重要的变量并且想了解它们如何协同工作以影响输出的分布时,使用二维密度图查看数据非常有用。再次证明使用“seaborn”写代码非常方便!这一次,我们将创建一个偏态分布,使数据可视化更有趣。您可以调整大部分可选参数以使可视化更清晰。#Importinglibsimportseabornassnsimportmatplotlib.pyplotaspltfromscipy.statsimportskewnorm#创建数据speed=skewnorm.rvs(4,size=50)size=skewnorm.rvs(4,size=50)#创建并缩短二维密度plotax=sns.kdeplot(speed,size,cmap="Reds",shade=False,bw=.15,cbar=True)ax.set(xlabel='speed',ylabel='size')plt.show()蜘蛛图蜘蛛图是显示一对多关系的最佳方式之一。也就是说,您可以绘制和查看与某个变量或类别相关的多个变量的值。在蛛网图中,一个变量相对于另一个变量的重要性是显而易见的,因为覆盖的区域和距离中心的长度在特定方向上变得更大。如果您想了解这些变量描述的几个不同类别的对象有何不同,您可以将它们并排绘制。在下面的图表中,很容易比较复仇者联盟的不同属性,看看他们各自擅长的地方!(请注意,这些数据是随机设置的,我对复仇者联盟的成员没有偏见。)在这里,我们可以直接使用“matplotlib”而不是“seaborn”来创建可视化结果。我们需要让每个属性在圆周上等距分布。我们将在每个角上设置标签,然后将值绘制为一个点,该点距中心的距离取决于其值/大小。最后,为了清楚起见,我们将使用半透明颜色来填充由连接属性点的线所包围的区域。#导入libsimportpandasaspdimportseabornassnsimportnumpyasnpimportmatplotlib.pyplotasplt#获取数据df=pd.read_csv("avengers_data.csv")print(df)"""#NameAttackDefenseSpeedRangeHealth01IronMan838075707012美国队长606263808023雷神80828310010033绿巨人8010067449244黑寡妇524360506555鹰眼5864588065"""#获取Iron的数据Manlabels=np.array(["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((角度,[角度[0]]))#Plotstufffig=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()树图我们从小学就开始用树图了!树状图自然而直观,这使得它们易于解释为直接连接的节点密切相关,而具有多个连接的节点则不太相似。在下面的可视化中,我根据Kaggle统计数据(健康、攻击、防御、特殊攻击、特殊防御、速度)绘制了Pokemon游戏数据集的一小部分的树状图。因此,统计上最接近的匹配神奇宝贝将紧密地联系在一起。比如上图,Arbo和Jay是直接相连的,如果我们看数据的话,Arbo的总分是438分,Jay是442分,非常接近!但是如果我们看Lada,我们可以看到它的总分是413,跟Arbor和Jay有很大的不同,所以他们在树状图中是分开的!当我们向上移动树时,绿色组的神奇宝贝彼此之间的相似性比它们与红色组中的任何神奇宝贝之间的相似度更高,即使这里没有直接的绿色连接。对于树状图,我们其实需要用“Scipy”来绘制!读取数据集中的数据后,我们将删除字符串列。这样做只是为了使可视化更加直观和易于理解,但在实践中将这些字符串转换为分类变量会提供更好的结果和比较。我们还设置了数据框的索引,以便它可以用作正确引用每个节点的列。最后,我需要告诉你,在“Scipy”中计算和绘制树状图只需要一行简单的代码。#Importlibsimportpandasaspdfrommatplotlibimportpyplotaspltfromscipy.clusterimporthierarchyimportnumpyasnp#读取数据集#删除任何字符串字段#只获取前40个,因为这个数据集是bigdf=pd.read_csv('Pokemon.csv')df=df.set_index('名称')deldf.index.namedf=df.drop(["Type1","Type2","Legendary"],axis=1)df=df.head(n=40)#计算每个样本之间的距离Z=hierarchy.linkage(df,'ward')#Orientationourtreehierarchy.dendrogram(Z,orientation="left",labels=df.index)plt.show()
