使用场景:直观展示文本频率,对比文字重要程度,突出重点文字
可应用数据:评论、文章(长文本)等
本次应用涉及python库:numpy、pandas、jieba、collections、matplotlib、wordcloud
使用数据:类似评论
第一步:读取文本数据
df= pd.read_excel('data.xlsx')
第二步:导入停用词,因在对文本进行分词时,会产生大量无效字符,因此要对一些感叹语、标点符号等无效信息进行处理
# 加载停用词
with open('stopwords.txt','r',encoding='utf-8') as fp:
words=fp.readlines()
stop_words = []
for word in words:
w= word.strip('/n')
stop_words.append(w)
第三步:对文本进行分词,读取dataframe中的一列进行分词,并将分词后的无效信息进行剔除,最后保存在列表中。ps:本次处理额外将单个字符进行剔除
# 停用词处理
good_words =[] #保留的信息
for comment in df['根本原因分析']:
word_list = jieba.lcut(str(comment)) #直接用comment出错了,转化为字符串才加的str
for word in word_list:
if word not in stop_words:
if len(word) > 1:
good_words.append(word)
第四步:统计列表中的单词及词频,主要使用的是collections中的Counter函数,由于counter函数计算单词和词频后word_dict为一个counter格式,后续不改也不影响做词云图
word_dict=collections.Counter(good_words) # 统计词频
word_dict_2=dict(word_dict) #转化为字典
df_c = pd.DataFrame(word_dict_2,index = [0]) #转化为dataframe格式
第五步:画词云图,各种调参数
import matplotlib.pyplot as plt
import wordcloud
plt.figure(figsize=(48,32))
wc= wordcloud.WordCloud(font_path='msyhbd.ttc',width=800,height=400,collocations=False,
background_color='white',max_font_size=170,min_font_size=5,
max_words=150,prefer_horizontal=1)
wc.generate_from_frequencies(word_dict_2)
plt.imshow(wc)
中途遇到的困难:画出的词云图缺字,显示不全
本次解决办法:改变显示字体,将wordcloud.WordCloud中的font_path修改即可