Flask+pyecharts实现电影数据分析可视化

news2024/10/6 18:25:44

之前有写过pyecharts实现电影数据分析可视化和Django+pyecharts实现电影数据分析可视化,但是综合起来感觉还是有缺陷,所以我使用Flask+pyecharts重新整合一下电影数据可视化。
下面是完成后的截图
在这里插入图片描述
这应该就算是可视化大屏了吧

文章目录

  • 代码结构
  • index.css
  • index.html
  • app.py
  • requirements.txt

代码结构

代码结构也很简单
在这里插入图片描述
真实开发时代码结构应该做详细划分,这个简单的小项目我就不搞这么复杂了。

index.css

这个代码主要用来设计网页页面的布局,主要设计了7个div,分别是1个网页标题的div和6个可视化图的div。

#title {
    position: absolute;
    width: 40%;
    height: 10%;
    top: 0%;
    left: 30%;
    color: black;
    font-size: 30px;
    font-weight: bold;
    display: flex;
    align-items: center;
    justify-content: center;
}

#left1 {
    position: absolute;
    width: 50%;
    height: 50%;
    top: 10%;
    left: 0;
}

#right1 {
    position: absolute;
    width: 50%;
    height: 50%;
    top: 10%;
    left: 50%;
}

#left2 {
    position: absolute;
    width: 50%;
    height: 50%;
    top: 60%;
    left: 0;
}

#right2 {
    position: absolute;
    width: 50%;
    height: 50%;
    top: 60%;
    left: 50%;
}

#left3 {
    position: absolute;
    width: 50%;
    height: 50%;
    top: 110%;
    left: 0;
}

#right3 {
    position: absolute;
    width: 50%;
    height: 50%;
    top: 110%;
    left: 50%;
}

index.html

这个代码设计网页,很简单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>豆瓣电影TOP250</title>
    <link rel="stylesheet" href="../static/index.css">
</head>
<body>
<div id="title">豆瓣电影TOP250数据分析可视化</div>
<div id="left1">{{left1|safe}}</div>
<div id="right1">{{right1|safe}}</div>
<div id="left2">{{left2|safe}}</div>
<div id="right2">{{right2|safe}}</div>
<div id="left3">{{left3|safe}}</div>
<div id="right3">{{right3|safe}}</div>
</body>
</html>

app.py

这个代码是后端代码,主要为Flask框架、pandas数据清洗及pyecharts可视化等
注意这个我只给出了部分代码,万变不离其宗,根据我给的部分代码相信你能够做出属于自己的作品!

from flask import Flask, render_template
import pandas as pd
from pyecharts.charts import Bar, Pie, Line
import pyecharts.options as opts

app = Flask(__name__)
SECRET_KEY = 'xxx' # 自己设置


def get_data():
    data = pd.read_csv('./豆瓣电影top250.csv', encoding='utf-8')
    return data


def get_left1(): # 返回id为left1的div中的pyecharts图表
    data = get_data()
    year = data['上映年份'].value_counts().reset_index()
    year.rename(columns={"count": "电影数量"}, inplace=True)
    bar = (
        Bar(init_opts=opts.InitOpts(width='100%', height='100%', theme='light'))
        .add_xaxis(
            year['上映年份'].tolist()[::-1])
        .add_yaxis(
            "电影数量",
            year['电影数量'].tolist()[::-1],
            label_opts=opts.LabelOpts(is_show=False),
        )
        .set_series_opts(itemstyle_opts=opts.ItemStyleOpts(
            border_color='#5C3719', ))
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title='上映年份及电影数量',
                subtitle='截止2023年3月',
                title_textstyle_opts=opts.TextStyleOpts(
                    font_family='Microsoft YaHei',
                    font_weight='bold',
                    font_size=22,
                ),
                pos_top='1%'),
            legend_opts=opts.LegendOpts(is_show=True),
            xaxis_opts=opts.AxisOpts(
                #             name='电影数量',
                is_show=True,
                max_=int(year['电影数量'].max()),
                axislabel_opts=opts.LabelOpts(
                    font_family='Microsoft YaHei',
                    font_weight='bold',
                    font_size='14'  # 标签文本大小
                )),
            yaxis_opts=opts.AxisOpts(
                #             name='上映年份',
                is_show=True,
                axislabel_opts=opts.LabelOpts(
                    # interval=0,#强制显示所有y轴标签,需要可以加上
                    font_family='Microsoft YaHei',
                    font_weight='bold',
                    font_size='14'  # 标签文本大小
                )),
            tooltip_opts=opts.TooltipOpts(
                is_show=True,
                trigger='axis',
                trigger_on='mousemove|clike',
                axis_pointer_type='shadow',
            ),
            toolbox_opts=opts.ToolboxOpts(is_show=True,
                                          pos_left="right",
                                          pos_top="center",
                                          feature={"saveAsImage": {}}
                                          )
        ).reversal_axis())
    html_code = bar.render_embed()
    return html_code

