如何将权重(频率)不同的词语通过词语大小的形式可视化较为重要。这里使用了WordCloud进行展示。

1. 词语频率作为“词语大小”展示

如果给定的是一段text,从里面分词+统计频率展示词语大小,那么使用到的是generate。
dzdpstopwords.txt
d_text1.csv

  1. from wordcloud import WordCloud
  2. import matplotlib.pyplot as plt
  3. import re
  4. import pandas as pd
  5. import numpy as np
  6. #导入停止词
  7. def get_stop_word(url):
  8. stop_word = []
  9. with open(url, encoding='UTF-8') as fp:
  10. for i in fp:
  11. zh = re.compile("[^\u4e00-\u9fa5]") #匹配不是中文的字符
  12. i = zh.sub('', i)
  13. stop_word.append(i)
  14. return stop_word
  15. def segmentWord(cont, stop_word):
  16. c = []
  17. for i in cont:
  18. zh = re.compile("[^\u4e00-\u9fa5]") #匹配不是中文的字符
  19. string1 = zh.sub('', i) #将string1中匹配到的字符替换成空字符
  20. a = list(jieba.cut(string1))
  21. #删去停止词
  22. a1 = [item for item in a if item not in stop_word]
  23. b = ' '.join(a1)
  24. c.append(b)
  25. return c
  26. # 导入停止词+需要分析的文本,分完词+剔除停止词,再用空格连成一个string。
  27. d_train=pd.read_csv(r'/trainingset.csv',engine='python', encoding="utf_8")# 训练数据集
  28. stop_word_dp = get_stop_word(r'/dzdpstopwords.txt')
  29. text = segmentWord(d_train['content'], stop_word_dp)
  30. text1 = " ".join(text)
  31. # 通过generate对string统计词频+生成大小;
  32. # font_path是显示指定字体,
  33. # width和height是图片的长款,
  34. # background_color是背景色,这里我选择了白色。
  35. # color_func是制定字体显示的同一颜色,通过lambda指定了RGB。
  36. # relative_scaling=1,将字体大小严格按照频率展示。
  37. wc1 = WordCloud(font_path=r'\STZHONGS.TTF',
  38. width=4000,
  39. height=8000,
  40. background_color='#FFFFFF',
  41. color_func=lambda *args, **kwargs: (210,10,16),
  42. relative_scaling=1
  43. ).generate(text1)
  44. plt.rcParams['savefig.dpi'] = 1000 #图片像素
  45. plt.rcParams['figure.dpi'] = 1000 #分辨率
  46. plt.imshow(wc1, cmap='prism', interpolation='gaussian')
  47. plt.axis("off")

2.词语权重作为“词语大小”展示

如果仅仅给定了每个词语的权重,那么使用的是generate_from_frequancy。

  1. word_E_dict = {'we':0.9, 'are':0.1, 'good': 0.2}
  2. wordcloud = WordCloud(font_path=r'\STZHONGS.TTF',
  3. width=6000,
  4. height=8000,
  5. background_color='#FFFFFF',
  6. color_func=lambda *args, **kwargs: (227,82,4),
  7. relative_scaling=1
  8. )
  9. wordcloud.generate_from_frequencies(word_E_dict)
  10. plt.imshow(wordcloud, interpolation='bilinear')
  11. plt.axis("off")
  12. plt.show()

3. 如果要字符都竖着

那么直接修改原始的字符,将每个string中的每个character后面加上’\n’。
word.xlsx

  1. import pandas as pd
  2. import numpy as np
  3. from wordcloud import WordCloud
  4. import matplotlib.pyplot as plt
  5. word = pd.read_excel(r'\word.xlsx')
  6. word_E = word[word['类别'] == '环境(E)']
  7. word_S = word[word['类别'] == '社会(S)']
  8. word_G = word[word['类别'] == '治理(G)']
  9. word_E_dict = dict()
  10. word_S_dict = dict()
  11. word_G_dict = dict()
  12. for i, j in zip(word_E['指标名称'], word_E['2020年披露率']):
  13. iii = ''
  14. for ii in i:
  15. iii += ii + '\n'
  16. iii = iii[:-1]
  17. word_E_dict[iii] = j
  18. for i, j in zip(word_S['指标名称'], word_S['2020年披露率']):
  19. iii = ''
  20. for ii in i:
  21. iii += ii + '\n'
  22. iii = iii[:-1]
  23. word_S_dict[iii] = j
  24. for i, j in zip(word_G['指标名称'], word_G['2020年披露率']):
  25. iii = ''
  26. for ii in i:
  27. iii += ii + '\n'
  28. iii = iii[:-1]
  29. word_G_dict[iii] = j
  30. plt.rcParams['savefig.dpi'] = 4000 #图片像素
  31. plt.rcParams['figure.dpi'] = 4000 #分辨率
  32. wordcloud = WordCloud(font_path=r'STZHONGS.TTF',
  33. width=6000,
  34. height=8000,
  35. background_color='#FFFFFF',
  36. color_func=lambda *args, **kwargs: (227,82,4),
  37. relative_scaling=1
  38. )
  39. wordcloud.generate_from_frequencies(word_E_dict)
  40. plt.imshow(wordcloud, interpolation='bilinear')
  41. plt.axis("off")
  42. plt.show()