如何简单地展示数据结果


本文使用 matplotlib 来实现数据可视化。完成对文章 如何简单地训练词向量 的数据结果的可视化展示。

相关 Github 源码

版权声明:本文为 frendy 原创文章,可以随意转载,但请务必在明确位置注明出处。


环境准备


1. 安装 matplotlib:

使用其中的 pyplot 来绘制 2D / 3D 图表;

pip install matplotlib
2. 安装 sklearn:

使用其中的 decomposition PCA 进行降维。可以理解为将一组矩阵进行坐标系转换吧,几何代数的知识忘得差不多了(捂脸)。

pip install sklearn

可视化处理


1. 数据准备

这里基于文章 如何简单地训练词向量 的模型结果进行处理:

a) 找出最相似的多个词

words = [wp[0] for wp in model.most_similar(word, topn=20)]

b) 提取词对应的词向量

wordsInVector = [model[word] for word in words]

c) 进行 PCA 降维

pca = PCA(n_components=2)
pca.fit(wordsInVector)
X = pca.transform(wordsInVector)
2. 画图 2D

a) 绘制图形

如以下代码所示,我们先获取 figure 对象,可以简单理解为整个图像的实例吧。这里直接在整个图像上绘制,其中 figsize 是生成图片的长宽,单位为英寸。

接下来调用 scatter 来绘制散点,如果是绘制线的话可以用 plot。其中,xs 和 ys 为数据坐标值,marker 控制标记的风格样式。

plt.figure(figsize=(10, 6))
plt.scatter(xs, ys, marker='o')

b) 遍历所有的词添加点注释

添加注释时要考虑两个点的坐标,一个是被注释的地方 xy(x, y),另一个是插入文本的地方 xytext(x, y)。

for i, w in enumerate(words):
	plt.annotate(
		w,
		xy=(xs[i], ys[i]), xytext=(6, 6),
		textcoords='offset points', ha='left', va='top',
		**dict(fontsize=10)
	)

c) 显示图像

plt.show()

以下是关于 “汽车” 结果的展示:

image

3. 画图 3D

a) 绘制图形

与上文 2D 不同的是这里不再是直接在整个图像对象上绘制,而是引入了 Axes 绘制区域的概念。在 matplotlib 中,整个图像为一个 Figure 对象。在 Figure 对象中可以包含一个,或者多个 Axes 对象。

fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xs, ys, zs, marker='o')

b) 遍历所有的词添加点注释

与上文 2D 不同的是这里需要先将 3 维坐标位置转成 2 维,以便在图像的相应位置绘制注释说明。

for i, w in enumerate(words):
	x2, y2, _ = proj3d.proj_transform(xs[i], ys[i], zs[i], ax.get_proj())
	ax.annotate(
		w,
		xy=(x2, y2), xytext=(6, 6),
		textcoords='offset points', ha='left', va='top',
		**dict(fontsize=10)
	)

c) 显示图像

plt.show()

以下是关于 “汽车” 结果的展示:

image


当然,上面只是九牛一毛,想了解更多可以参考下面资料,欢迎补充和推荐:


欢迎来撩

frendy

It will shine for us...