前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你完成一个数据科学小项目(9):情感分析与词云

手把手教你完成一个数据科学小项目(9):情感分析与词云

作者头像
古柳_DesertsX
发布2018-10-08 11:09:46
5700
发布2018-10-08 11:09:46
举报
文章被收录于专栏:Data Analysis & VizData Analysis & Viz

前言

请先阅读“中国年轻人正带领国家走向危机”,这锅背是不背? 一文,以对“手把手教你完成一个数据科学小项目”系列有个全局性的了解。

本系列代码统一开源在GitHub:DesertsX/gulius-projects ,感兴趣的朋友可以先行 star 哈。

截至目前我们已经完成了数据爬取数据提取与IP查询数据异常与清洗评论数变化情况分析省份提取与可视化城市提取与可视化经纬度获取与BDP可视化Emoji提取与分布图谱。本文将用snownlp对评论进行情感打分,并提取高频词绘制词云。

SnowNLP 情感打分

读取数据,并提前安装好这个NLP的库:pip install snownlp 。其他用法参见:snownlp - github ,本文只对每条评论数据进行情感打分。

代码语言:javascript
复制
import pandas as pd
from snownlp import SnowNLP
df = pd.read_csv('Sina_Finance_Comments_All_20180811_Cleaned.csv',encoding='utf-8')

def sentiment(content):
    s = SnowNLP(content)
    return s.sentiments

df['sentiment'] = df.content.apply(sentiment)

df_sent = df[['content', 'sentiment']]
df_sent.sort_values(by=['sentiment'],ascending=False)

注意,snownlp 是基于电商评价的语料语料,所以对其他语料进行情感打分可能效果不是很好,可自行尝试其他库pyltp/thunlp/pyhanlp/bosonnlp进行比较,“择其善者而从之”...

如果评论数据量大的话,这一步会耗些时间,可以喝杯枸杞酒压压惊。

先来看看正面的评价,评分处于0-1之间,越接近1越正面:

再来看看负面的评论

代码语言:javascript
复制
df_sent.sort_values(by=['sentiment'])

本次就不进行更细致的挖掘了,大家可自行进行探索,相信经过这一个系列的洗礼,诸位pandas操作起来已经滚瓜切菜,不在话下了吧。

基于 TF-IDF 算法的关键词抽取

接下来看看评论里出现的关键词都有哪些,直接用jieba提取就行,allowPOS参数可设置输出对应词性的词语。

代码语言:javascript
复制
import jieba.analyse
all_content = df.content.values.tolist()
extract_tags = "  ".join(jieba.analyse.extract_tags(' '.join(all_content), topK=200, withWeight=False, allowPOS=('ns', 'n')))
print(extract_tags)

自行感受一下......大家反应强烈,并不愿背锅。

代码语言:javascript
复制
年轻人  买房  摊手  借贷  房子  贷款  国家  韭菜  危机  文章  孩子  债务  房价  中国  标题  手机  买手机  评论  背锅  不语  拜拜  信用卡  大牌  衣服  父母  咖啡  买房子  银行  经济  篇文章  感觉  问题  智能手机  大家 
全款  意思  时候  媒体  内需  社会  俄罗斯  黑锅  一代人  东西  大锅  原文  卧槽  家庭  美国  杠杆  套房  有点  财经  租房  年轻一代  校园  新闻  逻辑  脑子  负债  花钱  砖家  消费观念  白条  地方  苹果  恶心  干嘛  人家   
能力  道理  智商  屌丝  毛病  信贷  水平  城市  老年人  习惯  奢侈品  数据  钱包  生娃  小编  广州  作者  祖国  节奏  英国  老一辈  中年人  关键  无力  言论  内容  车贷  压力  学区  生小孩  阴险  人生  物价  时代  历史 
买点  垃圾  穷人  老师  存款  利息  问问  屁事  消费观  消费主义  世界  北京  责任  后背  大学生  代表  结果  神经病  国际金融  气死  租金  合格  降级  长大  编辑  买车  故事  眼球  企业  贡献  车子  黑线  风险  单身   
高利贷  裤腰带  同龄人  兄弟  爷爷奶奶  奶茶  月薪  专家  坏事  狗屁  过日子  要点  事情  县城  白眼  独生子女  基本  爸爸  课本上  博主  沙雕  辣鸡  背锅侠  次贷  玩玩  负债率  重点  人民  报章  过度   
拖后腿  帽子  医疗  政府  价格  小鸟  老人  外国  玩乐  价值观  蚂蚁  代人  回家   通篇  创业  经济学  交税  公积金  结论  领路人  时间  丈母娘  小时候  啥意思  样子  马车  咖啡馆  身体  房奴  全部  天将  思想

