【Python】大数据挖掘课程作业3——使用朴素贝叶斯分类对B站评论进行分析

参考资料:《Python数据科学手册》

数据来源:B站观察者网、观视频工作室、央视新闻、小央视频、环球网、环球时报2020年1月到5月所有与新冠疫情相关的投稿视频的弹幕与评论,爬取视频共计13902个,爬取弹幕共计825869条,爬取评论共计16901540条。

算法的选择

朴素贝叶斯分类是一种常用的有监督机器学习算法,我使用的是scikit-learn提供的朴素贝叶斯分类模型,sklearn提供两种朴素贝叶斯分类,一种是高斯朴素贝叶斯,一种是多项式朴素贝叶斯,其中,后者常用于文本的分类。

数据的预处理

因为需要对中文进行贝叶斯分类,所以在训练模型之前要对中文文本进行分词并去掉停用词,这里我是用的分词工具是jieba,停用词表是从网上随便搜的。

因为贝叶斯是有监督的机器学习算法,所以我需要手动标记出一个训练集,这里我选择随机抽取500条弹幕和500条评论进行手动标记(可以看到相对整体数据,我使用的训练集很小,但是似乎没有更好的方案)。

为了将分词后的文本数据进行合理的量化,这里使用sklearn提供的TfidfVectorizer工具计算词频-逆文档频率。

数据分类相关代码

为了方便进行分类,我将所有数据转化为了pandas的DataFrame对象,并使用python内置的pickle模块储存到硬盘上,需要使用时直接从硬盘加载(代码中的dms和cts对象)。

dms和cts的content列分别表示弹幕和评论的分词后的结果。

我将训练集(500条弹幕+500条评论)储存为了csv文件,分类时加载并用于模型训练。

对于最后的训练结果,我同样将其使用pickle模块储存至硬盘。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from datetime import datetimeimport pandas as pdimport csv
import jieba
import pickledef __apply_jiebe(ser: pd.Series) -> pd.Series:tmp = jieba.cut(ser['content'])res = ''for i in tmp:if i not in stop_words:res = i if res == '' else res + ' ' + iser['content'] = resreturn serdef __load_stop_words():f = open(file='./stop_words.txt', mode='r', encoding='utf-8')res = set()while lin := f.readline():res.add(lin[:-1])return resdef load_train_data(file1: str, file2: str) -> (pd.Series, pd.Series):w1 = csv.reader(open(file=file1, mode='r', encoding='utf-8', newline=''))w2 = csv.reader(open(file=file2, mode='r', encoding='utf-8', newline=''))content = []in_out = []for i in w1:tmp = jieba.cut(i[0])res = ''for j in tmp:if j not in stop_words:res = j if res == '' else res + ' ' + jcontent.append(res)in_out.append(int(i[1]))for i in w2:tmp = jieba.cut(i[0])res = ''for j in tmp:if j not in stop_words:res = j if res == '' else res + ' ' + jcontent.append(res)in_out.append(int(i[1]))return pd.Series(content), pd.Series(in_out)stop_words = __load_stop_words()if __name__ == '__main__':begin = datetime.now()# 加载数据dms = pickle.load(file=open(file='../PickledFile/dm_split.pickled', mode='rb'))  # type: pd.DataFramects = pickle.load(file=open(file='../PickledFile/comments_split.pickled', mode='rb'))  # type: pd.DataFrame# 加载训练集train_data, train_target = load_train_data(file1='./弹幕sample.csv', file2='./评论sample.csv')print('数据加载与分词结束………………………………………………………………………………………………………………………………………………………………………………………………………………')model = make_pipeline(TfidfVectorizer(), MultinomialNB())model.fit(train_data, train_target)print('模型训练结束……………………………………………………………………………………………………………………………………………………………………………………………………………………………')print('开始预测……………………………………………………………………………………………………………………………………………………………………………………………………………………………………')dms['res'] = model.predict(dms['content'])cts['res'] = model.predict(cts['content'])dms = dms.drop(labels=['content'], axis=1)cts = cts.drop(labels=['content'], axis=1)end = datetime.now()print(end - begin)# 储存分类结果pickle.dump(obj=dms, file=open(file='../PickledFile/dm_predicted(3).pickled', mode='wb'))pickle.dump(obj=cts, file=open(file='../PickledFile/comments_predicted (3).pickled', mode='wb'))

分类结果1

这里,我将数据分为3类:内容聚焦于国内情况(图中蓝色)、内容聚焦于国外情况(途中黄色)、内容没有明显关注倾向(图中未画出),结果如下图所示:

可以发现,分类结果基本与实际疫情的发展相符。

分类结果2

这里我将数据分为4类:内容带有调侃倾向(图中蓝色)、内容带有鼓励倾向(图中黄色)、内容带有严肃的事实讨论(图中绿色)、其他(图中未画出)。

