为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
大数据

SnowNLP 情感打分

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

import pandas as pdfrom 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越正面:


webp

再来看看负面的评论

df_sent.sort_values(by=['sentiment'])

webp

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

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

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

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)

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

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

词云

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

import jiebaimport numpy as npimport 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)

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

webp


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


from pyecharts import WordCloud
wordcloud = WordCloud(width=800, height=520)
wordcloud.add("评论词云", words_stat['segment'], words_stat['计数'], word_size_range=[20, 100])
wordcloud

舆论情况如下:


webp

评论内容详情

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

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

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')

webp

完结撒花

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

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

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


webp


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

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

webp

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


webp


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



作者:古柳_Deserts_X
链接:https://www.jianshu.com/p/e0afca4f13a0


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消