栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

耳机用户情感可视化分析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

耳机用户情感可视化分析

数据集链接:链接: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('不同主题相关系数热力图')

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号