豆瓣电影简单评分模型-从收集数据到建模分析

思路:
从豆瓣上抓取数据【主要是评分,只是那个人数的百分比和最终评分,不过够用了】

一、收集数据
起始URL:https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0
【注,爬取的对象是使用json传输数据的,就是传输json字符串的那种啦,学过一点web基础,但不是很懂,别喷我喔,留言我会改正说法的啦】
首先就是先爬取单页嘛,然后找到规律然后根据需要循环爬取一定数量的数据,当然了期间要加一些反反爬的措施。(这里用到了timeout,verify=False关闭证书验证,headers,还有就是IP代理池【中间的时候用了一下,后来发现根本用不着】)
然后注意还需要一些异常处理。之后就是把结果值返回,然后添加到一个列表里面,可以使用pandas的Dataframe或者numpy的array规范数据,或者使用字典然后存储到json文件也好【不过我这个不太熟】,最后存储写入文件即可。
大家都是有点基础的啦,那我就直接贴代码了,基础不行的请先学习爬虫的基础知识。
注释在代码中:

# -*- coding: utf-8 -*-
# @Time    : 2019/6/12 19:00
# @Author  : 
# @File    : GetMovie.pyimport requests
import logging
import json
from lxml import etree
import pandas as pd'''
获取数据分析所需的字段内容
抓取字段:影片名,最终评分,五星、四星、三星、二星、一星
抓取的startURL:  
'''class Movie:def __init__(self):self.PROXY_POOL_URL = 'http://localhost:5000/get'self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}# self.proxys = {}def get_proxy(self):#代理池 未启用try:response = requests.get(self.PROXY_POOL_URL)if response.status_code == 200:return {'http':response.text,'https':response.text}#proxies=Movie.get_proxy(self)except ConnectionError:return Nonedef getUrl(self,upLimit):logging.captureWarnings(True) #关闭多余的警告信息for i in range(0, upLimit, 20):#确定起始URLurls = 'https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start={}'.format(i)try:responses = requests.get(urls,headers=self.headers,timeout=5,verify=False)  # verify=False,不验证证书if responses.status_code == 200:#如果起始URL响应正常,打印一下信息print('成功连接: ', urls)responsesDict = json.loads(responses.text)for dicts in responsesDict['data']:url = dicts['url']try:response = requests.get(url, headers=self.headers, timeout=5, verify=False)response.encoding = 'utf-8'if response.status_code == 200: #对是否有正常的响应 加入判断#如果url响应正常打印如下信息print("子网页链接成功: ", url, ' 链接状态 :', response.status_code, '正在等待解析.....')html = etree.HTML(response.text)#使用xpath进行解析movie_Name_Year = html.xpath('//*[@id="content"]/h1/span/text()')movie_Score = html.xpath('//*[@id="interest_sectl"]//div[@class="rating_self clearfix"]/strong/text()')movie_Star = html.xpath('//*[@id="interest_sectl"]//div[@class="ratings-on-weight"]/div[@class="item"]/span[@class="rating_per"]/text()')item = [movie_Name_Year[0], movie_Score[0], movie_Star[0], movie_Star[1], movie_Star[2],movie_Star[3], movie_Star[4]]print('解析成功!')# 名字 电影评分  五星 四星 三星 二星 一星yield itemelse:passexcept:#url没有正常响应print("子网链接失败:  ",url)else:passexcept:#起始URL没有返回正常响应print('当前urls:  ', urls, '  未响应!')def saveFile(self):datas = [] #所有数据将加入这里for item in Movie.getUrl(self,1200):datas.append(item) #添加数据到datas列表dataColums = ['影片名', '最终评分', '五星', '四星', '三星', '二星', '一星']#将数据转成Dataframefiles = pd.DataFrame(columns=dataColums, data=datas)files.to_csv(r'E:\DemoMain\课程考核接单\data.csv',index=None) #=保存到文件#成功保存到文件后,打印输出done!提示print("done!")def main(self):Movie.saveFile(self)if __name__ == '__main__':M = Movie()M.main()

二、建模分析
【菜鸟上路,勿喷,嘻。欢迎大佬们一起讨论和学习】
思路:
1.观察数据:数据除"影片名"外,为数值型,也就是参与模型构建的数据是数值型,标签"最终评分"也为数值型,而且无明显类别界限。
2.由1可知,这是一个监督问题【所有数据都有标签以及标签值】,而且这不是一个分类问题。
3.特征字段有多个,多特征问题
5.考虑选取线性规划模型进行问题的探究
6.进行模型的评估:根据预测值以及真实值之间的关系(或者对比)来确定模型的预测精度
7.建议以及改进想法:
(1)增大数据量
(2)模型参数调优
(3)更换模型以及模型之间的组合
(4)进行特征的高级筛选处理

