如何将权重(频率)不同的词语通过词语大小的形式可视化较为重要。这里使用了WordCloud进行展示。
1. 词语频率作为“词语大小”展示
如果给定的是一段text,从里面分词+统计频率展示词语大小,那么使用到的是generate。
dzdpstopwords.txt
d_text1.csv
from wordcloud import WordCloudimport matplotlib.pyplot as pltimport reimport pandas as pdimport numpy as np#导入停止词def get_stop_word(url):stop_word = []with open(url, encoding='UTF-8') as fp:for i in fp:zh = re.compile("[^\u4e00-\u9fa5]") #匹配不是中文的字符i = zh.sub('', i)stop_word.append(i)return stop_worddef segmentWord(cont, stop_word):c = []for i in cont:zh = re.compile("[^\u4e00-\u9fa5]") #匹配不是中文的字符string1 = zh.sub('', i) #将string1中匹配到的字符替换成空字符a = list(jieba.cut(string1))#删去停止词a1 = [item for item in a if item not in stop_word]b = ' '.join(a1)c.append(b)return c# 导入停止词+需要分析的文本,分完词+剔除停止词,再用空格连成一个string。d_train=pd.read_csv(r'/trainingset.csv',engine='python', encoding="utf_8")# 训练数据集stop_word_dp = get_stop_word(r'/dzdpstopwords.txt')text = segmentWord(d_train['content'], stop_word_dp)text1 = " ".join(text)# 通过generate对string统计词频+生成大小;# font_path是显示指定字体,# width和height是图片的长款,# background_color是背景色,这里我选择了白色。# color_func是制定字体显示的同一颜色,通过lambda指定了RGB。# relative_scaling=1,将字体大小严格按照频率展示。wc1 = WordCloud(font_path=r'\STZHONGS.TTF',width=4000,height=8000,background_color='#FFFFFF',color_func=lambda *args, **kwargs: (210,10,16),relative_scaling=1).generate(text1)plt.rcParams['savefig.dpi'] = 1000 #图片像素plt.rcParams['figure.dpi'] = 1000 #分辨率plt.imshow(wc1, cmap='prism', interpolation='gaussian')plt.axis("off")
2.词语权重作为“词语大小”展示
如果仅仅给定了每个词语的权重,那么使用的是generate_from_frequancy。
word_E_dict = {'we':0.9, 'are':0.1, 'good': 0.2}wordcloud = WordCloud(font_path=r'\STZHONGS.TTF',width=6000,height=8000,background_color='#FFFFFF',color_func=lambda *args, **kwargs: (227,82,4),relative_scaling=1)wordcloud.generate_from_frequencies(word_E_dict)plt.imshow(wordcloud, interpolation='bilinear')plt.axis("off")plt.show()
3. 如果要字符都竖着
那么直接修改原始的字符,将每个string中的每个character后面加上’\n’。
word.xlsx
import pandas as pdimport numpy as npfrom wordcloud import WordCloudimport matplotlib.pyplot as pltword = pd.read_excel(r'\word.xlsx')word_E = word[word['类别'] == '环境(E)']word_S = word[word['类别'] == '社会(S)']word_G = word[word['类别'] == '治理(G)']word_E_dict = dict()word_S_dict = dict()word_G_dict = dict()for i, j in zip(word_E['指标名称'], word_E['2020年披露率']):iii = ''for ii in i:iii += ii + '\n'iii = iii[:-1]word_E_dict[iii] = jfor i, j in zip(word_S['指标名称'], word_S['2020年披露率']):iii = ''for ii in i:iii += ii + '\n'iii = iii[:-1]word_S_dict[iii] = jfor i, j in zip(word_G['指标名称'], word_G['2020年披露率']):iii = ''for ii in i:iii += ii + '\n'iii = iii[:-1]word_G_dict[iii] = jplt.rcParams['savefig.dpi'] = 4000 #图片像素plt.rcParams['figure.dpi'] = 4000 #分辨率wordcloud = WordCloud(font_path=r'STZHONGS.TTF',width=6000,height=8000,background_color='#FFFFFF',color_func=lambda *args, **kwargs: (227,82,4),relative_scaling=1)wordcloud.generate_from_frequencies(word_E_dict)plt.imshow(wordcloud, interpolation='bilinear')plt.axis("off")plt.show()
