1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 10193 条票房数据告诉你《流浪地球》领跑的电影档战果如何?

10193 条票房数据告诉你《流浪地球》领跑的电影档战果如何?

时间:2018-10-15 01:52:29

相关推荐

10193 条票房数据告诉你《流浪地球》领跑的电影档战果如何?

作者 | 量化小白H

责编| 郭芮

如何挑战百万年薪的人工智能!

/topic/ai30?utm_source=csdn_bw

的春节档已经过去了一个多月的时间,基本已经落下帷幕。《流浪地球》的火爆在票房破了46亿之后又延期了60天,预计将在5月5日正式下映。

今年春节档全国共有8部影片上映,对于影片的对比分析已经非常多,孰优孰劣,每个人心里都有一杆秤,不再赘述。本文着重分析影片票房的地域差别,爬取了年后两周各地万余家影院的票房数据,一起来看看各地影院今年春节档表现如何。PS:非官方统计,数据一定不准确,看看就好。

数据说明

分影院的票房数据来自中国票房网:/cinemaday。

网站提供日票房排行榜的前100名和周票房的前一万余名,本文爬取包含更多样本的周票房数据,取年后两周的数据。

最终爬到的数据样式如下,数据从左往右依次为影院名称,当周票房、单荧幕票房、场均人次、单日单厅票房、单日单厅场次6个变量。

数据获取

使用Python获取数据,对于爬取过程不感兴趣的可以直接看下一部分。

在数据页面按F12打开开发者工具,选择NetWork,XHR,刷新页面后,依次点1,2,3,4页,接收到了一堆文件。

右键任意打开一个,显示如下(如果不是这种格式,说明你选错了):

是我们需要的数据,对比前后的变量关系,得到每个变量的含义。

再分析网址,从前面的截图能看出来,pindex后面跟的是页码,对页码进行循环就可以爬到所有的数据。dt = 1042看不出来什么意思,但改变日期范围重复上面的操作时,看到此时dt变成了1041,说明dt后面的值对应不同的日期范围。

我们的目标是爬取0204-0210,0211-0217两周的数据,获取对应的dt分别是1040和1041,最终代码如下:

# -*- coding: utf-8 -*-

"""

Created on Fri Oct 19 18:50:03

"""

importurllib

importrequests

fromfake_useragentimportUserAgent

importjson

importpandasaspd

importtime

importdatetime

# 发送get请求

comment_api ='/BoxOffice/getCBW?pIndex={}&dt={}'

"""

cinemaName:影院名称

amount:当周票房

avgPS:场均人次

avgScreen:单荧幕票房

screen_yield:单日单厅票房

scenes_time:单日单厅场次

"""

headers = {"User-Agent": UserAgent(verify_ssl=False).random}

#response_comment = requests.get(comment_api.format(1,1040),headers = headers)

#json_comment = response_comment.text

#json_comment = json.loads(json_comment)

col = ['cinemaName','amount','avgPS','avgScreen','scenes_time','screen_yield']

dataall = pd.DataFrame()

num =1035

foriinrange(1,num+1):

response_comment = requests.get(comment_api.format(i,1041),headers = headers)

json_comment = response_comment.text

json_comment = json.loads(json_comment)

n = len(json_comment['data1'])

datas = pd.DataFrame(index = range(n),columns = col)

forjinrange(n):

datas.loc[j,'cinemaName'] = json_comment['data1'][j]['cinemaName']

datas.loc[j,'amount'] = json_comment['data1'][j]['amount']

datas.loc[j,'avgPS'] = json_comment['data1'][j]['avgPS']

datas.loc[j,'avgScreen'] = json_comment['data1'][j]['avgScreen']

datas.loc[j,'scenes_time'] = json_comment['data1'][j]['scenes_time']

datas.loc[j,'screen_yield'] = json_comment['data1'][j]['screen_yield']

dataall = pd.concat([dataall,datas],axis =0)

print('已完成 {}% !'.format(round(i/num*100,2)))

time.sleep(0.5)

dataall = dataall.reset_index()

得到的两周数据里,第一周包含11295个样本,第二周包含11375个样本,将两周数据按影院合并后,最终得到10193个样本。

data1 = data1.drop_duplicates()

data2 = data2.drop_duplicates()

datas = pd.merge(data1,data2,left_on ='cinemaName',right_on = 'cinemaName').dropna()

datas = datas.reset_index(drop=True)

dataall = datas[['cinemaName']]

dataall['amount'] = datas['amount_x'] + datas['amount_y']

dataall['avgPS'] = (datas['avgPS_x'] + datas['avgPS_y'])/2

