代码地址如下:
http://www.demodashi.com/demo/14588.html

##详细说明:
Tushare是一个免费、开源的python财经数据接口包.主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据。
完成本项目后,可以进一步通过类似的方法实现股票数据的可视化操作.
(代码在python2.7或python3.6下均能正常运行,已在以下环境中进行过测试:
python2.7 + tushare0.9.8 + matplotlib1.5 + pandas0.18 + numpy1.14 + wx2.8;
python3.6 + tushare1.2 + matplotlib2.1 + pandas0.22 + numpy1.14 + wx4.0
)

##准备工作:
1.安装必要的第三方库:

 pip install matplotlibpip install numpypip install tusharepip install pandaspip install wxPython

##项目结构图:
整体的项目结构十分简单,一共四个脚本文件,一个是GUI界面脚本(BoxOfficeGui.py),
一个是绘图脚本(plot_figure.py),一个是获取台北地区票房数据的
脚本(tw_boxoffice.py),一个是获取美国票房数据的脚本(us_boxoffice.py)。
如下:

(项目结构图)

##实现过程的部分代码展示
以下是程序的实现思路,以及步骤,实现步骤里,附上了关键代码,全部的代码,请下载代码后阅读

  1. 在BoxOfficeGui.py中编写用户界面:
    导入相关的库:
import wx
import  wx.lib.dialogs
from collections import namedtuple
from plot_figure import plt_fig,plt_fig_month
from utility_template import layout_template
from tw_boxoffice import tw_fig
from us_boxoffice import us_fig

编写界面:


class MainWindow(wx.Frame):def __init__(self,parent,title):wx.Frame.__init__(self,parent,title=title,size=(600,-1))static_font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)Size = namedtuple("Size",['x','y'])s = Size(100,50)"""预定义参数"""self.fig = plt_fig()self.fig_month = plt_fig_month()self.tw_fig = tw_fig()self.us_fig = us_fig()b_labels = [u'今日票房榜',u'今日票房占比',u'总票房榜',u'总票房占比',u'月票房榜',u'月票房占比',u'台北周末票房',u'美国周末票房']TipString = [ u'今日票房榜',u'今日票房占比',u'总票房榜',u'总票房占比',u'月票房榜',u'月票房占比',u'台北周末票房',u'美国周末票房']funcs = [self.day_boxoffice,self.day_boxoffice_pre,self.sum_boxoffice,self.sum_boxoffice_pre,self.month_boxoffice,self.month_boxoffice_pre,self.tw_boxoffice,self.us_boxoffice]"""创建菜单栏"""filemenu = wx.Menu()menuExit = filemenu.Append(wx.ID_EXIT,"E&xit\tCtrl+Q","Tenminate the program 退出")menuBar = wx.MenuBar ()menuBar.Append(filemenu,"&File")self.SetMenuBar(menuBar)'''创建按钮'''self.sizer0 = wx.FlexGridSizer(cols=2, hgap=4, vgap=2) buttons = []for i,label in enumerate(b_labels):b = wx.Button(self, id = i,label = label,size = (1.5*s.x,s.y))buttons.append(b)self.sizer0.Add(b)      '''菜单绑定函数'''self.Bind(wx.EVT_MENU,self.OnExit,menuExit)'''设置各控件的颜色、字体属性,绑定控件函数'''  for i,button in enumerate(buttons):button.SetForegroundColour('red')button.SetFont(static_font)button.SetToolTipString(TipString[i]) #wx2.8
##            button.SetToolTip(TipString[i])       #wx4.0button.Bind(wx.EVT_BUTTON,funcs[i])'''设置页面布局'''self.SetSizer(self.sizer0)self.SetAutoLayout(1)self.sizer0.Fit(self)self.CreateStatusBar()self.Show(True)

注意代码中wx4.0版本与wx2.8版本的按钮提示字符的设置方法是不一样的.
界面如下:

(GUI)

部分按钮点击后的效果如下:
"今日票房榜"按钮:绘制当日票房榜,如下图,

(20181201内地票房)

"今日票房占比"按钮:获取当天票房数据,并据此绘制当天票房百分占比饼图;

(20181201内地票房占比)

