import pandas as pd
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud
plt.rcParams['font.family'] = 'Simhei' #中文正常显示
plt.rcParams['axes.unicode_minus'] = False #负号正常显示
plt.rcParams['font.size'] = 12 #调整全局字体大小
#读取数据
data = pd.read_csv('babai.csv',encoding = 'GBK')
#该文件编码为GBK 此处一定要指定该编码,否则pandas默认按utf-8编码识别,会有错误
data
#data内容显示
#读取停用词表 stopwords.txt
with open('stopwords.txt',encoding='gbk') as f:
#这里也要指定编码为gbk,否则默认按utf-8会报错
stopwords = f.readlines() #读取文件每行一个次
#显示stopwords内容
stopwords
#stopwords的一部分内容显示
#删除每行末尾的换行符\na
stopwords = [x.strip()for x in stopwords]
stopwords
#删除换行符之后
#对于短评正文进行分词操作
s = ''.join(data['短评正文']) #将所有行的短评以空格为分隔,连接成一个字符串
dataCut = jieba.lcut(s) #分词
print('原始分词个数:',len(dataCut))
原始分词个数: 8217
#剔除长度为1的词(可能是标点符号)
dataCut2 = [w for w in dataCut if len(w) > 1]
#剔除停用词
dataAfter = [w for w in dataCut2 if w not in stopwords]
#组合写法
#dataAfter = [w for w in dataCut if(w not in stopwords) and (len(w) > 1)]
#统计词频,观察高频词汇
wordFre = pd.Series(dataAfter).value_counts()
print(wordFre)
电影 49 战争片 26 历史 23 管虎 22 导演 21 .. 张艺谋 1 抱太大 1 注定 1 世界 1 冠军 1 Length: 1872, dtype: int64
#用心形图片作为词云的外形框架
mask = plt.imread('heart.jpg')
wc = WordCloud(background_color='white',width=1000,height=800,
font_path='simfang.ttf',mask=mask)#中文词云一定要指定中文字体font_path
#将词汇列表连接为用空格分隔的字符串,以满足wordcloud的格式要求
s = ' '.join(dataAfter)
wc.generate(s) #生成词云图
#wc.to_file('12周课后T2词云图.png') #保存为图片
plt.figure(figsize=(10,8))#控制词云图显示的大小
plt.imshow(wc)#显示词云
plt.axis('off')#不显示坐标轴
#词云图效果显示