dataall['avgScreen'] = datas['avgScreen_x'] + datas['avgScreen_y']

dataall['screen_yield'] = (datas['screen_yield_x'] + datas['screen_yield_y'])/2

dataall['scenes_time'] = (datas['scenes_time_x'] + datas['scenes_time_y'])/2

dataall['avgprice'] = dataall.screen_yield/dataall.scenes_time/dataall.avgPS

dataall = dataall.dropna().reset_index(drop=True)

数据总览

先从各方面简单看看取到的数据。

票房TOP10影院

北京耀莱以860万的票房,远超第二名金逸北京的590万占据首位。并且票房前10名中,有5家都是北京的影院。

单变量分布

用单日单厅票房/单日单厅场次/场均人数估计平均票价,各个变量分布进如下:

可以看出,所有变量都呈现尖峰右拖尾的特征,大部分值低于中位数,但也不乏高于均值的点,考虑到各个影院数据存在规模、地域等因素差异,这一结果就很正常了。

票房影响因素

1、从上图看出,场均人次与单荧幕票房正相关,观影人数增多票房收入增加,符合常理。

2、单日单厅场次与票房之间有先升后降的关系,换句话说,排片少时,增加每日排片能增加票房收入,但排片过于密集,反而不利于票房增加。

3、票价,场均人次与票房之间关系如图,颜色越深,表明票房越高。票价影响场均人次,过高和过低都会使票房收入减少,平均票价40-70区间内,影院票房收入更高,符合实际情况。

票房地域特征

粗略看过数据之后,我们分析地域因素对于票房的影响,虽然爬取的数据中没有直接给出影院的地域特征,但可以用影院名称提取地域位置,Python里有一个基于jieba分词的地域查询包cpca,可以直接返回中文地址对应的省市县。

result = cpca.transform(dataall.cinemaName.tolist(),cut =False)

dataall['province'] = result['省']

dataall['city'] = result['市']

用cpca查询各个影院所在的省市,但这个包也不是非常完善,加上有的影院名称地址非常模糊,最终有7581个影院查询到了省市。

未查询到的部分影院如下,一部分是没有地域信息,只有影院名称,一部分有地域信息,可能过于生僻,未能匹配到,之后的分析中删掉没匹配到的这部分影院。

匹配到影院所在省份后,按省份汇总数据,分析各省票房。

各省票房

各地区票房存在明显差异,广东省票房收入最高,远超其他省份去,西藏票房最少。

接下来从各省影院数、场均人次、平均票价三方面来看各省差异。

影院数

最终获取的有地域信息的影院中,广东省有1088个影院,远远超出平均水平,这也可以解释为何广东省票房总数能排到第一,而西藏地区仅有13个影院,绝大部分地区影院在200上下浮动。

场均人次-平均票价

平均票价整体差异不大,40元左右波动,场均人次来看,北京天津最多,但最高最低值差异不超过30人,因此这两项因素对于票房的影响远不如影院数大。

各市票房分布

最后将票房按市进行统计,得到全国各市票房分布如下:

图中标出了票房收入最高的5个市,分别是北京(3279万)、上海(3083万)、广州(2258万)、深圳(2205万)、成都(1856万)。

人工智能的现状及今后发展趋势如何?

/topic/ai30?utm_source=csdn_bw

作者:量化小白一枚,上财研究生在读,偏向数据分析与量化投资,个人公众号量化小白上分记。

声明:本文为作者投稿,版权归其个人所有。

文章广告为微信自动匹配,与本平台无关,如遇假冒伪劣请联系微信进行举报。

【End】

热 文推 荐

华为 5G 欧洲崛起!

☞Google 纪念万维网 30 年:没有 HTTP 协议就没有互联网

☞近 45 亿元拿下开源服务器 Nginx,F5 买断应用交付未来?

☞16 岁程序媛遭辍学歧视死亡威胁,最终是如何开发出爆款应用的?

☞13 岁女学生因两行 JavaScript 代码被捕!

☞中国区块链开发者真实现状:半数只懂皮毛; 数据分析师吃香; Java/Python或成为主流开发语言

☞波音737连续坠毁,AI要背锅?

☞人人之间“不简单”,关系图谱“有一套”

☞没有一个人,能躲过程序员的诱惑!

System.out.println("点个好看吧!");

console.log("点个好看吧!");

print("点个好看吧!");

printf("点个好看吧!\n");

cout<<"点个好看吧!"<<endl;

Console.WriteLine("点个好看吧!");

Response.Write("点个好看吧!");

alert("点个好看吧!")

echo "点个好看吧!"

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

喜欢就点击“好看”吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。