一千个读者眼中有一千个哈姆雷特,
看电影也是一种艺术鉴赏活动,
不同的观影人有不同的欣赏偏好。
所以大众的平均电影评分未必准确,
尤其对于品味独特的人,
很难在 x x 高分电影列表上找到自己喜欢的。
自己深受其苦,
喜欢看老电影,
但又不想看那些类似于“四大名著”,
总是盘踞在高分排行榜,
又一成不变的经典电影。
偶然间翻到了“烂番茄”,
它奇特的评分系统似乎能拯救自己的电影清单。
“烂番茄”网站建立于1998年,由美国加州大学伯克利分校的三位在校生创建。
随着影响力的日渐增加,“烂番茄”甚至能左右电影票房和电视收视率。
“烂番茄”已经成为新一代电影消费者和影迷的首选参考地。
先说“烂番茄”最重要的评分指标:百分比指数
很多人误以为它类似于一般电影网站的评分,
实际上它只代表新鲜度,
是专业影评人对该电影正面评价的百分比,
如果正面评价多,可能是大于60%,就是“新鲜”的;
如果正面评价少,可能是低于60%,就是“腐烂”的。
而“烂番茄”的 Average Rating 才是类似于一般电影网站的平均分。
这种独树一帜的新鲜度评分避免了绝对评分的尴尬。
自己并不很爱电影,
却喜欢年代感十足的老片,
比如 Lovers and Lollipops (1956),The 39 Steps (1935),
它们在一般的电影网站中得分一般,
而“烂番茄”给的新鲜度却很高,百分之九十多,
很符合个人口味。
下面以“烂番茄”排名前100的电影为例,
进行数据进行分析,
也许会有不错的收获~
(top 100 movies of all time,all genres)
“烂番茄”有官方API,但是不想麻烦申请key,所以自己爬取数据。
从上面的页面爬取top 100电影信息。
代码如下:
# 数据分析包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 爬虫包
import requests
from bs4 import BeautifulSoup
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
然后请求页面,构建BeautifulSoup对象:
url_top_100 = 'https://www.rottentomatoes.com/top/bestofrt/'
prefix = 'https://www.rottentomatoes.com/'
res = requests.get(url_top_100)
soup = BeautifulSoup(res.content, 'lxml')
对soup按照html结构进行拆解,获取需要的信息:
table = soup.find('div', class_='panel-body content_body allow-overflow').find('table')
table
<table class="table">
<thead>
<tr>
<th>Rankth>
<th><span class="hidden-xs">Ratingspan><span class="visible-xs">Tomatometerspan>th>
<th>Titleth>
<th class="right hidden-xs">No. of Reviewsth>
tr>
thead>
……
trs = table.find_all('tr')
trs
[<tr>
<th>Rankth>
<th><span class="hidden-xs">Ratingspan><span class="visible-xs">Tomatometerspan>th>
<th>Titleth>
<th class="right hidden-xs">No. of Reviewsth>
tr>,
……
将每行电影信息以字典的形式储存到列表movie_list
中:
movie_list = []
for i, tr in enumerate(trs[1:]):
tmeter_score = int(tr.find(class_='tMeterScore').text.strip()[:-1])
title = tr.find(class_='unstyled articleLink').text.strip()
url = prefix + tr.find(class_='unstyled articleLink').get('href').strip()
no_of_reviews = int(tr.find(class_='right hidden-xs').text.strip())
movie_list.append({'rank': i+1,
'tmeter_score': tmeter_score,
'title': title,
'url': url,
'no_of_reviews': no_of_reviews})
根据movie_list
构建pd.DataFrame
对象:
df = pd.DataFrame(movie_list, columns=['rank','tmeter_score','title','url','no_of_reviews'])
因为希望获取有“年代感”的电影,
所以要将名字中的年份信息提取出来,单独成列,
此处可感受到pandas
的厉害之处,
一行代码搞定:提取年份然后赋值:
df['year'] = df['title'].str.slice(-5,-1).astype(int)
plt.figure(figsize=(12,6))
plt.scatter(x=df['year'], y=df['tmeter_score'],alpha=0.4)
plt.xlabel('Year')
plt.ylabel('Tomatometer Score')
plt.xticks(np.arange(1920, 2020, step=3), rotation=30)
plt.axvline(x=1990, linestyle='dashed');
电影的新旧是相对的,这里以83年以前的为“老电影”。
查看一下83年以前top 100的电影数量:
df[df.year < 1983].shape
(60, 6)
查看83年以前top 100的电影名称:
一些是耳熟能详的,剩下的不熟悉的电影中,至少一部分可以更新到自己的待看列表中。
除了更新了自己的电影清单外,还得到了一些有价值的结论:
1)top 100的电影新鲜度都很高,最低为91%
2)top 100的电影中,“老电影”占大多数,比例高达60%,而且新鲜度都在96%及以上,平均新鲜度为98.9%,质量十分稳定;
3)“新电影”即83年以后的电影,新鲜度从91%到100%,平均新鲜度96%,认可度也很高,但较“老电影”稍逊且只占40%。
所以,
经典电影并不会因为年代久远而褪色,反而会历久弥新;
不管是文学作品,还是影视作品,
经典之所以为经典,
是因为饱含着人类的丰富情感,有真善美的表达,有触动人心的部分;
电影技术越来越发达的今天,
也许太多声光、特效、大场面的加入,
弱化了内容的表达;
相比之下,“老电影”因为缺乏技术手段而注重内容本身,
让人感觉更真诚,更体现人性。
进一步,
不光是五光十色的电影,
众多的传媒介质,真人秀、网综、微博、twitter、公众号、视频网站、交友网站、直播平台等,
也都在分散个人的注意力,
唯有阅读经典,欣赏经典,
才可以让自己不那么浮躁。