在之前,我们已经用通过爬虫获取了豆瓣华语电影共33133部电影的数据,具体爬虫介绍请见之前的博文,爬虫实战(一)利用scrapy爬取豆瓣华语电影。本文对爬虫过程进行简要概述后,对这部分数据进行分析。
1. 前言
随着生活的水平提高,人们开始了对精神生活的追求,电影已经成为我们生活中必不可少的一项娱乐活动。近年来,中国电影产业发展迅速,华语电影数量和票房也频频突破新高。而一个行业的发展,不仅需要数量,还要质量。那华语电影近些年整体的质量如何呢?本文通过对豆瓣华语电影数据进行爬虫和分析,带大家了解华语电影这些年来的产量质量趋势、影片类型分布,以及哪些导演或演员是好片或烂片专业户。
2. 数据获取
在分析豆瓣网页结构后,使用python的Scrapy框架爬取了豆瓣华语电影,即中国大陆、香港、台湾地区总共33133部,并将数据存储在本地的MongoDB数据库中。对于每部电影,收集以下12个字段:
- id: 豆瓣id
- title: 电影名称
- year: 上映年份
- region: 制片地区
- language: 语言
- director: 导演
- type: 类型
- actor: 主演
- date: 上映日期
- runtime: 片长
- rate: 评分
- rating_num: 参与评分人数
具体示例如下:
3. 数据清洗
在进入分析之前,需要对获取的数据进行清洗和处理。首先,使用pymongo模块将数据库中的数据导入,接着使用pandas库进行处理。
3.1 缺失值处理
通过打印每一列的空值统计,可以看到部分列都存在空值。之前在数据爬取的过程中,发现一般如果电影是在院线上映的且年代不是特别久远的,所有的信息都很完整。如果出现导演、演员、上映日期等的一些列为空的,大部分是网络电影或者是没有上映的。所以这里将在演员、导演、语言、类型、上映时间这5列中任一列出现空值的数据都做删除处理。另外对于年份一列有缺失的,采用上映日期的年份进行填充。
3.2 数据格式处理
为了后续分析方便,将部分列的数据格式进行转换,如将评分和评分人数这两列由string类型分别转为float类型和int类型;将语言一列list中的"/“分割改为”,"分割等。
3.3 增加辅助列
通过观察数据发现,如果一部电影是多个地区合作制作的,那么地区这一列的list中就有多个地区的元素。以这种展现形式,不便于后续以地区为维度进行分析。因本文主要分析华语地区,即中国大陆、香港、台湾,于是增加三列辅助列,属于该地区则标记为1,否则为0。如果某部电影的制作地区同时出现中国大陆、香港、台湾,则这三列辅助列都标记为1,表示同时属于这三个地区。对电影类型一列,也做类似的处理。
3.4 数据筛选
在爬取的电影中,可以看到有些电影的影片类型是综艺节目、脱口秀、晚会等,另外有些电影有上映日期但未上映的。因此,对这部分数据进行剔除,只保留豆瓣电影筛选页面显示的22个分类以及已经上映的电影数