10个超级实用的数据可视化图表

描述

可视化是一种方便的观察数据的方式,可以一目了然地了解数据块。我们经常使用柱状图、直方图、饼图、箱图、热图、散点图、线状图等。这些典型的图对于数据可视化是必不可少的。除了这些被广泛使用的图表外,还有许多很好的却很少被使用的可视化方法,这些图有助于完成我们的工作,下面我们看看有那些图可以进行。

1、平行坐标图

Parallel Coordinate

我们最多可以可视化 3 维数据。但是我们有时需要可视化超过3维的数据才能获得更多的信息。我们经常使用PCAt-SNE来降维并绘制它。在降维的情况下,可能会丢失大量信息。在某些情况下,我们需要考虑所有特征,平行坐标图有助于做到这一点。

数据

鸢尾花数据集的平行坐标图

上面的图片。横线(平行轴)表示鸢尾花的特征(花瓣长、萼片长、萼片宽、花瓣宽)。分类是Setosa, Versicolor和Virginica。上图将该物种编码为Setosa→1,Versicolor→2,Virginica→3。每个平行轴包含最小值到最大值(例如,花瓣长度从1到6.9,萼片长度从4.3到7.9,等等)。例如,考虑花瓣长度轴。这表明与其他两种植物相比,濑蝶属植物的花瓣长度较小,其中维珍属植物的花瓣长度最高。

有了这个图,我们可以很容易地获得数据集的总体信息。数据集是什么样子的?让我们来看看。

数据

让我们用Plotly Express库[1]可视化数据。Plotly库提供了一个交互式绘图工具。


		

import plotly.express as px df = px.data.iris() fig = px.parallel_coordinates(df, color="species_id", labels={"species_id""Species",               "sepal_width""Sepal Width""sepal_length""Sepal Length",               "petal_width""Petal Width""petal_length""Petal Length", },                             color_continuous_scale=px.colors.diverging.Tealrose,                             color_continuous_midpoint=2) fig.show()

output

数据

除了上图以外我们还可以使用其他库,如pandasscikit-learnmatplotlib来绘制并行坐标。

2、六边形分箱图

Hexagonal Binning

六边形分箱图是一种用六边形直观表示二维数值数据点密度的方法。


		

ax = df.plot.hexbin(x='sepal_width', y='sepal_length',                      gridsize=20,color='#BDE320')

output

数据

Pandas允许我们绘制六边形binning [2]。我已经展示了用于查找sepal_widthsepal_length列的密度的图。

如果仔细观察图表,我们会发现总面积被分成了无数个六边形。每个六边形覆盖特定区域。我们注意到六边形有颜色变化。六边形有的没有颜色,有的是淡绿色,有的颜色很深。根据图右侧显示的色标,颜色密度随密度变化。比例表示具有颜色变化的数据点的数量。六边形没有填充颜色,这意味着该区域没有数据点。

其他库,如matplotlibseabornbokeh(交互式绘图)也可用于绘制它。

3、等高线密度图

Countour

二维等高线密度图是可视化特定区域内数据点密度的另一种方法。这是为了找到两个数值变量的密度。例如,下面的图显示了在每个阴影区域有多少数据点。


		

import plotly.express as px fig = px.density_contour(df, x="sepal_width", y="sepal_length") fig.update_traces(contours_coloring="fill", contours_showlabels = True) fig.show()

output

数据

为了生成上面的图表,我这里使用了plotly库,因为它可以方便地绘制交互式的图表。我们这里绘制了两个变量sepal_widthsepal_length的密度。 当然,也可以使用其他库,如seabornmatplotlib等。

4、QQ-plot

QQ plot是另一个有趣的图。QQQuantile - Quantile plot的缩写(Quantile/percentile是一个范围,在这个范围内数据下降了指定百分比。例如,第10个quantile/percentile表示在该范围下,找到了10%的数据,90% 超出范围)。这是一种直观地检查数值变量是否服从正态分布的方法。让我解释一下它是如何工作的。

数据

(a)样本分布(b)标准正态分布

图(a)是样本分布;(b)是标准正态分布。对于样本分布,数据范围从10到100(100% 数据在 10 到 100 之间)。但对于标准正态分布,100%的数据在-3 到3(z 分数)的范围内。在QQ图中,两个x轴值均分为 100个相等的部分(称为分位数)。如果我们针对x和y轴绘制这两个值,我们将得到一个散点图。

数据

QQ-plot

散点图位于对角线上。这意味着样本分布是正态分布。如果散点图位于左边或右边而不是对角线,这意味着样本不是正态分布的。

导入必要的库


		

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns

生成正态分布数据。


		

np.random.seed(10) # Generate Univariate Observations gauss_data = 5 * np.random.randn(100) + 50

绘制数据点的分布。

sns.histplot(data=gauss_data, kde=True)

output

数据

该图显示数据是正态分布的。我们用数据点做qq-plot来检验它是否正态分布。


		

import statsmodels.api as sm # q-q plot sm.qqplot(gauss_data, line='s') plt.show()

output

数据

该图显示散点位于对角线上。所以它是正态分布的。

小提琴图

Violin Plot

