一直比较关注数据可视化这块,对于分词和词的可视化却始终不明就里,直到看到词云,当时惊为天人,不过词云的制作还是非常麻烦,直到2017年Python走近我的视野中,python可以说无所不能,急人之所急,无数奉献者奉献的无数package,踩在前人的肩膀上coding可以少走很多弯路。

词云主要包括三块内容,一块是词库,一块是分词,一块是可视化,一般来说词库和分词是密不可分的,分词会自带一些词库,当然也可以按照词库的格式要求引入一些停用词库、专业词库、自定义词库。此外在词库和分词英文和中文是完全不同的,wordcloud就是典型的集英文词库、分词和可视化为一体的python包。中文方面主要包括jieba分词和pkuseg分词。

笔记先讨论英文词云可视化,后续再补充中文词云的可视化内容。

代码示例

  1. from os import path

  2. from PIL import Image

  3. from wordcloud import WordCloud, STOPWORDS,ImageColorGenerator

  4. import numpy as np

  5. import matplotlib.pyplot as plt

  6. #------------------------版本一,标准的WordCloud输出-------------------------------

  7. d = path.dirname(__file__)

  8. #此处下载特朗普总统就职演说

  9. text = open(path.join(d,'speechenglish.txt')).read()

  10. #获取停用词集合

  11. stopwords = set(STOPWORDS)

  12. #stopwords 输出内容和格式:{'being', 'few', 'where', "how's", 'before', "she'll", 'on', 'at', 'his', "doesn't", "you'd","..."}

  13. #追加停用词

  14. stopwords.add('said')

  15. # stopwords 输出内容和格式:{'being', 'few', 'where', "how's", 'before', "she'll", 'on', 'at', 'his', "doesn't", "you'd","said","..."}

  16. wordcloud=WordCloud().generate(text)

  17. # 直接输出为<wordcloud.wordcloud.WordCloud object at 0x0000019E8CFC2E80>

  18. # 查阅https://github.com/amueller/word_cloud/blob/master/wordcloud/wordcloud.py

  19. # self.layout_ = list(zip(frequencies, font_sizes, positions,orientations, colors))

  20. # layout_返回的内容是(单词,词频),字体大小,位置,方向和颜色

  21. # 可以通过以下代码打印相关结果 for word in wordcloud.layout_:print(word)

  22. # 条目1 (('will', 1.0), 63, (77, 102), None, 'rgb(49, 181, 123)')

  23. # 条目2 (('people', 0.8571428571428571), 58, (126, 140), None, 'rgb(42, 119, 142)')

  24. #以下可直接输出top50的词汇

  25. process_word=WordCloud.process_text(wordcloud,text)

  26. sort = sorted(process_word.items(),key=lambda e:e[1],reverse=True)

  27. print(sort[:50])

  28. # 直接通过图片格式输出词云图

  29. word_image=wordcloud.to_image()

  30. word_image.show()

  31. # matplotlib方式绘制词云图,interpolation参数有好多,大概是跟色彩有关

  32. # methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16',

  33. #           'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric',

  34. #           'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']

  35. plt.imshow(wordcloud, interpolation='bilinear')

  36. plt.axis("off")

  37. plt.show()

  38. #----------------------版本二,定制的WordCloud图像输出-----------------------------

  39. # 指定图片蒙版

  40. pic_mask = np.array(Image.open(path.join(d, "kulou.jpg")))

  41. # 指定wordcloud输出图片的样式,如上所述,初始化过程中即指定了相关的参数,并在generate进行输出

  42. wc = WordCloud(background_color="white", max_words=2000, mask=pic_mask,stopwords=stopwords)

  43. # 直接通过图片格式输出词云图

  44. wc.generate(text)

  45. # 设置图形的字体颜色

  46. #------------------版本三,定制的WordCloud图像输出-定制字体颜色----------------------

  47. color_source_image=np.array(Image.open('kulou.jpg'))

  48. colormap=ImageColorGenerator(color_source_image)

  49. colored_image=wc.recolor(color_func=colormap)

  50. #------------------------------------------------------------------------------------

  51. wc.to_file(path.join(d, "kulou_wc.jpg"))

  52. # matplotlib方式绘制词云图

  53. plt.imshow(wc, interpolation='bilinear')

  54. plt.axis("off")

  55. plt.show()




关于词云可视化笔记一(wordcloud和英文词汇可视化)_词云

关于词云可视化笔记一(wordcloud和英文词汇可视化)_格式输出_02

关于词云可视化笔记一(wordcloud和英文词汇可视化)_python_03

关于词云可视化笔记一(wordcloud和英文词汇可视化)_python_04