@app.route('/')
def index():
    left1 = get_left1()
    right1 = get_right1()
    left2 = get_left2()
    right2 = get_right2()
    left3 = get_left3()
    right3 = get_right3()
    return render_template('index.html', left1=left1, right1=right1, left2=left2, right2=right2, left3=left3, right3=right3)


if __name__ == '__main__':
    app.run(debug=True)

requirements.txt

这个文件是这个项目用到的python库及其版本,因为python的库不断在更新,相对应的代码也会更新,所以做python项目时要养成生成requirements.txt文件的习惯。生成方法为打开终端命令行,进入项目根目录下运行pip freeze > requirements.txt

blinker==1.6.2
click==8.1.3
colorama==0.4.6
Flask==2.3.2
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
numpy==1.24.3
pandas==2.0.2
prettytable==3.7.0
pyecharts==2.0.3
python-dateutil==2.8.2
pytz==2023.3
simplejson==3.19.1
six==1.16.0
tzdata==2023.3
wcwidth==0.2.6
Werkzeug==2.3.6

这个小项目到这里就结束啦!你学会了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/633076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MM32F3273G8P火龙果开发板MindSDK开发教程3 - Sysclk的配置

MM32F3273G8P火龙果开发板MindSDK开发教程3 - Sysclk的配置 1、时钟初始化流程 一般流程为startup_mm32f3273g.s中调用system_mm32f3273g.c中的SystemInit函数完成系统时钟的初始&#xff0c;而system_mm32f3273g.c中函数是空的。 原来MindSdk时钟初始化的流程放到了clock_i…

【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统

在国空、村规的实际工作中&#xff0c;将要素类加载到地图中后&#xff0c;需要将图斑的符号系统修改成国空或村规的样式。一般的做法是使用样式库或已经做好的图层文件进行匹配&#xff0c;这个工具要实现的功能是直接应用特定的符号系统&#xff0c;其实用的方法也就是GP工具…

HTMLCSS Day02 CSS简介与选择器

文章目录 1.CSS32.语法2.1.CSS声明&#xff08;CSS declarations&#xff09;2.2.CSS声明块&#xff08; CSS declaration blocks&#xff09;2.3.CSS规则集2.4.CSS可读性- 空白&#xff08; White space&#xff09;- 注释&#xff08; Comments&#xff09;- 速记写法&#x…

【OpenMMLab AI实战营第二期】目标检测笔记

目标检测 目标检测的基本范式 划窗 使用卷积实现密集预测 锚框 多尺度检测与FPN 单阶段&无锚框检测器选讲 RPN YOLO、SSD Focal Loss与RetinaNet FCOS YOLO系列选讲 什么是目标检测 目标检测&#xff1a;给定一张图片&#xff0c;用矩形框框出所有感兴趣物体同…

【系统迁移:笔记本更换硬盘,不重装系统方法】

本人在使用笔记本的时候&#xff0c;C盘空间经常不够用。每次空间满了&#xff0c;就要清理磁盘&#xff0c;卸载一些软件。后来网上搜索一些C盘扩容的办法&#xff0c;列在下面了。去官方下载 diskgenius 软件&#xff0c;点击 here 跳转官网。 电脑型号&#xff1a;联想小新…

操作系统(3.5)--死锁概述

目录 资源问题 可重用性资源和消耗性资源 可抢占性资源和不可抢占性资源 计算机系统中的死锁 1.竞争不可抢占性资源 2.竞争可消耗资源产生死锁 3.进程推进顺序不当引发死锁 死锁的定义、必要条件和处理方法 死锁的定义 产生死锁的必要条件 处理死锁的基本方法 资源…

华为OD机试真题(JavaScript),挑选字符串(100%通过+复盘思路)

一、题目描述 给定a-z&#xff0c;26个英文字母小写字符串组成的字符串A和B&#xff0c;其中A可能存在重复字母&#xff0c;B不会存在重复字母&#xff0c;现从字符串A中按规则挑选一些字母可以组成字符串B挑选规则如下&#xff1a; 同一个位置的字母只能挑选一次&#xff1b…

JS reduce方法对后台数据的处理案例(秒解决)

目录 一、前言 二、案例1 三、案例二 四、小结 一、前言 在我们项目开发阶段&#xff0c;当后端传回来的数据不太理想或者不好直接使用的话&#xff0c;那么此时我们就必须对数据进行处理&#xff0c;这次我就遇到了一种情况&#xff0c;当后端返回如下格式的数据&#xff…

Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离

