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

10个实用的数据可视化图表摘要

时间:2023-03-26 02:10:07 Python

一些独特的数据可视化技术,用于深入了解数据可视化是查看数据和一目了然地理解数据块的便捷方式。我们经常使用柱状图、直方图、饼图、箱线图、热图、散点图、折线图等,这些典型的图表对于数据可视化必不可少。除了这些被广泛使用的图表之外,还有很多不错但使用较少的可视化方法。这些图表可以帮助我们完成我们的工作。让我们看看那些可以完成的图表。1.平行坐标(ParallelCoordinate)我们最多可以将3维数据可视化。但有时我们需要可视化超过3维的数据以获取更多信息。我们经常使用PCA或t-SNE来降维并绘制它。在降维的情况下,可能会丢失大量信息。在某些情况下,我们需要考虑所有特征,平行坐标图有助于做到这一点。上图。水平线(平行轴)表示鸢尾花的特征(花瓣长度、萼片长度、萼片宽度、花瓣宽度)。分类是Setosa、Versicolor和Virginica。上图将物种编码为Setosa→1,Versicolor→2,Virginica→3。每个平行轴包含最小值到最大值(例如,花瓣长度从1到6.9,萼片长度从4.3到7.9,等等)。例如,考虑花瓣长度轴。这表明与其他两种植物相比,凤尾属植物的花瓣长度较小,其中处女属植物的花瓣长度最长。通过这张图,我们可以很容易地得到数据集的整体信息。数据集是什么样的?让我们来看看。让我们使用PlotlyExpress库[1]可视化数据。Plotly库提供了一个交互式绘图工具。将plotly.express导入为pxdf=px.data.iris()fig=px.parallel_coordinates(df,color="species_id",labels={"species_id":"Species","sepal_width":"SepalWidth","sepal_length":"SepalLength","petal_width":"PetalWidth","petal_length":"PetalLength",},color_continuous_scale=px.colors.diverging.Tealrose,color_continuous_midpoint=2)fig.show()除了上面的picture我们还可以使用其他库,如pandas、scikit-learn和matplotlib来绘制平行坐标。2、六角分箱(HexagonalBinning)六角分箱是一种用六边形直观表示二维数值数据点密度的方法。ax=df.plot.hexbin(x='sepal_width',y='sepal_length',gridsize=20,color='#BDE320')我考虑了上一节的数据集绘制了上面的六边形分箱图。Pandas允许我们绘制六边形分箱[2]。我已经展示了用于查找sepal_width和sepal_length列的密度的图。如果我们仔细观察图表,我们可以看到总面积被分成了无数个六边形。每个六边形覆盖特定区域。我们注意到六边形的颜色发生了变化。六边形有的没有颜色,有的呈浅绿色,有的颜色很深。根据图表右侧显示的色标,颜色密度随密度变化。刻度表示具有颜色变化的数据点的数量。六边形没有填充颜色,这意味着该区域没有数据点。其他库,如matplotlib、seaborn、bokeh(交互式绘图)也可用于绘制它。3.Contour二维等高线密度图是另一种可视化特定区域数据点密度的方法。这是为了找到两个数值变量的密度。例如,下图显示了每个阴影区域中有多少个数据点。importplotly.expressaspxfig=px.density_contour(df,x="sepal_width",y="sepal_length")fig.update_traces(contours_coloring="fill",contours_showlabels=True)fig.show()生成上图,我这里用的是plotly库,因为它可以方便的绘制交互式图表。我们在这里绘制了两个变量sepal_width和sepal_length的密度。当然你也可以使用其他的库,比如seaborn、matplotlib等。4.QQ-plotQQ图是另一个有趣的图。QQ是Quantile的缩写——Quantileplot(Quantile/percentile是一个范围,在这个范围内数据下降了指定的百分比。例如,第10个quantile/percentile表示在这个范围下,找到了10%的数据,而90%超出范围)。这是一种直观地检查数值变量是否服从正态分布的方法。让我解释一下它是如何工作的。图(a)为样本分布;(b)是标准正态分布。对于样本分布,数据范围从10到100(100%的数据在10到100之间)。但对于标准正态分布,100%的数据都在-3到3(z分数)范围内。在QQ图中,两个x轴值被分成100个相等的部分,称为分位数。如果我们将这两个值绘制在x和y轴上,我们将得到一个散点图。散点图在对角线上。这意味着样本分布是正态分布。如果散点图在左边或右边而不是对角线,则表示样本不是正态分布的。导入必要的库importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassns生成正态分布数据。np.random.seed(10)#GenerateUnivariateObservationsgauss_data=5*np.random.randn(100)+50绘制数据点的分布。sns.histplot(data=gauss_data,kde=True)这个图说明数据呈正态分布。我们用数据点做qq-plot来检验是否服从正态分布。importstatsmodels.apiassm#q-qplotsm.qqplot(gauss_data,line='s')plt.show()该图显示对角线上的散点。所以它是正态分布的。5.小提琴图(ViolinPlot)小提琴图与箱线图有关。我们可以从小提琴图中获得的另一条信息是密度分布。简单地说,它是一个结合了密度分布的箱线图。我们将其与箱线图进行比较。在小提琴情节中,小提琴中间的白点代表中点。实心框表示四分位数间距(IQR)。上下相邻值是离群值的围栏。超出范围,一切都是异常值。下图显示了比较。让我们看看小提琴图可视化importseabornassnssns.violinplot(data=df,y="sepal_width")我们还可以通过传递名称来绘制不同物种的小提琴图。importseabornassnssns.violinplot(data=df,x='species',y="sepal_width")也可以使用其他库,如plotly、matplotlib等来绘制小提琴图。6.改进版的箱线图(Boxenplot)Boxenplot是seaborn库推出的一种新型箱线图。对于箱线图,箱子是在四分位数上创建的。但在Boxenplot中,数据被分成更多的分位数。它为数据提供了更多的内存。鸢尾花数据集的箱线图显示了sepal_width的数据分布。sns.boxenplot(x=df["sepal_width"])上图显示了比箱线图更多的箱子。这是因为每个框代表一个特定的分位数。sns.boxenplot(data=df,x="species",y='sepal_width')不同物种sepal_width的Boxenplot图。7.点图在下图中有一些称为误差线的垂直线和连接这些垂直线的其他一些线。让我们看看它到底是什么意思。点图是一种通过上图所示点的位置来表示数值变量集中趋势的方法,误差条表示变量的不确定性(置信区间)[4]。绘制折线图以比较数值变量对于不同分类值的变异性[4]。让我们举一个实际的例子——我们继续使用seaborn库和iris数据集(在平行坐标部分提到)。importseabornassnssns.pointplot(data=df,x="species",y="sepal_width")该图显示了不同花朵萼片宽度的变化。我们还可以绘制多点图。8.SwarmplotSwarmplot是另一个受“beeswarm”启发的有趣图表。从这个图中我们可以很容易地理解不同的分类值是如何沿着值轴[5]分布的。它绘制没有重叠数据点的数据。但它不适合大型数据集。importseabornassnssns.swarmplot(data=df,x="species",y="sepal_width")9.旭日图(SunburstChart)是环形图或饼图的定制版,增加了一些额外的层级信息集成到图中[7]。整个图分为几个环(从内到外)。它包含层次结构信息,其中内环位于层次结构的顶部,外环位于较低的[7]顺序。importplotly.expressaspxdf=px.data.tips()drawsunburst图=px.sunburst(df,path=['sex','day','time'],values='total_bill',color='time')fig.show()Sunburst类的路径属性提供了一个层次结构,性别位于层次结构的顶部,后面是日期和时间。10.词云的思路很简单。假设我们有一组文本文档。单词很多,有的出现频率高,有的出现频率低。在词云图中,所有的词都画在一个特定的区域,频繁出现的词被高亮显示(以更大的字体)。有了这个词云,我们可以轻松找到重要的客户反馈,热门政治议程话题等。我们可视化的每个类别data.category.value_counts()的数据。#importingthemodulefromwordcloudlibraryfromwordcloudimportWordCloudimportmatplotlib.pyplotasplt#通过仅采用类别的第二部分从类别列创建文本。text="".join(cat.split()[1]forcatindata.category)#生成云word_cloud=WordCloud(collocations=False,background_color='black').generate(text)plt.imshow(word_cloud,interpolation='bilinear')plt.axis("off")plt.show()图中显示了频率最高的所有类别。我们还可以使用此图从文本中查找频繁出现的单词。总结数据可视化是数据科学不可或缺的一部分。在数据科学中,我们处理数据。手动分析少量数据还好,但是当我们处理成千上万的数据时,它就变得非常麻烦。如果我们不能发现数据集中的趋势和见解,我们可能无法使用这些数据。希望上面显示的图表可以帮助您深入了解数据。https://avoid.overfit.cn/post/a2bcfd831b054b26b0048c7f8684fb65