解决matplotlib中文显示问题

from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']

常规操作,先查看一下前十条数据

df = pd.read_csv('data.csv')
print(len(df))
df.head(10)  

在这里插入图片描述
检测缺失值 false无

df.isnull().any()

在这里插入图片描述
选取数据列以便 提供数据进行训练

datas = df.iloc[:,1:]
datas.head(8)

在这里插入图片描述
把数据处理一下:

for columns in datas.iloc[:,1:].columns:datas[columns] = datas[columns].str.strip("%").astype(float)/100
datas['最终评分'] = datas['最终评分'].astype(float)
datas.head(10)

在这里插入图片描述
转换成数组,方便操作以及个人习惯

datasArray2 = datas.values

构建模型:

# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(datasArray2[:,1:],datasArray2[:,:1],test_size=0.25, random_state=0)# 对训练集进行训练
lr = linear_model.LinearRegression()
lr.fit(X_train, y_train)# 对测试集进行预测
y_predict2= lr.predict(X_test)
rmse = np.sqrt(metrics.mean_squared_error(y_test, y_predict2)) #均方根误差
print('RMSE:',rmse)

在这里插入图片描述
所以此模型准确率:98.2% 【1-rmse】

观察图形:

plt.figure(figsize=(15,5))
plt.plot(range(len(y_test)), y_test, 'r', label='测试数据')
plt.plot(range(len(y_test)), y_predict2, 'b', label='预测数据')
plt.legend()

在这里插入图片描述

查看回归系数【其实相当于权重系数】
查看常数值

在这里插入图片描述
也就是说,这个模型的表达式:

Y = 6.20437848 * x1+4.20811423*x2+2.20227207*x3+0.23005196*x4-1.80063617*x5+3.79333172

简单检验一下模型:

checkLabel = 6.7
checkArray = np.array([[0.091,0.330,0.442,0.110,0.028]])
y_predict_check= lr.predict(checkArray)
y_predict_check #查看y_predict_check的值

在这里插入图片描述
大致接近 标签值6.7,还行。
其实用线性模型的目的是因为其简单和数据类型的局限,我的猜测是:那个评分模型肯定不是那么简单的,可能还会有一些用户评论的情感分析和其他的东西在里面。

欢迎加入QQ群一起学习和交流,只为学习和交流:275259334

或者直接扫码加入:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63566.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抓取豆瓣的电影排行榜TOP100

1 #!/usr/bin/env python2 # -*- coding:utf-8 -*-3 """4 一个简单的Python爬虫, 用于抓取豆瓣电影Top前100的电影的名称5 Anthor: Andrew Liu6 Version: 0.0.17 Date: 2014-12-048 Language: Python2.7.89 Editor: Sublime Text2 10 Operate: 具体操作请看READ…

爬取豆瓣电影Top250影片信息

爬取豆瓣电影Top250影片信息 查看影片的详细信息爬取过程需安装的包确定爬取地址发送请求头解析数据保存数据完整代码 查看影片的详细信息 进入豆瓣电影Top250,选择某一影片,右击,选择“检查元素”。 爬取过程 需安装的包 安装requests、…

豆瓣电影详情数据爬取

这次的爬虫我们来看url携带多个参数的页面爬取 打开豆瓣电影排行榜官网,这里我选择了喜剧类型,发现只要将鼠标下滚翻到该页面最底部,滚轮就会重新跳到中间,相当于浏览器又发送了请求,重新加载一个页面,对应…

豆瓣电影top250信息爬取

摘要 python的网络爬虫可以方便抓取网页的消息,本文以豆瓣网站为例,实现了python网络爬虫抓取豆瓣电影排行榜top250的过程,以及其中遇到的问题和解决过程。 1.引言 网络爬虫又称网络蜘蛛,或网络机器人。是一种按照一…

基于Python的豆瓣中文影评差评分析

资源下载地址:https://download.csdn.net/download/sheziqiong/86773473 资源下载地址:https://download.csdn.net/download/sheziqiong/86773473 1. NLP NLP(Natural Language Processing)是指自然语言处理,他的目的…

基于电影《少年的你》豆瓣影评数据的爬取与分析

目标网站:豆瓣电影 目标网址:https://movie.douban.com/subject/30166972/comments?statusP 目标数据:(1)评价 (2)日期 (3)评论 (4)评论点赞 …