词云

这一步繁琐了,大家有简洁的代码可替换掉。

代码语言:javascript
复制
import jieba
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

all_content = df.content.values.tolist()
print(len(all_content), '\n', all_content[-1])

segment = []
for line in all_content:
    try:
        segs = jieba.lcut(line)
        for seg in segs:
            if len(seg)>1 and seg != '\r\n':
                segment.append(seg)
    except:
        print(line)
        continue
# 去停用词
words_df = pd.DataFrame({"segment": segment})

words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": np.size})
words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)
words_stat.head(20)

高频词如下所示,和上面提取的关键词很多重合:

老朋友pyecharts轻松绘制颜值不俗的词云:

代码语言:javascript
复制
from pyecharts import WordCloud
wordcloud = WordCloud(width=800, height=520)
wordcloud.add("评论词云", words_stat['segment'], words_stat['计数'], word_size_range=[20, 100])
wordcloud

舆论情况如下:

评论内容详情

最后再提下,用pandas读取的数据,无法看到每条评论的全部内容,不太清楚有没有参数可以设置查看全部文本。

这里自行查看长度在50-100区间内的全部评论数据:

代码语言:javascript
复制
import pandas as pd
df = pd.read_csv('Sina_Finance_Comments_All_20180811_toBDP.csv',encoding='utf-8')
df_wa = df[['No','nick','content','length','area','pro','city','emojis_list','time','stamp']]
cont_50_100 = df_wa_len[(df_wa_len['length']<100) & (df_wa_len['length']>=50)]['content'].values.tolist()
for c in cont_50_100:
    print(c,'\n')

完结撒花

以上算是更新完了本项目的全部内容,不算长也不算短的旅程里,耳闻目睹了不少小伙伴去DesertsX/gulius-projects - GitHub下载了代码,并跟着跑程序,古柳也很好奇大家的感受如何,欢迎留言评论进行反馈和分享哈。

此外,古柳也相信大家已经能够应用到自己感兴趣的数据集上并进行好玩的分析、挖掘和可视化了,期待大家分享自己的作品哈。

这里先剧透下古柳想玩的一些玩意,以之前热播的于正的清宫剧《延禧攻略》为例,可以用MIT的深度学习训练后的接口进行城市街景识别,看看下图“大猪蹄子”皇上的场景是什么?

诚不我欺,给出的结果还是挺可靠的:

代码语言:javascript
复制
Type of environment: outdoor
Scene categories: temple/asia (0.778)
Scene attributes: man-made, open area, natural light, sunny, touring, clouds, shingles, far-away horizon, semi-enclosed area

再用偶然接触到的某知识图谱API看看与实体“延禧攻略”相关的内容:

由于原本数据来源就是豆瓣等平台,所以还是蛮准确的,能深挖的内容也很多,比如古柳脑洞清奇的把这个知识图谱API用来当获取豆瓣数据的“爬虫”接口了。逃......以上,这里先卖个关子,后续揭秘这两个好玩的网站哈。

相关文章

本系列及后续其他项目的代码统一开源在GitHub:DesertsX/gulius-projects ,感兴趣的朋友可以先行 star 哈。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • SnowNLP 情感打分
  • 基于 TF-IDF 算法的关键词抽取
  • 词云
  • 评论内容详情
  • 完结撒花
  • 相关文章
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档