计算机毕设 大数据工作岗位数据分析与可视化 - 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环境下导入pandaspyecharts实现数据图表交互展示。
  • 写出四个@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 Grid

from 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,Bar

df = 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,
                               )

        1

        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('/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 = element3
    
    if 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 最后

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

作用域插槽slot-scope

一般用于组件封装&#xff0c;将使用props传入组件的数据再次调出来或者单纯调用组件中的数据。也可用于为组件某个部分自定义样式以及为某次使用组件自定义样式。 直接拿elementui的el-table举例&#xff1a; <template><el-table v-loading"loading&q…

55. 右旋字符串(第八期模拟笔试)

55. 右旋字符串&#xff08;第八期模拟笔试&#xff09; 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;错误经验吸取 原题链接&#xff1a; 55. 右旋字符串&#xff08;第八期模拟笔试&#xff09; https://kamacoder.com/problempage…

spring6-国际化:i18n | 数据校验:Validation

文章目录 1、国际化&#xff1a;i18n1.1、i18n概述1.2、Java国际化1.3、Spring6国际化1.3.1、MessageSource接口1.3.2、使用Spring6国际化 2、数据校验&#xff1a;Validation2.1、Spring Validation概述2.2、实验一&#xff1a;通过Validator接口实现2.3、实验二&#xff1a;B…

伦敦金冬令时开市时间怎样调整

在刚刚过去的一周&#xff0c;欧美的金融市场已经正式进入了冬令时&#xff0c;这对伦敦金市场的交易时间也产生了影响。由于美国于今年11月5日(星期日&#xff09;开始正式实施冬令时间&#xff0c;所以香港的伦敦金平台的交易时间也随之而有所调整。 从今年11月6日开始&#…

体力属性在重生奇迹MU中的演变史

我相信&#xff0c;在任何一个网络游戏中都有体力这种属性&#xff0c;它本身就是血量的另一种表达&#xff0c;先天体力有优势的职业&#xff0c;往往就是后期成长较高&#xff0c;这已经是网游中一种常态&#xff0c;因为高血在PK中占据优势&#xff01;重生奇迹MU同样如此&a…

FiRa标准——MAC实现(二)

在IEEE 802.15.4z标准中&#xff0c;最关键的就是引入了STS&#xff08;加扰时间戳序列&#xff09;&#xff0c;实现了安全测距&#xff0c;大大提高了测距应用的安全性能。在FiRa的实现中&#xff0c;其密钥派生功能是非常重要的一个部分&#xff0c;本文首先对FiRa MAC中加密…

Haproxy实现七层负载均衡

目录 Haproxy概述 haproxy算法&#xff1a; Haproxy实现七层负载 ①部署nginx-server测试页面 ②(主/备)部署负载均衡器 ③部署keepalived高可用 ④增加对haproxy健康检查 ⑤测试 Haproxy概述 haproxy---主要是做负载均衡的7层&#xff0c;也可以做4层负载均衡 apache也可…

光刻掩膜版怎么制作的?

光掩膜版基本上是 IC 设计的“主模板”。掩模版有不同的尺寸。常见尺寸为 6 x 6 英寸一般的掩膜版由石英或玻璃基板组成。光掩膜版涂有不透明薄膜。更复杂的掩模版使用其他材料。 一般来说&#xff0c;术语“photo mask”用于描述与 1X 步进机或光刻系统一起使用的“主模板”。…

Xmind常用快捷键

Xmind 是什么&#xff1f; Xmind 是一款全功能的思维导图和头脑风暴软件。像大脑的瑞士军刀一般&#xff0c;助你理清思路&#xff0c;捕捉创意。 全功能&#xff1a;提供9种专业的的思维导图结构&#xff0c;丰富的模板和配色&#xff0c;精美的贴纸和插画&#xff0c;还有演…

ansible-第二天

ansible 第二天 以上学习了ping、command、shell、script模块&#xff0c;但一般不建议使用以上三个&#xff0c;因为这三个模块没有幂等性。举例如下&#xff1a; [rootcontrol ansible]# ansible test -a "mkdir /tmp/1234"[WARNING]: Consider using the file …

RabbitMQ 之 Work Queues 工作队列

目录 一、轮训分发消息 1、抽取工具类 2、启动两个工作线程 3、生产者代码 4、结果展示 二、消息应答 1、概念 2、自动应答 3、消息应答的方法 4、Multiple 的解释 5、消息自动重新入队 6、消息手动应答代码 &#xff08;1&#xff09;生产者 &#xff08;2&#…

上拉电阻与下拉电阻

文章目录 上拉电阻下拉电阻上下拉电阻作用1、稳定信号2、减少电磁干扰3、提高驱动能力 大家在玩单片机的过程中&#xff0c;一定没少听过上拉电阻和下拉电阻这组名词&#xff0c;那么到底什么是上拉电阻和下拉电阻呢&#xff1f;今天我们一起来简单了解一下 上拉电阻 上拉电阻…

企业如何解决被“薅羊毛”

随着互联网的普及和电子商务的兴起&#xff0c;越来越多的消费者选择在线购物。然而&#xff0c;一些消费者可能会利用企业的促销活动或优惠券来获取额外优惠&#xff0c;甚至恶意攻击企业的营销资金。这种行为被形象地称为“薅羊毛”。 对于企业而言&#xff0c;如何解决被“薅…

信通院发布的 “信息系统稳定性保障能力建设指南” 有点干货

刚刚看了信息系统稳定性实验室、中国信息通信研究院云计算与大数据研究所联合发布的 信息系统稳定性保障能力建设指南&#xff0c;感觉还是有点干货的。 节选如下&#xff1a; 概括的比较全 关键指标 行业案例 免费在线阅读和下载地址&#xff1a;信息系统稳定性保障能力建设指…

【Python小练手】使用PySimpleGUI和Pygame创作一个MP3播放器(附完整代码)

文章目录 前言一、来说说思路&#xff08;文心一言提供&#xff09;二、完整代码&#xff08;参考文心&#xff0c;自行修改&#xff09;总结附录 前言 闲来无事&#xff0c;做了MP3播放器练练手&#xff0c;主要是研究下PySimpleGUI的界面窗口设计。先上图&#xff0c;一睹为…

Leetcode刷题详解——电话号码的字母组合

1. 题目链接&#xff1a;17. 电话号码的字母组合 2. 题目描述&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。…

对于线程的收尾

一)对于synchronized的锁策略: synchronzed是一个自适应的锁&#xff0c;应该根据具体情况来决定选取那种锁策略&#xff1b; 1)synchronized既是一个乐观锁又是一个悲观锁&#xff0c;一开始是一个乐观锁&#xff0c;但是如果发现锁冲突的概率比较高&#xff0c;就会自动转化成…

操作系统实验二、进程和线程管理(Windows 2学时)单线程创建(有详细代码解释和运行步骤)

实验二、进程和线程管理(Windows 2学时) 一、实验目的 通过实验使学生进一步了解进程、进程状态、进程控制等基本概念。基本能达到下列具体的目标: 理解进程 PCB 的概念,以及 PCB 如何实现、如何组织以及管理。加深对进程和线程概念的理解,进一步认识并发执行的本质。掌握…

登录注册代码模板(Vue3+SpringBoot)[邮箱发送验证码(HTML)、RSA 加密解密(支持长文本)、黑暗与亮色主题切换、AOP信息校验]

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/cx5ptule64utcr9e 仓库地址 https://gitee.com/tongchaowei/login-register-template 网页效果展示 相关说明 在该代码模板中&#xff0c;实现了如下功能&#xff1a; 邮箱发送验证码&#xff08;邮件内容…

FL Studio 21.2.0.3842中文破解版2024最新系统要求

FL Studio 21.2.0.3842中文版完整下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室&#xff0c;因为它包含了一个主要的听觉工作场所。2024最新fl studioFL Studio 21版有不同的功能&#xff0c;如它包含图形和音乐音序器&#xff0c;帮助您使完美的配乐在…