当前位置:   article > 正文

计算机毕业设计hadoop+spark天气预测 天气可视化 天气大数据 空气质量检测 空气质量分析 气象大数据 气象分析 大数据毕业设计 大数据毕设_基于hadoop天气数据分析系统报告论文

基于hadoop天气数据分析系统报告论文

毕业设计开题报告

课题题目

基于Hadoop+Spark的天气数据分析系统的设计与实现

课题来源

自拟

成果形式

žA毕业设计 B毕业论文 C实做类毕业设计

开题报告内容(可另附页)

一,课题研究目的

随着大数据技术的不断发展,天气数据的分析和利用已成为气象服务领域的重要方向。通过对海量天气数据的分析,可以揭示天气变化的规律,预测未来气象情况,为人们的生产生活提供决策依据。Hadoop和Spark是当前大数据处理领域的两大主流技术,它们在数据处理、存储和分析方面具有强大的优势。因此,设计和实现基于Hadoop+Spark的天气数据分析系统,对于提高天气数据的处理效率、降低气象服务成本、提高气象服务水平等方面具有重要的意义。

二,国内外历史研究现状

天气预报系统是现代气象学的重要组成部分,它的发展和应用对于人类社会具有重要意义。随着大数据技术的不断发展,越来越多的行业开始利用大数据来提高业务效率和决策质量,其中,天气预报行业的数据具有海量、高维和时序性等特点,对于这些数据的处理和分析具有重要的实际应用价值。我国每年新增的气象资料达到PB量级,同时气象数据类型相对复杂,这使得传统的数据存储和处理技术不能很好解决目前用户的需求。传统的天气预报数据处理方法存在着处理速度慢、精度低等问题,无法满足现代天气预报系统的需求。

七十年代以来,美、日、苏相继用“ 模斯”方法作各种气象要素预报从而使整个天气预报在客观化定量化和自动化方面向前迈进了一大步。一些知名的科技公司,如Google、IBM、Microsoft等,都在开发和使用基于Hadoop+Spark的大数据天气分析系统。这些系统能够处理海量的天气数据,包括温度、湿度、风速、风向、气压、降雨量等,并通过机器学习和数据挖掘技术对天气变化进行预测和分析。

而我国是世界上自然灾害种类最多、活动最频繁、危害最严重的国家之一。气象灾害每年给我国造成的经济损失占到国民生产总值的1%~3%。近年来,极端天气气候事件频发,而且在未来还将呈增加趋势,气象灾害的监测预警已成为全社会的一项主要任务。经过多年的建设,我国已初步建立了地基、空基、天基观测相结合的综合观测系统;对灾害性天气的预报预测水平和质量都有了较大提高,初步建立了较完整的数值预报体系,同时,气象预报内容不断丰富,预报范围也开始向空间天气等领域发展。

近几年,云计算技术作为互联网领域的新产物,它为海量数据存储和处理提供了新的契机,它在海量数据挖掘技术领域中具有显著的优势,且已经得到了广泛的应用。因此,本课题旨在设计和实现一个基于Hadoop+Spark的天气数据分析系统,实现对海量天气数据的快速处理和准确分析,为天气预报提供更加准确、及时的数据支持。

三、课题研究内容

1、主要研究方法

本课题采用Hadoop, Spark, MySQL数据库工具编写天气数据分析系统,采用ECharts进行可视化。

  1. 总体概述

该系统具有对海量天气数据的快速处理和准确分析;提高天气预报的准确性和时效性,为用户提供更加优质的天气预报服务等功能。

  1. 主要功能模块介绍

(1).数据采集模块:这个模块负责从天气网爬取天气数据,并将其传输到Hadoop或Spark集群进行处理。

(2).数据存储模块:这个模块负责将处理后的数据以表结构形式存储数据库中,以便后续查询和分析。

(3).数据预处理模块:这个模块负责对采集到的原始数据进行清洗、转换和标准化等操作,以便后续的分析和处理。

(4).数据分析模块:这个模块使用Hadoop和Spark的大数据处理能力,对经过预处理的数据进行分析,以提取天气模式、趋势和预测等有用信息。

(5).数据可视化模块:这个模块将分析结果以图表、图形等形式展示给用户,以便他们能够直观地了解天气状况和趋势。

(6).预测模型模块:这个模块利用线性回归预测,对天气数据进行预测和分析,提供未来天气状况的预测结果。

