天池比赛——用户情感可视化分析
天池比赛——用户情感可视化分析
目录
天池比赛——用户情感可视化分析
前言
一、读取数据,查看基本情况并做数据预处理
引入相关库
读取数据,基础分析数据
空值处理,数据映射
对评论进行分词分析
二、词云可视化
三、柱状图
四、热力图
总结
前言
这是一个天池里的教学赛,整体没什么难度,主要是对pandas,基本的数据分析的练习。
题目主要内容如下
- 词云可视化(评论中的关键词,不同情感的词云)
- 柱状图(不同主题,不同情感,不同情感词)
- 相关性系数热力图(不同主题,不同情感,不同情感词)
其中数据源主要如下
字段名称 | 类型 | 描述 | 说明 |
---|---|---|---|
content_id | Int | 数据ID | / |
content | String | 文本内容 | / |
subject | String | 主题 | 提取或依据上下文归纳出来的主题 |
sentiment_value | Int | 情感分析 | 分析出的情感 |
sentiment_word | String | 情感词 | 情感词 |
下面直接分析数据并完成内容
一、读取数据,查看基本情况并做数据预处理
当得到一个数据的时候,我们应该对数据包含什么信息,数据中是否有缺省值,某些列值有什么取值等情况进行查看
引入相关库
import numpy as np
import pandas as pd
from pylab import *
import matplotlib.pyplot as plt
import seaborn as sns
import jieba
读取数据,基础分析数据
#读取数据
df = pd.read_csv('./data/earphone_sentiment.csv')
#查看数据前几行信息
df.head()
#查看数据基本信息
print(df.info())
print("----------------")
#查看数据缺指信息
print(df.isnull().sum())
print("----------------")
print(df['sentiment_word'].unique())
print("----------------")
print(df['sentiment_value'].value_counts())
输出如下,这里主要分析了表格中缺省值和 sentiment_word这一列的取值,因为我们这里分析主要也是针对情感词来进行分析的(这个比赛比较简单还在与直接给出了情感词)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 17176 entries, 0 to 17175
Data columns (total 5 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 content_id 17176 non-null int64 1 content 17176 non-null object2 subject 17176 non-null object3 sentiment_word 4966 non-null object4 sentiment_value 17176 non-null int64
dtypes: int64(2), object(3)
memory usage: 671.1+ KB
None
----------------
content_id 0
content 0
subject 0
sentiment_word 12210
sentiment_value 0
dtype: int64
----------------
dtype: int640 122101 4376
-1 590
Name: sentiment_value, dtype: int64
----------------
不评价 12210
好 3302
不错 569
差 415
强 244
牛 133
垃圾 32
高级 31
追求 26
呵呵 24
难听 22
骗 21
噪音 16
用心 16
舒适 16
疼 14
音染 14
水准 12
轰 10
精致 7
惊艳 7
良心 7
无语 6
无奈 5
不舒服 4
小巧 3
充足 3
上当 2
辣鸡 2
模糊 2
混浊 1
Name: sentiment_word, dtype: int64
空值处理,数据映射
由输出的数据可以分析出,我们可以根据sentiment_value的值对sentiment_word进行划分为3类,分别为0对于没有评价,我们这里当作是中性评价,1对于好评,-1对应差评。所以再做以下数据预处理——填上空值,对sentiment_value做映射
# 填上空值
df['sentiment_word'].fillna('不评价', inplace=True)
# 将sentiment_value映射
map_sentiment_value = {-1: '差评', 0: '中评', 1: '好评'}
df['sentiment_value'] = df['sentiment_value'].map(map_sentiment_value)
做个关于情感词和主题之间的透视表,可以很直观的看出,每个主题中好评,差评,中评的情况
# 做sentiment_value的透视表
df_pivot_table = df.pivot_table(index='subject', columns='sentiment_value', values='sentiment_word',aggfunc=np.count_nonzero)df_r_pivot_tabel = df.pivot_table(index='sentiment_value', columns='subject', values='sentiment_word',aggfunc=np.count_nonzero)
sentiment_value 中评 好评 差评
subject
价格 495 256 42
其他 9493 2837 326
功能 83 63 10
外形 85 68 5
舒适 10 37 22
配置 1452 759 121
音质 592 356 64
subject 价格 其他 功能 外形 舒适 配置 音质
sentiment_value
中评 495 9493 83 85 10 1452 592
好评 256 2837 63 68 37 759 356
差评 42 326 10 5 22 121 64
对评论进行分词分析
我们还需要对数据中content评论部分进行分析,而评论中有许多不必要的内容,我们就需要对此分词并去除停用词(也就是一些连接词,以帮助我们分析),对评论分词,主要应用jieba这个分词包。停用词用的是常用的中文停用词。在下面链接中可以获取。
中文常用停用词表
stopwords = []
with open('./data/mStopwords.txt', encoding='utf-8') as f:for line in f:stopwords.append(line.strip('\n').split()[0])# 切词
rows, cols = df.shape
cutwords = []
for i in range(rows):content = df['content'][i]g_cutword = jieba.cut_for_search(content)cutword = [x for x in g_cutword if (len(x) > 1) and x not in stopwords]cutwords.append(cutword)s1 = pd.Series(cutwords)
df['cutwords'] = s1
print(s1.value_counts())
用jieba这个包,很容易将分词搞定,结果如下。
0 [Silent, Angel, 期待, 光临, 共赏, 美好, 声音]
1 [HD650, 1k, 失真, 声道, 左声道, 声道, 右声道, 左右, 超出, 官方, ...
2 [达音科, 17, 周年, 数据, 好看, 便宜]
3 [bose, beats, apple, 消費者, 根本, 知道, 有曲線, 存在]
4 [不错, 数据]...
17171 [3000, 价位, hd650, S7, 更好, 耳放]
17172 [hd800, 爆皮, 正常, 根线, 这种, 忧虑]
17173 [焊接, 一下, 就行了, 820, 原线, 全新, 800s, 原线, 99, 盒子, 没动]
17174 [赶紧, 出手]
17175 [sommer, 参考, diy, 两米, 成本, 600, 左右, 吊打, 原线]
由于我们还要做不同情感的分析,所以我们根据sentiment_value的值,将表格划分为差评,中评和好评三个表。
# 根据情感划分切词
df_pos = df.loc[df['sentiment_value'] == '好评'].reset_index(drop=True)
df_neu = df.loc[df['sentiment_value'] == '中评'].reset_index(drop=True)
df_neg = df.loc[df['sentiment_value'] == '差评'].reset_index(drop=True)
这里基本的预处理就结束了,也对数据有了一个直观的了解,后面就通过一些手段可视化上面的结果。
二、词云可视化
想利用词云可视化,主要是利用WordCloud这个开源包,这个包直接用pip安装有可能会出现问题,所以这部分我直接在百度的AIstudio上跑了。
这个库用起来也比较简单,只需要设定自己需要的txt文件和图案,调个包就好了。
里面的图片都是上网随便找的黑白图
pos_txt = '/'.join(np.concatenate(pos_df['cutwords']))
neg_txt = '/'.join(np.concatenate(neg_df['cutwords']))
neu_txt = '/'.join(np.concatenate(neu_df['cutwords']))
neu_mask = imread('./data/neu.png')
pos_mask = cv.imread('./data/pos.png')
neg_mask = cv.imread('./data/neg.png')
# 绘制好评词云
pos_wc = WordCloud(font_path='./data/simhei.ttf',background_color='white',mask=pos_mask).generate(pos_txt)
neg_wc = WordCloud(font_path='./data/simhei.ttf',background_color='white',mask=neg_mask).generate(neg_txt)
neu_wc = WordCloud(font_path='./data/simhei.ttf',background_color='white',mask=neu_mask).generate(neu_txt)plt.subplot(1,3,1)
plt.imshow(pos_wc)
plt.title("Postive wordcloud")
plt.axis('off')
plt.subplot(1,3,2)
plt.imshow(neu_wc)
plt.axis('off')
plt.title("Neutural wordcloud")
plt.subplot(1,3,3)
plt.imshow(neg_wc)
plt.title("Negative wordcloud")
plt.axis('off')
plt.show()
三、柱状图
柱状图主要分析不同主题下,不同情感评论的评论数,来看用户重点关注的地方是什么。
# 直接对透视表使用绘图即可
df_pivot_table.plot.bar()
for x, y in enumerate(df_pivot_table['中评'].values):plt.text(x - 0.2, y, str(y), horizontalalignment='right')
for x, y in enumerate(df_pivot_table['好评'].values):plt.text(x, y, str(y), horizontalalignment='center')
for x, y in enumerate(df_pivot_table['差评'].values):plt.text(x + 0.2, y, str(y), horizontalalignment='left')
plt.title('不同主题,不同情感评论数')
plt.ylabel('评论数')
plt.show()
可以看到用户多集中在价格,配置和音质上评论,其他方面比较多评论。
然后我们可以看看在褒义词和贬义词中比较多的评论在说什么
# 取出褒义词和贬义词中的评论列
pos_word = df_pos['sentiment_word'].value_counts()
neg_word = df_neg['sentiment_word'].value_counts()pos_word.plot.barh()
for x, y in enumerate(pos_word):plt.text(y, x, str(y), horizontalalignment='left')
plt.xlabel('评论数')
plt.title('褒义词评论词统计')
plt.show()neg_word.plot.barh()
for x, y in enumerate(neg_word):plt.text(y, x, str(y), horizontalalignment='left')
plt.xlabel('评论数')
plt.title('贬义词评论词统计')
plt.show()
四、热力图
热力图的绘制,主要是来看耳机不同的方面的相关系数,主要调用seaborn这个包,对pandas也是兼容非常好。
# 热力图
sns.heatmap(df_r_pivot_tabel.corr(), annot=True)
plt.title('不同主题相关系数热力图')
plt.show()
显然,舒适感,和其他的方面都成负相关的关系,而其他功能上基本都呈正相关关系。
总结
一个对于学习pandas和一些可视化,非常好的比赛。
天池比赛——用户情感可视化分析相关推荐
- 天池:数据分析达人赛1:用户情感可视化分析
[教学赛]数据分析达人赛1:用户情感可视化分析 赛题背景 赛题以网络舆情分析为背景,要求选手根据用户的评论来对品牌的议题进行数据分析与可视化.通过这道赛题来引导常用的数据可视化图表,以及数据分析方法, ...
- 用户情感可视化分析——天池竞赛
数据链接:https://pan.baidu.com/s/1zzKSJJEhYr20aUtWSPgQWQ 提取码:1234 #导入相关库并读取数据 %matplotlib inline import ...
- 【天池学习赛】数据分析达人赛1:用户情感可视化分析
赛题简介 赛题以网络舆情分析为背景,要求选手根据用户的评论来对品牌的议题进行数据分析与可视化.通过这道赛题来引导常用的数据可视化图表,以及数据分析方法,对感兴趣的内容进行探索性数据分析. 赛题数据 数 ...
- 【数据分析】数据分析达人赛1:用户情感可视化分析
目录 赛题背景 赛题数据 1.导入数据分组 2.文本清洗 3.绘制词云 4.情感分析 (SnowNLP计算情感得分) 5.绘制不同情感值的柱形图 6.不同主题下的情感得分柱形图 7.绘制不同情感词下的 ...
- Tableau和BDP,哪个才是最适合中国用户的可视化分析工具?
本人数据分析师一枚,除了工作所需,自己对数据分析.数据可视化的产品工具都比较感兴趣,喜欢混迹于各种数据论坛,也发现和使用了不少数据工具,也积累了很多亲身经历.这两年数据可视化在国内越来越受到关注,今天 ...
- 毕设——电商产品评论数据的用户情感倾向分析
1.主要研究内容包括:(1)在查阅国内外文献资料的基础上,了解电商产品评论数据情感分析关键技术流程及国内外研究现状:(2)采用网络爬虫工具(如八爪鱼采集器)采集评论数据,实现文本去重.压缩去词等文本评 ...
- 天池比赛短租数据集分析之数据图表
题目介绍 活动背景 共享,通过让渡闲置资源的使用权,在有限增加边际成本的前提下,提高了资源利用效率.随着信息的透明化,越来越多的共享发生在陌生人之间.短租,共享空间的一种模式,不论是否体验过入住陌生人 ...
- 基于Python股票网站数据爬虫情感可视化分析设计
开发软件:Pycharm 开发环境: Python3.6 开发技术:Requests,Pandas,numpy,csv,Matplotlib,SnowNLP,seaborn (1)getData爬取 ...
- TableauBDP,哪个才是最适合中国用户的数据可视化分析工具?
作者:pledge 本人数据分析师一枚,除了工作所需,自己对数据分析.数据可视化的产品工具都比较感兴趣,喜欢混迹于各种数据论坛,也发现和使用了不少数据工具,也积累了很多亲身经历.这两年数据可视化在国内 ...
最新文章
- 欧洲超高速网比宽带快万倍 几秒下载一部电影
- 从短句到长文,计算机如何学习阅读理解
- JMJS系统总结系列----Jquery分页扩展库(五)
- django官方文档1.11编翻:1-1-1概述
- 域 无法管理计算机,计算机无法加入域的终级解决方法
- VS2010 创建WindowsService服务
- 页面跳转的方法以及301 和 302的区别
- python 40位的数减个位数_Python——进制表示与转换
- 为什么要使用 Kubernetes 准入控制器
- linux内核killler,Linux内核参数overcommit_memory和OOM killer介绍
- 组合,Mixin,类、类对象、实例对象
- php 执行shell命令的函数
- 【零基础 快速学Java】韩顺平 笔记整理(到p170 跑路了)
- 虚拟机VMware14安装教程以及搭建openEuler-20.03-LTS-x86_64-dvd.iso系统教程(网盘中也包含了Ubuntu 16.04的.ios文件)
- 怎么做直播APP软件?
- 工业级ADSL有线路由器/远程视频监控专用路由器
- Android异常篇 Cannot access com.***...***.class
- python学什么书_python自学用什么书
- 给在读研究生未来要读研同学们的一封受益匪浅的信
- git 远程仓库时报错SSL certificate problem: unable to get local issuer certificate(git版本与Let‘s Encrypt的证书导致)
热门文章
- 向上的路,从来都不好走(好文力荐)
- 使用腾讯云开发者平台免费搭载静态云服务
- 那些年我吃过的豆子【记录ing】
- 科思创进博会宣布筹建上海新工厂;碧迪医疗进博会签订总值达2.7亿元合作协议 | 美通社头条...
- Ubuntu 14.04 64 位安装 Google 的 TensorFlow
- Malformed \uxxxx encoding问题的多种完美解决方法总结
- 程序员python代码打招呼方式_某编程少年说他是Python大神,神级程序员不用一行代码教他做人!...
- 11.判断一个人出生了多少天
- 基于matlab山脊线,基于Matlab的标记分水岭分割算法
- Python连锁药店营业额数据分析实验