数据集链接:链接:https://pan.baidu.com/s/1i6_6FPEFw8_vLIrzlDfGwg?pwd=7rnd
提取码:7rnd
①导入所需库
import jieba #结巴分词工具
from wordcloud import WordCloud #绘制词云
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns #绘制热力图
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif']=['simhei'] #中文字体
②读入数据
data=pd.read_csv('E:数据earphone_sentiment.csv')
data.head()
data.info() #查看数据信息
③处理数据
data['sentiment_word'].fillna("无评价",inplace=True) #将空值填充为无评价
df1=pd.crosstab(data['subject'],data['sentiment_value'])
print("不同情感倾向的不同主题情感词数透视表:n",df1,sep='n')
print('*'*80)
df2=pd.crosstab(data['sentiment_word'],data['sentiment_value'])
print('不同情感倾向的不同情感词评论数透视表:',df2, sep='n')
print('*'*80)
#数据预处理
p_data=data[data['sentiment_value']==1]
n_data=data[data['sentiment_value']==-1]
na_data=data[data['sentiment_value']==0]
#分词/去停用词
def yuchuli(df):
df=[i for i in jieba.cut(str(df)) if (len(i)>1)]
stopwords=[]
with open('E:/数据/stopwords.txt',encoding='UTF8') as f:
for j in f:
stopwords.append(j)
df=[i for i in df if i not in stopwords]
return df
④生成词云
#词云生成
def wordcloud(f,t):
df=yuchuli(f)
f = ' '.join(f) #连接成一个新字符串
wc=WordCloud(max_words=100,width=1000, height=600,font_path='./simhei.ttf')
wordcloud=wc.generate(f)
plt.imshow(wordcloud)
plt.axis('off')
plt.title(t)
plt.show()
p_contents=[i for i in list(p_data.content) if str(i)!='nan']
wordcloud(p_contents, 'positive_words wordcloud')
# 读取消极情感倾向的评论
n_contents = [i for i in list(n_data.content) if str(i) != "nan"] # 取非空评论
wordcloud(n_contents, 'nagtive_words wordcloud')
# 读取中性情感倾向的评论
na_contents = [i for i in list(na_data.content) if str(i) != "nan"] # 取非空评论
wordcloud(na_contents, 'nature_words wordcloud')
⑤生成柱状图
x = list(df1.reset_index()['subject'])
x1=np.arange(len(x))
x1
n= list(df1.reset_index()[-1])
p= list(df1.reset_index()[1])
p
width=0.8
n=2
width1 = width/n
x2= x1-(width/2-width1/2)
plt.figure(figsize=(12,12))
plt.bar(x2, p, width=width1, label='positive')
plt.bar(x2+width1, n, width=width1, label='negtive')
plt.legend()
plt.title('不同主题,不同情感倾向的评论数')
plt.xlabel('subject')
plt.ylabel('number of sentiment_word')
for a, b in zip(x2, p):
plt.text(a, b+1, '%d' % b, ha='center', va='bottom')
for a, b in zip(x2+width1, n):
plt.text(a, b+1, '%d' % b, ha='center', va='bottom')
plt.xticks(x1, x)
# 不同情感倾向的不同情感词评论数展示
p_sentiment_word=p_data['sentiment_word'].value_counts()
n_sentiment_word=n_data['sentiment_word'].value_counts()
plt.figure(figsize=(12, 6))
plt.subplot(1,2,1)
p_sentiment_word.plot.barh() #横向 柱状图
for x,y in enumerate(p_sentiment_word.values):
plt.text(y, x, '%s' % y, color='blue')
plt.title('积极情感倾向的情感词评论数')
plt.subplot(1, 2, 2)
n_sentiment_word.plot.barh(color='red')
for y, x in enumerate(n_sentiment_word.values):
plt.text(x, y, '%s' % x, color='red')
plt.title('消极情感倾向的情感词评论数')
⑥绘制热力图
sns.heatmap(df1.corr())
plt.title('不同主题相关系数热力图')



