大数据分析-基于python的电影票房预测系统设计与实现

一 概要

  
  近些年来,随着电影行业变得越来越热门,也为影院带来不小的票房收入。传统的影院都是依靠个人经验进行排片,但是由于影片的票房收入可能受多种因素的影响,排片多的电影最后的票房会远低于预期值,导致影院因安排失误而导致大量的票房损失。
  基于此背景下,众多的影院希望有一个票房预测系统能够预测电影的票房,为影院的排片进行指导,所以本文在了解了国内外研究现状后,在python语言的基础上,通过爬虫技术爬取中国电影网的各历史票房数据,利用多项式曲线拟合算法作为票房预测算法,实现了可对电影票房进行预测的python系统。
  通过应用本系统,能够为国内的影院提供点映过一段时间的电影的预测票房,为影院排片提供有一定影响的参考依据,减少因人为因素对电影排片而导致票房损失的事情发生。同时本系统能够进行票房数据预处理以及模型训练等功能,因为目前电影的票房是用户选择观看电影的重要指标,所以系统还能够及时的变更票房的实时数据和预测数据,具有非常好的应用前景和使用价值。
关键词:多项式曲线拟合;电影票房预测;爬虫;python

二、基于MAAP评级的电影票房预测模型

  在二十世纪八十年代,电影票房的研究也进入到了第二阶段,第二阶段的研究在第一阶段的前提下转变为发现更多的影响电影票房的因素。代表第二阶段研究的开始有很多,斯格特.苏凯提出的预测模型是真正的能够代表研究开始的标志。此预测模型基于第一阶段票房预测,增加了两个因素分别是是否获得奥斯卡奖项和MAAP评级,而建模方法上也有改变,主要是用回归分析的这一模型来构造电影票房的影响因子与收入之间的联系。
  乔治盖洛普的模型被斯格特苏凯进行了改进,但是票房数据的获取并不是一件容易的事,所以苏凯找到了代替电影票房数据的方法——电影租金变量,苏凯的模型预测的范围更广,例如电影租金、电影的持续放映时间也称为放映周数。苏凯在选取电影票房影响因子上设置了22个影响因子,把市场集中度列入了影响因子之一是最重要的改变。我们一般把不同放映时期的市场竞争度称为市场集中度,它的计算公式是:市场集中度=上映时期排名前四或排名前十电影的一周票房/本周所有电影总票房,当最后得到的数值越大时,市场集中度相应的越高也就意味着本周内上映的电影市场竞争力越大。回归方程对观测值的拟合程度我们称为拟合优度,其中判定系数R2是度量拟合优度的统计量的依据,它是回归平方和与总偏差平方和之间的比值,当判定系数越大时,则离平方和中能够由回归平方和解释的比例就越大,对模型的预测相应的就越精确,回归效果就更好。从数值方面当R2大于0小于等于1时,回归拟合的效果就越好,模型的拟合优度R2大于0.8时属于拟合度较好。

三、 基于python的电影票房预测算法设计

(一)数据来源

  本文主要使用了电影基本和电影票房两个数据,数据均来源于中国票房网,主要包括电影基本信息,电影发行时间以及历史票房数据,从表3-1中可以直观看到具体数据所示:
表3-1 初始数据表
在这里插入图片描述

(二)票房预测算法——多项式曲线拟合

  通过对斯格特苏凯的基于MAAP评级的电影票房预测模型学习,本文提出算法:对历史票房数据进行多项式曲线拟合,建立一个票房走势的“模型”,再把现有的票房套进模型里做计算。
多项式函数拟合是把给定数据是由M次多项式函数生成的作为一个假设,M次多项式函数并不是都会产生给定数据,这需要我们进行选择,应当选择的是一个不管是对已知数据还是未知数据都有较好预测能力的函数。
  最小二乘法是在数学上命名为曲线拟合,它寻找数据的最佳函数匹配是运用最小化误差的平方和,最小二乘法的优点是对于求出未知数据更加的方便,而且这些求得的数据与实际数据之间误差的平方和是最小的。最小二乘法对于曲线拟合的具体原理如下:
假设训练数据集是:
在这里插入图片描述

  是属于输入x的观测值,而则是相应的输出y的观测值,其中i=1,2,⋯,N
