摘要:基于Python的电影数据分析及可视化系统是一个应用于电影市场的数据分析平台,旨在为广大电影爱好者提供更准确、更详细、更实用的电影数据。数据分析部分主要是对来自猫眼电影网站上的数据进行清洗、分类处理、存储等步骤,数据可视化则是对数据分析结果进行呈现和展示,以便用户更好地了解电影市场实况和趋势,从而更好地选择观影内容。
整个系统的数据采集部分采用Requests库进行爬虫,从猫眼电影网站爬取电影数据,数据预处理采用强大的Pandas库来完成,数据存储采用Mysql数据库。数据处理上,该系统有着自身独立的可手动或者自动完成的数据分析处理模块,并可将分析结果返回给用户。数据分析与可视化模块采用Django框架+Echarts插件展示,分析数据展现出了电影国家分布饼状图、电影评分分布直方图、电影票房TOP10电影名称直方图、猫眼电影上映年份直方图、猫眼电影类型分布直方图等数据。
系统充分融合了Python的数据处理和Web开发技术,对电影市场进行了大量数据收集、观察、分析和展示,为电影爱好者提供了很多实用的数据资源。本论文详细地介绍了该系统的设计方案和实现细节,并对系统做出详细的说明和分析。系统可以丰富电影爱好者的视野,也为数据分析业界提供有用的思路参考。
1 绪论
1.1 研究的背景和意义
电影艺术的历史始于19世纪后期,电影还只是个静态镜头纪录,没有动态效果。经历了多年的探索和跋涉,电影无论技术上还是艺术上都取得了长足进步。现当代的电影无论是在技术水平还是艺术成就方面都已站在了顶尖位置。中国电影起步时就被中国戏曲、说唱艺术有机融合,形成了独特的电影类型。但当时的丰泰照相馆首先进行拍摄尝试,仅属小本生意,不能算是一家电影机构。直到商务印书局“活动电影部”的出现,才算得上中国制片业的开端[1]。该时期除“商务”之外,出现的电影制片机构有美资“亚细亚影戏公司”、“幻仙”、“中国”、“上海”、“新亚”等,该期电影制片人的大多数都来自戏剧舞台,故其电影题材、内容多源自中国戏曲、文明戏。
1.2 国内外现状分析
1.2.1国内发展现状
国内市场扩张快速,中国已经成为世界第二大电影市场,也在不断地缩短和北美电影市场的差距,电影市场显现出蓬勃生机[2]。国内学者根据中国数据特有特点,开发了一系列针对中国数据的可视化算法和可视化工具,如ECharts、EasyCharts等。
1.2.2国外发展现状
随着互联网的普及,多元电影榜单文化生态正在形成,豆瓣网站TOP250电影榜单比较有代表性[6]。关于豆瓣TOP250电影榜单的相关研究已有不少,包括TOP250电影的国家、评分、时长的分析[7],豆瓣电影评论文本的情感分析及主题提取研究[8]以及爬虫技术对比[9]等。目前,国外有很多基于Movielens和IMDB 电影数据的可视化研究[10]。
1.2.3发展趋势
(1)技术融合拓展
①Spring Boot构建稳健后端
②Vue打造流畅前端交互体验
③AI深化数据分析洞察
(2)微交互提升用户体验
①页面滚动增强沉浸感
②表单输入实时反馈优化
③按钮交互增添趣味性
(3)不对称布局引领设计潮流
①打破传统,创造独特视觉焦点
②适应多样化设备与屏幕尺寸
③结合动态效果,增强交互性与活力
1.3 研究的主要内容
本文以猫眼的电影数据开展工作,设计数据抓取、ETL(Extract-Transform-Load)清洗、可视化等数据挖掘的实现方案。采用Requests库对猫眼进行数据采集,通过XPath/BeautifulSoup进行解析处理后提取数据表中需要的数据字段(包括电影的名称、票、演员等共计12个字段)自动对猫眼电影数据进行抽取;根据Python中的pandas包进行清洗、转换,清洗过程中删除多余的和空值数据,对脏数据进行规范化格式处理,建立如用户类型、所属电影类别等的mysql关系型数据集。
1.4 设计结构
(1)绪论。阐明研究背景、意义及国内外现状,明确研究目标与框架。
(2)核心技术介绍。解析爬虫、ECharts、Flask、Layui等核心技术原理及应用场景。
(3)系统分析。从数据、技术、经济三方面论证系统可行性,梳理业务流程与功能需求。
(4)系统设计。构建三层系统架构,设计用户鉴权、数据采集等核心模块,完成数据库E-R模型与表结构定义。
(5)系统实现。详述数据爬取、清洗及7类可视化功能实现过程,通过功能测试验证系统稳定性。
(6)总结与展望。总结研究成果,提出实时数据流处理、多源数据融合等优化方向。各章节逻辑紧密衔接,形成需求分析-技术选型-系统设计-开发实现-测试验证的完整研究闭环。
2 核心技术介绍
本章主要阐述了系统所用的相关技术,包括爬虫技术、Echarts可视化技术、Layui前端框架、Flask后端框架技术的介绍。
2.1 爬虫技术介绍
Requests是Python中一款常用的HTTP库,它基于URLib3开发,可以方便地向网络服务器发送请求和接收响应,支持多种HTTP协议,如GET、POST等。Requests还支持自定义HTTP头信息、SSL验证以及Cookies等功能,非常适合进行网络数据爬取和数据抓取[5]。
2.2 Echart可视化技术
Echarts是一套基于JavaScript的数据可视化库,它包含丰富的图表类型,复杂的交互手段以及动效,能够帮用户快速地展示和分析海量数据。Echarts适配各类平台及浏览器,同时它还具备强大的API和插件体系,能够支持二次开发[6]。
2.3 Flask框架介绍
Flask是一个建立在Werkzeug工具包和Jinja2模板引擎之上并具有轻量级特征的PythonWeb框架,它是一款微框架,设计简单,功能基本满足实际需求,可以借助丰富的扩展系统提升应用的功能,提倡明示优于隐含的理念,开发者能更好控制其结构。
2.4 Layui框架介绍
Layui简单实用,上手轻松,内置丰富组件,有友好的API,可以自由定制。Layui采用自行定义的模块规范搭建,将常用前端组件及模块功能单独打包为可加载使用、单独引入的模块,方便开发维护。并且Layui内置了很多常见的前端组件,比如form、layer、table、pagination、tree,这样能够满足大多数前端功能开发需求。UI设计方面,Layui内置了简洁优美的UI样式,在此基础上还可进行项目个性化定制。
2.5 本章小结
本章主要阐述了系统所用的相关技术,包括爬虫技术、Echarts可视化技术、Layui前端框架、Flask后端框架技术的介绍。
3 系统分析
系统分析主要是为了对系统的可行性、需求和功能进行的分析和评审而做的必要的内容。
3.1 可行性分析
3.1.1数据可行性分析
系统需要大量的猫眼电影数据并对其进行清洗、预处理、存储等。通过对网络数据源的分析,了解到猫眼电影网站的数据提供了完整的api接口,可以实现对所需数据的直接爬取,同时该网站数据结构较规范,便于爬取及预处理,故本系统的数据具有可行性。
3.1.2技术可行性分析
本系统选择Python作为语言主体,Requests库完成数据爬取、Pandas库完成数据清洗与预处理、Mysql数据库完成数据存储,flask框架和Echarts完成系统展示,这些技术均为成熟稳定、广泛采用的技术,具备较高的技术可行性。同时这些技术拥有较好的可扩展性和可维护性,满足系统后期的升级与维护需求。
3.1.3经济可行性分析
开发全部为我方自行开发,不需要额外外包费;其次Python及其各类库都为免费开源,不需要额外购买费用;最后flask框架以及Echarts等组件都提供了商业版和免费版供自由选用。
3.2 业务流程分析
业务流程分析,是对业务功能分析细化处理的过程,获得业务流程图,系统的架构主要分为两个模块:数据采集模块、数据分析可视化模块。其中数据采集模块主要功能是采集猫眼电影网站的电影数据、并对数据做清洗、预处理和存储;数据分析与可视化模块是对采集的电影数据做统计分析和可视化展示。具体的流程如图3.1所示。
图3.1 系统业务流程图
3.3 系统功能需求分析
该过程是分析系统的主要功能的操作,系统的功能需求做的是否详细合理,将会影响整个系统的进度和系统的功能实现情况,所以系统的需求分析是整个系统开发过程中最重要一个步骤。
3.3.1数据采集功能需求
信息获取要完成猫眼电影网站的爬虫获取结构,采用自定义Headers逃过反爬机制;借助Requests模块发送HTTP请求,采用XPath/BeautifulSoup来对返回结果进行处理,获取影片名称、票房、主演等信息。
3.3.2数据清洗功能需求
通过Pandas对数据清洗、缺失值处理、数据规整,最后存放到MySQL关系型数据库中,数据符合完整性和溯源性要求。数据可视化的分析处理需要具备多维度的交互。
3.3.3数据分析与可视化功能需求
统计功能必须具备多角度互动功能:登录程序设计LayUI表单验证与AJAX加密传送以确保用户账号安全;统计情况支持动态渲染表格进行翻页及关键字模糊查询;统计数据系统配合ECharts图表可视化多种统计图表,如饼图统计票房分类型占比情况,折线图体现各年份趋势变化,词云标注明星出演次数,饼状图体现电影评分情况,漏斗图展示不同季节上映情况,旭日图体现评分等级情况,各版块可进行参数值的选择筛选、数据同步刷新及自适应。
4 系统设计
4.1 系统总体设计
本可视化系统从架构上分为三层:表现层、业务逻辑层以及数据层。
图4.1 系统架构图
4.2 系统功能设计
4.2.1登录注册功能需求
对于系统的安全性的第一关,就是用户想要进入系统,必须通过登录窗口登录注册流程如图4.2所示。
4.2.2数据采集功能需求
数据采集模块主要是利用Python中的Requests库向猫眼电影网址发送请求并解析相应HTML页面获取电影数据,为了防止数据出现偏差和时效性的丧失,设置了自动化定时爬取功能。系统采集模块流程如图4.3所示。
图4.3 数据采集流程图
4.2.3数据分析和可视化功能需求
数据分析可视化模块。数据可视化模块是猫眼电影数据分析模块的核心,主要完成采集的电影数据的处理分析、数据分析结果的可视化展示等工作,方便对分析结果的理解应用,下面是分析展示部分的实现。
对电影类型数据进行分布统计分析,具体流程如下图4.4所示。
图4.4 数据分析与可视化流程图
4.3 系统数据库设计
设计流程:
概念模型构建:用实体 - 关系图描述数据间逻辑关系。
逻辑模型转换:将概念模型转化为关系模型。
物理模型实现:确定数据库参数配置、存储结构等。
4.3.1概念模型设计
用户(编号、用户名称、用户密码、性别、生日、昵称、手机号码、头像)。用户表实体属性图如图4.5所示。
电影表实体属性图如图4.6所示。
图4.6 电影表实体属性图
系统总体E-R图如图4.7所示。
图4.7 总体E-R图
4.3.2逻辑模型设计
将数据库概念设计模型细化为当前数据库管理系统所支持的逻辑数据模式……
数据表的描述如下所示。
(1)用户表(编号,昵称,密码)。
(2)电影表(编号,电影名,url,评分,类型,主演,上映时间,票房等)。
基于上述数据描述设计表结构如下。
(1)用户表结构如表4.1所示。
表4.1 user表结构
字段 |
数据类型 |
长度 |
主键/外键 |
备注 |
ID |
varchar |
30 |
主键 |
代理主键,自增 |
name |
name |
30 |
管理员名字,不可修改 |
|
password |
password |
30 |
管理员密码 |
(2)电影表结构如表4.2所示。
表4.2 电影表结构
字段 |
数据类型 |
长度 |
主键/外键 |
备注 |
Id |
bigint |
主键 |
主键 |
代理主键,自增 |
电影名 |
text |
0 |
||
url1 |
text |
0 |
||
评分 |
double |
0 |
||
类型 |
text |
0 |
||
主演 |
text |
0 |
||
上映时间 |
text |
0 |
||
text |
0 |
|||
电影id |
bigint |
0 |
||
国家时长 |
text |
0 |
||
评论数 |
bigint |
0 |
||
想看人数 |
bigint |
0 |
||
其他评分 |
double |
0 |
||
票房 |
bigint |
0 |
||
月份 |
text |
0 |
||
年份 |
text |
0 |
||
type1 |
text |
0 |
||
type2 |
text |
0 |
||
type3 |
text |
0 |
||
actor1 |
text |
0 |
||
actor2 |
text |
0 |
||
actor3 |
text |
0 |
||
year |
text |
0 |
||
month |
text |
0 |
||
day |
text |
0 |
||
country |
text |
0 |
||
length |
int |
0 |
4.4 本章小结
第4章中设计系统在3层体系架构框架基础上,利用表现层适应各个终端,业务逻辑层实现数据传输与处理,数据层利用MySQL持久化储存数据。设计了用户身份验证、自动数据抓取模块,以及分析模块的多维度可视分析模块,并给出了相应的流程图说明每一部分的逻辑流程。设计的数据库符合E-R模型,利用用户实体与电影实体关系设计了一种比较合理的表示数据关系的表结构,以减少存储数据的数量,方便数据的存储管理,从而保证系统的稳定性与拓展性。
5 系统实现与测试
5.1 系统实现
5.1.1 数据采集实现
1. 设置Headers
2. 发送请求并解析响应
3. 数据清洗和预处理
图 5.1 数据采集核心代码图
数据采集模块实现图如图5.2所示。
图 5.2 数据采集模块实现图
5.1.2 数据分析与可视化模块实现
(1)登录注册功能实现
本系统在登录注册中采用了LayUI的框架结构。用户在表单中输入用户名和密码信息之后,根据用户输入信息不同,在表单提交时通过AJAX向后端接口发出POST请求,并以JSON格式将用户名和密码信息发送至http://127.0.0.1:5000/loginByPassword接口,接口响应成功后用户登录到首页并弹出登录成功消息框,否则弹出登录失败提示。如图5.2登录注册页。
图 5.2 登录注册页面图
(2)数据概况功能实现
数据概况视图为LayUI的表格组件实现,通过GET请求访问http://127.0.0.1:5000/data,载入数据为电影数据表,使用table.render方法展示字段为电影名、豆瓣评分、电影类型、导演、主演、上映时间、票房等10个字段构成的表格,可实现表格分页显示以及工具栏扩展。
图 5.3 数据概况功能页面图
(3)可视化功能实现
票房占比分析(玫瑰图)
使用roseType为‘area’时,ECharts玫瑰图的图表类型显示面积。
图 5.4 票房占比页面图
票房榜单分析(词云)
结合前后台数据展现,用柱状图表显示出Top票房信息,用词云显示Top关键词信息,年份与Top参数来自/page4数据,柱状图设颜色颜色线性渐变,dataZoom交互组件在图的右侧滑动框显示出数据区域放大。
图 5.5 票房榜单词云图
票房变化趋势(折线图)
首先按照电影类型的判断通过/page3接口返回来该电影的电影票房收入:
图 5.6 票房变化趋势折线图
演员劳模统计(词云图)
通过动态词云展示演员参演作品数,由后端/paragraph2返回演员和演员参演作品数:
图 5.7 演员劳模统计词云图
评分等级分布(环形图)
饼图使用/page5获取的评分区间值的分布作为数据,以半径50%画环。
图 5.8 评分等级分布图
满意度统计(旭日图)
Page6-IMDb满意度分析,多层饼图——roseType:‘radius’半径玫瑰图,color表示颜色,因为只有8个满意度等级,故填充8种颜色:
图 5.9 满意度统计图
季节分布分析(漏斗图)
page7接口,漏斗图由季节从后往前排序。minSize:'30%'使得漏斗宽度最小;标签自动插入内容,并显示数值;gap:2;图例置于底部右侧,共五种主题颜色,表示五个季节:
图 5.10 季节分布分析图
5.2 系统测试
5.2.2 功能测试
(1)数据采集模块测试
表5.1 数据采集模块测试表
测试用例ID |
测试场景 |
输入数据 |
预期输出 |
Test Case 1 |
数据采集功能 |
检查是否能够成功爬取猫眼电影数据 |
爬取电影数据成功 |
- 数据清洗模块功能测试用例
表5.2 数据清洗模块测试表
测试用例ID |
测试场景 |
输入数据 |
预期输出 |
Test Case 2 |
数据清洗功能 |
检查是否正确去除重复数据 |
去除重复数据成功 |
Test Case 3 |
数据清洗功能 |
检查是否准确填充缺失值 |
缺失值填充成功 |
Test Case 4 |
数据预处理功能 |
检查是否正确进行数据类型转换 |
数据类型转换成功 |
- 数据分析与可视化模块测试用例
表5.3 数据分析与可视化模块测试表
测试用例ID |
测试场景 |
输入数据 |
预期输出 |
Test Case 1 |
猫眼电影榜单页面 |
检查榜单显示是否正常 |
显示评分最高的电影 |
Test Case 2 |
猫眼电影国家分布饼图页面 |
检查国家占比是否准确 |
显示电影制片国家或地区的占比情况 |
Test Case 3 |
猫眼电影评分分布柱状图页面 |
检查评分段数量分布是否准确 |
显示不同评分段的电影数量分布情况 |
Test Case 4 |
票房TOP10的电影名称柱状图页面 |
检查显示前10部电影名称是否准确 |
显示票房最多的前10部电影名称 |
Test Case 5 |
猫眼电影上映年份柱状图页面 |
检查上映年份数量分布是否准确 |
显示电影上映年份的数量分布情况 |
Test Case 6 |
猫眼电影类型分布柱状图页面 |
检查不同类型数量分布是否准确 |
显示不同电影类型的数量分布情况 |
通过以上测试用例,可以全面地验证系统的数据分析与展示模块的功能和性能,并根据测试结果进行必要的优化和改进。