用“5饼2鱼”分析2019年北美电影票房市场


之前笔者简单写过如何爬取“2019年北美电影票房市场每日数据”的文章,并做了一个简单扼要的分析。这次笔者更进一步,用2张表和5幅图来更详细地分析一下2019年的北美电影市场。

题目中取名“5饼2鱼”,是来自于圣经中一个故事,故事讲的是耶稣如何用5个饼和2条鱼来喂饱5000人的神迹奇事。我们平常做数据分析,面对大量的数据往往不知该如何下手,要想把这些数据分析好,不仅要求我们要掌握一定的算法,同时最好还能对所分析的领域/市场有一个清晰的认识,甚至是深入的了解。当我们有了一个较为清楚的认识之后,我们就能对这些数据进行相应的处理,而且只需要用一些很简单的手段,我们就能从数据当中得到想要的关键信息。本文取名“5饼2鱼”意思也在于此,只要我们了解数据,不需要太复杂的手段,即使用很简单的方法也能从繁杂的数据中分析出有用的信息,就像耶稣仅仅用“5饼2鱼”就能解决5000人的吃饭问题一样。

本文中“5饼”是指5幅图,“2鱼”指2张数据表。这5幅图是从2张表中得出的,那么首先来看一下这两张原始的数据表。

图1. 北美历年电影总票房数据部分截图

图2. 2019年全年在映电影票房数据部分截图

这两张图的网页地址分别是https://www.boxofficemojo.com/year/?grossesOption=calendarGrosseshttps://www.boxofficemojo.com/year/2019/?ref_=bo_yl_table_2,在这里要说明的一点是,图2的“在映电影”一词是指一部电影无论是哪年上映的,其票房是严格按照年份划分的,比如一部电影是在2018年12月30日上映,在2019年1月31日下映,共上映33天,因为我们要统计2019年整年的票房,所以这部电影在2018年12月30至31日这两天的票房算在2018年中,而2019年1月1日到31日这31天的票房划到2019年的票房当中,不能因为这部电影是在2018年上映就把其33天所有票房都归到2018年,而是严格区分的。同理,一部电影若在2019年12月30日上映,计算方法相同。

下面,我们把这两张原始数据表直接复制粘贴到一个Excel文件中,文件名为data.xlsx,每张表放在单独的一个sheet中,sheet的名字分别是“overview”和“2019”,分别对应图1和图2,之后会用到这两张sheet。当然这里可以写一个爬虫来完成(方法可参考我上一篇文章),但因为数据过少,直接复制粘贴才是王道。下面我们从这2个鱼(表)来制作5个饼(图),并做适当分析。首先导入相关的包,并做适当设置。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
import seaborn as sns
file = r'C:\Users\BoxOffice\2019票房\2019好莱坞总结\data.xlsx'  # 此路径包含中文,在我电脑上没问题,如有问题请替换成英文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文,防止乱码

把上面的两个sheet中的数据用pandas读取一下,分别命名成两个变量,一个叫table_overview,另一个是table_2019。

table_overview = pd.read_excel(file, sheet_name='overview')
table_2019 = pd.read_excel(file, sheet_name='2019')

一、饼一——过去10年的年度总票房分析

(1)代码

x = table_overview['Year'][:10]
y1= table_overview['Total Gross'][:10]/100000000
y2 = table_overview['Releases'][:10]
fig = plt.figure(figsize=(12,8))
plt.title('图3. 过去10年的年度总票房和每年上映电影数量对比', fontdict={'fontsize':20}, pad=50)
ax1 = fig.gca()
plt.tick_params(labelsize=16, axis='both')
ax1.spines['top'].set_visible(False)
ax1.spines['bottom'].set_visible(False)
ax1.set_ylim([80,125])
ax1.set_ylabel('票房/亿美元',fontdict={'size':16})
plot1 = ax1.bar(x, y1, color=['#ff7f0e']+['#1f77b4']*9, label='每年电影票房') # 这两个颜色选了好久 
ax1.set_xlabel('年份',fontdict={'size':16})
ax1.set_xticks(list(range(2010,2020)))
ax2 = ax1.twinx()
ax2.tick_params(axis='y', labelsize=16)
ax2.set_ylim([600, 1000])
ax2.set_ylabel('每年上映电影数量',fontdict={'size':16})
plot2 = ax2.plot(x, y2, color='red', marker='o', label='每年电影数量')
fig.legend(loc='upper left', bbox_to_anchor=(0.15, 0.8), fontsize=14)

