pandas~电影票房实例

温馨提示:

截至2019年年终,tushare可使用

ts.month_boxoffice()

这个公用的数据接口来下载电影的月票房榜的数据;
但到了2020年,这个接口已经无法使用,必须使用新的pro接口才能获得所需数据,所以今天讲到的代码与教材上的旧接口的代码是有出入的,不兼容的。

电影票房统计实例操练:

前期准备

在cmd中执行以下命令安装Tushare

pip install tushare

打开python设置接口

import tusahre as ts                 #https://tusahre.pro 
ts.set_token('自己的接口token')       #执行一次在本机保存token,以后无需执行
pro = ts.pro_api()                   #初始化pro接口

在导入tushare后,我们必须要去tushare官网上注册一个正式的用户,每个tushare用户都有一个自己的token(即凭证),这个token可以在tushare官网的个人主页中找到,然后通过上述操作即可设置好自己的token接口。

注:Tushare社区为了形成更好的互动,鼓励用户更多参与社区活动,也让数据从需求、规划、采集到服务变得更完善,同时为提高数据的及时性和准确性,Tushare Pro引入积分概念。平台积分将作为用户最重要的凭证参与社区活动,甚至分享平台更多权益。用一句话来说:积分很重要;比如要完成此次的电影票房实例操作必须要达到500积分;如果是高校学生,可以加入tushare的高校学习群完成学生认证来获得积分。

实例操作

一、下载数据并保存文件

import tushare  as  ts
import time
import pandas as pd
from pandas import DataFrame, Series
pro = ts.pro_api('   ')  # 初始化 pro 接口
movie = DataFrame()  # 生成一个DataFrame对象
for year in range(2008, 2020):  # 2008—2019年
    for mon in range(1, 13):  # 1~12月
        date='{:4d}{:02d}{:02d}'.format(year,mon,1)
        df = pro.bo_monthly(date=date)  # 下载指定月票房
        df['month']=date[4:6] #添加month列
        movie = movie.append(df, ignore_index=True)  # 将df追加到movie中
        time.sleep(2)  # 休眠2s, 每分钟访问次数有限制
movie.to_excel('promovie1.xlsx', index=False)

其中 df['month']=date[4:6] 这一步很重要,可以记录下所属月份后便后续分析

二、添加'人数'列

movie = pd.read_excel('promovie1.xlsx')#读取文件
m['people']=(m.month_amount*10000/m.avg_price).astype('int')
m.to_excel('promovie1.xlsx')#再将数据保存,便于后续使用

因为原数据中不含人数,按'单月票房(万元人民币)/平均票价'计算人数,添加新列people便于统计观影人数

三、查看2008—2019年电影十大票房排行榜、总票房(万元)和总观影人数

movie = pd.read_excel('promovie1.xlsx')#读取文件
m = movie[movie.name!='其他']             # 先排除“其他”行,避免出现干扰
m.groupby('name').month_amount.sum().sort_values(ascending=False)[:10]
# 按年度,str[:4]取出年份,以此分类统计,sort_index按索引年度顺序排列:
ybox = m.groupby(m.list_date.str[:4]).month_amount.sum().sort_index()
ybox[::-1]          # 票房年度额
#统计总票房(万元)、总观影人数:
movie.loc[:, ['month_amount', 'people']].sum()

ybox[::-1] ——把最新的数据放在最前面

运行结果如下:

name
战狼2            566339
哪吒之魔童降世        495111
流浪地球           462947
复仇者联盟4:终局之战    423768
红海行动           359928
唐人街探案2         339240
美人鱼            338968
我不是药神          303854
我和我的祖国         297912
中国机长           282271
Name: month_amount, dtype: int64
month_amount      33056448
people          9353562302
dtype: int64

四、统计年度票房和月度票房,然后绘制对比图形

import  matplotlib.pyplot  as  plt
plt.rcParams['font.sans-serif'] = ['SimHei']        # 指定中文黑体字体,不然标签显示不清
mbox = m.groupby(m.list_date.str[5:7]).month_amount.sum().sort_index()
mbox.plot(title='月票房', marker='o', fontsize=14)
plt.show()
ybox.plot(title='年票房', marker='o', fontsize=14)
plt.show()

因为上一步已经统计ybox,这里不重复进行
运行结果如下图:


作图.png

从上图不难看出:近十年年度票房增长很快,从2008年的31亿元增加到了2018年的600亿元。电影月度消费差异很大,春节和暑假消费爆棚,所以这两个档期也是电影公司必争的黄金档期。

五、其他:

# 计算年度人均票价“年度总票房(万元人民币)/观影人数”,保留1位小数
p=m.groupby(m.list_date.str[:4]).people.sum().sort_values(ascending=False)#将票房以年度排序
print(p)
print(np.round(ybox*10000/p, 1))

运行结果如下:

list_date
2019    1550761827
2018    1487967626
2017    1457154375
2016    1201646796
2015    1146167119
2014     745294619
2013     543220223
2012     414370196
2011     298093559
2010     247083312
2009     162734703
2008      94057177
Name: people, dtype: int32

list_date
2008    29.8
2009    31.6
2010    36.1
2011    35.9
2012    36.3
2013    35.3
2014    35.8
2015    34.9
2016    33.6
2017    34.7
2018    35.6
2019    37.3
dtype: float64

这里运算ybox*10000/p体现了Pandas索引运算的优势,两列统计数据都以年份为索引,
在运算时自动按年份匹配。

补充:

promovie1.xlsx(2008.1-2019.12)数据(即输出参数)含义:


meaning.png

参考网站:

Tushare大数据社区
Python编程和数据分析基础_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

疑问:不知道为什么跑数据时会多出来2005和2007的数据?(上面的数据我只是列出了2008到2019的数据),但是在设置输入参数时我并没有涉及到这两个到2005和2007,目前没发现原因。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容