大数据项目7:基于大数据的天气数据分析和可视化系统

news/2025/2/12 11:51:01/
  1. 项目简介

本项目主要研究的内容是基于大数据分析和挖掘的技术,结合海量的天气数据,对异常灾害数据进行分析和预测,发现异常气象中的规律。当下大数据的技术正在高速发展,并且在教育,金融,农业,交通,安防等很多行业已经落地应用,并且取得了不错的效果,证明了大数据分析技术可行性和价值。此课题主要研究的内容分为分为以下几个方法,项目的调研分析,系统的设计和技术选型,系统的搭建和实施,数据爬去程序的设计和实现,数据仓库的设计以及数据分析和可视化等模块。主要利用python相关的爬虫技术,大数据相关的ETL,分析和存储技术以及Web相关的前后技术如python爬虫requests库,Hadoop,Spark,Mysql,MyBaties,FlumeBoot,可视化技术等等,此项目的研究意义是为了更好预测自然灾害发生的可能性,最大程度的降低人民的生命和财产损失.最终是通过数据分析和统计得到的预期指标结果,如不同地区,不同时段,不同季节发生灾害的频率,发生灾害的区域,发生灾害的类型,自然灾害造成的损失灾害等级分析,灾害基本信息展示等等,最后利用可视化的技术vue结合echarts的技术对分析的结果进行可视化的大屏展示。

  1. 效果截图

  2. 登录效果截图

分析效果图

代码目录图

资料目录图

  1. 系统需求概述

    1.       系统的业务流程

系统的业务流程是非常重要的一个环境。具体包含一下几个环节

  1. 数据集采集

数据的采集我们是使用python的技术,主要的过程包含一下几个步骤,首先是初始开始条件,然后设置初始的url,也就我们爬取数据的万只,然后使用requests的模拟client进行请求,然后提取到网页的信息,我们使用xpath工具针对html的页面内容就行抽取,然后对采集的数据进行解析存储。另一方面对下一下url进行拼接,拼接完成之后判断是否有效果,如果满足条件我们就回到抓取页面的步骤,然后在开始循环直到爬取步骤全部完成。这样的我们就拿到我们去拿不的信息数据,并且结果的存储到本地。

爬取数据流程图

  1. 数据的存储和分析

数据的存储先关的设计主要用到了大数据的组件Hadoop,分布式组件HDFS进行存储,为了数据的安全副本保持3份,主要存储的数据灾害明细数据,灾害字典数据,灾害计算规则表。另外为了便于和web端进行交互,还结果数据主要存储在mysql中,分为灾害等级占比分析的数据,在还数量和年份相关的数据,灾害发生的频率和地区相关数据等等。这样数据主要是便于后台的查询工作。

具体的业务流程如下图

分析存储业务流程图

灾害等级是整个系统非常核心的模块之一,它展示不同灾难发生的比例。其中涉及到到的计算规则是,首先从爬去到的灾难原始数据中,对数据进行去脏,然后分层建设数据仓库设计的表示,自然灾害等级表,然后根据灾难等级进行分组聚合然后求出不同级别的灾难数量。然后通过可视化系统最终展示出来的过程。

灾害等级分为大数据计算和可视化两部分组成。大数据计算是是整个灾难等级管理模块的灵魂所在,所以分布式计算分析十分重要。由于灾难类型分析收到数据量和实时性、数据的一致性、数据的完整性等各个因素的隐形,不同等级的灾难等级分别保存在不同的数据下。同时考虑到整系统的实用性,每一个等级表都要有一个相应的字典数据。并且字段表是独立的。

数据库是有使用权限的,只有拥有权限的管理员才可以向数据库中添加各种类型且符合要求的字典,也可以对它们进行修改和删除。所添加的等级数据可以通过等级来源来设计等级库,例如:可以设计管理员的灾难等级。这样设计可以就变得非常的灵活。这样方便了使用,缩减了使用的工作量和时间。

  1. 系统的功能性需求

系统的功能主要分为以下几个方面。用户登录,等级数量分析,时间段分析,地区维度分析和关系分析。

  1. 用户登录

下图是用的登录的时序图,首先用户在浏览器端发出请求,通过账号和密码的验证之后,就灯能访问服务器的资源,服务根据访问的字符以https协议和json格式的数据进行传输,然后返回给浏览器,浏览器进过渲染和样式调整之后就把结果显示了出来,用户也就看到了详细的内容。

  1. 等级数量的分析

我们爬去到的数据中有两个重要的字段,一个是灾难的等级,一个是灾难的类型,我们为了分析不同类型灾难的占比,计算的逻辑,首先对数据进行清洗转换,然后根据灾难的等级和类型进行分组,然后在聚合,这样可以得到不同等级不同类型的情况,为了计算占比,我们需要计算所有灾难总量,然后把总量作为各个类型的分母,然后再成语100%,这样的结果就是我们最终的的结果。最要设计的表有灾难等级字典表(disaster_level)和灾难等级结果表(part1)

分布式计算原理图

  1. 系统的非功能性需求分析

    1.   需求分析

非功能性的需要主要是分析系统的定位,用户群体,性能需求和可靠性,可用性等。

本系统的定位是针对异常灾害天气的分析,可以服务于自然灾害监测部门,例如气象局,经过海量数据的分析,可以给他们提供有力的数据支撑,另外这样分析的结果直接或间接传递到群众中,收益为每个人。