(2)作图

(3)分析

电影市场每年都在发展,但今年的北美影市并没有比前几年有什么大的进步,无论是数量上还是总票房上,较去年都出现了下降。而且从目前的形势来看,北美市场似乎有饱和的趋势,拿去年2019年和十年前的2010年相比,票房增幅不大,大约为5%,而电影数量增加了超过200部,增幅超过30%,这说明很多低票房电影上映,而根据过往经验,这些电影应该以独立制作的低成本电影为主。

二、饼二——2019年发行商的票房分析

(1)代码

data_by_distributor = table_2019['Gross'].groupby(table_2019['Distributor']).agg(['sum','count'])
data_top10 = data_by_distributor.sort_values(by='sum', ascending=False)[:10].copy()
data_others = data_by_distributor.sort_values(by='sum', ascending=False)[10:].copy()
data_top10.loc['Others'] = [data_others.sum()['sum'], data_others.sum()['count']]
gross_top10 = data_top10['sum']/100000000
nums_top10 = data_top10['count'][:10]

fig, ax= plt.subplots(1, 1, figsize=[12,8])
plt.title('图4. 2019年北美电影发行商Top10', fontdict={'fontsize':20}, pad=50)
ax.spines['bottom'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
bar_height = 0.8
ax.tick_params(labelsize=14)
ax.set_xticks([]) # 去掉x轴,也可以用ax0.get_xaxis().set_visible(False)
ax.invert_yaxis()
ax.set_yticks(np.arange(len(nums_top10))*2)
ax.set_yticklabels(nums_top10.index)

for i in range(len(nums_top10)):
    ax.text(gross_top10.iloc[i]+0.2, i*2-0.5*bar_height, round(gross_top10.iloc[i], 2), verticalalignment='center', fontsize=14)
    ax.text(nums_top10.iloc[i]+0.2, i*2+0.5*bar_height, round(nums_top10.iloc[i], 2), verticalalignment='center', fontsize=14)

ax.barh(np.arange(len(gross_top10[:10]))*2-0.5*bar_height, gross_top10[:10], height=bar_height, color=['#ff7f0e'], label='票房/亿美元')
ax.barh(np.arange(len(nums_top10))*2+0.5*bar_height, nums_top10, height=bar_height, color=['#1f77b4'], label='发行影片数量')
ax.legend(fontsize=14)

(2)作图

(3)分析

此部分将和下一张图放在一起分析。

三、饼三——Top10发行商总票房占比

(1)代码

fig, ax= plt.subplots(1, 1, figsize=[12,8])
plt.title('图5. Top10发行商总票房占比', fontdict={'fontsize':20}, pad=50)
ax.pie(gross_top10, labels=gross_top10.index, textprops={'size':12}, pctdistance=0.8,autopct='%1.2f%%', colors=sns.color_palette('Set1', 11) );

(2)作图

(3)分析

过去一年的北美影市可以用八个字概括——“一枝独秀,菜鸡互啄”。一枝独秀,指的就是迪士尼(Walt Disney,图中第1),2019年迪士尼的统治优势可以说是无敌,在不包括20世纪福克斯的情况下(目前已被迪士尼收购),其市场份额达到33%,一家独大,37.48亿美刀的票房也是北美历史票房之最,而其全球票房也超过100亿(这个数据在这里未列出),这两个都是影史第一,而其第一王牌要数《复联4》,其北美票房达到8.58亿(这个数据后面会列出),全球票房也达到27.97亿(这个数据未列出)。而剩下的这群“菜鸡”,可真是每一个拿得出手的,昔日王者华纳兄弟(Warner Bros.,图中第2),虽捞了个第二,但其成绩真是惨不忍睹,除了《小丑》和《大侦探皮卡丘》以外无一盈利(这部分数据未列出,需要查阅相关资料,后面情况类同),发行电影数量达到33部,是老对手迪士尼的两倍还多,票房还不及人家一半,希望今年公司能给力点,别老想着拍美剧……环球(Universal,图中第3)同样“低调”了不少,按照母公司营收(环球母公司是康卡斯特),环球可是全美国第一,超过迪士尼,但其票房却跟人家差几条街,迪士尼票房能到如此地步是因为过去多年的几笔收购,按理说环球比迪士尼有钱,但其过去几年在收购上出手却不那么阔绰,尤其是把20世纪福克斯几乎“拱手让给”了迪士尼,否则也不会有落到今天的惨境,希望环球能在今年的电影市场上有更大的作为,尤其是多买一些IP。索尼哥伦比亚也没好到哪(Sony Columbia,图中第4),全年只有一部《蜘蛛侠》拿得出手,《愤怒的小鸟2》和《黑衣人:全球通缉》全都扑街,如果蜘蛛侠再被迪士尼买走,那还有啥……狮门真是出息了,在老牌选手派拉蒙萎靡之际,趁机抢了个第5(Liongate),其《疾速追杀3》是去年大卖之作,而且评价不俗,同时《利刃出鞘》也是口碑票房双丰收,今年还准备冲击一下奥斯卡,至于2020年能否延续如此表现,我们还是拭目以待吧。派拉蒙这表现已经多年如此了(Paramount,图中第6),现在连前五都混不进了,其过去一年几乎鲜有电影盈利,在其王牌《变形金刚》系列没有新作上映的情况下,这种颓势估计还要持续多时。20世纪福克斯(20th Century Fox,图中第7)目前因为已被迪士尼收购,尚处在整合阶段,多个电影项目被砍,所以成绩差点也是意料之中,在2020年整合完毕后,估计会有更好的表现。而后面几个电影公司,那都是常规表现了,在此也不再细说了,至于更详细的分析,笔者以后会写专门的文章。

四、饼四——2019年北美影市票房排名前20的电影

(1)代码

y = table_2019['Release'][:20]
x = table_2019['Gross'][:20]/1000000
fig, ax = plt.subplots(1,1, figsize=[12,8])
plt.title('图6. 2019年北美电影票房Top20', fontdict={'fontsize':20}, pad=50)
ax.barh(y[::-1], x[::-1], color=['#1f77b4']*19+['#ff7f0e']) 
ax.spines['bottom'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.tick_params(labelsize=14)
ax.set_xticks([]) # 去掉x轴,也可以用ax0.get_xaxis().set_visible(False)
for i in range(len(x)):
    ax.text(x.iloc[-i-1]+5, i, round(x.iloc[-i-1], 2), verticalalignment='center', fontsize=14)  # 不能写成x[-1],必须写成x.iloc[-1],因为x的index都是数字

(2)作图

(3)分析

迪士尼去年为啥这么厉害,从这张图中就能看出来,排名前5的电影全是它家的。而第6名《蜘蛛侠:英雄远征》虽然属于索尼哥伦比亚,但其仍然属于漫威系,迪士尼参与拍摄,第7名《星球大战9》的票房只统计了去年的,这部电影目前仍在上映,而且票房已达5亿美元左右,其和后面排名第8的《阿拉丁》都是迪士尼家的(气人不……)。第9名《小丑》是漫威老对手DC漫画的,是华纳兄弟家的,这部电影是华纳去年唯一的亮点,目前已角逐今年奥斯卡,其提名数排名第一,很有可能在奥斯卡上大放异彩。第10是《小丑It 2》,这是一部恐怖片,和刚才那个《小丑》没有关系,票房虽然不差,但比起第一部还是差了不少,它是华纳的。第11是《勇敢者的游戏2》,索尼哥伦比亚出品的,这也是只统计了去年的票房,目前仍在上映。第12、13、15、16名都是环球出品的,其中后三部票房一般,有点对不起环球的名头,第14名《疾速追杀3》是狮门的,是其唯一上榜作品。第17、19、20名都是华纳的,其中第20名《海王》是2018年底上映的,这只统计其2019年部分的数据,第18名《好莱坞往事》是索尼的,其也有可能在今年奥斯卡上有所斩获。

五、饼五——每个月上映电影数量

(1)代码

dates_table = table_2019['Release Date'].groupby(pd.to_datetime(table_2019['Release Date'])).agg('count')
nums_per_month_table = dates_table.groupby(dates_table.index.month).agg('sum')
fig, ax = plt.subplots(1,1, figsize=[12,8])
plt.title('图7 2019年每月上映电影数量对比', fontdict={'fontsize':20}, pad=50)
ax.plot(nums_per_month_table, marker='o') 
ax.set_ylim([0,120])
ax.set_xticks(range(1,13))
ax.set_xticklabels([str(i)+'月' for i in range(1,13)])
ax.set_xlabel('月份', fontdict={'size':16})
ax.set_ylabel('电影数量', fontdict={'size':16})
ax.tick_params(labelsize=14)
for i in range(len(nums_per_month_table)):
    ax.text( i+1, nums_per_month_table.iloc[i]+4, nums_per_month_table.iloc[i],  horizontalalignment='center', fontsize=14) 

(2)作图

(3)分析

每年的1月和2月是影市较冷的两个月,因为之前一年的圣诞节会有不少电影上映,而且这两个月的天气寒冷同时假期不多,所以这两个月上映电影的数量较少,几乎是全年中最少的两个月,其主要以中小厂商的作品为主,2019年的趋势同样如此。从3月开始,天气回暖,观众的观影热情也增长不少,而且各种假期纷纷来临,所以不少电影都选择在此时上映,而且这时候放映的大制作较少,不会对其他作品形成挤压,所以大家几乎都扎堆在这仨月上映,其同样以中小制作为主。而从6月开始,就是暑期档的来临,这是一年中影市最热闹的时段,各个大厂都为此打得头破血流,纷纷拿出自己的看家本领,所以这时候上映的电影数量少,防止拍片挤压,质量高,大制作不断,做到每部电影都有钱赚,同时由于部分大制作过于强势,其他电影纷纷避让,所以6、7两个月电影数量不多。8月、9月和10月这仨月,由于学生开学,暑期档基本结束,大片放映也都接近尾声,中小制作纷纷放在此上映,所以电影数量会有一定的回升。而从11月开始,这是一年中第二热闹的阶段,因为奥斯卡奖和金球奖的报名马上就要截止,所以不少电影都扎堆在此上映,想抓住这最后的机会赢得评委们的青睐,尤其是很多独立制作的小电影,所以11月的电影呈井喷之势。而12月则是因为有一年中第二重要的档期——圣诞档期,所以其电影数量也是不少的。

六、结语

俗话说“一图胜千言”,笔者用两张表和五张图来大概分析了一下去年北美电影市场的基本情况。读者可能会发现,前面写的很多内容是没有在图中或者表中有所体现,这就需要我们平时有所积累,要对所做的业务有较深的了解,这部分积累是代码能力以外的,这也是很多人所忽视的。如果我们能把这一点做好,那么我们也能用自己的“5饼2鱼”来满足诸多的业务需求。

赞 赏 作 者

Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。

▼ 点击成为社区注册会员      喜欢文章,点个在看

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值