python使用pyecharts对猫眼电影票房精美可视化分析简单仪表盘??(五个图好多个组件!!)

article/2025/11/10 22:45:53

本次带来的是象形柱状图,玫瑰饼图,柱状图,折线图,漏斗图,并在一个网页上显示。排版也不好,其实我就是翻译下文档给大家讲解一下!
我又来了!上次做了个猫眼电影的不过瘾,又感觉票房其实是最好拿到的数据,就接着它做了。
直接上!
工具:python,pyecharts,爬虫

效果图1:
在这里插入图片描述
效果图2:
在这里插入图片描述
首先我们先来爬取数据
在这里插入图片描述
代码和上一篇差不多

# dict = []
# url = 'http://piaofang.maoyan.com/second-box?beginDate=20191231'
# def use_url(url):
#     headers = {
#         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
#     }
#     res = requests.get(url=url,headers=headers)
#     res.encoding='utf-8'
#     print(res.text)
#     data = res.json()
#     print(data)
#     for i in data['data']['list']:
#         dic = {}
#         dic['电影']=i['movieName']
#         dic['票房占比']=i['boxRate']
#         dic['综合票房']=i['boxInfo']
#         dic['场均人次']=i['avgShowView']
#         dic['排片占比']=i['showRate']
#         dic['上座率'] = i['avgSeatView']
#         dict.append(dic)
#
#     return dict
# print(dict)
# use_url(url=url)
# df_result = pd.DataFrame(dict)
# print(df_result)
# df_result.to_csv(r'票房1111.csv',encoding='utf-8')#导入到excel文件

数据爬取好以后因为我们的数据中是有%号的,没法直接排序绘制轴,所以都需要先进行数据清洗,先将<0.1%的设置成0.1%,其实也可以都在下面删除%的那一步设置,但是这不是还能再多学点方法以后万一以后用到呢

df = pd .read_csv('票房1111.csv')
print(df.head(2))
df.loc[df.票房占比=='<0.1%','票房占比'] ='0.1%'
print(df['票房占比'])
df.loc[df.排片占比=='<0.1%','排片占比'] ='0.1%'
print(df['排片占比'])
print(list(z) for z in zip(v, Faker.values()))
p_float = df['票房占比'].str.strip("%").astype(float)
p_float1 = df['排片占比'].str.strip("%").astype(float)
p_float2 = df['上座率'].str.strip("%").astype(float)
p_float3 = df['场均人次'].astype(float)

清洗完以后我们的数据应该是float类型的数据将它们作为y轴使用,之后我们就可以开始绘图处理啦!
先简单讲一下,绘图配置组件组件其实配置的话也就几个地方的配置,.set_global_opts(全局配置), .set_series_opts(局部配置)以及轴的配置等,外部的效果其实都是在配置中改出来的。
需要导入的库:

from pyecharts import options as opts
from pyecharts.charts import Bar, Page, Pie,Grid,Line,Tab,Funnel,PictorialBar
from scrapy import Selector
from pyecharts.commons.utils import JsCode
import requests
import pandas as pd

首先我们看下第一个柱状图分析一下,这不是一个普通的柱状图,他还有照片,哇哦,好神奇,这里其实加的有主题light,bg_color中添加的图片,然后markpoint显示的最大最小值,然后inside的动态变化。
在这里插入图片描述