目录 70. 爬楼梯 Climbing Stairs &#x1f31f; 71. 简化路径 Simplify Path &#x1f31f;&#x1f31f; 72. 编辑距离 Edit Distance &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专…

dubbo源码阅读之-java spi, dubbo spi 和 Spring spi 到底有啥区别

java spi, dubbo spi 和 Spring spi 到底有啥区别 SPIJava SPI案例优缺点 Spring SPIDubbo SPI概述案例源码分析 自己实现一个SPI SPI SPI 全称为 Service Provider Interface&#xff0c;是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中&#xff0c;并由…

北京通信展的精华内容,都在这里!(中篇)

█ 中国移动 中国第一大运营商&#xff1a; 中国移动展出的内容非常非常多&#xff0c;既有应用&#xff0c;也有技术干货&#xff1a; 通感一体化&#xff1a; 6G&#xff1a; 猜猜这是什么&#xff1a; 揭晓答案&#xff1a; 1:2的卫星单元模型&#xff1a; RIS智能超表面&am…

HNU人工智能实验四-基于YOLOV3-DarkNet50的篮球检测模型

实验四&#xff1a;深度学习算法及应用-基于YOLOV3-DarkNet50的篮球检测模型 项目文档工程&#xff1a;https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/ 前言 这个实验要求做一个深度学习项目&#xff0c;做头歌的或者自己在华为云找一个都行&…

华为OD机试真题 Java 实现【最长回文子串】【牛客练习题】

一、题目描述 给定一个仅包含小写字母的字符串&#xff0c;求它的最长回文子串的长度。 所谓回文串&#xff0c;指左右对称的字符串。 所谓子串&#xff0c;指一个字符串删掉其部分前缀和后缀&#xff08;也可以不删&#xff09;的字符串 数据范围&#xff1a;字符串长度1≤s…

华为OD机试真题 JavaScript 实现【最长回文子串】【牛客练习题】

一、题目描述 给定一个仅包含小写字母的字符串&#xff0c;求它的最长回文子串的长度。 所谓回文串&#xff0c;指左右对称的字符串。 所谓子串&#xff0c;指一个字符串删掉其部分前缀和后缀&#xff08;也可以不删&#xff09;的字符串 数据范围&#xff1a;字符串长度1≤s…

锤子眼里全是钉?谈如何对现有系统进行微服务改造

1 什么是微服务架构&#xff1f; 微服务架构&#xff0c;主要是一种思想&#xff0c;并非具体的技术、框架、语言等。核心在于将现有系统拆分为功能明确&#xff0c;内聚性强&#xff0c;职责单一的微小部分&#xff0c;以服务形式对外提供&#xff0c;从而将原来的复杂大系统…

SpringBoot 通过@Profile注解配置多环境

参考资料 Springboot中的Profile注解 目录 一. 使用场景二. 前期准备三. Profile注解作用于类上3.1 配置类3.2 效果 四. Profile注解作用于方法上4.1 定义一个生产环境的注解4.2 配置类4.3 效果 一. 使用场景 在Spring中&#xff0c;可以使用配置文件的方式来指定不同环境下所…

让AI写今年高考作文,满分60你给AI打多少分呢?

随着高考的落幕&#xff0c;各地高考作文已成为我们讨论的话题。 下面是2023年全国甲卷作文题目 我们就让AI根据要求&#xff0c;写上两篇作文。作文标题也是AI起的 一 、① 标题&#xff1a;与时间赛跑&#xff0c;不为时间所困 ​ 时间&#xff0c;这位无情的审判长&#…

知识点滴 - Tumble test和Drop test

翻滚测试(Tumble test)和跌落测试(Drop test)是十分重要的方法&#xff0c;用于评估产品的维持功能的能力&#xff0c;针对的是当产品在终端用户手中的整个生命周期中经历许多碰撞和刮擦的情况。 跌落测试的随机性较强&#xff0c;而跌落测试可以控制跌落方向、撞击点等。 翻滚…

将一个正整数分解质因数(Java)

题目&#xff1a;将一个正整数分解质因数。例如&#xff1a;输入1023,打印出10233*11*31。 目录 1、解题思路 2、程序代码 3、程序输出 1、解题思路 从最小的质数开始&#xff0c;不断地将输入的正整数进行分解&#xff0c;直到无法再分解为止。具体实现方法为&#xff1a;从…

Flutter调用Rust代码操作指南

在之前的利用Rust与Flutter开发一款小工具文章中&#xff0c;我们使用Rust代码实现了一个简单的WebSocket发送功能。也在Rust库交叉编译以及在Android与iOS使用这篇中介绍了Rust库的打包以及双端的使用。 今天我们继续用之前WebSocket的代码举例&#xff0c;来介绍如何在Flutt…