爬取豆瓣电影前十页的好评一般差评

分析一波 爬取的地址:https://movie.douban.com/subject/26588308/comments 分别找出好评、一般、差评的评论: 通过地址栏分析,评论的类型和percent_type有关: 好评为h一般为m差评为l 但是我们想找的是在全部里面寻找好评一般和差…

豆瓣电影当中的电影详情数据

打开豆瓣电影,点击当中的排行榜,相应的类型选择为喜剧类型,当前的数据如果不使用数据解析来实现的话,会不会通过阿贾克斯请求来请求到json形式相应的电影数据呢? 当滚轮拖动到底部的时候,发现滚轮很快就变动…

针对豆瓣TOP前250电影做的简单的数据分析~

~~~~~~内容参考如下使用python抓取豆瓣top250电影数据进行分析 - 简书 https://www.jianshu.com/p/720b193a5c2b #导入库,三大常用数据分析库 import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib#读取保存本地的excel文件…

电影评分数据集的分析

目录 数据集的获得使用工具项目流程 数据集的获得 进入该网址:https://grouplens.org/datasets/movielens/ 找到如下part: 点击ml-100k.zip进行数据集的下载 在本地解压后,将会看到如下内容: 但我们目前只需要三个文件&#…

爬取豆瓣电影的评论

好久没有爬虫了,今天突然叫爬豆瓣,有点懵了,不过看了看以前爬的,一葫芦画瓢整了一个这个。bs4和requests yyds! 分析一波 爬取的地址:https://movie.douban.com/subject/26588308/comments 每次翻页可以看到…

2020 豆瓣电影榜单出炉,直接在豆瓣上看电影吧

公众号后台回复“图书“,了解更多号主新书内容 作者:苏生不惑 来源:苏生不惑 一晃又到了年底,2020年就要结束了(你的小目标完成了吗),一年一度的豆瓣电影榜单也出炉了https://movie.douban.com/…

豆瓣Top250电影数据分析报告

我的其他数据分析报告:求职指南——数据分析职位解析 【Python3】Requests+正则表达式+multiprocessing爬虫并存入MySQL数据库 一、分析背景及目的 豆瓣对Top250电影的定义: 豆瓣用户每天都在对“看过”的电影进行“很差”到“力荐”的评价,豆瓣根据每部影片看过的人数以及…

爬取豆瓣电影分类排行榜

确定目标网址:豆瓣电影排行榜 使用Google浏览器打开目标网址,右侧选择分类“传记”,按F12打开开发者工具,会打开如下界面:左侧是数据内容,右侧是网页源代码信息。注:由于该页面是动态的&#x…

豆瓣top250电影数据分析

分析背景及目的 豆瓣电影 Top 250定义:豆瓣用户每天都在对“看过”的电影进行“很差”到“力荐”的评价,豆瓣根据每部影片看过的人数以及该影片所得的评价等综合数据,通过算法分析产生豆瓣电影 Top 250。 本文对于"好评电影"(豆瓣电影top250)的影片评分,上映…

Python对豆瓣电影Top250并进行数据分析

由于CSDN审核机制,导致原文章无法发出,故修改了相关词汇,并改为两篇问章发布。 数据获取 翻页操作 观察可知,我们只需要修改start参数即可 headers字段 headers中有很多字段,这些字段都有可能会被对方服务器拿过来进…

你知道豆瓣电影是怎么评分的吗?

「关注我,和我一起放下灵魂,让灵魂去搬砖。」 作者:小一 介绍:放不下灵魂的搬砖者 全文共6673字,阅读全文需17分钟 Python版本3.8.0,开发工具:Pycharm 写在前面的话: 如果你是因为看…

豆瓣电影TOP250数据分析

本文使用的语言为Python, 用到的几个模块有:BeautifulSoup(爬数据),pandas(数据处理),seaborn(可视化),部分图表由Tableau生成。 1. 数据获取 计划要抓取的…

豆瓣高分电影信息分析(数据分析)

豆瓣高分电影信息分析(数据分析) 1、数据抓取 数据集的获取是我们进行数据分析的第一步。现在获取数据的主要途径一般为:现成数据;自己写爬虫去爬取数据;使用现有的爬虫工具爬取所需内容,保存到数据库&am…

豆瓣电影评分分析(数据分析)

本文主要通过对豆瓣电影爬取的数据进行的简要分析,观察得出各部分之间对应的关系影响。 一.数据抓取 我们要想进行数据分析,首先就要通过爬虫对分析对象网页的数据爬取保存,可以保存到数据库或者文件形式到本地,这里我是保存在表…