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

前言

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

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

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

SnowNLP 情感打分

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

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越正面:


再来看看负面的评论

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

本次就不进行更细致的挖掘了,大家可自行进行探索,相信经过这一个系列的洗礼,诸位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 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轻松绘制颜值不俗的词云:

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区间内的全部评论数据:

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的深度学习训练后的接口进行城市街景识别,看看下图“大猪蹄子”皇上的场景是什么?



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

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 哈。

本系列文章:
“中国年轻人正带领国家走向危机”,这锅背是不背?
手把手教你完成一个数据科学小项目(1):数据爬取
手把手教你完成一个数据科学小项目(2):数据提取、IP 查询
手把手教你完成一个数据科学小项目(3):数据异常与清洗
手把手教你完成一个数据科学小项目(4):评论数变化情况
手把手教你完成一个数据科学小项目(5):省份提取与可视化
手把手教你完成一个数据科学小项目(6):城市提取与可视化
手把手教你完成一个数据科学小项目(7):经纬度获取与BDP可视化
手把手教你完成一个数据科学小项目(8):Emoji提取与分布图谱

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,270评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,489评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,630评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,906评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,928评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,718评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,442评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,345评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,802评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,984评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,117评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,810评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,462评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,011评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,139评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,377评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,060评论 2 355

推荐阅读更多精彩内容