四、课题的准备情况

(1)通过查阅文献和资料,基本了解天气分析系统应具备的功能,并构思好将要呈现的功能模块。

(2)将电脑安装好pycharm, Hadoop, Tableau, Java这些开发时必需要到的工具。

(3)通过查阅相关文献准备相关专业方面的知识,对天气预测系统将要使用的技术有了大致的了解。认真复习python, matplotlib, Hadoop, springboot, mysql相关的知识点。

(4)从网上学习相关框架搭建,解决方案,测试知识。

五、工作进度计划

第一学期第14周 查阅相关文献资料,撰写开题报告并提交系统

第一学期第15-16周 学习相关技术,进行需求分析

第一学期第17周 熟悉开发环境

第二学期第1-4周 进行总体设计及数据库设计

第二学期第5-6周 进行界面设计、模块设计与功能实现

第二学期第7-9周 进行系统集成,完成中期检查,并将中期报告提交系统

第二学期第10-11周 进行系统测试与运行,完善系统功能

第二学期第12-13周 对系统进行最后调试,撰写毕业设计论文

第二学期第14-15周 根据论文查重结果进行修改,进行答辩

第二学期第16周 提交毕业设计材料

  • 参考文献
  1. 李璐,郭淇汶,陆宇等.基于Python的天气预测系统研究[J].信息技术与信息化,2020(10):18-20.
  2. 李雨谦,范进进,王美月.气象数据可视化应用传播[J].科技与创新,2023(22):179-181.
  3. 陆鑫海,王辉,郑涵.云计算环境下气象大数据服务应用[J].智慧中国,2023(11):75-76.
  4. 李春艳,张雪.大数据在计算机数据信息处理中的应用分析[J].数字技术与应用,2023,41(11):54-56.
  5. 许竹霞,张卫卫,刘昊等.分布式数据库在气象大数据云平台中的应用与扩容研究[J].气象水文海洋仪器,2023,40(03):1-4.
  6. 宋云娟.基于Python的数据分析可视化探索与实践[J].信息与电脑(理论版),2022,34(17):46-48+52.
  7. 薛先贵,黎路.数据可视化教学中Matplotlib教学应用探讨[J].福建电脑,2020,36(12):215-216.
  8. 陈星,宣震.基于Python爬虫的数据获取与可视化的教学实践研究[J].中国信息技术教育,2020(17):46-51.
  9. 闫素萍. 天气预测预警信息系统. 山西省,山西超维科技有限公司,2022-05-01.
  10. 李璐,郭淇汶,陆宇等.基于Python的天气预测系统研究[J].信息技术与信息化,2020(10):18-20.
  11. Carolina S ,Gabriela M ,Enrique A , et al.Big optimization with genetic algorithms:Hadoop,Spark,andMPI[J].SoftComputing,2023,27(16):11469-1148.
  12. Paul V .AI is set to revolutionize weather forecasts.[J].Science (New York, N.Y.),2023,382(6672):748-749.
  13. 李红.基于Python爬虫的太原天气数据分析与可视化研究[J].信息与电脑(理论版),2023,35(04):212-214.
  14. 耿世洁.基于云平台的多模式天气集成预报研究[D].天津科技大学,2016
  15. 胡超,王雪芹,赵媛.基于Python城市历年气象数据可视化分析——以眉山市为例[J].河南科技,2023,42(17):95-99.

指导教师意见(课题难度是否适中、工作量是否饱满、进度安排是否合理、工作条件是否具备等)

课题难度适中、工作量较为饱满、进度安排合理、具备工作条件。

指导教师签名:             

                                                    2021 年12 月 5   日

系(教研室)意见(选题是否适宜、各项内容是否达到专业培养目标要求、整改意见等)

专家组组长签字:  

                                                   2021 年12 月 10   日

任务书

一 系统功能

本天气数据分析系统,主要有数据采集,数据存储,数据预处理,数据分析,数据可视化,预测模型等类型。

具体实现目标如下:

(1).数据采集模块:这个模块负责从天气网爬取天气数据,并将其传输到Hadoop或Spark集群进行处理。

(2).数据存储模块:这个模块负责将处理后的数据以表结构形式存储数据库中,以便后续查询和分析。

(3).数据预处理模块:这个模块负责对采集到的原始数据进行清洗、转换和标准化等操作,以便后续的分析和处理。

