目录
一、导入原始数据
二、结巴分词/绘制词云图
三、计算情感值,情感分析
# 方法一、SnowNLP计算情感得分
# 方法二、使用字典计算情感得分
四、# 数据可视化展示
五、绘制相关系数热力图
一、导入原始数据
#导入模块 import pandas as pd import numpy as np from collections import defaultdict import os import re import jieba import codecs
data=pd.read_csv("earphone_sentiment.csv",encoding='gbk') data.head()
content_id | content | subject | sentiment_word | sentiment_value | |
---|---|---|---|---|---|
0 | 0 | Silent Angel期待您的光临,共赏美好的声音! | 其他 | 好 | 1 |
1 | 2 | 这只HD650在1k的失真左声道是右声道的6倍左右,也超出官方规格参数范围(0.05%),看... | 其他 | NaN | 0 |
2 | 3 | 达音科 17周年 倒是数据最好看,而且便宜 | 配置 | 好 | 1 |
3 | 4 | bose,beats,apple的消費者根本不知道有曲線的存在 | 其他 | NaN | 0 |
4 | 5 | 不错的数据 | 配置 | 不错 | 1 |
#数据分组
s1=data[data['sentiment_value'].values==1]
s2=data[data['sentiment_value']==0]
s3=data[data['sentiment_value']==-1]
print(s3['content']) #输出其中一组数据
33 支持斑竹,标题不明了的话,有的时候根本就懒得进去看,起码我是这样的,别人我就不知道啦,呵呵~... 118 没有拜亚,差评 129 都有GDX2了,用PC直连的话,音源的质量堪忧,建议加USB隔离,比界面的效果明显多了,毕竟... 131 蛋疼 142 这是我第一只大耳机不过不知道真货什么声,我是20买的仿货。仿货低频混沌但有魔幻风格,有包围感...... 16994 搓了根三芯卡侬母转四芯卡侬母的线接解码屁股,直接推耳机。发现没有耳放动态确实弱了不少,别的倒... 17020 差距很大,前提是你的系统揭示力足够 17057 大小差这么多 17080 差距最明显的20hz低频也不过和原始数据相差2db左右,不值得大惊小怪。 17168 我8005接s7都没觉得比自带耳机口差……最多就是提升不明显罢了。 Name: content, Length: 590, dtype: object
二、结巴分词/绘制词云图
with open('stop_word/HGD_StopWords.txt','r',encoding='utf-8') as f:stopwords=set([line.replace('\n','')for line in f])
f.close()
#加载用户自定义词典
segs=data['content']
def clean_data(content):words =' 'for seg_text in content:seg_text=jieba.cut(seg_text)for seg in seg_text:if seg not in stopwords and seg!=" " and len(seg)!=1: # #文本清洗 words = words + seg + ' 'return words
print(clean_data(s1['content']))
Silent Angel 期待 光临 共赏 美好 声音 达音科 17 周年 数据 好看 便宜 不错 数据 觉得 器材 级别 搭配 达到 线材 区别 一件 非常容易 事情 网页 手机 无法 退到 一层 希望 做好 版块 名称 显示 不全 问题 提交 软件 开发商 估计 还要 时间 入门 贴子 几个 不太 系统 建议 近期 整理 找些 资料 新手 东西 温故 可知 不错 DD 支持 顶一下 东西 树莓 能响 想出 好声 ZEN 比较 升级 直接 加个 can 就行 感受 解码 前级 PS1200 1200 解码 细节 拉满 声部 互无 关联 放到 前级 知道 前级 声音 影响 比较 比较 反正 声音 起来 目前 解码 机器 店家 所谓 国产 发烧 喜好 低端 耳机 建议 买太多 早晚 T1 800S 老路 参数 感有 很大 关系 是否 好听 绝对 关系 高价 名机 参数 就行了 参数 太低 考虑 参数 前排 好听 参数 前排 好听 我用 诗德 声音 不错 喜好 现在 看起来 简单 器材 好不好 感觉 参数 好坏 算了 最近 鼓吹 参数 绝口不提 起来 搞乱 思路 怀疑 这种 参数 图个 器材 离开 测试 仪器 分辨 能力 家里 零火 反接 最好 电笔 段时间 着迷 电源 补习 电源 相位 知识 插头 仔细检查 安置 治好 多年 颈椎病 推好 T1 低音 下潜 极深 类似 进口 12 喇叭 那种 低音 暗流 涌动 极其 凶狠 非常 过瘾 T1 音场 人声 HD800 还远 觉得 人声 声场 宽深 推力 没有 声场 推开 二狗 气质 中国 牌子 中国 产品 英文名 中文名 巴不得 消费者 白皮 私生子 百多年 西崽 气质 下贱 港灿绿蛙 引以为荣 大陆 不绝 久居 鲍鱼之肆 不觉 其臭 白灯 监听 模式 解析 最好 耐听 绿灯 hifi 模式 乐感 黄灯 暖糊 模式 人声 颗粒感 红灯 甜润 模式 人声 润喉 味道 四种 模式 高频 依次 削减 qutest 本来 高频 最后 觉得 红灯 模式 最耐 隔离 牛不香 难看 界面 更好 值不值 男儿 当自强 林子祥 还好 平板 好听 自然 高敏 失真 失真 难听 厂家 早就 秘密 烧友 se v4 韭菜 故障率 高品 控差 更是 老生常谈 只能 烧友 早就 忍受着 还要 平板 这么回事 明白 深思 真的 好事 真实性 需要 验证 老铁 耳放 看来 不错 ADX5000 外观 质感 喜欢 明显 精工细作 感觉 档次 听过 800 800s 反正 编制 确实 流行 摇滚 不行 很想 听听 大乌 好文 支持 看来 官放才 归宿 知道 官放 音色 KT 好想断 货挺 本来 打算 没货 知道 声音 翻车 现在 不太能 受得了 刺激 声音 AWKT 知道 跳水 价格 8K 暂时 好像 不太可能 缺货 厉害 西装 5000ANV 真的 甜润 5000ANV 七八年 这放 对付 低阻 耳机 铁家 木碗 真的 一套 W1000Z 中频 味道 插上 5000ANV 中频 立马 味道 不错 手上 木碗 翻车 知道 AWKT 界面 时钟 高级 系统 需要 东西 最近 intona 只能 特定 曲目 曲目 副作用 十几年 耳机 没耳放 短暂 拥有 推不开 可惜 现在 买不起 AKG 经典 监听 耳机 到家 翻出 已久 240DF 细细 真是 不错 觉得 出彩 音量 开得 保守 t1 三代 这种 精致 声场 风格 T1 一代 横向 声音 相对 较为 纵深 比较 T1 三代 印象 一句 LZ 搭配 组合 本身 偏向 天龙 耳机 T1 三代 友好 马兰士 天龙 耳机 一家亲 T1 三代 现在 看到 失真 瀑布 测量 好奇 建议 购买 一台 mbl 5010c 前级 老牌子 前级 放大器 耳机 耳机 相当 水准 音源 建议 传统 cd lp 农村 弄个 复读机 原配 耳塞 买点 盗版 磁带 听得 舒服 初中 县城 上学 有个 同学 家庭 条件 那种 比较 磁带机 森海 px80 几百 一套 说白了 那句话 没有 没有 伤害 知道 坐井观天 中学 30 50 巨款 上学 那会 hd650 dt880 大耳 觉得 超级 好几千 耳放 一笔 大钱 用家 帮顶 赞同 楼主 听感 GL1000C 真的 吃惊 耳机 封闭 耳机 自然 开阔 声场 古典 编制 音乐 时有 辉煌 堂音 堪称 古典音乐 神器 性价比 真是 挺强 价位 唯一 重量 试一试 重量轻 GL1000 GL1000C 便携 相当 不错 流云 兄好文 支持 玩过 一段时间 a6t 感觉 特色 态度 诚恳 审美 品位 审美 相对 平庸 国货 总体 说得过去 相比 高级 a8 差距 现在 见到 sxt1se 真是 耳罩 保养 习惯 器材 声音 帮顶 同意 凤凰 观点 界面 光纤 理论 高度 实际效果 现在 好像 6.35 4.4 楼主 拿下 最牛 1w5 附近 XLR 4.4 过度 时代 XLR 4.4 全送 A1000 低频 确实 厚度 结像 纤细 现在 推着 800S NIAO 低频 不错 类型 相比之下 生硬 柔和 底气 动态 夸张 有点 用力 过头 感觉 niao 耳放 很强 单个 t1 HD800 问题 追求 极致 niao 万元 m9 不错 买过 咸鱼 嫌弃 声底 清晰 微暖 gax evo 好奇 凯音 idac6 二代 9028 芯片 唯芯论 没见 有人 感觉 耳机 音乐 带入 细节 有时候 不好 he1 细节 没多 爆炸 异常 自然 好比 音频 鸟叫声 惊到 耳机 下世纪 格雷 dsd1024 解码 信息量 爆棚 信息量 解码 更好 音箱 来讲 音箱 想做到 这种 沉浸 听感 最少 需要 单独 听音 隔音 合理布局 起码 一步 几万 下不来 箱子 低频 推好 需要 功夫 几个 钉子 影响 效果 绝对 耳机 场景 或许 更广 只不过 耳机 hd800 水准 提升 较为 困难 macmini 电加 12v 10a 线电 roon hqplayer 播放 hdd 里面 音乐 万元 以内 个数 秒杀 注意 秒杀 万元 不好 roon 确实 方便 手机 控制 界面 非常 赏心悦目 不太多 pontus 挺不错 预算 建议 直接 终结者 提升 很大 耳房 实在 得换 麻烦 推荐 耳房 耳机 预算 二手 超过 1w 能少点 更好 大耳 低音 只会 更好 震撼 身上 每个 细胞 跃动 起来 几百元 入耳 战悚 感觉 说明 耳朵 满足 来看 kk 真的 好听 楼主 运气 不错 用过 1800 001 002 一两个 型号 挺不错 重量 500 舒适 400 受不了 颜色 不错 国货 国外 照样 代工 贴牌 垃圾 看起来 很火 东西 男人 国产 文案 期望值 平板 强于 动圈 习惯 动圈 耳朵 能否 接受 声音 平板 低音 不太好 有量 没质 下潜 低音 比较 混和糊 缺乏 低音 精确 描绘 速度 力量感 柔顺 帖子 一点 器材 为先 器材 搭配 线材 调音 思想 错误 拆东墙补西墙 真的 调音 真的 素质 这种 领悟 始终 觉得 器材 搭配 线材 提升 很大 请问 楼主 甲乙 两条 纯铜 甲线 描述 高频 延伸度 达到 20KHz 空间感 细节 还原 现在 资历 可否 解释一下 甲线 物理 化学 结构 工艺 达到 状态 而乙线 强文 实实在在 烧友 懂线 喷子 义和团 路上 pc 越像 同质化 同质化 没有 竞争力 便携式 产品 简单 好声 价格 不贵 路线 想法 同意 轻便 占地 操作 方便 适应性 声音 拖后腿 觉得 足够 m040 导向 孔是 向下 环境 容忍度 不错 真力 不错 真力 不错 人声 电影 hd650 不错 推荐 平面 GL2K 目前 Z7 上台 机听 交响 古典 2K 三星 S7 EDGE 随身听 起码 觉得 短暂 玩过 金属 的确 不错 极致 HFI PRO Signature 值得 Pro900 成色 一点 有限 耳罩 依旧 屹立 边上 真的 好文 好文先 楼主 辛苦 理解 深刻 文笔 南京 百家 一带 风景 宜人 听音 地方 不好 800 档次 古典 最好 德国 大师 qp400 gmp400 肯定 不错 他家 中端 电源线 耳机 可惜 前端 耳机 真正 实力 没有 发挥 不错 黑标 定位 gs2ke gs3ke 之间 gs2ke 调音 改版 参考 声音 非常 光头 读不出 估计 那台 机器 和弦 cd pro2 市面上 最贵 稳定 转盘 不出 我用 特别 一条 纳米 308 电源线 第一次 感觉 电源 区别 换上去 整个 声音 奶油 如丝 顺滑 顺滑 淘太 难听 用过 不值 一条 木内 8000 一条 电源线 觉得 1000 没有 区别 闲置 半年 设备 发现 不错 一个月 不值 两年 刚入 adx5000 找耳放 阴差阳错 入手 现在 耳放 自我感觉 良好 关注 安心 听歌 ..... 精彩 THR 会有 底噪 问题 确定 是否 每台 那台 问题 声音 方面 2000 价格 染色 好听 确定 是否 高文 风格 高文 毒文 描述 接近 超鼠 铁三角 bha100 搭配 不错 意外 挺不错 别问 为啥 二手 不好 他家 重视 国内 市场 枪手 关注度 不高 东西 那种 玩玩 心态 安心 他家 耳放强 听过 他家 5k 一体机 解码 当纯 耳放用 出台 老何 r8 解码 挺不错 几张 专辑 Qobuz 确实 不错 收藏 ifi 东西 周边 敏感 usb 线换 用个 好点 数播 机线 换掉 搞个 ele 两位 电处 提升 明显 Pro dsd 升级 解码 有意思 有钱 玩意 便宜 感觉 感上 650 稍微 讨好 耳朵 耐听度 r70x 佩戴 素质 高阻 开放式 低频 表现 出色 后续 提升 空间 听说 流行 不错 古典 同意 楼上 实体店 体验 觉得 不错 参考 实体店 搭配 USB hdmi 视频 不当 iis 挺不错 正在 这款 USB 不值 价格 补品 价格 等于 耳放 价位 才能 出好声 搜下 适应性 蛮广 耳放 喜欢 二手 600 虽好 600 貌似 适合 听歌 风格 收原线 做条 参考 价格便宜 声音 原线 明显 好些 evo 平衡 单端 太拉 2A3 胆机 木纹 面板 好看 手上 线材 发现 银彩 高频 分析 背景 自带 密度 宽松 音染 人声 起来 有种 慵懒 感觉 建议 欧亚 510 原装 二手 400 多收 划算 声音 高端 确实 日本 用料 毕竟 纯银 二手 1000 分析家 声音 确实 宽松 素质 高点 解析 高点 我用 cd 机加 an 解码 an 解码 宽松 下盘 素点 搭配 正好 一点点 DAVE P750 搭配 经典 好像 见过 五个 烧友 感觉 大师 解析 没有 达到 所谓 旗舰 水准 adx5000 等级 d8000pro 两个 等级 大师 长处 声场 动态 调音 双三 平衡 设备 支持 这次 成功 2a3 parafeed 明显 感觉 ec super7 清晰度 ec 声音 特征 高频 空气 极为 起来 非常 舒服 屏头 清晰 声场 没有 特别 偏向 有点像 我用 ecp daha1 比较 声场 感觉 声音 一听 感觉 比较 高级 特点 突出 6sn7 并管 真是 设计 转接线 音箱 耳机 阻抗 推个 800 小意思 super7 4k 输出 变压器 stereomour ii 玩意 推低 阻高敏 耳机 噪音 做耳放 ec 解码器 驱动 有没有 安装 刚买 ae9 1000 多运放来 搭配 调音 不错 建议 sbx 游戏 音效 听歌 别有 风味 组合 好像 x7 官方 推荐 我试 还行 黑金 好评 看起来 不错 电位器 质量 电源 变压器 貌似 张扬 唯一 问题 便宜 导致 没有 高级 Phone 3k 塞子 明显 伺候 不好 细节 缺失 控制力 声音 粗糙 1.5 价位 塞子 前端 要求 用来 iPhone 正确 声音 出不来 细节 规模 最后 打过 5k 一万五 日元 比较 推荐 耳塞 某宝 随手 887 数据 好点 价格 手头 有个 atom 液态 v1 说实话 液态 底噪 好听 楼主 sp200 当初 789 感觉 基本一致 估计 喜欢 强势 抽插 不错 楼主 意见 觉得 q701 四不像 东西 知道 k702 歌德 325 不用 比来比去 AKG k701 一条 独苗 香火 暂时 无法 延续 只好 先供 鼠莓 推送 推荐 hqplayer 升频 naa 推送 鼠莓 jriver foobar 推送 国产 耳罩 原装 区别 有没有 比较 国产 替代 推荐 原装 最好 拆卸 国产 开模 粗糙 安装 教程 不错 漏音 低频 滚降 是不是 耳罩 单元 背面 金属网 堵死 有用 改变 风格 所谓 风格 耳朵 好听 不好 用心 支持 手机 音源 算了 采样 问题 音质 到哪去 某宝 声音 FM711 指标 平板 没有 底噪 性价比 音色 喜欢 gax evo hek he6 确实 传声 FM711 后级 推荐 高频 太亮 听感 不好 声音 比较 怪异 底噪 男人家 功放 适配器 HEK 轻微 沙沙声 接受 HE6 没有 可闻 底噪 算是 我用 功放 非常 20 多公斤 累个 半死 强烈推荐 fake711 听过 知道 耳放 功放 全是 普遍 听感 喜好 来看 估计 耳朵 闷糊 类型 耳机 耳塞 不煲 耳朵 再细 耳朵 听感 吃亏 现在 假货 遍地 只能 论坛 中介 确实 国内 商家 好少 帖子 看看 确实 喜欢 声音 行货 未必 傲立 行货 3000 价位 马兰士 CD机 DAC 除开 谣传 质量 问题 声音 好像 质疑 产品 hek 我见 过头 梁都 掉色 状态 大部分 动圈 够用 解码 部分 不错 推力 不错 输出阻抗 碰到 问题 换个 foobar 就行了 乾龙盛 官网 有个 打包 foobar 试试 录线 好长 一套 公斤 tc 版好 东西 二手 确实 见到 海里 民谣 型号 HD630VB 540 430 熟悉 猜测 530 GL2000 bispa 澄会 SOMMER 参考 好些 Signature 系列 性价比 不错 Signature DJ 外观 真心 毒到 等个 好价 还好 从来不 咸鱼 换下来 器材 磨改 耳机 展会 听过 好听 感觉 这套 前端 控制力 比较 人用 650 棉被 搭配 高频 低频 重心 偏上 前端 系统 直接 来接 700 耳朵 齿音 毛刺 低频 阴间 耳机 言论 由此而来 700 系统 650 相反 要压 齿音 毛刺 偏下 系统 推才 好听 需要 前端 提高 亮度 提升 解析 700 本身 解析 风格 700 调音 缺点 1990 高频 偏暗 调音 鲜活 通透 偏素 偏暗 700 问题 残响 太多 声音 比较 混浊 800 清楚 800 声音 干净 700 残响 人会 误认为 泛音 细节 认为 700 解析 700 森海 590 失败 副耳机 关机 每次 热机 好久 HD600 换上 国产 非官方 耳罩 声音 尖锐 时间 感觉 一点 耳罩 越久越 好听 再烂 一组 声必飞 不错 He6se 最好 温暖 功放 声音 太冷 不耐 GL2K 人声 ANANDA GDX2 推过 功放 RS1 不错 3000 二手 收到 女声 弦乐 展会 T5 挺不错 物有所值 t5 三代 t5 确实 流行 调音 古典 太行 平头 760 声音 确实 760 冷声 人声 好听 甜甜的 没有 低音 高频 亮锐 声场 横向 还行 纵向 声音 性格 akg k701 森海 耳塞 ie 系列 成熟度 整体 立体 mx 系列 情怀 耳塞 苹果 12 索尼 精选 app 效果 非常 hm1000 回来 后接 4.4 平衡 usb dac 试试 效果 淘宝网 c4 电池 索尼 我换 第一 先看 发帖 日期 C4 10 年前 听过 印象 不错 喜欢 续航 最近 湖人 销量 有点 重装 FOOBAR Amanero 驱动 装个 DSDTranscoder 电路 用料 素质 平衡 肯定 高于 单端 有人 味道 理解 素质 难求 味道 好调 几条 解决问题 平衡 架构 缺点 成本 端的 一倍 阻容 元件 配对 要求 关键 输出 次级 绕线 方式 输出 仿着 功放 输出 制作 次级 没有 输出 接头 平衡 没太大 意义 定制 输出 次级 有同 输出 接头 胆机 追求 平衡 叶家 胆机 外观 好看 确实 放到 顶级 耳放 胆机 推原 9500 不错 还好 管子 起来 2a3 300b 那种 便宜 胆机 够不够 看用 知道 老叶 机子 真的 关机 每次 热机 好久 HD600 换上 国产 非官方 耳罩 声音 尖锐 时间 感觉 一点 耳罩 越久越 好听 再烂 一组 声必飞 不错 He6se 最好 温暖 功放 声音 太冷 不耐 GL2K 人声 ANANDA GDX2 推过 功放 RS1 不错 3000 二手 收到 女声 弦乐 展会 T5 挺不错 物有所值 t5 三代 t5 确实 流行 调音 古典 太行 平头 760 声音 确实 760 冷声 人声 好听 甜甜的 没有 低音 高频 亮锐 声场 横向 还行 纵向 声音 性格 akg k701 森海 耳塞 ie 系列 成熟度 整体 立体 mx 系列 情怀 耳塞 苹果 12 索尼 精选 app 效果 非常 hm1000 回来 后接 4.4 平衡 usb dac 试试 效果 淘宝网 c4 电池 索尼 我换 第一 先看 发帖 日期 C4 10 年前 听过 印象 不错 喜欢 续航 最近 湖人 销量 有点 重装 FOOBAR Amanero 驱动 装个 DSDTranscoder 电路 用料 素质 平衡 肯定 高于 单端 有人 味道 理解 素质 难求 味道 好调 几条 解决问题 平衡 架构 缺点 成本 端的 一倍 阻容 元件 配对 要求 关键 输出 次级 绕线 方式 输出 仿着 功放 输出 制作 次级 没有 输出 接头 平衡 没太大 意义 定制 输出 次级 有同 输出 接头 胆机 追求 平衡 叶家 胆机 外观 好看 确实 放到 顶级 耳放 胆机 推原 9500 不错 还好 管子 起来 2a3 300b 那种 便宜 胆机 够不够 看用 知道 老叶 机子 真的 T1 推好 人声 刺激 农夫山泉 有点 味道 丁点 金属 声底 塑料 声底 好听 众人皆醉 独醒 开心 特别 帖子 阴阳怪气 换线 影响 声音 实验 说会 影响 声音 换线 声音 改变 程度 耳机线 解码 耳放 之间 数据线 电源线 gl2k 几个 好友 私聊 不到 预期 效果 降点 预期 超平 几个 低端 型号 声音 表现 正常 价位 带内 性价比 特别 真的 建议 宣传 降点 预期 过犹不及 最近 考虑 旷世 cma12 铁三角 dac100 bha100 套装 知道 选择 宣了 铁三角 西装 耳机 不好 cma12 现在 2000ti adx5000 铁三角 套装 d1 我用
绘制词云图
import wordcloud as wc
import matplotlib.pyplot as plt
# from scipy.misc import imread
from imageio import imread
from PIL import Image
def Cloud_words(s,words):# 引入字体font=r"C:/Windows/Fonts/simhei.ttf"mask = np.array(Image.open('love.png'))
# image_colors = ImageColorGenerator(mask)#从文本中生成词云图cloud = wc.WordCloud(font_path=font,#设置字体 background_color='black', # 背景色为白色height=600, # 高度设置为400width=900, # 宽度设置为800scale=20, # 长宽拉伸程度程度设置为20prefer_horizontal=0.2, # 调整水平显示倾向程度为0.2mask=mask, # 添加蒙版max_font_size=100, #字体最大值 max_words=2000, # 设置最大显示字数为1000relative_scaling=0.3, # 设置字体大小与词频的关联程度为0.3)# 绘制词云图mywc = cloud.generate(words)plt.imshow(mywc)mywc.to_file(str(s)+'.png')
词云参数说明
| font_path : string
| 使用的字体库
| width : int (default=400)
| 图片宽度
| height : int (default=200)
| 图片高度
| mask : nd-array or None (default=None)
| 图片背景参考形状
| scale : float (default=1)
| 图幅放大、缩小系数
| min_font_size : int (default=4)
| 最小的字符
| min_font_size : int (default=4)
| 最大的字符
| max_words : number (default=200)
| 最多显示的词数
| stopwords : set of strings or None
| 不需要显示的词
| background_color : color value (default="black")
| 背景颜色
s=[s1,s2,s3]
for i in range(len(s)):Cloud_words(i,clean_data(s[i]['content']))
#绘制不同类型的词云图
import stylecloud
clouds=stylecloud.gen_stylecloud(text=clean_data(s1['content']), # 上面分词的结果作为文本传给text参数size=512,font_path='C:/Windows/Fonts/msyh.ttc', # 字体设置palette='cartocolors.qualitative.Pastel_7', # 调色方案选取,从palettable里选择gradient='horizontal', # 渐变色方向选了垂直方向icon_name='fab fa-weixin', # 蒙版选取,从Font Awesome里选output_name='test_ciyun.png') # 输出词云图
三、计算情感值,情感分析
# 方法一、SnowNLP计算情感得分
from snownlp import SnowNLP
# 评论情感分析
# f = open('earphone_sentiment.csv',encoding='gbk')
# line = f.readline()
with open('stop_word/HGD_StopWords.txt','r',encoding='utf-8') as f:stopwords=set([line.replace('\n','')for line in f])
f.close()
sum=0
count=0
for i in range(len(data['content'])):line=jieba.cut(data.loc[i,'content']) #分词words=''for seg in line:if seg not in stopwords and seg!=" ": #文本清洗 words=words+seg+' 'if len(words)!=0:print(words) #输出每一段评论的情感得分d=SnowNLP(words)print('{}'.format(d.sentiments))data.loc[i,'sentiment_score']=float(d.sentiments) #原数据框中增加情感得分列sum+=d.sentimentscount+=1
score=sum/count
print('finalscore={}'.format(score)) #输出最终情感得分
Silent Angel 期待 光临 共赏 美好 声音 0.8879971451804157 HD650 1k 失真 左声道 右声道 倍 超出 官方 规格 参数 范围 0.05% 看来 坏 0.006372539086007101 达音科 17 周年 倒 数据 最 好看 便宜 0.8453378800810628 bose beats apple 消費者 根本 知道 有曲線 0.0670299255258523 不错 数据 0.8964725437060389 觉得 任何人 都 明确 高端 耳机 之间 区别 不用 出声 都 毕竟 佩戴 感不 还 没法 盲听 0.6697479525062867 听 区别 听 高低 层次 要求 高 0.4027925465700134 有没有 人能 10 条 电源线 里 听出 最贵 哪条 0.06920180081214933 二级 银 耳朵 对号入座 0.9946302422290783 一般来说 所谓 发烧友 起步 铜 耳朵 级别 达 不到 就别 HIFI 浪费 钱 入门级 产品 玩玩 0.8071593758525382 觉得 器材 级别 搭配 达到 听 线材 区别 一件 非常容易 事情 0.4360686154799386 不知 老大 级别 0.07532085728034166 自我 定位 算个 铜 耳朵 0.8804268632159121 还要 分辩 水电 火电 核电 分辨 耳朵 0.00866325580357663 看 最 一级 银 耳朵 顶天 mp3 无损 听 0.8742810002926688 银耳 飘过 0.8630530555797126 正在 测试 希望 论坛 帖子 回复 提醒 功能 整合 APP 里面 0.06636056239610733 网页 手机 版 无法 退到 一层 希望 做好 0.27630320357743965 移动 4G 表示 速度 还 同时在线 人数 比较 稍慢 0.6774658960259632 版块 名称 显示 不全 问题 提交 软件 开发商 估计 改 还要 点 时间 0.013924803818858855 请求 版 加速 上线 0.12750503183812079 消息 互通 设定 难以 理解 0.1755363866319708 太棒了 期待 版本 0.9658861331577216 版 啥时候 0.5617283950617286 看 少问 看得 问题 免问 0.13623173447886527 搜索 有效 0.8529411764705881 晕 一半 都 888 问题 0.34195355519847515 入门 贴子 几个 不太 系统 建议 近期 整理 找些 资料 0.05301968665320689 搜索 方便 ......... 0.7965951540697935 看不懂 0.42581389983146645 论坛 搜索 很快 很爽 经常
#将情感得分结果保存为新的csv文件
data.to_csv('result.csv',encoding='gbk',header=True)
# 方法二、使用字典计算情感得分
#生成stopword表,需要去除一些否定词和程度词汇
stopwords = set()
fr = open('stop_word/HGD_StopWords.txt','r',encoding='utf-8') #你的停用词典
for word in fr:stopwords.add(word.strip())#Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
#读取否定词文件
not_word_file = open('stop_word/情感极性词典/否定词.txt','r+',encoding='utf-8') #你的否定词
not_word_list = not_word_file.readlines()
not_word_list = [w.strip() for w in not_word_list]
#读取程度副词文件
degree_file = open('stop_word/情感极性词典/程度词.txt','r+',encoding='utf-8') #你的程度词典
degree_list = degree_file.readlines()
degree_list = [item.split(',')[0] for item in degree_list]
#生成新的停用词表
with open('stopwords.txt','w',encoding='utf-8') as f:for word in stopwords:if(word not in not_word_list) and (word not in degree_list):f.write(word+'\n')
#jieba分词后去除停用词
def seg_word(sentence):seg_list = jieba.cut(sentence)seg_result = []for i in seg_list:seg_result.append(i)stopwords = set()with open('stopwords.txt','r',encoding='utf-8') as fr:for i in fr:stopwords.add(i.strip())return list(filter(lambda x :x not in stopwords,seg_result))
#找出文本中的情感词、否定词和程度副词
def classify_words(word_list):#读取情感词典文件,这里用的是Boson的情感词典sen_file = open('stop_word/情感极性词典/BosonNLP_sentiment_score/BosonNLP_sentiment_score.txt','r+',encoding='utf-8')#获取词典文件内容sen_list = sen_file.readlines()#创建情感字典sen_dict = defaultdict()#读取词典每一行的内容,将其转换成字典对象,key为情感词,value为其对应的权重for i in sen_list:if len(i.split(' '))==2:sen_dict[i.split(' ')[0]] = i.split(' ')[1]#读取否定词文件not_word_file = open('stop_word/情感极性词典/否定词.txt','r+',encoding='utf-8')not_word_list = not_word_file.readlines()#读取程度副词文件degree_file = open('stop_word/情感极性词典/程度词.txt','r+',encoding='utf-8')degree_list = degree_file.readlines()degree_dict = defaultdict()for i in degree_list:degree_dict[i.split(',')[0]] = i.split(',')[1]sen_word = dict()not_word = dict()degree_word = dict()#分类for i in range(len(word_list)):word = word_list[i]if word in sen_dict.keys() and word not in not_word_list and word not in degree_dict.keys():# 找出分词结果中在情感字典中的词sen_word[i] = sen_dict[word]elif word in not_word_list and word not in degree_dict.keys():# 分词结果中在否定词列表中的词not_word[i] = -1elif word in degree_dict.keys():# 分词结果中在程度副词中的词degree_word[i] = degree_dict[word]#关闭打开的文件sen_file.close()not_word_file.close()degree_file.close()#返回分类结果return sen_word,not_word,degree_word
#计算情感词的分数
def score_sentiment(sen_word,not_word,degree_word,seg_result):#权重初始化为1W = 1score = 0#情感词下标初始化sentiment_index = -1#情感词的位置下标集合sentiment_index_list = list(sen_word.keys())#遍历分词结果for i in range(0,len(seg_result)):#如果是情感词if i in sen_word.keys():#权重*情感词得分score += W*float(sen_word[i])#情感词下标加一,获取下一个情感词的位置sentiment_index += 1if sentiment_index < len(sentiment_index_list)-1:#判断当前的情感词与下一个情感词之间是否有程度副词或否定词for j in range(sentiment_index_list[sentiment_index],sentiment_index_list[sentiment_index+1]):#更新权重,如果有否定词,权重取反if j in not_word.keys():W *= -1elif j in degree_word.keys():W *= float(degree_word[j]) #定位到下一个情感词if sentiment_index < len(sentiment_index_list)-1:i = sentiment_index_list[sentiment_index+1]return score
#计算得分
def sentiment_score(sentence):#1.对文档分词seg_list = seg_word(sentence)#2.将分词结果转换成字典,找出情感词、否定词和程度副词sen_word,not_word,degree_word = classify_words(seg_list)#3.计算得分score = score_sentiment(sen_word,not_word,degree_word,seg_list)return score
输出每一段评论的情感得分
for j in data['content']:print(j)print(sentiment_score(j))
Silent Angel期待您的光临,共赏美好的声音! 10.552670574221999 这只HD650在1k的失真左声道是右声道的6倍左右,也超出官方规格参数范围(0.05%),看来是坏了 2.5933312704463 达音科 17周年 倒是数据最好看,而且便宜 5.579975462234999 bose,beats,apple的消費者根本不知道有曲線的存在 0.3332954784020001 不错的数据 1.6021290141300002 我觉得任何人都可以明确分别高端耳机之间的区别,不用出声都可以,毕竟佩戴感不一样,这还没法做到盲听 2.84759656616 听出区别是一方面,听出高低的层次要求就更高了。 2.2631050220558 有没有人能从10条电源线里,听出最贵的是哪条? -1.2240818131445999 二级银耳朵,对号入座下 -1.041913843079 一般来说所谓“发烧友”起步应该是铜耳朵这个级别,达不到的话就别在HIFI上浪费钱了,入门级产品玩玩就可以了。 0.4704432917620007 我觉得器材到一定级别,搭配好了,达到听出来线材区别是一件非常容易的事情。 5.869473466501099 不知老大是哪个级别的 -0.857517002685 自我定位一下,算个铜耳朵吧 0.5074648951990001 不是还要能分辩水电,火电和核电的吗。 能分辨这个的是什么耳朵 0.4965496565720001 看了下最多到一级银耳朵顶天了。但 mp3 和无损不一定能听出来。 1.5737450363345127 银耳飘过。。。 1.51119199829 正在测试,希望论坛的帖子回复提醒功能能整合到APP里面 6.637762547716001 网页的手机版总是无法退到上一层,希望这个能做好 1.2570213610820002 移动4G表示速度还可以,可能同时在线人数比较多的时候,会稍慢 1.6217040066694 版块名称有些显示不全,这个问题已经提交给软件开发商了。估计改好还要点时间。 -0.9109759694777482 请求IOS版加速上线 -1.125393308889 消息不互通这个设定难以理解 0.6696765210099997 太棒了, 期待ios版本 2.35706343041235 我也要ios的 0 IOS版啥时候有? 0 多看,少问,看得多了有很多问题可以免问 -3.020064432938 用搜索是很有效的! 4.643811887157001 晕,。。。。几乎一半都是888的问题。。。。 -5.434210723521 入门的贴子也有几个,但是不太系统,你的建议很好,近期我去整理一下,再找些资料。 -0.7798087453989999 搜索很方便嘛......... 3.117499188732 看不懂 0 这论坛搜索很快的,很爽,俺经常用! 2.208888999055 不会发有钱也没用啊 -1.8476097164079999 支持斑竹,标题不明了的话,有的时候根本就懒得进去看,起码我是这样的,别人我就不知道啦,呵呵~~~~~ -5.078533520766999 如果没有人进去看的话,问题也就得不到解决啦,不是吗? -4.01522532872507 鉴于近期出现少数人破坏论坛规则、乱发贴的现象,特参照其他网站制定了更为详细的论坛规则、网站声明等,放在首页,请网友们自觉遵守,如对有其他建议和补充欢迎提出! 16.098798726017563 沙发 -0.206398670202 hao 0.225733679789 学习.... 0.651092081523 新手的好东西啊! 1.7774934204895 温故可知新... 好贴! -0.780614420592 不错的DD~ 3.88808662499 very good ,God helps me! 5.6495768461533995 好贴!~~支持! 1.81462929609 好,顶一下 0 谢谢啦~~~! 2.9393605944 醍醐灌顶 0 学习一下 0.651092081523 thanx a great deal 3.039639109753 谢谢...老鸟们. 2.9393605944 感谢~~~烧阿~~ 1.311010973193 好东西啊~~~~ 0.926729066929 欢迎上海的烧友们来试听! 2.8961581727 离得远精神支持
四、# 数据可视化展示
#情感值以方法一计算的作为值
#获取同一列中不重复的值
a=list(data['subject'].unique())
sum_scores=dict()
#求对应主题的情感均值
for r in range(len(a)):de=data.loc[data['subject']==a[r]]sum_scores[a[r]]=round(de['sentiment_score'].mean(),2)
print(sum_scores)
绘制不同主题下情感值的条形图
import seaborn as sns
import matplotlib.pyplot as plt
# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#数据可视化
sns.barplot(x=list(sum_scores.values()),y=list(sum_scores.keys()))
plt.xlabel('情感值')
plt.ylabel('主题')
plt.title('不同主题下的情感得分柱形图')
for x,y in enumerate(list(sum_scores.values())): plt.text(y,x,'%s'%y,va='center')
plt.show()
绘制不同情感词下的频数条形图
bar= data['sentiment_word'].value_counts().head(10)
print(bar)
labels = bar.index
sns.barplot(bar.values,labels)
plt.xlabel('频数')
plt.ylabel('情感词')
plt.title('不同情感词下Top10频数柱形图')
for x,y in enumerate(bar.values): plt.text(y+0.2,x,'%s' %y,va='center')
plt.show()
#获绘制不同情感值的柱形图
bar= data['sentiment_value'].value_counts()
labels =list(bar.index)
print(bar)
zipp=zip(labels,bar.values)
sentiment_score=dict(zipp)
print(sentiment_score)
# x=bar.values
sns.barplot(x=list(sentiment_score.keys()),y=list(sentiment_score.values()))
plt.xlabel('情感值')
plt.ylabel('频数')
plt.title('不同情感值下的频数柱形图')
for x,y in zip(sentiment_score.keys(),sentiment_score.values()): plt.text(x+1,y,'%s'%y,ha='center',va='baseline',fontsize=12)
plt.show()
五、绘制相关系数热力图
import seaborn as sns
from matplotlib import font_manager
#按不同主题不同情感值进行分组,求不同主题不同情感值对应的情感得分均值
w=data.groupby(['subject','sentiment_value'],as_index=False)['sentiment_score'].mean()
print(w)
data_heatmap = w.pivot(index = 'subject', columns = 'sentiment_value', values = 'sentiment_score')
ax = sns.heatmap(data_heatmap,vmax = 1,cmap='rainbow', annot=True,linewidths=0.05)
ax.set_title('耳机评论热力图', fontsize = 20)