计算机毕设 大数据工作岗位数据分析与可视化 - python flask
文章目录
- 0 前言
- 1 课题背景
- 2 实现效果
- 3 项目实现
- 3.1 概括
- 3.2 Flask实现
- 3.3 HTML页面交互及Jinja2
- 4 **完整代码**
- 5 最后
0 前言
🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 基于大数据的工作岗位数据分析与可视化
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:3分
1 课题背景
基于python+flask的python岗大数据可视化web系统,可以进行数据交互可视化,主题为python岗位相关大数据分析。
2 实现效果
📗Web_App动作描述
用户点击导航栏四个选项,跳转到想了解的页面
- 平均月薪
- 岗位数量
- 工作经验
- 最低学历

用户通过选择器点击想要了解的城市,可显示该城市的相关岗位数量

鼠标下拉可看文字结论分析

3 项目实现
3.1 概括
- 主运行文件为 app.py 文件。
- static 文件为网页样式。
- templates 里的map.html系列文件为生成可视化图表的离线文件,作为引用文件。
- data1.csv 等csv文件为引用的数据文档。csv档 为数据源。

- 在flask环境下导入
pandas、pyecharts实现数据图表交互展示。 - 写出四个@route,分别呈现为各省python相关岗位平均月薪、各省python相关岗位数量、工作经验与最低要求学历的职位分布数量、最低学历-工作经验与平 均月薪的相关图表展示。
df = pd.read_csv('xxx.csv',encoding = 'utf8', index_col="xxx")英文采用单字节编码,部分中文采用双字节编码。- 利用
.renter/with open导入和打开文件。 - 调用
pyecharts模块作图传输到HTML页面。 - 使用
list字典循环。 - 使用列表推导式进行取值。
3.2 Flask实现
数据循环

数据嵌套

推导式

条件判断

数据交互
3.3 HTML页面交互及Jinja2
Jinja2介绍
jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用。
jinja2的优点
jinja2之所以被广泛使用是因为它具有以下优点:
- 相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等。
- 相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑。
- 相对于Django模板,jinja2性能更好。
- Jinja2模板的可读性很棒。
项目代码