小提琴图与箱线图相关。我们能从小提琴图中获得的另一个信息是密度分布。简单来说就是一个结合了密度分布的箱线图。我们将其与箱线图进行比较。 在小提琴图中,小提琴中间的白点表示中点。实心框表示四分位数间距 (IQR)。上下相邻值是异常值的围栏。超出范围,一切都是异常值。下图显示了比较。

数据

盒状图和小提琴状图的常见组成。所有学术级别的薪酬总额

让我们看看小提琴图的可视化。


		

import seaborn as sns sns.violinplot(data=df, y="sepal_width")

output

数据

我们还可以通过传递名称来绘制不同物种的小提琴图。


		

import seaborn as sns sns.violinplot(data=df,x='species', y="sepal_width")

output

数据

还可以使用其他库,如plotlymatplotlib等来绘制小提琴图。

箱线图的改进版

Boxen plot

Boxenplotseaborn库引入的一种新型箱线图。对于箱线图,框是在四分位数上创建的。但在Boxenplot中,数据被分成更多的分位数。它提供了对数据的更多内存。

鸢尾花数据集的Boxenplot显示了sepal_width的数据分布。

sns.boxenplot(x=df["sepal_width"])

output

数据

上图显示了比箱线图更多的盒。这是因为每个框代表一个特定的分位数。

sns.boxenplot(data=df, x="species",y='sepal_width')

output

数据

不同物种sepal_widthBoxenplot图。

点图

下图中有一些名为误差线的垂直线和其他一些连接这些垂直线的线。让我们看看它的确切含义。

数据

点图是一种通过上图中显示的点的位置来表示数值变量集中趋势的方法,误差条表示变量的不确定性(置信区间)[4]。绘制线图是为了比较不同分类值的数值变量的变异性 [4]。

让我们举一个实际的例子—-我们继续使用seaborn库和iris数据集(在平行坐标部分中提到)。


		
			import seaborn as sns sns.pointplot(data=df,x="species", y="sepal_width")

output

数据

分簇散点图

Swarm plot

Swarm plot是另一个受“beeswarm”启发的有趣图表。通过此图我们可以轻松了解不同的分类值如何沿数值轴分布[5]。它在不重叠数据点的情况下绘制数据。但它不适用于大型数据集。


		

import seaborn as sns sns.swarmplot(data=df,x="species", y="sepal_width")

output

数据

旭日图

Sunburst Chart

它是圆环图或饼图的定制版本,将一些额外的层次信息集成到图中 [7]。

数据

Sunburst Chart

整个图表被分成几个环(从内到外)。它保存层次结构信息,其中内环位于层次结构的顶部,外环位于较低的[7]阶。

数据


		

import plotly.express as px df = px.data.tips()

output

数据

绘制旭日图


		

fig = px.sunburst(df, path=['sex''day''time'],                   values='total_bill', color='time') fig.show()

output

数据

sunburst类的path属性提供了层次结构,其中性别位于层次结构的顶部,然后是日期和时间。

词云

Word Cloud

词云图的想法非常简单。假设我们有一组文本文档。单词有很多,有些是经常出现的,有些是很少出现的。在词云图中,所有单词都被绘制在特定的区域中,频繁出现的单词被高亮显示(用较大的字体显示)。有了这个词云,我们可以很容易地找到重要的客户反馈,热门的政治议程话题等。


		

数据集 https://opendatacommons.org/licenses/odbl/1-0/

导入数据集

import pandas as pd
data=pd.read_csv('/work/android-games.csv')
data.head()

output

数据

我们统计每个类别的数据数量


		

data.category.value_counts() GAME CARD            126 GAME WORD            104 GAME ACTION          100 GAME ADVENTURE       100 GAME STRATEGY        100 GAME PUZZLE          100 GAME SIMULATION      100 GAME CASUAL          100 GAME ARCADE          100 GAME ROLE PLAYING    100 GAME TRIVIA          100 GAME BOARD           100 GAME CASINO          100 GAME RACING          100 GAME EDUCATIONAL     100 GAME SPORTS          100 GAME MUSIC           100 Name: category, dtype: int64

然后我们来进行可视化。


		

#importing the module from wordcloud library from wordcloud import WordCloud import matplotlib.pyplot as plt #creating a text from the category column by taking only the 2nd part of the category. text = " ".join(cat.split()[1] for cat in data.category) #generating the cloud word_cloud = WordCloud(collocations = False, background_color = 'black').generate(text) plt.imshow(word_cloud, interpolation='bilinear') plt.axis("off") plt.show()

output

 

该图表显示了频率最高的所有类别。我们也可以用这个图从文本中找到经常出现的单词。

总结

数据可视化是数据科学中不可缺少的一部分。在数据科学中,我们与数据打交道。手工分析少量数据是可以的,但当我们处理数千个数据时它就变得非常麻烦。如果我们不能发现数据集的趋势和洞察力,我们可能无法使用这些数据。希望上面介绍的的图可以帮助你深入了解数据。

以下是本文的引用

https://plotly.com/python/parallel-coordinates-plot/https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.hexbin.html

Hintze, V. P. A Box Plot-Density Trace Synergism. Am. Sat, (52), 181 (Open Access Journal).

seaborn.pointplot — seaborn 0.12.1 documentation (pydata.org)

seaborn.swarmplot — seaborn 0.12.1 documentation (pydata.org)Create a sunburst chart in Office — Microsoft Support

 

审核编辑 :李倩

 


 


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分