"月票房榜"按钮:获取指定月份的票房数据,并绘制该月票房榜(以“xxxx-xx"形式输入指定月份),如下图;

(2018-11月票房榜)

"月票房占比"按钮:获取指定月份的票房数据,并绘制该月上映电影票房的百分比饼图;

(2018-11月票房占比)

编写控件的回调函数:

    def day_boxoffice(self,evt):self.fig.day_boxoffice(title = u'本日票房',ylabel = u'票房\万元')def sum_boxoffice(self,evt):self.fig.sum_boxoffice(title =u'本日影片累计票房',ylabel = u'累计票房\万元')def month_boxoffice(self,evt):month = self.get_month()title = u'{m}票房'.format(m = month)self.fig_month.day_boxoffice(title,u'票房\万元',month)def month_boxoffice_pre(self,evt):month = self.get_month()title = u'{m}票房占比'.format(m = month)self.fig_month.day_boxoffice_pre(title,month)def tw_boxoffice(self,evt):self.tw_fig.weekend()def us_boxoffice(self,evt):self.us_fig.weekend()

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.Irankd3 = d1.BoxOfficed4 = d1.MovieNamed5 = d1.sumBoxOfficereturn d2,d3,d4,d5def 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.65rect = 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 pdfrom 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 df2def 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.indexweekbox = df.weekboxname = df.MovieNametitle = str(area)+self.today+'boxoffice'return irank,weekbox,name,title

与之类似,可以编写一个获取美国票房数据的类和函数,
类可以继承tw_fig,只需改写其weekend函数即可.

效果如下:

(美国周末票房)python实现的、带GUI界面电影票房数据可视化程序

代码地址如下:
http://www.demodashi.com/demo/14588.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

python实现的、带GUI界面电影票房数据可视化程序相关推荐

  1. python实现的电影票房数据可视化

    代码地址如下: http://www.demodashi.com/demo/14275.html ##详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从 ...

  2. python制作软件界面_使用Python制作一个带GUI界面的词云自动生成工具(一)

    在现实生活中你可能会遇到这种情况:想知道一篇论文中哪个词语最多,哪些词语最少(以此判断文章的主要内容):想知道一部小说中哪一个人物出现的次数最多(当然,出现次数最多的那个人也不一定是主脚):想知道一部 ...

  3. python词云去除词_使用Python制作一个带GUI界面的词云自动生成工具(连载五)

    上一篇中我们介绍了自动生成词云工具(GUI)中数据清洗界面的实现过程(详解词云自动生成工具的数据清洗界面制作过程(连载四)),了解掌握了Grid.Pack混合布局的方法.本篇我们将讨论Python自动 ...

  4. python color属性_使用Python制作一个带GUI界面的词云自动生成工具(连载七)

    前几篇向大家介绍了词云自动生成工具(GUI)的详解GUI词云自动生成工具中词云属性设置界面的实现(连载六).通过前面内容我们基本构建出了词云自动生成工具的主要框架.本篇结合tkinter中的filed ...

  5. 路径选择算法|Floyd算法|Dijkstras算法(带GUI界面带实验报告)

    源码地址:https://github.com/lllunaticer/pathFindGUI 使用python 做的带GUI界面的最短路径算法实现 下面是实际效果: 转载于:https://www. ...

  6. Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

    Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...

  7. python界面gui随机生成器_Python 实现的、带GUI界面的词云生成器

    详细说明: "词云"就是数据可视化的一种形式,给出一段文本,根据文本中词语的出现频率而生成的一幅图像,从而过滤掉大量的文本信息,人们只要扫一眼就能够明白文章主旨,使得数据分析的结果 ...

  8. Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面

    Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面 from tkinter import * from tkinter import messagebox 导入提示框 from ...

  9. python中求根公式_用python做个带GUI的求根公式吧

    用python做个带GUI的求根公式吧 解题程序 在本文中,将用python实现解一元二次方程ax^2+bx+c=0(a≠0)的求根公式,并设计基于TK的GUI界面. 实现效果 程序编写 整体 GUI ...

最新文章

  1. 转载:VMware workstation创建虚拟机,安装Ubuntu系统
  2. Java EE API整合:为什么Spring要与“笨重”的Java EE共舞?
  3. 一个用于SAP UI5学习的脚手架应用,没有任何后台API的依赖
  4. 现代制造工程课堂笔记06-集成电路制造工程
  5. C语言灵魂篇|指针作为函数返回值
  6. 第十周学习总结--助教
  7. LeetCode(268)——缺失数字(JavaScript)
  8. matlab 模型运行速度,用matlab求解超效率DEA模型运行结果的辨认
  9. Dapper系列之三:Dapper的事务修改与删除
  10. 如何用cocos2d-x来开发简单的Uphone游戏:(四) 音乐音效 最后的润色
  11. iOS开发者知识普及,Swift 挑战 Objective-C,谁会笑到最后?
  12. Python中super()函数简介及用法分享
  13. 关键词推广怎么做比较好?抖音宣传做关键词推广有哪些好的方法
  14. 教你解决问题:mac电脑卸载双系统中Boot camp助理出现“启动磁盘不能被分区或恢复成单个分区”
  15. 最小模糊聚类算法的并行化——PFM算法
  16. shell小技巧(五十)打印100以内被3整除的数
  17. linux 查看文件目录
  18. Halo重置后台登录密码
  19. Computer for fun
  20. 翁恺老师——指针变量和输入地址的变量

热门文章

  1. ci php view,CI映射(加载)数据到view层的方法,ciview_PHP教程
  2. python中pop函数的用法_python中pop()函数怎么用
  3. RTT学习笔记6-内存管理
  4. Python 语法糖
  5. 工业机器人用铸铁牌号_锻钢牌号表示方法你了解么?
  6. python 连接mysql_使用MySQL
  7. 内核并发控制---原子操作(来自网易)
  8. linux flush 文件,Linux文件系统学习:io的plug过程-blk_flush_plug_list的情况
  9. 监控mysql的pr_zabbix之监控MySQL
  10. python函数的嵌套和递归_Python通过递归函数输出嵌套列表元素