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越正面:
再来看看负面的评论
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 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)
高频词如下所示,和上面提取的关键词很多重合:
老朋友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用来当获取豆瓣数据的“爬虫”接口了。逃......以上,这里先卖个关子,后续揭秘这两个好玩的网站哈。
作者:古柳_Deserts_X
链接:https://www.jianshu.com/p/e0afca4f13a0
共同学习,写下你的评论
评论加载中...
作者其他优质文章