帮你选电影—对豆瓣电影Top250榜单的数据分析
业余打发时间看电影是个不错的选择,但是如果看了一部无聊糟心的电影就得不偿失了,所以一些电影方面的榜单就出现了,可以为这些选择困难患者提供一个不错的指南,那些是经典是值得看的,而那些电影不值得你浪费一两个小时的时间。在电影榜单方面,国外最出名的自然是 IMDB Top250,这个榜单收集了全球观众评选出的最好看的250部电影,国内最知名的榜单应该是 豆瓣电影Top250, 主要反映了国内观众的观影品味(虽然有人可能会说豆瓣的观影品味可能偏文艺一些)。对于这两个榜单,虽然对部分电影的排名多少有些争议,但是总体来说大家觉得对着这个榜单看电影,碰到烂片的概率还是较小的。
看到这些榜单,我们可能会有一些问题。比如,某个我最喜欢的导演有多少部电影进入榜单了?榜单中哪一年的电影最多?哪些电影的口碑较为统一,而哪些电影的口碑非常两极分化?为回答这些问题,我们需要对榜单中的信息进行一些搜集与整理。为了搜集这些信息,我使用爬虫爬取了豆瓣Top250榜单,并进行了一些探索性分析,这些分析可能可以回答你对榜单的某些疑问。
一、数据描述
我使用Scrapy爬取了豆瓣Top250榜单,针对每个电影,收集了以下十项指标,其中前七项是直接抓取获得,后三项则是间接计算得到:
- movie_name:进入榜单的电影的名称;
- rank:该电影在榜单中的排名;
- director:该电影的导演;
- year:电影上映的年份;
- time:电影的时长;
- score:电影的豆瓣评分;
- score_num:参与评分的总人数,侧面反映了电影的大众与流行程度;
- stars:平均星级,使用豆瓣电影上给出的各个星级评分所占的比例,计算加权平均的星级,可以判断电影的总体评分情况;
- total_star:总星级,综合了电影的星级与评分人数两年指标,为平均星级与参与评分总人数的乘积;
- std:星级标准差,使用计算出来的平均星级,可以计算所有星级评分的标准差,这反映了这部电影评分的一致性,如果标准差较大,则反映这部电影的评分比较两极分化
搜集到的所有数据放在 这个网址,你可以每一列进行排序,比如查看提名最高或最低的电影;也可以通过右上角的输入框进行筛选,比如想要搜诺兰的所有电影,只需要在输入框输入“克里斯托弗·诺兰”,你就可以看到榜单中诺兰的所有电影数据。
二、初步探索性分析
我使用jupyter notebook分析以上数据,所有的分析代码见 这个网址 。首先,我们需要导入一些分析必需的库,做一些初始化设置:
# Import the required modules for the following codes
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
import seaborn as sns
import pandas as pd
sns.set(style="white",color_codes=True)
%matplotlib inline
plt.rcParams['figure.figsize'] = (15,9.27)
plt.rcParams['font.size'] = 10.0
plt.rcParams['xtick.labelsize'] = 'large'
plt.rcParams['ytick.labelsize'] = 'large'
然后,我们导入数据,看看数据包含哪些信息:
df = pd.read_excel('output.xls',encoding="UTF-8")
df.head()