基于Python的影视数据智能分析系统开发

在这里插入图片描述

1. 前言

数据分析与可视化是当今数据分析的发展方向,大数据时代,数据资源具有海量特征,数据分析和可视化主要通过Python数据分析来实现。

基于Python的数据分析可视化和技术实现是目前Python数据分析的主要目的,Python可以为数据分析可视化提供思路,在体现数据价值方面发挥着重要作用。因此,在研究数据分析、可视化的过程中,我们可以看到Python具有重要的应用价值。

本文具有影视数据智能分析系统的简单雏形,以不同流媒体电影数据为背景,通过调研、分析数据, 完成数据预处理、数据分析和数据可视化等操作,掌握相关的智能数据处理与智能系统开发的知识,培养智能信息系统项目开发过程中的分析、设计和工程文档编写能力,提高工程应用能力和综合分析、解决实际问题的能力。

由于文章篇幅的限制,这里只展示了部分代码。完整的设计说明书,任务书以及代码已经上传到主页资源部分,点击下载。

2.设计目的及任务描述

影视数据分析应用统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。影视数据分析可帮助人们做出观看影视的选择及投入更合适的影视,尤其对视频管理平台有很好的帮助。影视数据分析是建立在数基础,20世纪早期就已确立,但直到计算机的出现才使得实际操作成为可能,并使得数据分析得以推广。同时,在数据获取、处理和分析过程中考虑数据安全、技术经济、工程伦理、行业规范等要素。

本设计内容涉及的数据一部分来自Reelgood.com网站,其中包括四种流媒体平台上可用电影的综合列表;另一部分来自IMDB数据集。要求应用pands对下列问题进行数据分析:

  • 你可以在哪个流媒体平台上找到这部电影?
  • 在某个国家/地区/IMDB制作的电影的平均IMDb收视率?
  • 每个目标年龄段所感兴趣的电影,以及他们所感兴趣的流媒体应用程序。
  • 电影的发行年份以及数量。
  • 电影和导演的受欢迎程度分析。

通过该课程设计的实践训练,使学生掌握相关的智能数据处理与智能系统开发的知识,培养智能信息系统项目开发过程中的分析、设计和工程文档编写能力,提高工程应用能力和综合分析、解决实际问题的能力。

3. 总体设计

本系统主要分为四个部分,分别为爬虫抓取、数据处理分析可视化、GUI界面展示、启动运行,分别对应getData.pypyec.pyGUI.pymain.py四个文件。并且包含data文件夹用于存储系统所需或产生的数据文件。

系统结构如图所示:

在这里插入图片描述

4.系统实现

4.1 爬虫抓取

getData.py该文件主要功能是抓取和读取电影数据,共包含8个函数,代码如下:

recently() 这一函数主要是抓取最近上映票房排名前十名的电影信息。

def recently():url = "https://ys.endata.cn/enlib-api/api/movie/getMovie_BoxOffice_Day_Chart.do"header = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',"Cookie": 'JSESSIONID=b2685bfa-aa4f-4359-ae96-57befaf8d1ec; route=4e39643a15b7003e568cadd862137cf3; Hm_lvt_82932fc4fc199c08b9a83c4c9d02af11=1649834963,1649852471,1649859039,1649900037; Hm_lpvt_82932fc4fc199c08b9a83c4c9d02af11=1649917933'}post_BoxOffice_Day_data = {'r': 0.7572955414768414,'datetype': 'Day','date': datetime.now().strftime('%Y-%m-%d'),'sdate': datetime.now().strftime('%Y-%m-%d'),'edate': datetime.now().strftime('%Y-%m-%d'),'bserviceprice': 1}

以上代码块是运行爬虫前的准备工作,包含抓取的网址url、爬虫所需的请求头、请求时需要附带的数据。

    res = requests.post(url, headers=header, data=post_BoxOffice_Day_data).textjson_data = json.loads(res)data0 = json_data['data']['table0']data1 = json_data['data']['table1']

以上代码块是运行爬虫并将其解析为json形式,方便后面对数据进行取出。

movie_rank = []movie_details_MovieName = []movie_details_BoxOffice = []movie_details_ShowCount = []movie_details_AudienceCount = []movie_details_Attendance = []movie_percent_BoxOfficePercent = []movie_percent_ShowCountPercent = []movie_percent_AudienceCountPercent = []

