总结归纳了10个超级实用的数据可视化图表

来源丨爱数据LoveData

大家好,我是俊欣~

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

1、平行坐标图

Parallel Coordinate

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

fb427b52fca74e5591c92d51d2c54c2b.png

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

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

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

f2e7f6ba07dc67c3c22927d2e66268d5.png

让我们用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

74c4c5d057a3d23441cae2251d64df06.png

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

2、六边形分箱图

Hexagonal Binning

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

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

output

173be81bd4c39dba48fd8723eaf930e9.png

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

d209ed9da63ebd114ae3c7ce88039280.png

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

当然,也可以使用其他库,如seabornmatplotlib等。

4、QQ-plot

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

c11ceeae00baf3f876b07b9c7fe29380.png

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

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

2992b6db324bc44b33efcc1fe2da2ba7.png

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

cfa378ab312d9468ee79bced3cab89ba.png

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

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

output

0dc4886dd5ea9adc199fd2e47906f62c.png

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

小提琴图

Violin Plot

小提琴图与箱线图相关。我们能从小提琴图中获得的另一个信息是密度分布。简单来说就是一个结合了密度分布的箱线图。我们将其与箱线图进行比较。

在小提琴图中,小提琴中间的白点表示中点。实心框表示四分位数间距 (IQR)。上下相邻值是异常值的围栏。超出范围,一切都是异常值。下图显示了比较。

5972c5099dd7e5562648344ee696c8a3.png

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

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

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

output

2736c27f3ec166ce6834c80d90b8fea4.png

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

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

output

2ac44766340ae079b1e3e5e00009a9c7.png

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

箱线图的改进版

Boxen plot

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

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

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

output

b957c9603357e9dadd01c76ef719083c.png

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

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

output

b164515cd92c24eb913dffa8fcaa4fd2.png

不同物种sepal_widthBoxenplot图。

点图

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

5f0f07dfeca641dca0f873f29c4647bc.png

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

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

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

output

91d9a9098cf20fa3b6f5185854c599ce.png

分簇散点图

Swarm plot

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

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

output

adf66654bf3be01b13577c876ea44611.png

旭日图

Sunburst Chart

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

32672e620ba42dddb849a2b5f3f72e15.png

Sunburst Chart

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

3c853e91d964a2f6582f5576db4694db.png

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

output

4e13ac1bb067eebbb4a42951881e3af0.png

绘制旭日图

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

output

14aa356a05632fc58e1348ba08decb43.png

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

81603a8079c7ec8d2ff3f9d7d4bed1bf.png

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

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

524e95d613602456cfa4fcca82082831.png

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

总结

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

以下是本文的引用

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

NO.1

往期推荐

Historical articles

分享十个好用到爆的Python自动化脚本

介绍一个助你事半功倍的数据挖掘神器!!

12000字!实战案例!Python+SQL京东用户行为分析

案例实操 | 利用Lambda函数来进行特征工程,超方便的!!

分享、收藏、点赞、在看安排一下?

f7ebd66b30d2682e24295afcece720f2.gif

34cd7a6a6f6fd95f1db4e0f17075bdf7.gif

fba63aea94101bb8aa445d1a611ec8ba.gif

83d3e2b8781252715e384676dec4a880.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值