计算机毕设 大数据工作岗位数据分析与可视化 - 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 升级请遵守不要跨两个及以上关键节点版本升级的…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...