设M次的多项式是
在这里插入图片描述

其中,x是单变量的输入,是M+1个参数。
当损失函数(即最小二乘法)是平方函数时,系数的意义是为了使计算更加简便,把模型与训练数据代入可以得到:
在这里插入图片描述

对wj求偏导并令其为0
在这里插入图片描述

  以上公式最后一步存在一处错误:等式左边x指数为(j+k)
必须对多项式系数进行拟合,解线性方程组,得到下面的求和符号上下限都是i=1到N,为了直观所以直接省略书写步骤。
在这里插入图片描述

通过计算,得出:
在这里插入图片描述

  把上面的值带入线性方程组求解即可得出答案。
  将数据代入上述研究方程即为:将某一对比电影历史票房和预测票房电影的前期票房作为输入,通过图像显示处理,利用多项式曲线拟合与预测票房电影训练模型,最后预测出票房。具体代码如下:
#多项式拟合

def draw_fit(data):x = np.array(range(len(data)))z = np.poly1d(np.polyfit(x, data, 10))plt.plot(x, z(x), 'r-')return zplt.figure(figsize=(22, 12))func_fits = []
for i in range(9):plt.subplot(3, 3, i+1)y = data[title[i]].dropna().tolist()x = [i for i in range(len(y))]plt.title(title[i], fontproperties=font) #图标题plt.plot(x, y)   #绘图z = draw_fit(y)  #绘制拟合曲线func_fits.append(z)plt.show()

四、 硬件设计

  

五、 电影票房预测系统实现

  本章是对电影票房预测系统中的整体架构以及其部分关键模块的详细实现进行一个介绍,主要分为三个模块,网络爬虫子模块、数据存储子模块和电影票房预测子模块。该流程中特别注意的是,电影票房预测的最终功能模块是以多项式曲线拟合算法为基础实现。

在这里插入图片描述

图6-1电影票房预测系统整体流程图
  上图6-1展示了电影票房预测系统的整体流程图,上图给出的预测系统中有网络爬虫子模块、数据存储模块以及电影票房预测子模块。其中网络爬虫子模块主要完成对中国票房网爬取和预处理,由于数据可能重复或没有任何作用,为了使系统预测更加准确,于是必须要对数据预处理;数据存储子模块的作用是清理后的数据进行特殊处理,使数据可以成为预测模型的合理输入,存储的文件为csv文件;电影票房预测子模块是本文阐述以及研究的重要部分,该模块是运用多项式曲线拟合算法的基本框架,把数据存储子模块的输出作为输入,最后通过预先训练好的模型来输出票房的预测值。因为前面已经对票房预测模块进行了解释,因此下面只对网络爬虫和数据存储这两个功能模块的实现进行详细的介绍。

(二)网络爬虫子模块

如图6-1:
在这里插入图片描述

图6-2网络爬虫子模块流程图
由6-2可以得到流程如下:
  (1)当系统初始化爬虫代理后可以操作浏览器令其模拟人类行为,得到目标网址的root,进入到本文的数据主要来源的中国电影网。其中虫代理设置包括浏览器支持的MIME类型(ACCEPT)、用户代理(USER_AGENT)两个部分,具体设置如下:

def getMovieURL(url):headers = {
' Chrome/67.0.3396.62 Safari/537.36'try:r = requests.get(url, headers=headers)except requests.RequestException as e:print('error', e)def main():uinfo = []for i in range(11):urls = {"http://58921.com/daily/wangpiao?page= " + str(i)}for url in urls:html = getHTMLText(url)fillUnivList(uinfo, html)printHtml_csv(uinfo)

(2)在ROOT_URL页面中循环的按页根据展示位置来获取所有的movieURL存入到MovieUrlList栈中,接下来使用GetMovieUrl函数令桟顶元素取出,判断它的有效性,当无效时栈为空,爬取结束,跳转到第4步…;当有效时,直接进入某电影的页面,如下获取特定电影展示页面中影片名与历史票房的信息,存储在数据结构ulist.append([tds[1].string,tds[6].string])中,从而定位到需要爬取的数据。

def MovieUrlList (ulist, printHtml_csv(ulist):with open('data.csv', 'w', encoding='utf-8-sig', newline='') as csvfile:fieldnames = ['电影名称','票房']writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()for i in ulist:writer.writerow({'电影名称': i[0], '票房': re.findall('/^\d*(.)?\d+$/', i[1])})

(三)数据存储子模块

  通过Python中Pandas库中的DataFrame函数设置列名columns与行名index,分别用于存储电影名与历年票房,然后转置并存储为csv文件作为预测模型的输入。

数据储存

edf = pd.DataFrame.from_dict(mo, orient='index') 
edf = edf.T # 转置
edf.to_csv(os.path.abspath('.') + r'/boxoffice.csv', sep=',', encoding='utf_8_sig', index=False) # 保存到 csv

(四)预测结果展示

   本次预测的电影为哪吒之魔童降世,建立的模型采用大圣归来等9部电影,并最终选取大圣归来作为预测结果拟合值。
  1.电影历史票房结果展示
测试过程中,通过爬虫技术获得电影数据票房信息并经过数据清洗后,保存为csv文件,并且如图7-1所示通过matplotlib库的plt函数对csv文件中的九部电影票房数据进行可视化展示,其中横轴表示时间,纵轴为票房,图表中绿色的曲线表示的就是票房数据的变化趋势。
在这里插入图片描述

  2.电影票房多项式曲线拟合结果展示
获得票房数据后,通过numpy库中的polyfit方法对数据进行多项式曲线拟合,如图7-2所示7-2所示,蓝线为电影历史票房趋势图,红线为多项式曲线拟合后的模型变化趋势。
在这里插入图片描述

  3.电影预测票房结果展示
如图7-3和7-4所示,蓝线表示前10天哪吒之魔童降世电影票房的数据展示趋势,红线为西游记之大圣归来的多项式曲线拟合趋势图,并得到该趋势的拟合参数为0.5931,将哪吒之魔童降世的数据代入此模型计算,最终预测出总票房为275949万元。

在这里插入图片描述

六、 文章目录

目 录
一、绪论 1
(一)研究背景 1
(二)国内外研究现状 1
二、相关技术 1
(一)电影票房预测的相关方法 2
1.基于人口统计学的研究方法 2
2.基于MAAP评级的电影票房预测模型 2
(二)网络爬虫介绍 3
1.网络爬虫概述 3
2.页面爬取 3
3.页面存储 4
三、基于python的电影票房预测算法设计 4
(一)数据来源 4
(二)票房预测算法——多项式曲线拟合 4
四、电影票房预测系统需求分析 6
(一)电影票房预测系统总体概述 6
(二)电影票房预测系统功能性需求 6
1.网络爬虫子模块 6
(三)电影票房预测系统非功能性需求 7
五、电影票房预测系统设计 7
(一) 电影票房预测系统整体架构 7
(二) 数据的爬取与清洗子模块 8
(三)数据存储子模块 9
(三) 票房预测子模块 9
六、电影票房预测系统实现 9
(一)系统整体架构实现 9
(二)网络爬虫子模块 10
(三)数据存储子模块 12
七、电影票房预测系统测试 12
(一)硬件环境配置 12
(二)软件环境配置 12
(三)Numpy库与Scipy库 12
(四)预测结果展示 13
1. 电影历史票房结果展示 13
2.电影票房多项式曲线拟合结果展示 13
3.电影预测票房结果展示 14
参考文献 15

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2024年新算法:基于苦鱼优化算法BFO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要:本文提出了一种利用苦鱼优化算法(Bitterling fish optimization,BFO)来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题,然后运用苦鱼优化算法BFO来解决这个…

前端学习笔记 | WebAPIs(DOM+BOM)

一、作用和分类 1、基本概念 作用:使用JS去操作HTML和浏览器 分类:DOM(文档对象模型)和BOM(浏览器对象模型) html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 (1)选择匹配的第…

IO控制继电器电路

一、U1光耦: 分离高低压,防止高压干扰,实现电气隔离。 二、D5 二极管 1N4148: 续流二极管,保护元件不被感应电压击du穿或烧坏,以并联的方式接到产生感应电动势的元件两端,并与其形成回路&…

LCR 110

LCR 110 问题 例子 思路 使用dfs便利所有边 代码 class Solution { public:vector<vector<int>> res;void deep(vector<vector<int>>& graph, int id, vector<int>& buf){if(idgraph.size()-1){res.push_back(buf);return;}for(int …

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理&#xff1a; 先将 if 语句转为 switch 语句&#xff0c;再将 switch 分支合并&#xff0c;最后删除已合并的分支&#xff08;具体看代码&#xff09; 实现效果图 首先安装依赖&#xff1a; npm install babel/parser npm…

uniapp——第2篇:编写vue语法

前提&#xff0c;建议先学会前端几大基础&#xff1a;HTML、CSS、JS、Ajax&#xff0c;还有一定要会Vue!&#xff08;Vue2\Vue3&#xff09;都要会&#xff01;&#xff01;&#xff01;不然不好懂 一、去哪写&#xff1f; 就在【pages】的你的人一个页面文件夹里的【.vue】文…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

火车订票管理系统|基于springboot框架+ Mysql+Java+B/S结构的火车订票管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能模块 系统功能设计 数据库E-R图设计 lunwen…

bpmn-js中实现shape的内置属性、节点的默认配置

bpmn-js中使用elementfactory模块来构建一个元素的结构,其构建构成和元素属性的组成可参考:聊一聊bpmn-js中的elementFactory模块https://blog.csdn.net/chf1142152101/article/details/136294768。构建元素的属性会自动帮我们生成一个对应类型的shape的Id,其余属性均为空,…

洛谷P1182数列分段

题目描述 对于给定的一个长度为 N 的正整数数列 &#xff0c;现要将其分成 M&#xff08;M≤N&#xff09;段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 2 4 5 14 2 4 5 1 要分成 33 段。 将其如下分段&#…

Python类属性和对象属性大揭秘!

​ 在Python中&#xff0c;对象和类紧密相连&#xff0c;它们各自拥有一些属性&#xff0c;这些属性在我们的编程中起着至关重要的作用。那么&#xff0c;什么是类属性和对象属性呢&#xff1f;别急&#xff0c;让我慢慢给你解释。 类属性 首先&#xff0c;类属性是定义在类本…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

学习使用js获取当前ip地址的方法,使用第三方API获取ip地址

学习使用js获取当前ip地址的方法,使用第三方API获取ip地址 使用 DNS 查询使用第三方 API 使用 DNS 查询 DNS 是一种用于解析主机名为 IP 地址的系统。可以使用 JavaScript DNS 查询来获取本机IP地址。下面是如何使用 JavaScript 进行DNS查询的示例代码。 <p class"loc…

腾讯云2核4g服务器能多少人在线?2核4G云服务器支持多少并发?

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&#xff0c;经阿腾云测试&a…

嵌入式开发基础总结

学习目标 1.了解嵌入式开发 2.开发环境的搭建 3.Linux操作系统的基本操作 一、了解嵌入式开发 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 1.嵌入式可以干…

[蓝桥杯练习题]确定字符串是否包含唯一字符/确定字符串是否是另一个的排列

确定字符串是否包含唯一字符 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);map<char,int>m;string s;cin>>s;for(int i0;i<s.size();i){if(isalpha(s[i]))s[i]tolower(s[i]);if(…

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…

C语言例:设 int x=100; 则表达式 x++>100?x+20:x+10 的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int x100, y;y x>100?x20:x10;printf("表达式x>100?x20:x10 的值为&#xff1a;%d\n",y); //111printf("x %d\n",x); //101return 0; } //三目逻辑运算符&#xff0c;条件…

基于springboot实现酒店客房管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现酒店客房管理平台系统演示 摘 要 随着人们的物质水平的提高&#xff0c;旅游业和酒店业发展的速度越来越快。近年来&#xff0c;市面上酒店的数量和规模都在不断增加&#xff0c;如何提高酒店的管理效率和服务质量成为了一个重要的问题。伴随着信息技术的发…

记一次实战项目所学(JWT篇)

记一次实战项目所学&#xff08;JWT篇&#xff09; 5. 登录验证功能 先获取公钥准备将前端输入的进行加密 //获得公钥GetMapping("/rsa-pks")public JsonResponse<String> getRsaPublicKey(){String publicKeyStr RSAUtil.getPublicKeyStr();return new Js…