4 完整代码
import random
from calendar import c
from tkinter import Gridfrom flask import Flask,render_template,request
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map, EffectScatter, HeatMap, Line,Grid
from pyecharts.faker import Faker
from pyecharts.globals import SymbolType
from pyecharts.charts import Pie,Bardf = pd.read_csv('data1.csv')
app = Flask(__name__)@app.route('/')
def map() -> 'html':a = (Map().add("平均月薪", list(zip(df.省, df.平均月薪)), "china").set_global_opts(title_opts=opts.TitleOpts(title="各省python相关岗位平均月薪"),visualmap_opts=opts.VisualMapOpts(min_=7164.08, max_=17096.07),))a.render("./templates/map.html")with open("./templates/map.html", encoding="utf8", mode="r") as f:map = "".join(f.readlines())the_select_province = {'北京':'4924','上海':'3114','广东':'3164','浙江':'1244','南京':'701','湖北':'412','江苏':'450','福建':'359','四川':'985','辽宁':'227','安徽':'236','湖南':'239','山东':'360','吉林':'88','江西':'60','天津':'355','山西':'417','陕西':'60','重庆':'179','黑龙江':'60','河南':'477','贵州':'60','河北':'60',}return render_template('python_map.html',the_map=map,the_province=the_select_province)element = list(set(most['分类']))@app.route('/effectscatter_symbol')
def effectscattere_symbol() -> 'html':df = pd.read_csv('data2.csv',encoding = 'utf8', index_col="名称")省 = list(df.loc["省"].values)[-24:]数量 = list(df.loc["数量"].values)[-24:]value = [[i, j, random.randint(0, 80)] for i in range(24) for j in range(24)]c = (HeatMap().add_xaxis(省).add_yaxis("数量", 数量, value).set_global_opts(title_opts=opts.TitleOpts(title="各省Python相关岗位数量"),visualmap_opts=opts.VisualMapOpts(),))c.render("./templates/effectscatter_symbol.html")with open("./templates/effectscatter_symbol.html", encoding="utf8", mode="r") as f:sym = "".join(f.readlines())return render_template('python_effectscatter_symbol.html',the_sym=sym,)1data_pie1 = data_pie.T.to_html()pie1_list = [num for num in data_pie['分类']]labels = [index for index in data_pie.index]@app.route('/pie_base')
def pie_base() -> 'html':df = pd.read_csv('data3.csv', encoding='utf8')bar = (Bar().add_xaxis(['不限', '3-5年', '1-3年', '5-10年', '无经验', '一年以下', '10年以上']).add_yaxis("职位数量", [6183, 5164, 4842, 1516, 366, 111, 34]).set_global_opts(title_opts=opts.TitleOpts(title="工作经验-职位分布数量")))line = (Line().add_xaxis(['本科', '大专', '不限', '硕士', '博士', '中专']).add_yaxis("职位数量", [9954, 3704, 3205, 1137, 88, 31]).set_global_opts(title_opts=opts.TitleOpts(title="最低要求学历-职位分布数量", pos_top="50%"),legend_opts=opts.LegendOpts(pos_top="50%"),))grid = (Grid().add(bar, grid_opts=opts.GridOpts(pos_bottom="60%", pos_right="0", height="30%")).add(line, grid_opts=opts.GridOpts(pos_top="60%", pos_right="0", height="30%")))bar,line,grid.render("./templates/pie_base.html")with open("./templates/pie_base.html", encoding="utf8", mode="r") as f:pie_base = "".join(f.readlines())return render_template('python_pie_base.html',the_pie_base=pie_base,)the_element3 = request.form['the_element3_selected']print(the_element3)element3_available = element3if the_element3 =='广州':the_level = 广州elif the_element3 =='上海':the_level = 上海elif the_element3 =='北京':the_level = 北京else:the_level = 其它def python_most():title1 = "最低学历"data_pie = pd.DataFrame(pressure2.loc['最低学历与工作经验的关系']['分类'].value_counts())data_pie1 = data_pie.T.to_html()pie1_list = [num for num in data_pie['分类']]labels = [index for index in data_pie.index]@app.route('/Bar/')
def bar_base() -> Bar:df = pd.read_csv('data4.csv', encoding='utf8', index_col="学历")最低学历 = list(df.loc["最低学历"].values)[-6:]无经验 = list(df.loc["无经验"].values)[-6:]一年以下 = list(df.loc["一年以下"].values)[-6:]不限 = list(df.loc["不限"].values)[-24:]一至三年 = list(df.loc["一至三年"].values)[-24:]三至五年 = list(df.loc["三至五年"].values)[-24:]五至十年 = list(df.loc["五至十年"].values)[-24:]十年以上 = list(df.loc["十年以上"].values)[-24:]c = (Line().add_xaxis(最低学历).add_yaxis("无经验", 无经验).add_yaxis("一年以下", 一年以下).add_yaxis("不限", 不限).add_yaxis("一至三年", 一至三年).add_yaxis("三至五年", 三至五年).add_yaxis("五至十年", 五至十年).add_yaxis("十年以上", 十年以上).set_global_opts(title_opts=opts.TitleOpts(title="最低学历-工作经验与平均月薪",subtitle="平均月薪(元)")))c.render("./templates/Bar.html")with open("./templates/Bar.html", encoding="utf8", mode="r") as f:bar_base= "".join(f.readlines())return render_template('python_bar.html',the_bar_base=bar_base,)return render_template('first.html',the_title1 = title1,the_select_element1 = element1_available,the_data_pie1 = data_pie1,the_pyecharts_all = plot_all,the_pyecharts_all1 = plot_all1,the_pyecharts_all3 = plot_all3,
5 最后
相关文章:
计算机毕设 大数据工作岗位数据分析与可视化 - python flask
文章目录 0 前言1 课题背景2 实现效果3 项目实现3.1 概括 3.2 Flask实现3.3 HTML页面交互及Jinja2 4 **完整代码**5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要…...
Maven聚合项目配合Springcloud案例
创建maven项目 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…...
目标检测网络系列——YOLO V1
文章目录 One Stage DectectionYOLO网络正向预测pipline反向传播过程理解grid和grid对应的B个预测框YOLO网络的限制对比实验与其他的real-time detection的对比VOC 2007数据集的错误分析YOLO和Fast RCNN的集成学习VOC 2012数据集结果YOLO模型的泛化性DEMOOne Stage Dectection …...
任务工单发送失败重试方案设计
需求背景: 该系统为一个工单系统,其中任务工单为该系统中的一个模块;任务工单它是需要周期性调度的一种任务类型;可以按照用户配置的时间周期定时性触发的。由于任务需要发送到对应的工作人员上,所以这里需要先对员工进…...
关于 Vue-iClient-MapboxGL 的使用注意事项
官网:https://iclient.supermap.io/web/apis/vue/zh/api/guide/installation.html 关于图的使用,其余的引入步骤不再赘述,仅说注意事项。 推荐使用的是全局引入,也就是完整引入 因为单独引入我踩了不少坑,比如说 cs…...
Go 语言 map 如何顺序读取?
Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。 然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。 现象 先看一段代码示例: package mainimport &q…...
flutter StreamSubscription 订阅者 stream
当您使用[Stream.listen]收听[Stream]时 则返回[StreamSubscription]对象 List<StreamSubscription?> subscriptions []; overridevoid initState() {super.initState();//subscriptions列表添加两个StreamSubscription。Stream.listen返回StreamSubscription对象subs…...
安全性算法
目录 一、安全性算法 二、基础术语 三、对称加密与非对称加密 四、数字签名 五、 哈希算法 六、哈希算法碰撞与溢出处理 一、安全性算法 安全性算法的必要性: 安全性算法的必要性是因为在现代数字化社会中,我们经常需要传输、存储和处理敏感的数据…...
解决ASP.NET Core的中间件无法读取Response.Body的问题
概要 本文主要介绍如何在ASP.NET Core的中间件中,读取Response.Body的方法,以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。 代码和实现 现象解释 首先我们尝试在自定义中间件中直接读取Response.Body,代码如…...
DownloadingImages 下载缓存图片,显示图片文字列表
1. 用到的技术点: 1) Codable : 可编/解码 JSON 数据 2) background threads : 后台线程 3) weak self : 弱引用 4) Combine : 取消器/组合操作 5) Publishers and Subscribers : 发布者与订阅者 6) FileManager : 文件管理器 7) NSCache : 缓存 2. 网址: 2.1 测试接口网址: …...
【应用层协议】HTTPS的加密流程
目录 一、认识HTTPS 二、密文 1、对称加密 2、非对称加密 三、HTTPS加密流程 1、建立连接 2、证书验证 3、密钥协商 4、数据传输 5、关闭连接 总结 在数字化时代,互联网已经成为我们生活和工作中不可或缺的一部分。然而,随着数据的不断增加&a…...
最新AI创作系统/AI绘画系统/ChatGPT系统+H5源码+微信公众号版+支持Prompt应用
一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图…...
Z410 2023款无人机,专为零基础开发者打造的入门级开源无人机
为什么开发Z410升级款-Easydrone无人机 新手开发者通常在本科阶段加入人工智能行业,对无人机二次开发往往一知半解,面临着C、Python、ROS和mavlink等一系列入门知识,学习起来非常困难,学习的过程中也面临许多挫折。为了帮助零基础…...
elementui修改message消息提示颜色
/* el弹出框样式 */ .el-message {top: 80px !important;border: 0; }.el-message * {color: var(--white) !important;font-weight: 600; }.el-message--success {background: var(--themeBackground); }.el-message--warning {background: var(--gradientBG); }.el-message--…...
Linux和Hadoop的学习
目录 1. Linux的常用快捷键2. Hadoop集群部署问题汇总 1. Linux的常用快捷键 复制:CtrlshiftC 粘贴:CtrlshiftV TAB:补全命令 编写输入:i 退出编写:esc 保存并退出:shift: 2. Hadoop集群部署问…...
通达信指标预警信号,自动发送给微信好友1.0
1.功能介绍:十一节假日期间写了一个,可将股票指标预警信号,自动发送给微信好友/微信群(即电脑端的消息,通过模拟微信操作可在手机上显示)。本工具按通达信写的,如果大智慧,同花顺也能…...
浅谈CDN内容分发与全局负载均衡
CDN简介 CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,…...
【框架风格】解释器模式
1、描述 解释器框架风格(Interpreter Framework Style)是一种软件架构风格,其核心思想是构建一个解释器(Interpreter)来解释并执行特定领域或问题领域的语言或规则。以下是解释器框架风格的一些特点: 1. 领…...
c++视觉图像线性混合
图像线性混合 使用 cv::addWeighted() 函数对两幅图像进行线性混合。alpha 和 beta 是两幅图像的权重,它们之和应该等于1。gamma 是一个可选的增益,这里设置为0。 你可以通过调整 alpha 的值来改变混合比例。如果 alpha0.5,则两幅图像等权重…...
Doris 2.0.1 DockerFile版 升级实战
1、Doris 2.0.1 DockerFile 的制作 参考 Doris 2.0.1 Dockerfile制作-CSDN博客 2、之前的Doris 集群通过 Docker容器进行的部署,需提前准备好Doris2.0.1的镜像包 参考: 集群升级 - Apache Doris Doris 升级请遵守不要跨两个及以上关键节点版本升级的…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
