python实现的电影票房数据可视化
详细说明:
Tushare是一个免费、开源的python财经数据接口包.主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据。
完成本项目后,可以进一步通过类似的方法实现股票数据的可视化操作.
(代码在python2.7或python3.6下均能正常运行,已在以下环境中进行过测试:
python2.7 + tushare0.9.8 + matplotlib1.5.0 + pandas0.18.0 + numpy1.14.3;
python3.6 + tushare1.2 + matplotlib2.1.2 + pandas0.22.0 + numpy1.14.2
)
准备工作:
1.安装必要的第三方库:
pip install matplotlib
pip install numpy
pip install tushare
pip install pandas
项目结构:
整体的项目结构十分简单,一共四个脚本文件,一个是程序入口(BoxOffice_cli.py),
一个是绘图脚本(plot_figure.py),一个是获取台北地区票房数据的
脚本(tw_boxoffice.py),一个是获取美国票房数据的脚本(us_boxoffice.py)。
如下:
实现过程的部分代码展示
- 在BoxOffice_cli.py编写程序命令说明:
"""
本程序可获取各地票房数据,
并将其可视化。
Usage:
Today boxoffice:
python BoxOffice_cli.py
Sum boxoffice:
python BoxOffice_cli.py -sum
Month boxoffice:
python BoxOffice_cli.py -m month("xxxx-xx")
Taipei weekend boxoffice:
python BoxOffice_cli.py -tw
US weekend boxoffice:
python Boxoffice_cli.py -us
"""
导入相关的库:
import sys
from plot_figure import plt_fig,plt_fig_month
from tw_boxoffice import tw_fig
from us_boxoffice import us_fig
编写程序入口:
class Main(object):
def __init__(self):
"""预定义参数"""
self.fig = plt_fig()
self.fig_month = plt_fig_month()
self.tw_fig = tw_fig()
self.us_fig = us_fig()
def day_boxoffice(self):
self.fig.day_boxoffice(title = u'本日票房',ylabel = u'票房\万元')
def sum_boxoffice(self):
self.fig.sum_boxoffice(title =u'本日影片累计票房',ylabel = u'累计票房\万元')
def month_boxoffice(self,month):
self.fig_month.day_boxoffice(u'月份票房',u'票房\万元',month)
def tw_boxoffice(self):
self.tw_fig.weekend()
def us_boxoffice(self):
self.us_fig.weekend()
if __name__ == '__main__':
print(__doc__)
main = Main()
if len(sys.argv)==1:
main.day_boxoffice()
elif len(sys.argv)==2:
action = sys.argv[1]
if action =="-sum":
main.sum_boxoffice()
elif action =="-tw":
main.tw_boxoffice()
elif action =="-us":
main.us_boxoffice()
elif len(sys.argv)==3:
month = sys.argv[2]
main.month_boxoffice(month)
else:
print(__doc__)
运行效果如图:
2.编写绘图脚本(plot_figure.py):
导入相关的库:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import tushare as ts
import time
import os
因为tushare库提供了内地票房的接口,所以可以通过tushare来获取相关的票房信息.
编写获取单日票房数据的函数:
class plt_fig():
def __init__(self):
tt = time.gmtime()
self.today = str(tt[0]) + str(tt[1]) + str(tt[2])
def get_data(self,*args):
self.cd_dir()
f0 = self.today+'.xlsx'
try:
d1 = pd.read_excel(f0)
except IOError:
d0 = ts.realtime_boxoffice()
d0.to_excel(f0)
d1 = pd.read_excel(f0)
d2 = d1.Irank
d3 = d1.BoxOffice
d4 = d1.MovieName
d5 = d1.sumBoxOffice
return d2,d3,d4,d5
def day_boxoffice(self,title = u'本日票房',ylabel = u'票房\万元',*args):
if len(args)>0:
irank,box,name,sumbox = self.get_data(args[0])
else:
irank,box,name,sumbox = self.get_data()
self.plt_bar(irank,box,name,title,ylabel)
def sum_boxoffice(self,title =u'本日影片累计票房',ylabel = u'累计票房\万元'):
irank,box,name,sumbox = self.get_data()
self.plt_bar(irank,sumbox,name,title,ylabel)
编写绘图函数:
def plt_bar(self,xdata,ydata,xticks,title,ylabel):
fig = plt.figure()
ax = fig.add_subplot(111)
bar_width = 0.65
rect = ax.bar(xdata,ydata,bar_width,color = 'r')
plt.xticks(xdata+bar_width/2,xticks)
ax.set_title(title)
ax.set_ylabel(ylabel)
plt.grid()
fig.autofmt_xdate()
self.autolabel(ax,rect)
plt.tight_layout()
plt.show()
与之类似,可以编写一个获取月度票房数据的类和函数,
类可以继承plt_fig,只需改写其get_data函数即可.
程序到这里已经可以满足获取内地票房数据并绘图的需求了.
效果如图:
3.编写获取台北,美国周末票房数据的脚本(tw_boxoffice.py):
因为tushare只提供了内地票房数据的接口,要获取台北等地
的票房数据,需要从其他网站爬取.
pandas中的read_html函数可以读取网页中的表格,
因此可以直接用pandas读取网页的表格,稍作数据清洗后,
转存为本地的excel表格,程序再从中读取数据然后绘图.
导入相关的库:
import pandas as pd
from plot_figure import plt_fig
获取数据及数据清洗:
'''获取台北周末票房'''
class tw_fig(plt_fig):
def table2excel(self,url):
tbs = pd.read_html(url,header = 0,index_col = 0,skiprows = 0)
df = tbs[1]
df.columns = [u'MovieName',u'weekbox',u'sumbox',u'lastweek',u'weeknum',u'nouse']
df.index.name = u'irank'
df1 = df.fillna(method = 'bfill')
df1 = df1.dropna(axis = 1,how = 'all')
df1.weekbox = df1.weekbox.str.replace('$','')
df1.sumbox = df1.sumbox.str.replace('$','')
df1.sumbox = df1.sumbox.str.replace(',','')
df1.weekbox = df1.weekbox.str.replace(',','')
df1.sumbox = pd.to_numeric(df1.sumbox)
df1.weekbox = pd.to_numeric(df1.weekbox)
n = range(1,21)
df2 = df1[df1.index.isin(n)]
return df2
def get_data(self,area,url):
self.cd_dir()
f0 = str(area)+'_'+self.today+'.xlsx'
try:
df = pd.read_excel(f0)
except IOError:
df = self.table2excel(url)
df.to_excel(f0)
irank = df.index
weekbox = df.weekbox
name = df.MovieName
title = str(area)+self.today+'boxoffice'
return irank,weekbox,name,title
与之类似,可以编写一个获取美国票房数据的类和函数,
类可以继承tw_fig,只需改写其weekend函数即可.
效果如下:
python实现的电影票房数据可视化
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
python实现的电影票房数据可视化的更多相关文章
- python实现的、带GUI界面电影票房数据可视化程序
代码地址如下:http://www.demodashi.com/demo/14588.html 详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采 ...
- Python调用matplotlib实现交互式数据可视化图表案例
交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...
- Python的Excel操作及数据可视化
Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...
- Python+Docker+Flask+pyecharts实现数据可视化
1.数据加工pyecharts图实现: 数据源:本地CSV文件 ps:由于是跟生产环境做交互,生产环境指标由HSQL加工,使用存储过程挂后台定时运行,后使用python实现导出及定时分发,本地pyth ...
- 使用Python自己实现简单的数据可视化
只使用Python的random库,将已有数据生成HTML格式的标签云.思路就是根据同一单词出现的次数多少,生成不同大小不同颜色单词的数据的视图. 比如以下格式的多条数据: 1 Gaming 1 Sk ...
- 310实验室OTL问题----将写好的C++文件转换成Python文件,并将数据可视化
如图:文件夹 第一处:optimizer文件夹下的:optimizer.h文件中添加你所写代码的头文件 #include <OTL/Optimizer/Reference-NSGA-II/Re ...
- nomon+ pyNmonAnalyzer实现基于python的nmon监控性能数据可视化
pip install pyNmonAnalyzer nnmon for linux from sourceforge:https://sourceforge.net/projects/nmon/ ...
- 推荐一款Python数据可视化神器
1. 前言 在日常工作中,为了更直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,人们常常借助可视化帮助我们更好的给他人解释现象,做到一图胜千文的说明效果. 在Python中,常见的数据可视化库有 ...
- 分形、分形几何、数据可视化、Python绘图
本系列采用turtle.matplotlib.numpy这三个Python工具,以分形与计算机图像处理的经典算法为实例,通过程序和图像,来帮助读者一步步掌握Python绘图和数据可视化的方法和技巧,并 ...
随机推荐
- Selenium2+python自动化29-js处理多窗口
前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没 ...
- 一个对 Dijkstra 的采访视频
之前在微博上推荐了一个对 Dijkstra 的采访视频,看了两遍之后觉得实在很好,所以再正式推荐一下.大部分人可能都知道他对图论算法和操作系统的贡献,而其实 Dijkstra 在程序语言上的造诣也很深 ...
- jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自己主动化(VSS、operamasks-UI框架)
我的qq是2059055336,对这个课程有兴趣的能够加我qq联系. 一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 jQuery 2.0 正式版公布.不在支持 IE 6/7/8 ...
- ubuntu上minigui调试环境的建立
minigui一共有两个版本:商业版()和GPL版(),问了一下飞漫软件,使用商业版前期的费用是9万,有技术支持,包括5000个licenses的费用,后期10K的量的话,每个licenses要6块, ...
- GUI程序设计3
16. 树(JTree)使用示例 例16.1 创建JTree示例. package GUI1; import java.awt.BorderLayout; import java.awt.Contai ...
- @SpringContext通过实现ApplicationContextAware接口动态获取bean
场景: 在代码中需要动态获取spring管理的bean 目前遇到的主要有两种场景:1.在工具类中需要调用某一个Service完成某一个功能,如DictUtils2.在实现了Runnable接口的任务类 ...
- Objective-C:对象之间循环引用会造成死循环
对象之间的循环引用 两个对象A.B,有可能会出现一种特殊的情况:A中包含B的实例变量:B中又包含A的实例变量,如果两个实例变量都是强引用(A有B实例变量的所有权,B也有A的实例变量的所有 ...
- Maclean Liu对Oracle Database 12c新特性研究汇总
Maclean Liu关于DB 12c新特性的研究文章如下: [Oracle Database 12c新特性] In-Database Archiving数据库内归档 [Oracle Database ...
- iOS开发-委托(Delegate)浅谈
委托其实并不是OC中才有,C#中也有,不过彼此的理解方式是不一样的,OC中委托是协议的一种,需要使用@protocol声明,委托一般在iOS开发中页面中传值用的比较多.委托是Cocoa中最简单.最灵活 ...
- angular之interceptors拦截器
<!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UT ...