def bar()  -> Bar:bar = (Bar(init_opts=opts.InitOpts(animation_opts=opts.AnimationOpts(animation_delay=1000, animation_easing="elasticOut"),#弹出效果,打开时带动画theme="light",#主题(主题其实有好多种)width="1200px", height="600px",#图的大小bg_color={"type": "pattern","image": JsCode("img"),"repeat": "no-repeat",}#设置背景颜色,我们这里选择的添加图片),).add_xaxis(list(df['电影'])).add_yaxis("电影票房", list(p_float)).add_yaxis("电影排片", list(p_float1)).reversal_axis()#翻转横纵轴.set_global_opts(title_opts=opts.TitleOpts(title="电影票房与电影排片", subtitle="我是副标题"),datazoom_opts=opts.DataZoomOpts(type_="inside"),#全局配置标题以及动态滑动特效).set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),opts.MarkPointItem(type_="average", name="平均值"),]),#局部配置,这里设置凸显出值))bar.add_js_funcs("""var img = new Image(); img.src = 'dd.jpg';""")#传入的图片在这return bar

然后是第二幅折线与柱状的合并,多轴数据图,这里使用的grid布局,将多图结合,同时指定布局与其他配置
在这里插入图片描述

def grid() -> Grid:line = (Line().add_xaxis(list(df['电影'])).add_yaxis("场均人次", list(p_float3),yaxis_index=2,color="#9370DB",is_smooth=True,is_hover_animation=True,markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max"),opts.MarkPointItem(type_="min")]),)#配置y轴,设置轴颜色,突出点的位置,是否平滑的曲线,其他位置配置转到index=2中设置,下同.set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例")))bar1 = (Bar(init_opts=opts.InitOpts(animation_opts=opts.AnimationOpts(animation_delay=1000, animation_easing="elasticOut"),#弹出动画bg_color="#87CEEB",height="100px",),).add_xaxis(list(df['电影'])).add_yaxis("上座率", list(p_float2), yaxis_index=1,category_gap="80%").add_yaxis("电影排片", list(p_float1), yaxis_index=0,category_gap="80%")#设置轴的间隔.extend_axis(yaxis=opts.AxisOpts(name="上座率",type_="value",position="right",axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="#d14a61")),axislabel_opts=opts.LabelOpts(formatter="{value}%"),)#现在我们添加对轴的额外设置下同,其实就是用index指定哪个轴,设置轴名,位置,颜色,数值).extend_axis(yaxis=opts.AxisOpts(type_="value",name="场均人次",position="left",axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="#675bba")),axislabel_opts=opts.LabelOpts(formatter="{value}"),splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)),)).set_global_opts(title_opts=opts.TitleOpts(title="上座率电影排片与场均人次", subtitle="我是副标题"),datazoom_opts=opts.DataZoomOpts(type_="inside"),yaxis_opts=opts.AxisOpts(name="电影排片",position="right",offset=80,axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="#5793f3")),axislabel_opts=opts.LabelOpts(formatter="{value}%"),),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),).set_series_opts(itemstyle_opts={"normal": {"color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 0,color: 'rgba(0, 244, 255, 1)'}, {offset: 1,color: 'rgba(0, 77, 167, 1)'}], false)"""),"barBorderRadius": [30, 30, 30, 30],"shadowColor": 'rgb(0, 160, 221)',}},#这里局部设置,绘制渐变圆柱形柱状markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),opts.MarkPointItem(type_="average", name="平均值"),]),))bar1.overlap(line)grid = (Grid(init_opts=opts.InitOpts(width="1500px", height="500px")).add(bar1, opts.GridOpts(pos_left="5%", pos_right="20%",pos_top="30%"), is_control_axis_index=True))#grid布局,将line添加进bar1里,并设置位置与大小return grid

然后是第三幅玫瑰饼图,我们这里设置了滚动栏
在这里插入图片描述

def pie_rosetype() -> Pie:pie = (Pie(init_opts=opts.InitOpts(width="1200px", height="600px"))#设置图例大小.add("",[list(z) for z in zip(df['电影'], p_float)],radius=[100, 120],#饼图的大小center=["25%", "50%"],#饼图的位置rosetype="radius",).add("",[list(z) for z in zip(df['电影'], p_float1)],radius=[100, 120],center=["65%", "50%"],rosetype="radius",).set_global_opts(title_opts=opts.TitleOpts(title="电影的票房占比与排片占比", subtitle="电影票房占比与排片占比",pos_top="10%",pos_left="30%"),legend_opts=opts.LegendOpts(type_="scroll", pos_right="4%",pos_top="10%", orient="vertical"))#设置滚动条.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),)#设置图示)return pie

第四漏斗图:没啥细致操作,就是越来越懒了…在这里插入图片描述

def bing() -> Funnel:c = (Funnel().add("商品", [list(z) for z in zip(list(df['电影'][:10]), list(p_float)[:10])],#为了美观,我这里就取了前几天数据label_opts=opts.LabelOpts(position="inside"),).set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例"),legend_opts=opts.LegendOpts(type_="scroll", pos_right="4%",pos_top="10%", orient="vertical")))##滚动条return c

最后一幅图,象形柱状图
在这里插入图片描述

def pic() -> PictorialBar:c = (PictorialBar().add_xaxis(list(df['电影'])).add_yaxis("",list(p_float2),label_opts=opts.LabelOpts(is_show=False),symbol_size=18,symbol_repeat="fixed",symbol_offset=[0, 0],#偏移量is_symbol_clip=True,symbol='path://M29.902,23.275c1.86,0,3.368-1.506,3.368-3.365c0-1.859-1.508-3.365-3.368-3.365 c-1.857,0-3.365,1.506-3.365,3.365C26.537,21.769,28.045,23.275,29.902,23.275z M36.867,30.74c-1.666-0.467-3.799-1.6-4.732-4.199 c-0.932-2.6-3.131-2.998-4.797-2.998s-7.098,3.894-7.098,3.894c-1.133,1.001-2.1,6.502-0.967,6.769 c1.133,0.269,1.266-1.533,1.934-3.599c0.666-2.065,3.797-3.466,3.797-3.466s0.201,2.467-0.398,3.866 c-0.599,1.399-1.133,2.866-1.467,6.198s-1.6,3.665-3.799,6.266c-2.199,2.598-0.6,3.797,0.398,3.664 c1.002-0.133,5.865-5.598,6.398-6.998c0.533-1.397,0.668-3.732,0.668-3.732s0,0,2.199,1.867c2.199,1.865,2.332,4.6,2.998,7.73 s2.332,0.934,2.332-0.467c0-1.401,0.269-5.465-1-7.064c-1.265-1.6-3.73-3.465-3.73-5.265s1.199-3.732,1.199-3.732 c0.332,1.667,3.335,3.065,5.599,3.399C38.668,33.206,38.533,31.207,36.867,30.74z',)#这里是图像中小人的url路径.reversal_axis()#翻转.set_global_opts(datazoom_opts=opts.DataZoomOpts(type_="inside"),title_opts=opts.TitleOpts(title="PictorialBar-自定义 Symbol"),xaxis_opts=opts.AxisOpts(is_show=False),yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=False),axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(opacity=0)),),))return c

现在我们所有的图都画好了,下一步我们需要将它们结合起来,使用开头两张gif的方式
第一:使用page()方法将所有图放在一个页面中
page = Page() page.add(bar(), grid(), pie_rosetype(),bing(),pic()) page.render("line.html")
由于显示器的不同,width与height需要在各自的图中设置大小
第二:使用Tab()方法将所有图放在一个页面的不同格中

tab = Tab()
tab.add(bar(), "bar-example")
tab.add(grid(), "grid-example")
tab.add(pie_rosetype(), "pie-example")
tab.add(bing(), "bing-example")
tab.add(pic(), "pic-example")
tab.render("line1.html")

都分别加入
大功告成,不美观,就举例子,探索才能使人进步!!!!


http://chatgpt.dhexx.cn/article/FtKwQEu4.shtml

相关文章

python爬猫眼电影影评,Python系列爬虫之爬取并简单分析猫眼电影影评

前言 今天给大家介绍利用Python爬取并简单分析猫眼电影影评。让我们愉快地开始吧~ 开发工具 Python版本&#xff1a;3.6.4 相关模块&#xff1a; requests模块&#xff1b; pyecharts模块&#xff1b; jieba模块&#xff1b; scipy模块&#xff1b; wordcloud模块&#xff1b; …

爬取猫眼电影,进行分析

目录 简介环境要求数据爬取爬取目标电影详情页反爬虫破解数据存储服务器搭建电影推荐 数据展示电影推荐电影评分电影票房电影类型词云 简介 这次是一次数据库实验&#xff0c;实验要求是了解最新的数据库&#xff0c;并使用&#xff01;做一个简单案例使用。根据实际需要就采用…

Python—猫眼电影票房爬虫实战 轻松弄懂字体反爬!

目标 1.爬取猫眼票房信息 2.将信息保存起来(MySQL、Redis、MongoDB或者Excel等等)&#xff0c;我们保存的是Excel 爬取网址 https://piaofang.maoyan.com/?vernormal&isid_key2d9aacd2f26d4d0dba63 分析 1.打开chrome&#xff0c;输入网址我们看到的效果如下 2.我们…

基于Python猫眼票房TOP100电影数据抓取

基于Python猫眼票房TOP100电影数据抓取 使用requests库抓取数据BeatifulSoup解析URL&#xff0c;将数据存入csv文件处理数据&#xff0c;生成图表 本次爬取数据使用Python语言在jupyter notebook上爬取的&#xff0c;并使用数据生成了一些图表。 使用requests库抓取数据 本段…

基于猫眼票房数据的可视化分析

案例背景&#xff1a;由于最近《哪吒之魔童降世》的火爆&#xff0c;最新票房已经超过49亿&#xff0c;使我对国内票房的整体走势有了很大兴趣&#xff0c;究竟49亿的票房数据&#xff0c;在国内是处于一个什么水平&#xff1f;除了票房数据&#xff0c;又有哪些特征因素可以用…

ardruino控制继电器_Arduino 各种模块篇-继电器

现在按照既定想法&#xff0c;把所有的arduino模块依次尝试一边。 链接到我的arduino Uno 与arduino mega 2560 上 mega 2560有更多的io口&#xff0c;而且cache也很大。所以应该更有效果。幸好可以有arduino IDE 现在比较稳定的版本官方提供的是1.0.3的。 而我用的是ubuntu库里…

【继电器模块教程基于Arduino】

继电器模块教程基于Arduino 前言介绍继电器模块继电器引出线示例:使用继电器模块和 PIR 运动传感器控制灯![在这里插入图片描述](https://img-blog.csdnimg.cn/760e865a1e6b49d4a8f3e9fe1a0a6f74.png)前言 本文介绍如何使用继电器模块通过 Arduino 控制电源电压。我们对继电器…

8路USB继电器模块 windows Linux使用

模块采用USB及串口与外界通信&#xff0c;方便模块与PC机、单片机连接。模块正常的工作电压为5V&#xff0c;并为ICSE014A(8路继电器)模块配置5V电源接口。具体参数见下表&#xff1a; ICSE012A ICSE013A ICSE014A 单位 备注 CC 4 2 8 模块路数 I 400 250 700 …

ardruino控制继电器_arduino控制继电器

一、arduino控制继电器 典型的继电器结构原理图如下: 继电器有一个输入回路,一般接低压电源,有一个输出回路,一般接高压电源。 输入回路中有一个电磁铁线圈,当输入回路有电流通过,电磁铁产生磁力,吸力使输出回路的触点接通,则输出回路导电(通)。 当输入回路无电流通过,…

Arduino笔记实验(初级阶段)—继电器模块

Arduino笔记实验(初级阶段)—继电器模块 文章目录 Arduino笔记实验(初级阶段)—继电器模块前言一、电路图二、继电器模块实验代码实验效果展示 三、继电器模块实验总结 前言 自学笔记&#xff0c;没有历史知识铺垫&#xff08;省略百度部分&#xff09;,博主基于C代码编程,函数…

继电器模块典型电路图

当控制端电压为0时&#xff0c;Q1基极电压为&#xff08;12-0.711.3V&#xff09;,改变R1的大小便可改 变基极电流&#xff0c;当基极电流足够大时&#xff0c;三极管饱合。 为了验证以上的分析&#xff0c;我们搭了一个电路&#xff0c;R1取4.7K&#xff0c;此时基极电流为2.4…

固态继电器和电磁继电器模块

固态继电器和电磁继电器模块 固态继电器的特点直流固态继电器和交流固态继电器电磁继电器的特点直流固态继电器模块、交流固态继电器模块和电磁继电器模块测试比较固态继电器与电磁继电器的比较 原文链接&#xff1a;https://www.yourcee.com/newsinfo/2924340.html 交流固态继…

【继电器模块的电路设计和分析】

一.电路图 二.电路原理分析 1.功能 此继电器电路模块可以通过把左下角LED1的阴级与控制器引脚相连&#xff08;如图中与单片机P0.8引脚相连&#xff09;&#xff0c;从而可以通过控制引脚的高低电平来驱动继电器的开合。 2.驱动逻辑 当P0.8脚为低电平时&#xff0c;光耦PC817输…

常用继电器模块的PCB设计与实物分享

今天分享一下自己做的一块继电器模块&#xff0c;因为之前有用到继电器模块的原理图&#xff0c;索性自己画了一下&#xff0c;原理图如图所示&#xff1a; 一、原理图&#xff1a; 继电器模块还是比较简单的&#xff0c;就是通过三极管的开关作用来使电路导通&#xff0c;从而…

4入4出Modbus RTU继电器模块说明书

产品特点 DC7-30V&#xff1b; 继电器输出触点隔离&#xff1b; 通信波特率&#xff1a;2400,4800,9600,19200,38400&#xff08;可以通过软件修改&#xff0c;默认9600&#xff09;&#xff1b; 通信协议&#xff1a;支持标准modbus RTU协议&#xff1b; 可以设置0-255个…

51单片机驱动继电器模块点灯

51单片机驱动继电器模块点灯 继电器的简介继电器模块引脚定义继电器模块的工作原理继电器模块使用接线图51单片机控制继电器模块点灯总结 原文链接&#xff1a;https://www.yourcee.com/newsinfo/2925664.html 继电器的简介 继电器&#xff08;英文名称&#xff1a;relay&…

STM32f1之简单控制继电器模块(附源码)

目录 前言 一、继电器的使用&#xff08;重要&#xff01;&#xff01;&#xff01;&#xff09; 二、写个代码检验 三、源码--百度云 前言 第一个粉丝会是谁呢&#xff1f;期待ing 相信很多志同道合的小伙伴们已经找到了学习STM32的好途经&#xff08;灵光一闪刷到我的博客…

【树莓派C语言开发】实验04:继电器模块

文章目录 前言1.实验器材2.实验原理2.1继电器模块2.2继电器工作 3.电路图和接线图3.1电路图3.2接线图 4.代码示例4.1部分函数解释4.1.1pinMode4.1.2digitalWrite 4.2Geany编译器运行代码4.3Linux-gcc编译器 结语 前言 学习树莓派的时候经常要查找前辈们留下的资料 但我发现&am…

Ardunio开发实例-使用继电器模块控制家用灯泡

使用继电器模块控制家用灯泡 继电器(英文名称:relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化…

Arduino开发之如何连接继电器模块?

文章目录 0.引言1.继电器模块和交流同步电机说明2.编写代码 0.引言 继电器的作用是扩大控制范围&#xff1a;例如&#xff0c;多触点继电器控制信号达到某一定值时&#xff0c;可以按触点组的不同形式&#xff0c;同时换接、开断、接通多路电路。可以放大控制效果&#xff0c;例…