豆瓣电影Top100类型分析
20年6月22日 · 关铭茵 2258 人阅读
摘要:本课题主要通过对豆瓣评价排名前100名的高分电影进行信息获取,并对数据进行处理和整合,整理出Top100电影所含类型中,各种类型对应的入围影片数量,并以直观、可视化的图表进行呈现。同时设置影片和类型双向的搜索功能,分析大众对于电影类型选择的偏好。所涉及模块有tkinter,pandas,matplotlib。
一、研究目标
近年来,人们愈发热衷于在观看完一部电影后对其进行评价,在选择电影进行观看时也习惯于首先查询其评分。一部电影的评分高低往往成为衡量它的质量和观赏性的指标,那么高分电影的共性在类型上有没有什么突出表现呢?
本课题希望通过爬虫,从豆瓣电影网页获取排名前100的影片数据,这些影片所涵盖的类型,以及每一种类型对应的电影数量。观察其中对应数量最多的类型,进而对备受大众青睐的电影在类型上的突出特征进行分析,并从近年来略显萧条的电影产业出发,对受大众欢迎的影视作品应具备哪些特征进行反思。
二、总体设计
1.程序模块图
2.GUI界面
三、程序模块详细设计
1.爬虫模块
(1)获取网页,并设置所需变量。
(2)在第一层网页中获取排名前100的影片名。
此处由于原网页中一个页面显示25部电影及信息,故此处运用for循环爬取4个页面。
(3)获取第一层网页中的目标链接。
此处由于目标链接重复,故先将连接存入列表,使用时再循环列表跳过重复项获取第二层网页。其中第二层网页对应每部影片的详情页。
(4)从第二层网页中获取每一部影片所对应的电影类型,并记录其数目。
如《加勒比海盗》包括三个类型,则此处记录数字“3”。
(5)复制影片名。
由于一部影片往往对应多个电影类型,故此处先对影片名进行相应的复制,如《加勒比海盗》包括三个类型,则储存影片名的列表中,“加勒比海盗”有三项。
(6)将数据存入csv文件。
csv文件中的数据储存形式如下图。
2.主程序
(1)数据处理。
从csv文件中读入数据data,并设置全局变量。
删除列名“类型”,再针对列名“片名”使用drop_duplicates()函数,从data中获取影片列表。
2.1. GUI界面
(1)初始页面顶部设置“类型统计直方图”以及“电影及类型查询”按钮,用于显示不同的信息。
(2)菜单栏设置“关于”和“退出”选项,在“关于”中用户可浏览到与查询功能相关的操作。
2.2. 类型统计直方图模块
(1)在类型统计直方图页面利用canvas绘制电影类型-数量直方图。
(3)该页面设置“退出”以及“查询”按钮。
点击“退出”按钮关闭该页面。
点击“查询”按钮,用户可通过对照从图表中所获取的有效类型信息,在查询页面输入感兴趣类型,获取符合条件的影片。
(为截图显示清晰,此处“电影查询”及“电影显示”窗口进行了位置调整,原窗口均处于屏幕正中位置。)
(4)类型-影片查询函数。
为方面查找,此处将每种类型及其对应影片储存在字典中,在后续输出时,由于影片名以列表格式存储,若直接输出影响观感,故将每个列表中的多个字符串合并为一个字符串输出。
错误提示设置:若类型输入框为空时,弹出“请输入电影类型”窗口。
2.3. 电影及类型查询模块
(1)影片展示页面,设置了翻页以及查询操作。
共四页,每一页显示25部影片的名称以及评分排名,主要方式为:首先获取页码,再从名称列表中获取指定位置的数据。
错误提示设置:当处于第一页(第四页)时,若点击上一页(下一页)按钮时,将弹窗显示“当前是第一页(最后一页)。”
此处查询为输入电影排名显示其类型,处理方式与类型-影片查询相似,同样是通过字符串的形式呈现。不同的是,此处显示电影名称时并非使用弹窗形式,而是在输入框下部直接显示。
(2)影片排名-类型查询函数。
错误提示设置:
当输入数字小于1或大于100时,弹窗显示“请输入有效排名”。
当查询输入框为空时,弹窗显示“请输入排名”。
四、数据可视化及结论
通过电影类型-电影数量直方图,可以清晰地观察到在豆瓣电影大众评价前一百的影片中,类型含有“剧情”一项的影片高达83部。下一层级的类型则有“冒险”、“喜剧”、“奇幻”、“爱情”等,题材不一。
由此我们可以初步判断,一部出色的电影无论是何种题材,往往离不开好的剧情,引人入胜的剧情能够引起观影者的讨论,而观影者的讨论又会相应地为这部电影提升热度,成为产生更多观影者的直接诱因,进而进入一个良性循环。因此当我们对于电影产业日渐萧条的现状进行思考时,也必须注意到其背后的剧本,甚至是编剧、制作方,究竟是编剧们写不出好剧本,还是好的故事没有被发现?是投资方做不到慧眼识珠,还是一心赚快钱拍“速食剧”?
说到这里,也不得不提及电影的制作,好故事、好剧情的呈现也必然不能离开用心的制作和拍摄,近年来其实也不乏好剧本被拍得“稀烂”的例子,此处不一一枚举。其实不仅仅是电影,同样的道理亦适用于电视剧、网剧甚至是综艺等等文化娱乐产品,去年爆火的网剧《陈情令》便是一个极好的范例,几近零宣发的突然放送,却凭借其精心制作以及大众的口口相传取得极佳的成绩和口碑。
五、亮点
在针对本次课题的程序设计中,主要亮点如下:
1. 在数据的爬取部分,查询第一层网页中的链接信息时使用了正则表达式,使用更为简洁的代码实现目标操作。
2. 同样在爬取部分,由于数据的重复,为避免获取第二层页面信息这步操作的重复,选择将链接全部获取后,再有目的地打开链接-获取信息,以跳过重复项。
3. 数据可视化部分,制作直方图时使用多种颜色,完成对直方图的美化以及各不同类型之间的区分。并且标注了每个类型的y值,即每种类型对应的电影数量,使数据更为直观。
4. 设置了电影类型和电影数量的双向查询,并且两种查询设置在各自对应的页面,用户可对照输入相应值。
六、反思
1. 爬取网页数据运用了大量的for循环语句,导致程序运行较慢,暂时没有摸索到效的解决方案。
2. 查询模块的错误提示还可以再改良,比如类型输入不完整或有错别字等。
3. 在类型-电影名称查询中,仅能输入一种类型,太过局限,无法做到选择多个类型进行筛选。
Python3Turtle