以上代码是部分定义的所需的数据字段。

    for i in range(10):movie_rank.append(data0[i]['Irank'])movie_details_MovieName.append(data0[i]['MovieName'])movie_details_BoxOffice.append(data0[i]['BoxOffice'])movie_details_ShowCount.append(data0[i]['ShowCount'])movie_details_AudienceCount.append(data0[i]['AudienceCount'])movie_details_Attendance.append(data0[i]['Attendance'])

以上是从json数据中取数据的过程。

showing() 这一函数主要抓取最近正在上映的所有电影的基本信息。
history() 这一函数主要是读取历史电影数据并返回列表格式


def history():data = pd.read_csv("data/moviesBoxOffice.csv", encoding='gbk')data = np.array(data[:100]).tolist()return data

利用pandas库读取csv文件,numpy对DataFrame形式数据转换为list格式的过程。

predict_data() 这一函数主要是读取历史电影数据进行建模,建模完成后,读取需要预测的在映电影数据,对其进行票房预测并返回。
hotMovies() 这一函数主要是抓取当前在映票房前五的电影七天内的票房数据。

special() 这一函数主要抓取的是当前电影市场特效影厅种类及其票房占比的数据。
champion_year() 这一函数主要抓取的是近十年来中国电影市场每年票房冠军影片的票房数据,还抓取了近十年国内电影市场的票房和上映影片数量等相关数据。

Tablets() 这一函数主要是对近期在映电影的排片数据进行抓取并返回。

4.2 GUI界面运行

GUI.py该文件主要是为系统构建GUI界面,共有15个函数,具体代码如下:
create_tree_showing该函数主要是为正在上映的电影数据创建数据表格。代码块先是确定数据表头,然后创建表格并设置其父窗体,表格一次性显示数据行数,是否显示表头等参数,然后分别设置表格数据列及每列的宽度。代码块设置表头文本信息,再设置该信息表的垂直滚动条。

create_tree_tablets该函数主要是为在映电影的排片数据创建数据表格。
create_tree_history该函数主要是为历史电影数据创建数据表格。

create_tree_predict该函数主要是为在映电影票房预测结果数据创建数据表格。
clear_tree该函数主要功能是在切换展示数据表格时,对已展示表格数据进行清除。
该函数有一个tree参数,首先对tree进行销毁,再对该表格的垂直滚动条进行销毁。

showing该函数对应按钮’在映电影’,用于实现获取在映电影数据功能。
history该函数对应按钮’历史电影’,用于实现获取历史电影数据功能。

predict该函数对应按钮’在映电影票房预测’,用于实现对在映电影票房预测并展示。
tablets该函数对应按钮’拍片分析’,用于实现获取排片分析数据功能。

center_window该函数是创建整个GUI窗体的函数。
clicking该函数对应’在映电影分析’按钮,用于跳转在映电影分析网页。先调用getData.py下的recently函数获取在映电影数据,再调用pyec.py文件下的Showing函数进行统计图表制作,最后跳转到数据图表网页。

clicked该函数对应’历史数据分析’按钮,用于跳转电影票房分析网页。
industry该函数对应’数据大盘’按钮,用于跳转数据大盘网页。

ui_process该函数主要是对GUI窗体控件等进行布局。创建根窗体,设置GUI的名称,大小,整体高亮颜色,对内部子窗体进行了初始化并且在子窗体的左上角添加了一张logo图片。在子窗体设置了各个功能对应的按钮。设置了整体窗体的布局,以及各个子窗体控件的设置,设置了窗体列参数及运行了整个窗体。

4.3 启动运行

main.py该函数是整个系统的GUI入口,调用并运行了GUI。

from GUI import uiobif __name__ == '__main__':ui = uiob()ui.ui_process()

5.可视化设计

pyec.py该文件主要是对getData.py文件获取到的数据进行可视化操作,共有3个函数,代码功能详解如下:

History()该函数主要是对历史电影数据进行可视化,具体代码如下:

csv_file = 'data/moviesBoxOffice.csv'  # 设置csv文件的路径data = pd.read_csv(csv_file, encoding='gbk')  # 使用pandas读取csv文件中的数据data_type = data['影片主分类'].value_counts()  # 统计影片主分类的各类别数量data_BoxOffice = data['总票房(万)'][:10]  # 获取前10部电影的总票房数据

该代码块主要是读取历史电影票房数据为画图做前期准备工作。

  # 创建柱状图a,展示票房TOP1000类型统计a = (Bar(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.MACARONS, bg_color='white'))  # 设置图表的基本参数.add_xaxis(list(data_type.index))  # 设置x轴数据.add_yaxis("类型", list(data_type))  # 设置y轴数据.set_global_opts(title_opts=opts.TitleOpts(title="票房TOP1000类型统计"),  # 设置图表标题# datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],  # 设置数据缩放选项))# 创建柱状图b,展示票房TOP10总票房统计b = (Bar(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.LIGHT))  # 设置图表的基本参数.add_xaxis(list(data['影片名称'][:10]))  # 设置x轴数据.add_yaxis("票房", list(data_BoxOffice))  # 设置y轴数据.set_global_opts(title_opts=opts.TitleOpts(title="票房TOP10总票房统计"),  # 设置图表标题# datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],  # 设置数据缩放选项xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": 20})  # 设置x轴标签旋转角度))# 创建折线图c,展示票房TOP10各类票房统计c = (Line(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.LIGHT))  # 设置图表的基本参数.add_xaxis(list(data['影片名称'][:10]))  # 设置x轴数据.add_yaxis("总票房(万)", list(data['总票房(万)'][:10]), is_smooth=True)  # 设置y轴数据并进行平滑处理.add_yaxis("首日票房(万)", list(data['首日票房(万)'][:10]), is_smooth=True)  # 设置y轴数据并进行平滑处理.add_yaxis("首周票房(万)", list(data['首周票房(万)'][:10]), is_smooth=True)  # 设置y轴数据并进行平滑处理.add_yaxis("首周末票房(万)", list(data['首周末票房(万)'][:10]), is_smooth=True)  # 设置y轴数据并进行平滑处理.add_yaxis("点映票房(万)", list(data['点映票房(万)'][:10]), is_smooth=True)  # 设置y轴数据并进行平滑处理.set_series_opts(label_opts=opts.LabelOpts(is_show=True),  # 设置数据标签显示选项linestyle_opts=opts.LineStyleOpts(width=3))  # 设置线条样式.set_global_opts(title_opts=opts.TitleOpts(title="票房TOP10各类票房统计", pos_left='top'),  # 设置图表标题及位置# datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],  # 设置数据缩放选项xaxis_opts=opts.AxisOpts(name="影片名称", axislabel_opts={"rotate": 20}),  # 设置x轴标签及标签旋转角度yaxis_opts=opts.AxisOpts(name="票房(万)")  # 设置y轴标签))# 由于文章篇幅的问题,部分代码省略

以上代码主要是针对各种数据指标进行数据可视化,最后将其显示到网页供程序调用。两个柱形图分别对票房Top1000的电影类型和票房Top10的总票房进行统计。五个折线图分别是对票房Top10电影的各类票房、场次人次、票价、舆情、口碑五个方面的统计。最后两个图为电影名称词云图和电影分类饼图。

在这里插入图片描述

Showing()该函数主要是对正在上映的电影进行数据分析,包含在映电影的票房、场次、人次、上座率五个柱形统计图,影片票房占比、场次占比、人次占比三个饼状统计图,影片地域分布票房、场次、人次三个层叠柱形图。
在这里插入图片描述

Industry()该函数主要是对近期电影行业及电影行业历史数据的可视化,主要包括热门电影票房趋势折线统计图,特效厅票房占比分布饼状图。

在这里插入图片描述

6.总结

在这里插入图片描述
通过该课程设计的实践训练,使学生掌握相关的智能数据处理与智能系统开发的知识,培养智能信息系统项目开发过程中的分析、设计和工程文档编写能力,提高工程应用能力和综合分析、解决实际问题的能力。

下面是该系统的主要功能及技术指标:

数据获取和预处理:

  • 使用pandas读取数据文件;
  • 拆分不同的属性信息,形成列表、元组、字典或集合;
  • 删除空列或行;
  • 观察数据并清洗错误数据;
    -使用pandas对数据整理,方便之后的分析和可视化。