(4).数据分析模块:这个模块使用Hadoop和Spark的大数据处理能力,对经过预处理的数据进行分析,以提取天气模式、趋势和预测等有用信息。

(5).数据可视化模块:这个模块将分析结果以图表、图形等形式展示给用户,以便他们能够直观地了解天气状况和趋势。

(6).预测模型模块:这个模块利用线性回归预测,对天气数据进行预测和分析,提供未来天气状况的预测结果。

二、实现方式

该项目采用Hadoop,Spark,Zookeeper, kafka,Hbase等技术搭建了一个基于Spark的天气分析预测系统,具体的实现模块分为以下几部分:

  1. 使Python和PyCharm进行数据采集,从天气网爬取天气数据。
  2. 数据库使用MySQL,来存取项目数据,以表结构的形式存在。
  3. 数据分析采用Sparksql,分析不同影响因素。
  4. 可视化采用Matplotlib在Tableau上绘制出柱状图折线图和饼图。
  5. 预测模型采用线性回归模型进行训练。使用Python中的机器学习库将预处理后的        数据集作为输入,并使用标签数据(例如未来一段时间内的天气状况)作为输出。

核心算法代码分享如下:

  1. https://dblab.xmu.edu.cn/post/8116/
  2. ## 启动hadoop
  3. cd /data/hadoop/sbin
  4. start-all.sh
  5. ## 启动hive
  6. cd /data/hive
  7. nohup hive --service metastore &
  8. nohup hive --service hiveserver2 &
  9. head -5 user_log.csv
  10. sed -i '1d' user_log.csv
  11. predeal.sh
  12. chmod +x ./predeal.sh
  13. ./predeal.sh ./user_log.csv ./small_user_log.csv
  14. hadoop dfs -mkdir -p /dbtaobao/dataset/user_log
  15. hadoop dfs -put dfs -put /data/ebiz2024/small_user_log.csv /dbtaobao/dataset/user_log
  16. hadoop dfs -cat /dbtaobao/dataset/user_log/small_user_log.csv | head -10
  17. drop database if exists dbtaobao;
  18. create database if not exists dbtaobao;
  19. use dbtaobao;
  20. CREATE EXTERNAL TABLE dbtaobao.user_log(user_id INT,item_id INT,cat_id INT,merchant_id INT,brand_id INT,month STRING,day STRING,action INT,age_range INT,gender INT,province STRING) COMMENT 'Welcome to xmu dblab,Now create dbtaobao.user_log!' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/dbtaobao/dataset/user_log';
  21. select * from user_log limit 10;
  22. use dbtaobao;
  23. show tables;
  24. show create table user_log;
  25. desc user_log;
  26. select month,day,cat_id from user_log limit 20;
  27. select brand_id from user_log limit 10; -- 查看日志前10个交易日志的商品品牌
  28. select ul.at, ul.ci from (select action as at, cat_id as ci from user_log) as ul limit 20;
  29. select count(*) from user_log;
  30. select count(distinct user_id) from user_log; -- 在函数内部加上distinct,查出user_id不重复的数据有多少条
  31. select count(*) from (select user_id,item_id,cat_id,merchant_id,brand_id,month,day,action from user_log group by user_id,item_id,cat_id,merchant_id,brand_id,month,day,action having count(*)=1)a;
  32. select count(distinct user_id) from user_log where action='2';
  33. 。。。。。。。。。。。。。。。。。。。
  34. hive> create table scan(brand_id INT,scan INT) COMMENT 'This is the search of bigdatataobao' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE; -- 创建新的数据表进行存储
  35. hive> insert overwrite table scan select brand_id,count(action) from user_log where action='2' group by brand_id; --导入数据
  36. hive> select * from scan; -- 显示结果
  37. select * from scan limit 10;
  38. hive> create table dbtaobao.inner_user_log(user_id INT,item_id INT,cat_id INT,merchant_id INT,brand_id INT,month STRING,day STRING,action INT,age_range INT,gender INT,province STRING) COMMENT 'Welcome to XMU dblab! Now create inner table inner_user_log ' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
  39. hive> INSERT OVERWRITE TABLE dbtaobao.inner_user_log select * from dbtaobao.user_log;
  40. select * from inner_user_log limit 10;
  41. CREATE TABLE `dbtaobao`.`user_log` (`user_id` varchar(20),`item_id` varchar(20),`cat_id` varchar(20),`merchant_id` varchar(20),`brand_id` varchar(20), `month` varchar(6),`day` varchar(6),`action` varchar(6),`age_range` varchar(6),`gender` varchar(6),`province` varchar(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  42. sqoop export --connect jdbc:mysql://localhost:3306/dbtaobao --username root --password 123456 --table user_log --export-dir '/user/hive/warehouse/dbtaobao.db/inner_user_log' --fields-terminated-by ',';
  43. hadoop fs -put /data/ebiz2024/train_after.csv /dbtaobao/dataset
  44. hadoop fs -put /data/ebiz2024/test_after.csv /dbtaobao/dataset
  45. cd /data/jars/spark
  46. /data/spark/bin/spark-shell --jars /data/jars/spark/mysql-connector-java-5.1.47.jar --driver-class-path /data/jars/spark/mysql-connector-java-5.1.47.jar
  47. import org.apache.spark.SparkConf
  48. import org.apache.spark.SparkContext
  49. import org.apache.spark.mllib.regression.LabeledPoint
  50. import org.apache.spark.mllib.linalg.{Vectors,Vector}
  51. import org.apache.spark.mllib.classification.{SVMModel, SVMWithSGD}
  52. import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics
  53. import java.util.Properties
  54. import org.apache.spark.sql.types._
  55. import org.apache.spark.sql.Row
  56. val train_data = sc.textFile("/data/ebiz2024/train_after.csv")
  57. val test_data = sc.textFile("/data/ebiz2024/test_after.csv")
  58. val train= train_data.map{line =>
  59. val parts = line.split(',')
  60. LabeledPoint(parts(4).toDouble,Vectors.dense(parts(1).toDouble,parts
  61. (2).toDouble,parts(3).toDouble))
  62. }
  63. val test = test_data.map{line =>
  64. val parts = line.split(',')
  65. LabeledPoint(parts(4).toDouble,Vectors.dense(parts(1).toDouble,parts(2).toDouble,parts(3).toDouble))
  66. }
  67. val numIterations = 1000
  68. val model = SVMWithSGD.train(train, numIterations)
  69. model.clearThreshold()
  70. val scoreAndLabels = test.map{point =>
  71. val score = model.predict(point.features)
  72. score+" "+point.label
  73. }
  74. scoreAndLabels.foreach(println)
  75. model.setThreshold(0.0)
  76. scoreAndLabels.foreach(println)
  77. model.clearThreshold()
  78. val scoreAndLabels = test.map{point =>
  79. val score = model.predict(point.features)
  80. score+" "+point.label
  81. }
  82. //设置回头客数据
  83. val rebuyRDD = scoreAndLabels.map(_.split(" "))
  84. /下面要设置模式信息
  85. val schema = StructType(List(StructField("score", StringType, true),StructField("label", StringType, true)))
  86. //下面创建Row对象,每个Row对象都是rowRDD中的一行
  87. val rowRDD = rebuyRDD.map(p => Row(p(0).trim, p(1).trim))
  88. //建立起Row对象和模式之间的对应关系,也就是把数据和模式对应起来
  89. val rebuyDF = spark.createDataFrame(rowRDD, schema)
  90. //下面创建一个prop变量用来保存JDBC连接参数
  91. val prop = new Properties()
  92. prop.put("user", "root") //表示用户名是root
  93. prop.put("password", "123456") //表示密码是hadoop
  94. prop.put("driver","com.mysql.jdbc.Driver") //表示驱动程序是com.mysql.jdbc.Driver
  95. //下面就可以连接数据库,采用append模式,表示追加记录到数据库dbtaobao的rebuy表中
  96. rebuyDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/dbtaobao", "dbtaobao.rebuy", prop)
  97. val rebuyRDD = scoreAndLabels.map(_.split(" "))
  98. val schema = StructType(List(StructField("score", StringType, true),StructField("label", StringType, true)))
  99. val rowRDD = rebuyRDD.map(p => Row(p(0).trim, p(1).trim))
  100. val rebuyDF = spark.createDataFrame(rowRDD, schema)
  101. val prop = new Properties()
  102. prop.put("user", "root")
  103. prop.put("password", "123456")
  104. prop.put("driver","com.mysql.jdbc.Driver")
  105. rebuyDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/dbtaobao", "dbtaobao.rebuy", prop)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/886392
推荐阅读
相关标签
  

闽ICP备14008679号