可以发现,分类结果能够与实际疫情的发展阶段相符。

【Python】大数据挖掘课程作业3——使用朴素贝叶斯分类对B站评论进行分析相关推荐

  1. 【Python】大数据挖掘课程作业1——使用爬虫爬取B站评论、弹幕与UP主的投稿视频列表

    [Python]大数据挖掘课程作业1--使用爬虫爬取B站评论.弹幕与UP主的投稿视频列表 数据挖掘部分的基本目标是:对于指定的UP主,能够获取其投稿视频列表:对于指定的视频,能够获取其视频标签.评论( ...

  2. python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析

    #2018-04-06 13:52:30 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘课程]二十一.朴素贝叶斯分类器详解及中文文本舆 ...

  3. 【python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析

    这是<Python数据挖掘课程>系列文章,也是我上课内容及书籍中的一个案例.本文主要讲述朴素贝叶斯分类算法并实现中文数据集的舆情分析案例,希望这篇文章对大家有所帮助,提供些思路.内容包括: ...

  4. 【python数据挖掘课程】二十六.基于SnowNLP的豆瓣评论情感分析

    这是<Python数据挖掘课程>系列文章,前面很多文章都讲解了分类.聚类算法,而这篇文章主要讲解如何调用SnowNLP库实现情感分析,处理的对象是豆瓣<肖申克救赎>的评论文本. ...

  5. 机器学习与数据挖掘 课程作业 基于数据驱动的空调结霜程度检测方法研究

    机器学习与数据挖掘 课程作业 基于数据驱动的空调结霜程度检测方法研究 摘要: 在我国的夏热冬冷地区,由于没有集中供暖,在冬季使用空调制热进行供暖是一种很常见的方式,但该地区冬季空气相对湿度较高并且环境 ...

  6. 大数据挖掘课程案例资源介绍

    大数据挖掘课程案例资源分为[基础]版,[进阶]版,不同阶段的课程难易程度不一样,对学生的基础知识掌握要求也不一样.               [基础]Python编程基础         通过学习本 ...

  7. 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(下)

    基于朴素贝叶斯的电影评论情感分析 用到的包:pandas.jieba(分词工具) file=open(r"review.txt",'r',encoding='utf-8') rev ...

  8. python大数据课程培训大纲

    一.大数据处理技术-基于Hadoop/Yarn的实战(含Spark.Storm和Docker应用介绍 ) 本课程从大数据技术以及Hadoop/Yarn实战的角度,结合理论和实践,全方位地介绍Hadoo ...

  9. python大数据挖掘系列之淘宝商城数据预处理实战

    在上一章节https://blog.csdn.net/qq_60168783/article/details/121824746 我们聊了python大数据分析的基本模块,下面就说说2个项目吧,第一个 ...

最新文章

  1. Codeforces Round #270
  2. centos下搭建yum服务器
  3. WIN32 使用事件实现高效生产者消费者模型
  4. 转载:(C/C++函数返回多个值)
  5. 如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展
  6. JavaScript实现省市二级联动
  7. 技术管理角色认知-管理都需要做哪些事
  8. 图片查看器 bmp jpg png 动态gif office 2007风格
  9. php 5.6.30 漏洞,PHP 5.6.30 正式发布,安全漏洞修复
  10. Git学习总结(8)——Git和SVN之间的基本区别
  11. 【电脑帮助】解决Wind10系统桌面没有“我的电脑”图标的问题
  12. [tf] config.gpu_options.allow_growth=True
  13. [转]理解JSON:3分钟课程
  14. 背景渐变/字体颜色渐变(可应用于银行卡背景框)
  15. 泰坦尼克号数据分析!
  16. Altium Designer20下绘制封装、布局、布线及裁板等操作
  17. 正常打游戏声音分贝测试软件,你们ps4玩游戏的时候噪音是多少分贝啊,我下了个测量噪音的软件,我的......
  18. 国内的9家域名顶级注册商
  19. SpringCloud极简入门(三)服务提供者与消费者
  20. 查询oracle耗时sql,查看Oracle耗时Sql

热门文章

  1. QtCreator生成标准多行函数或者类详细注释
  2. 年薪80W的大数据开发【1024G全套资源】都在这儿!
  3. 2016淘宝首页改版 细说淘宝首页设计变化史
  4. CAN 网络通信矩阵
  5. alibaba.jym.item.external.goods.batch.offsale( 交易猫外部商家批量下架商品接口 )
  6. Nikon Capture NX2.2.6下载及破解方法
  7. SpringBoot整合SpringDataElasticSearch 完成地理搜索 附近人搜索 距离搜索
  8. 2021-07-12 怎么将桌面图标变大变小
  9. (邱维声)高等代数课程笔记:基,维数与坐标
  10. 今天, IG 帮我们圆梦