数据分析:

  • 使用numpy和pandas对数据预处理后的数据进行分析,设计七种以上的数据分析场景。

数据可视化:

  • 利用Matplotlib和seaborn分别对每种分析场景可视化。

数据涉及的数据项:-ID -Title -Year -Age -IMDb -Rotten Tomatoes -Netflix -Hulu -Prime Video -Disney+ -Type -Directors -Genres -Country -Language -Runtime

使用到的库包括:numpy、pandas、matplotlib、seaborn等。开发工具选用jupyter notebook或python IDE等Python开发工具。

我是大橙子,下期见!

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

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

相关文章

从零学Java Set集合

Java Set集合 文章目录 Java Set集合1 Set 集合2 Set实现类2.1 HashSet【重点】2.2 LinkedHashSet2.3 TreeSet 3 Comparator 自定义比较器 1 Set 集合 特点:无序无下标、元素不可重复。 方法:全部继承自Collection中的方法。 常用方法: publ…

(超详细)4-YOLOV5改进-添加ShuffleAttention注意力机制

1、在yolov5/models下面新建一个SE.py文件,在里面放入下面的代码 代码如下: import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def __…

第一个动态结构:链表

王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人 今天我们一起学习线性表中的第二种数据结构:链表,也是真正意义上的第一个动态数据结构。今天的内容分为3个部分:认识链表&#xff0…

找不到msvcr120.dll怎样修复,分享4种修复方法

msvcr120.dll是Microsoft Visual C 2012 Redistributable Package的一个关键组件,负责提供C运行时库。许多应用程序在运行时都需要依赖这个库文件。然而,在日常使用过程中,不少用户会遇到msvcr120.dll丢失的问题,导致程序无法正常…

2024,AI Agent的密集爆发之年

最近这几天,相信已经有很多朋友看到了关于GPT Store、Vision Pro、Rabbit R1、AI pin、英伟达ACE(Avatar Cloud Engine)、钉钉个人助理、荣耀MagicOS 8.0等各类和AI技术深度结合的AI Agent或者承载AI Agent的平台。有些是和个人应用相关&…

Macos下修改Python版本

MacOS下修改Python版本 安装 查看本机已安装的Python版本:where python3 ~ where python3 /usr/bin/python3 /usr/local/bin/python3 /Library/Frameworks/Python.framework/Versions/3.12/bin/python3如果没有你想要的版本,去python官网下载安装包。…

软件安全测评需要关注哪些?湖南CMA、CNAS软件测试公司推荐

在当今信息化的社会,软件安全问题日益凸显,给个人和企业的数据安全造成了极大的威胁。为了保障软件的安全性,软件安全测评应运而生。 软件安全测评是通过对软件系统的评估,发现其中存在的安全漏洞和风险,为软件的开发…

数据结构栈、队列、链表、散列表

栈(stack) 栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶(top)。它是后进先出(LIFO)的。对栈的基本操作只有 push&#xf…

【PyQt小知识 - 7】:QLineEdit设置输入的文本以圆点或星号等方式显示

文章目录 setEchoMode setEchoMode 在PyQt中,QLineEdit是一种用于接收用户输入的小部件(widget)。setEchoMode是QLineEdit类中的一个方法,可以用于设置文本输入框中的文本显示模式。它接受一个参数来指定要使用的模式。 setEcho…

Docker启动报错:No chain/target/match by that name 处理

一、问题描述 某次OS升级重启后,发现docker redis实例无法启动,报错如下: Error response from daemon: driver failed programming external connectivity on endpoint vpm.redis.2 (f4b70fef65000bcacb574ee59e65d9b7a25f2abfa5dec0be9b74…

SpringBoot中使用SpringRetry实现重试机制(重试调用第三方API)

场景 SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文): SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)_fastjson 发送http请求 接收实体,出现日期转换异常-CSDN博客 在调用…

Fluids —— Whitewater (SOP)

目录 Whitewater Lifecycle Workflow Whitewater source Deformation sources Visualizing whitewater Whitewater solver Wind Foam erosion Repellants Whitewater postprocess 基于SOP的白水是对SOP FLIP工作流的增强;该系统与规模无关,无需…