共计 4761 个字符,预计需要花费 12 分钟才能阅读完成。
用于深刻理解数据的一些独特的数据可视化技术
可视化是一种不便的察看数据的形式,能够高深莫测地理解数据块。咱们常常应用柱状图、直方图、饼图、箱图、热图、散点图、线状图等。这些典型的图对于数据可视化是必不可少的。除了这些被宽泛应用的图表外,还有许多很好的却很少被应用的可视化办法,这些图有助于实现咱们的工作,上面咱们看看有那些图能够进行。
1、平行坐标图(Parallel Coordinate)
咱们最多能够可视化 3 维数据。然而咱们有时须要可视化超过 3 维的数据能力取得更多的信息。咱们常常应用 PCA 或 t-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()
除了上图以外咱们还能够应用其余库,如 pandas、scikit-learn 和 matplotlib 来绘制并行坐标。
2、六边形分箱图(Hexagonal Binning)
六边形分箱图是一种用六边形直观示意二维数值数据点密度的办法。
ax = df.plot.hexbin(x='sepal_width', y='sepal_length', gridsize=20,color='#BDE320')
我思考了上一节的数据集来绘制下面的六边形分箱图。Pandas 容许咱们绘制六边形 binning [2]。我曾经展现了用于查找 sepal_width 和 sepal_length 列的密度的图。
如果仔细观察图表,咱们会发现总面积被分成了无数个六边形。每个六边形笼罩特定区域。咱们留神到六边形有色彩变动。六边形有的没有色彩,有的是淡绿色,有的色彩很深。依据图右侧显示的色标,色彩密度随密度变动。比例示意具备色彩变动的数据点的数量。六边形没有填充色彩,这意味着该区域没有数据点。
其余库,如 matplotlib、seaborn、bokeh(交互式绘图)也可用于绘制它。
3、等高线密度图(Contour)
二维等高线密度图是可视化特定区域内数据点密度的另一种办法。这是为了找到两个数值变量的密度。例如,上面的图显示了在每个暗影区域有多少数据点。
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()
为了生成下面的图表,我这里应用了 plotly 库,因为它能够不便地绘制交互式的图表。咱们这里绘制了两个变量 sepal_width 和 sepal_length 的密度。
当然,也能够应用其余库,如 seaborn、matplotlib 等。
4、QQ-plot
QQ plot 是另一个乏味的图。QQ 是 Quantile – Quantile plot 的缩写(Quantile/percentile 是一个范畴,在这个范畴内数据降落了指定百分比。例如,第 10 个 quantile/percentile 示意在该范畴下,找到了 10% 的数据,90% 超出范围)。这是一种直观地查看数值变量是否遵从正态分布的办法。让我解释一下它是如何工作的。
图(a)是样本分布;(b) 是规范正态分布。对于样本分布,数据范畴从 10 到 100(100% 数据在 10 到 100 之间)。但对于规范正态分布,100% 的数据在 -3 到 3(z 分数)的范畴内。在 QQ 图中,两个 x 轴值均分为 100 个相等的局部(称为分位数)。如果咱们针对 x 和 y 轴绘制这两个值,咱们将失去一个散点图。
散点图位于对角线上。这意味着样本分布是正态分布。如果散点图位于右边或左边而不是对角线,这意味着样本不是正态分布的。
导入必要的库
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)
该图显示数据是正态分布的。咱们用数据点做 qq-plot 来测验它是否正态分布。
import statsmodels.api as sm
# q-q plot
sm.qqplot(gauss_data, line='s')
plt.show()
该图显示散点位于对角线上。所以它是正态分布的。
5、小提琴图(Violin Plot)
小提琴图与箱线图相干。咱们能从小提琴图中取得的另一个信息是密度散布。简略来说就是一个联合了密度散布的箱线图。咱们将其与箱线图进行比拟。
在小提琴图中,小提琴两头的白点示意中点。实心框示意四分位数间距 (IQR)。高低相邻值是异样值的围栏。超出范围,一切都是异样值。下图显示了比拟。
让咱们看看小提琴图的可视化
import seaborn as sns
sns.violinplot(data=df, y="sepal_width")
咱们还能够通过传递名称来绘制不同物种的小提琴图。
import seaborn as sns
sns.violinplot(data=df,x='species', y="sepal_width")
还能够应用其余库,如 plotly、matplotlib 等来绘制小提琴图。
6、箱线图的改进版(Boxen plot)
Boxenplot 是 seaborn 库引入的一种新型箱线图。对于箱线图,框是在四分位数上创立的。但在 Boxenplot 中,数据被分成更多的分位数。它提供了对数据的更多内存。
鸢尾花数据集的 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 数据集(在平行坐标局部中提到)。
import seaborn as sns
sns.pointplot(data=df,x="species", y="sepal_width")
该图表显示了不同花的萼片宽度的变异性。咱们还能够绘制多个点图。
8、分簇散点图(Swarm plot)
Swarm plot 是另一个受“beeswarm”启发的乏味图表。通过此图咱们能够轻松理解不同的分类值如何沿数值轴散布 [5]。它在不重叠数据点的状况下绘制数据。但它不适用于大型数据集。
import seaborn as sns
sns.swarmplot(data=df,x="species", y="sepal_width")
9、夕阳图(Sunburst Chart)
它是圆环图或饼图的定制版本,将一些额定的档次信息集成到图中 [7]。
整个图表被分成几个环 (从内到外)。它保留层次结构信息,其中内环位于层次结构的顶部,外环位于较低的[7] 阶。
import plotly.express as px
df = px.data.tips()
绘制夕阳图
fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', color='time')
fig.show()
sunburst 类的 path 属性提供了层次结构,其中性别位于层次结构的顶部,而后是日期和工夫。
10、词云(Word Cloud)
词云图的想法非常简单。假如咱们有一组文本文档。单词有很多,有些是经常出现的,有些是很少呈现的。在词云图中,所有单词都被绘制在特定的区域中,频繁呈现的单词被高亮显示(用较大的字体显示)。有了这个词云,咱们能够很容易地找到重要的客户反馈,热门的政治议程话题等。
import pandas as pd
data=pd.read_csv('/work/android-games.csv')
data.head()
咱们统计每个类别的数据数量
data.category.value_counts()
咱们进行可视化。
#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()
该图表显示了频率最高的所有类别。咱们也能够用这个图从文本中找到经常出现的单词。
总结
数据可视化是数据迷信中不可短少的一部分。在数据迷信中,咱们与数据打交道。手工剖析大量数据是能够的,但当咱们解决数千个数据时它就变得十分麻烦。如果咱们不能发现数据集的趋势和洞察力,咱们可能无奈应用这些数据。心愿下面介绍的的图能够帮忙你深刻理解数据。
https://avoid.overfit.cn/post/a2bcfd831b054b26b0048c7f8684fb65