【数据】词云分析初探

词云可以对比文件中不同词汇出现的频率。

就像这样:

WordCloudTest

用字体大小代表出现频率高低,非常直观的数据表现形式。

需要的依赖包有:

  • wordcloud
  • pandas,numpy,matplotlib
  • jieba
  • pathlib,PIL

读取文件

使用python读取文件需要根据不同文件格式进行尝试。

例如,本文对一个xlsx文件(也就是excel文件)进行读取,查找资料会发现:

  • 可以使用传统包,例如:

from openpyxl import load_workbook

使用load_workbook函数进行读取。参考:Python读取xlsx文件

  • 更好的方法可能是 Pandas:

pandas.read_excel(filename)

值得注意的是 pandas 处理数据的格式。

Pandas读取数据后,会转换为 DataFrame,这是一种表格行数据结构,既有行索引,又有列索引,合理使用会有奇效。

参考:

Pandas-DataFrame基础知识点总结

Python利用pandas处理Excel数据的应用

数据预处理

不同数据的预处理方法不同,此处在上述处理后,获得了DataFrame数据,但是它还不能直接生成词云,理论上最直接的字符串是词云的最佳来源。

image-20200802095805871

因此,我们需要把上面的DataFrame中的有效数据变成字符串。

可以根据索引名(上图中的“网站名”,“url”)进行索引,读取值,并添加到列表中:

net_list = mytext['网站名'].values

然后再将列表转化为字符串,此处用空格连接两个值:

result = ' '.join(net_list)

这样就得到了我们想要的字符串数据。

词云生成

理论上,使用如下语句:

1
2
3
4
mycloud = WordCloud().generate(result)
%matplotlib inline
plt.imshow(mycloud, interpolation = "bilinear")
plt.axis("off")

就可以生成词云,并作图,但是它的结果可能是类似这样的:

下载

就是说只能显示英文,而不能显示中文,而且仔细观察还有一些很长串的方框,是因为没有把一句中文长句进行分词。

因此,对于中文词云的实现,还需要进行分词,可以使用jieba分词:

1
2
words = jieba.cut(result, cut_all = True)
wc_words = ' '.join(words)

首先将原来的字符串进行分词,分词后会成为一个列表,再将列表重新整合为字符串。

参考:

要生成中文词云,还需要设置字体,以保证中文能够显示出来。

此外还可以设置背景图,背景颜色,让图片更加好看;(建议选用分辨率比较高的图片,否则生成的词云也会比较模糊)

比如这张:

20180806084453906

针对词云中可能出现的无用的高频词汇,还可以添加列表将其剔除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
wordCloud = WordCloud(
background_color = 'white', # 背景颜色
mask = backgroud_Image, # 背景图片
font_path = 'C:\Windows\Fonts\STZHONGS.TTF', # 中文字体
max_words = 1000, # 最大词数
stopwords = {'CSDN','博客'}, # 要剔除的词汇
max_font_size = 150, # 最大字号
random_state = 1,
scale = 1
)
wordCloud.generate(wc_words) # 生成词云

image_colors = ImageColorGenerator(backgroud_Image) # 仅使用背景图片的样式生成词云样式
plt.imshow(wordCloud.recolor(color_func = image_colors)) # 再使用背景图片的颜色进行上色
plt.axis("off")
plt.show()
wordCloud.to_file(savePath) # 保存图片

这样就得到一开始的词云了,看着这些关键词,不说了,要开始学了!

WordCloudTest

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2022 Sun Yue

请我喝杯咖啡吧~

支付宝
微信