性能方面因为使用的分析是比较成熟且稳定的Spark技术,只要是资源允许的情况下,稳定可靠的长期运行时没有问题,并且因为主要的计算还是在内存中,所以速度这方面也是有保障的。另外web系统采用ssm的框架进行搭建。是一个高内聚,低耦合的系统。

因为是精简的web系统,登录之后就可以看到可视化的分析结果,使用起来简单方便,并且使用用大多人员,使用门槛很低。因此普适性好。

  1.   设计方案

根据上述的需求分析,下面设计具体方案。

从年份的维度对灾害数量进行分析,这也是分析最重要的原因之一,以年份为单位能够全局的总览历年来的气象,这样我们可以分析出全局的内容,避免局部的结果出现,并且发现其中规律之后,可以在下面的10年终对灾害进行预测及时发现问题,这样才能对自然灾害进行预测。

设计方案图

二者之间的关系分析分析主要分为数据存储和可视化分析两大部分组成。用到了数据采集和ETL相关技术,另外需要用到可视化的技术。大数据计算是是关系分析的核心所在,所以分布式计算分析十分重要。同样的数据库是有使用权限的,只有拥有权限的管理员才可以向数据库中添加各种类型且符合要求的字典,也可以对它们进行修改和删除。所添加的等级数据可以通过等级来源来设计等级库,例如:可以设计管理员的灾难等级。这样设计可以就变得非常的灵活。这样方便了使用,缩减了使用的工作量和时间。

数据分析主要利用python的类库requests,通过调用爬虫APi 从气象科学专业知识服务系统上怕爬下格式xml格式的数据,然后调用json和csv的模块对爬去下来的数据进行解析,并以csv格式存储到本地系统。数据清洗是利用Spark-Core的技术从CSV文件中读出原始数据,然后通过空值判断,去重,正则检验以及格式转换等对数据进行处理和转出,最后处理成标准的结构数据。

数据库设计:根据分析的主题和指标,对需要的数据进行分库分表,建立ER关系图,清晰展示表之间的关联关系,数据库进行分层搭建结合维度模型设计。数据分析计算模块:主要是利用SparkCore 和SparkSql的技术,然后根据业务主题进行分析计算,最后得到结果数据,然后把结果数据存储在关系型数据中,便于下一步分可视化展示

可视化模块:此模块设计的网站平台的前后端设计,其中主要是利用学过的Vue,Threamleaf,js,css,echarts,html等,主要的功能是以图表的形式展示结果,更加的清晰明了。后端的技术主要是SpringBoot,Mybaties,SQL等等技术,主要是和数据可进行交互,实现数据的增删改查的功能

通过分析主要分析的指标是:灾害等级分析,灾害次数分析,灾害基本信息,各个地区发生灾害的次数,灾害时段分析,灾害季节分析等

项目源码


http://www.ppmy.cn/news/1571410.html

相关文章

深度学习入门:搭建你的第一个神经网络

在当今数字化时代,深度学习正以前所未有的速度改变着我们的生活。从语音助手到自动驾驶汽车,从图像识别到自然语言处理,深度学习的应用无处不在。而Python作为一门简洁而强大的编程语言,成为了深度学习领域最受欢迎的工具之一。今天,我们将一起踏上深度学习的旅程,搭建你…

Dockerfiles 的 Top 10 常见 DevOps/SRE 面试问题及答案

1. RUN 和 CMD 之间有什么区别? RUN : 在镜像构建过程中执行命令,创建一个新的层。通常用于安装软件包。 示例: RUN apt-get update && apt-get install -y curlCMD : 指定容器启动时默认运行的命令。它在运行时执行,而不是在构建过程…

Java+vue前后端分离项目集群部署

一、项目概述 假设我们有一个前后端分离的项目,前端使用React或Vue框架,后端使用Spring Boot或Node.js。我们将分别部署前端和后端到集群环境中。 二、准备工作 1. 代码准备:确保前端和后端代码已经开发完成,并通过本地测试。 2…

USB子系统学习(四)用户态下使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试6、其它 1、声明 本文是在学习韦东山《驱动大全》USB子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》:商…

MyBatis-Plus-Join (MPJ) 框架介绍

MyBatis-Plus-Join (MPJ) 框架介绍 MyBatis-Plus-Join (MPJ) 是一个基于 MyBatis-Plus 的多表关联查询框架,它提供了一种优雅的方式来处理复杂的表关联查询。 主要特性 Lambda 式查询 wrapper.selectAs(Teacher::getId, TeacherLeaveVO::getTeacherId).leftJoin(C…

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…

cuda学习资料汇总

一 gemm 1.1 ampere 1.2 hopper 1.2.1 github中的使用cutlass和wgmma cutlass/examples/cute/tutorial/wgmma_sm90.cu at main NVIDIA/cutlass GitHub 1.2.2 TMA (1)TMA cutlass

二、Golang Channel通信和控制题目

要求 采用Golang语言中channel实现协程间的通讯,并通过控制channel控制起输入与输出格式。其中一个协程sender负责发送字符串"ABC"的字符,另一个协程reciever负责接收这些字符并打印。 要求接收方reciever协程能够按照顺序,按照行…