python image stiching_数据可视化 | 用Python生成个性化词云

点击蓝字

d7594856-d119-eb11-8da9-e4434bdf6706.png

关注我们

d8594856-d119-eb11-8da9-e4434bdf6706.jpeg

本文将介绍如何用python生成个性化词云,对其进行样式设置,并使用自定义形状。

d9594856-d119-eb11-8da9-e4434bdf6706.png

文字云是文本可视化的一种有效方式。从一堆文本中,你可以一眼看到哪些词是占主导地位的词,这既有趣又能产生吸引眼球的视觉效果。本文将介绍如何使用名为wordCloud的python模块生成单词云。首先从一个简单的字云开始,然后显示一些定制和酷的形状。

本文将使用来自Kaggle的数据集。下载资料集网址:https://www.kaggle.com/christopheiv/winemagdata130k

d7594856-d119-eb11-8da9-e4434bdf6706.png d7594856-d119-eb11-8da9-e4434bdf6706.png d7594856-d119-eb11-8da9-e4434bdf6706.png

Kaggle

这里介绍一下kaggle网站,Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。该平台已经吸引了80万名数据科学家的关注,这些用户资源或许正是吸引谷歌的主要因素。

通俗的说,Kaggle上面有着各种高质量的数据集,并且基于这些数据集会有一些大的公司进行赞助,来举办一些算法的竞赛,在竞赛时还可通过社区进行讨论(包括比赛中的分享、答疑,和比赛后的top solution分享)。这样就使得全球的顶尖高手会对参加比赛产生兴趣,因为收获到的不仅有奖金还有名气。同时kaggle对萌新也很友好,在社区中可以学到很多的知识和解决方案(top solution)。本文中,我们所使用的数据集就从这里下载。

接下来将介绍如何使用python生成个性化词云。

最关键的使用WordCloud模块,要使用WordCloud模块,需要先进行安装。这可以通过使用pipinstall命令来完成:

pip install wordcloud

除此之外,还要用到的库和环境有:

1.Numpy Library

2.Pandas Library

3.Matplotlib Library

4.Pillow Imaginglibrary

5.Jupyter Notebook environment

最简单的版本非常容易构建。首先导入必要的包和数据集。

import numpy as np
import pandas as pd
from os import path
from PIL import Image
from wordcloud import WordCloud, STOPWORDS, ImageColorGeneratorimport matplotlib.pyplot as plt
%matplotlib inlinedf = pd.read_csv("winemag-data-130k-v2.csv", index_col=0)

如下图,该数据集描述了不同国家的葡萄酒以及其他一些信息。

df594856-d119-eb11-8da9-e4434bdf6706.png

但是对于本教程,我们将只关注Description列,因为它包含了大量的文本。

text = " ".join(review for review in df.description)
print ("There are {} words in the combination of all review.".format(len(text)))
输出:
There are 31661073 words in the combination of all review.

共有31661073个单词

下面是生成最简单单词云的代码片段。

wordcl = WordCloud().generate(text)
plt.imshow(wordcl, interpolation='bilinear')
plt.axis('off')
plt.show()

最基本的词云完成了!单词越大越粗,它出现在文本中的频率就越高。

e0594856-d119-eb11-8da9-e4434bdf6706.png

接下来将使用更多的样式参数

background_color: :更改默认的黑色背景
max_type_size:在上面的示例中,可以看到有些单词非常大。可以控制一下单词的最大尺寸。
Max_words:根据出现的频率,它将显示单词云中指定的单词数。

使用上面的所有参数,变成彩色,再次创建词云:

e1594856-d119-eb11-8da9-e4434bdf6706.png

接下来将使用自定义形状,而不是矩形形状,可以导入一张图片作为词云的形状。

mask = np.array(Image.open("img/w_wine.png"))
wc = WordCloud(background_color='black', mask=mask, mode='RGB', 
width=1000, max_words=200, height=1000,
random_state=1)
wc.generate(text)
plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.tight_layout(pad=0)
plt.axis('off')
plt.show()

效果图为:e2594856-d119-eb11-8da9-e4434bdf6706.png

为了获得更好的效果,可以尝试将单词都变成白色,背景为黑色。

wc = WordCloud(background_color='black', mask=mask, mode='RGB', 
color_func=lambda *args, **kwargs: "white", 
width=1000, max_words=200, height=1000,
random_state=1)
wc.generate(text)
plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.tight_layout(pad=0)
plt.axis('off')
plt.show()

e3594856-d119-eb11-8da9-e4434bdf6706.png

为了获得更精确的形状,让边界更明显,可以将边界描绘出来。

wc = WordCloud(background_color='white', mask=mask, mode='RGB',
width=1000, max_words=1000, height=1000,
random_state=1, contour_width=1, contour_color='steelblue')
wc.generate(text)
plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.tight_layout(pad=0)
plt.axis('off')
plt.show()

这是最终的效果图与原图的对比,可以看到,图片为一个女人拿起酒杯在喝酒,里面填充了许多与酒相关的单词(文字库来自kaggle的数据集)。让一人一眼便看出了这幅图片的主题。

e4594856-d119-eb11-8da9-e4434bdf6706.png

除了使用python代码生成个性化词云,网络上还有许多现成的软件可以用于快速生成个性化词云。如,Tagxedo

e5594856-d119-eb11-8da9-e4434bdf6706.png

但是仍然需要收集与主题相关的语料,和个性化图片(如果会使用ps抠图的话将非常方便)。

d7594856-d119-eb11-8da9-e4434bdf6706.png d7594856-d119-eb11-8da9-e4434bdf6706.png d7594856-d119-eb11-8da9-e4434bdf6706.png

本文作者

eb594856-d119-eb11-8da9-e4434bdf6706.png

ec594856-d119-eb11-8da9-e4434bdf6706.png

指导教师

ed594856-d119-eb11-8da9-e4434bdf6706.png

长按关注我们

ee594856-d119-eb11-8da9-e4434bdf6706.jpeg

欢迎关注微信公众号“沈浩老师”

ef594856-d119-eb11-8da9-e4434bdf6706.jpeg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值