python 机器学习:通过评论预测十部动漫
本帖最后由 小伤口 于 2021-8-22 23:59 编辑python 机器学习:预测十部动漫
程序效果
数据是由本人自己通过爬虫爬取 b 站评论制作的
目前只支持以下十部动漫预测
为了更直观一点外观也用了 Tkinter 当界面,看看实现效果怎么样吧
我去腾讯视频找评论进行预测
(界面默认是罗小黑封面)
预测《刺客伍六七》
预测之后顺便爬取 B 站封面(之前已经用爬虫爬取下载地址与简介,所以这个程序并没有爬取简介图片的代码
如果想要我也可以把这个代码分享出去{:10_256:} )
预测《天宫赐福》
貌似效果不错~{:10_254:}
不过他的预测准确率只有 60.9% 有一半多一些的准确率
造成这样的主要原因,是我做的数据数量太少了{:10_266:} ,总共只有 10w 左右的数据,除去测试集
也只有不到十万拿来做训练,不过只要评论偏向动漫内容,一般预测的准确率还是挺高的{:10_307:}
我会一直更新数据的,力求将预测准确率达到 80% 以上{:10_275:} ,并且增加更多的动漫类别
需要安装的库
pip install requests
pip3 install pillow
pip3 install pandas
pip install -U scikit-learn
pip3 install Beautifulsoup4
pip3 install lxml
pip install jupyter(非必须)
数据制作
我会不定时更新关于 B 站评论的数据,到时候帖子也会进行提示
大家点击下面的链接就可以下载到最新的数据(文件名称有更新时间)
数据
如果大家自己想更新数据集我这儿也有更新的脚本,有详细注释,和操作说明跟着一步步来就可实现更新
制作数据集
数据集图片:
爬取原理和过程
经过分析得知 b站评论存储在 有 main 名字的 json 文件中
https://api.bilibili.com/x/v2/reply/main?callback=jQuery1720002087738314316301_1629621752570&jsonp=jsonp&next=0&type=1&oid=7961887&mode=3&plat=1&_=1629621766385
然而我们却并不能打开网址,通过百度得知只要删除 callback 和 _ 参数就可以访问了
爬虫代码:
**** Hidden Message *****
这里面也包含了将除中文以外所有的符号删除
这里简单爬取一下来演示
爬取完成之后打开文件
然后通过下面代码(文件中是 Brief.py 文件)进行简单数据处理
#简单处理数据
import pandas as pd
#修改路径即可
#读取你要处理数据
a=pd.read_csv("凸变英雄LEAF.csv")
b=pd.DataFrame(a,columns=["Name","Comment"])
#添加列
b['Name']="《凸变英雄LEAF》"
#数据去重
b=b.drop_duplicates(keep='last')
#重新保存
b.to_csv('凸变英雄LEAF.csv')
就变成这样
大家想爬取其他的就直接改名字就好了{:10_320:}
机器学习
数据爬取的差不多的时候,就把文件放在数据集文件中
#获取数据
print("获取数据中...")
Tu=pd.read_csv("数据集\凸变英雄LEAF.csv")
Hui=pd.read_csv("数据集\辉夜大小姐想让我告白?~天才们的恋爱头脑战~.csv")
Ling=pd.read_csv("数据集\灵笼.csv")
Luo=pd.read_csv("数据集\罗小黑战记.csv")
Qi=pd.read_csv("数据集\齐木楠雄的灾难.csv")
Tian=pd.read_csv("数据集\天宫赐福.csv")
Wu=pd.read_csv("数据集\伍六七之玄武国篇.csv")
Xiao=pd.read_csv("数据集\小林家的龙女仆.csv")
Zai=pd.read_csv("数据集\在下坂本,有何贵干?.csv")
Zhou=pd.read_csv("数据集\咒术回战.csv")
#数据处理
print("数据处理中...")
#数据拼接
Data=pd.concat(,axis=0)
Data=Data.drop('Unnamed: 0', 1)
print("数据拼接成功...")
以上代码是将读取的所有数据进行拼接整合在一起
然后将数据中的空值删除,以及将中文的语气词之类无用的词语删掉
停用词存放在一个 txt 文件中加载他进行删除{:5_91:}
#清洗空值
Data1=Data.dropna()
print("成功清洗数据")
print("正在进行数据构建..")
#将Name类转换成id
Data1["Name_id"]=Data1['Name'].factorize()
Name_id_N = Data1[['Name', 'Name_id']].drop_duplicates().sort_values('Name_id').reset_index(drop=True)
id_Name = dict(Name_id_N[['Name_id', 'Name']].values)
print("正在进行中文分词")
#加载停用词
stop_words=StopWords("StopWords.txt")
print("删掉无用数据中..")
#分词,并过滤停用词
Data1['Comment'] = Data1['Comment'].apply(lambda x: " ".join())
print("数据处理完毕")
#数据集划分
x_train,x_test,y_train,y_test=train_test_split(Data1["Comment"],Data1["Name_id"],test_size=0.2,random_state=100)
print("数据集划分成功")
数据处理完成就开始特征工程
#特征处理-特征提取-tfid
#实例化一个转换器
print("正在进行特征工程")
count_vect = CountVectorizer()
transfer=TfidfVectorizer(norm='l2', ngram_range=(1, 2))
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
tfid 简单来说就是体现一个词语在文章的重要程度
最后就是算法和建立模型了
#朴素贝叶斯算法预估器流程
bayes=MultinomialNB(alpha=1.0)
#建立模型
bayes.fit(x_train,y_train)
print("模型建立成功")
print("启动程序。。。")
这里用的算法是朴素贝叶斯算法
完整代码
**** Hidden Message *****
运行结果:
真实值
真实值与测试值比对
7978 False
8292 True
5712 True
2829 False
6233 True
...
478 True
4713 False
6072 False
1369 True
4396 True
Name: Name_id, Length: 23518, dtype: bool
准确率
0.6097457266774385
Forecast("来了 他来了 他带着剪刀走来了🙃")
《伍六七之玄武国篇》
6
Forecast("齐神yyds!又来回顾了")
《齐木楠雄的灾难》
4
Forecast("怎么赤司征十郎在里面")
《齐木楠雄的灾难》
4
Forecast("小白的爸爸为什么我总是看不见他的脸呢?总是用报纸给他蒙上了。")
《罗小黑战记》
3
Forecast("小黑真萌,比丢真憨,哈哈")
《罗小黑战记》
3
Forecast("最后一个片段真的很感动啊,隐隐约约把谢怜花城的800年来由啥的都交代了,特别是配乐也太合适了啊,让我重新感受到看天官时的感动,“惊鸿一瞥,百世沦陷”的爱情,我们作为一个旁观者,也能感受到那至死不渝的感情以及感动…天官赐福,百无禁忌!")
《天宫赐福》
5
**** Hidden Message *****
运行请双击 main.py 文件
exe文件请关注小伤口公众号回复预测怪获取
(不建议下载文件有点大 200 多 MB)
(但建议关注小伤口公众号{:10_256:} )
exe文件运行请找到dist 文件夹里面找到 main.exe(很好找的有专属图标){:9_227:}
{:9_226:}
还要下载 jieba 库进行中文分词 沙发{:5_104:}求评分 程序第一次启动时,耗时可能会比较长 大佬666 66666666666666666666666666666666666666666666666 {:5_95:} 厉害 。。太牛了 哇,这个好强。
最近也在学习机器学习(keras),感觉很难
赞!{:7_123:} {:7_112:} 青出于蓝 发表于 2021-8-23 16:29
哇,这个好强。
最近也在学习机器学习(keras),感觉很难
赞!
过奖了,我也感觉很难{:10_266:} 学习 大佬牛批,支持一下 大佬66666666666 牛蛙 学习 大佬,都哪些网站可以爬啊?一般的常规网站不涉及违法的都能爬吗? 挣鱼币做作业 隐市仙 发表于 2021-8-24 16:33
大佬,都哪些网站可以爬啊?一般的常规网站不涉及违法的都能爬吗?
其实一般只需要一个人用,都没啥事,如果你因为爬取内容导致服务器出问题,或者赚了好多钱出名了这些,应该会有危险吧哈哈哈 kankan{:10_277:}