gc2770

640?wx_fmt=jpeg

题图|《流浪地球》海报 作者|量化小白上分记 36大数据获授权转载

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

 

1.数据说明

 

分影院的票房数据来自中国票房网: ** http://www.cbooo.cn/cinemaday **

 

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

 

640?wx_fmt=png

 

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

 

640?wx_fmt=png

 

2.数据获取

 

使用python获取数据,对于爬取过程不感兴趣的可以直接看下部分,需要数据/代码的请在后台回复“ ** 票房 ** ”。

 

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

 

640?wx_fmt=png

 

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

 

640?wx_fmt=png

 

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

 

640?wx_fmt=png

 

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

 

640?wx_fmt=png

 

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

 

    # -*- coding: utf-8 -*-  
  """  
  Created on Fri Oct 19 18:50:03 2018  
     
  """  
  import urllib  
  import requests  
  from fake_useragent import UserAgent  
  import json  
  import pandas as pd  
  import time  
  import datetime  
     
  # 发送get请求  
  comment_api = \'http://www.cbooo.cn/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  
  for i in range(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)  
     for j in range(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()
[/code]

 

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

 

```code
  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)
[/code]

 

 

3.数据总览  

 

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

 

** 票房TOP10影院 **

 

![640?wx_fmt=png](https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/o6jS02mRg5Td3XEfwRQDDMiaBlDAqLBiaVcyqcSLd74eULbF27qbOfh1k4x6sPTibSNHTCNGN5RL8g3CcOKuEkibog/640?wx_fmt=png)

 

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

 

** 单变量分布 **

 

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

 

![640?wx_fmt=png](https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/o6jS02mRg5Td3XEfwRQDDMiaBlDAqLBiaVrcKPhYm0sfRKEfvdwL7DsEQyUbnyAc56twibS3icAribXibWlANbtE31lA/640?wx_fmt=png)

 

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

 

** 票房影响因素 **

 

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

 

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

 

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

 

![640?wx_fmt=png](https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/o6jS02mRg5Td3XEfwRQDDMiaBlDAqLBiaVrked4HnwEJheMUCIGiaKZHF4o1nhcnYJGFOeibCGqSLPGrKV3yGm2Asw/640?wx_fmt=png)

 

4.票房地域特征

 

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

 

```code
  result = cpca.transform(dataall.cinemaName.tolist(),cut = False)  
  dataall[\'province\'] = result[\'省\']  
  dataall[\'city\'] = result[\'市\']
[/code]

 

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

 

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

 

![640?wx_fmt=png](https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/o6jS02mRg5Td3XEfwRQDDMiaBlDAqLBiaVC06EeqSWmIIEco92ic1Lsj5NxVstIV8GoGTkdbu3e2HGicJkDQrkx4PQ/640?wx_fmt=png)

 

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

 

** 各省票房 **

![640?wx_fmt=png](https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/o6jS02mRg5Td3XEfwRQDDMiaBlDAqLBiaVmzlu4Eog8rXFeIGMr8F2cbeoJ6Q1OGlcibVJEMxhibKyS03Kq4icd2Glw/640?wx_fmt=png)

 

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

 

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

 

** 影院数 **

分类:

技术点:

相关文章:

  • 2021-08-10
  • 2021-12-13
  • 2021-06-09
  • 2021-04-10
  • 2021-12-14
  • 2021-11-21
  • 2022-12-23
  • 2021-08-12
猜你喜欢
  • 2021-12-31
  • 2021-11-21
  • 2021-12-14
  • 2021-04-21
  • 2021-09-08
  • 2021-11-13
相关资源
相似解决方案