基于spark的农产品价格数据分析预测系统设计与实现

摘  要

近年来随着大数据技术与农产品产业的深度融合和应用,极大的促进了部门间的数据共享,推动传统农产品业转型升级和现代农产品业高质量发展。然而目前仍存在农产品业发展中大数据应用程度不够深入、大量农产品数据流失浪费等问题,农产品业信息化发展不平衡不充分,影响到传统农产品业的转型。因此本文基于上述问题设计农产品数据分析系统。

本系统通过获取农产品数据,对其数据分析来得到二次数据,为用户提供数据展示,从而有效解决上述问题 ,具有一定的应用价值。本系统主要包含了数据采集、数据分析和数据展示三个大板块,数据采集模块为系统提供原始的用户数据,数据分析模块通过定制的策略得到分析得到价值信息,并提供给数据展示模块来前端显示。另外系统还提供了系统管理模块,为系统的注册用户提供个性化使用功能。本系统使用Scrapy技术来进行数据采集过程,并利用PySpark进行数据分析,数据库方面采用的是MySQL,另外系统还提供了系统管理模块,为系统的注册用户提供个性化使用功能,为用户提供有效的信息支持和操作简化。

关键字: 农产品价格分析;Spark;Scrapy爬虫;数据可视化

Design and implementation of agricultural product price data analysis and prediction system based on spark

Abstract

In recent years, with the deep integration and application of big data technology and the tourism industry, data sharing between departments has been greatly promoted, and the transformation and upgrading of traditional tourism and the high-quality development of modern tourism have been promoted. However, at present, there are still problems such as the application of big data in tourism development is not deep enough, a large number of tourism big data is lost and wasted, and the unbalanced and insufficient development of tourism information affects the transformation of traditional tourism. By obtaining tourism data and analyzing its data, secondary data is obtained to provide users with data display. The system mainly includes data collection, data analysis and data display three large sections, the data collection module provides the original user data for the system, the data analysis module obtains value information through customized strategy analysis, and provides the data display module to the front-end display. In addition, the system also provides a system management module to provide personalized use functions for registered users of the system.

The system uses Python for data collection process, and uses Spark for data analysis, the database uses MySQL, and the system also provides a system management module to provide personalized use functions for registered users of the system, providing users with effective information support and operation simplification.

Keywords:Agricultural product data analysis; Spark; Scrapy crawler; Data visualization

目  录

摘  要

Design and implementation of agricultural product price data analysis and prediction system based on spark

Abstract

1  绪论

1.1  研究背景及意义

1.2  国内外研究现状

1.3  论文结构

2  开发技术

2.1  PySpark

2.2  Scrapy爬虫技术

2.3  Mysql

2.4 Flask

3  需求分析

3.1  可行性分析

3.1.1  经济可行性

3.1.2  技术可行性

3.1.3  运行可行性

3.1.4  时间可行性

3.2  功能需求分析

3.2.1  总体流程

3.2.2  数据采集

3.2.3  数据分析

3.3  非功能需求分析

4  系统设计

4.1  总体设计

4.2 数据采集

4.3  数据分析

5.  系统实现

5.1  大数据环境搭建

5.1.1  部署HDFS

5.1.2  部署Spark集群

5.2  数据可视化

5.2.1  登录

5.2.2  农产品数据管理

5.2.3  农产品价格预测

5.3  农产品大屏分析

5.4  本章小结

6  总结

6.1  结论

6.2  展望

参 考 文 献

致  谢

1  绪论

1.1  研究背景及意义

在绿色蔬菜类农产品市场中,绿色蔬菜类农产品的价格受到生产成本、市场供应等因素的影响。而在不同的季节,不同地区的绿色蔬菜类农产品受到的影响程度也是不同的。这使得同种绿色蔬菜类农产品在不同地区的市场价格相差较大,此时绿色蔬菜类农产品的市场信息尤为重要。对于普通农民、卖家等受农产品价格波动影响较大的人群来说,获取及时有效的农产品市场信息可以尽早推测价格波动,提前进行防范,并做出相应决策,避免巨大损失。当然,如果得到的途径与方式相对封闭,那么在价格波动时我们将毫无准备,损失会相当大。大数据技术可以借助Spark等分布式架构,处理海量无结构数据,寻求大数据的深层数据价值和数据关系,充分利用数据挖掘和分析的结果,帮助决策者做出理性科学的决策。绿色蔬菜类农产品市场中有着庞大的数据,通过大数据技术,我们可以获取农产品的洞察和新价值,并尽快发现市场规律,把握市场形势。

农产品价格数据分析预测系统的研究背景和意义主要体现在以下几个方面:农产品市场信息不对称:传统农产品销售存在信息不对称的问题,生产者和买家往往难以获取到全面、及时的市场信息,导致交易效率低下,价格波动大。建立销售与分析平台可以整合各种市场信息,帮助农民和买家更好地了解市场情况,提高交易效率,降低交易成本。

农产品质量安全监管:近年来,农产品质量安全备受关注,消费者对农产品质量和安全性的关注度不断增加。销售与分析平台可以通过追溯技术和数据分析,实现对农产品生产、加工、流通全过程的监管,提高农产品质量安全水平,增强消费者信心。

农产品供需匹配:农产品市场供需关系错综复杂,传统的供应链管理方式往往无法有效匹配供需关系,导致资源浪费和库存积压。销售与分析平台可以通过数据分析和预测算法,实现对农产品供需情况的实时监测和预测,帮助农产品生产者和买家做出更加准确的决策,促进供需匹配,优化资源配置。

因此,建立农产品价格数据分析预测系统具有重要的现实意义和社会意义,可以促进农产品市场的健康发展,提高农产品交易效率,保障农产品质量安全,促进农业产业升级和可持续发展。

1.2  国内外研究现状

农产品业发展的质量也是社会各界正在深入探讨的问题,国内研究大部分都是从宏观角度分析农产品业发展的质量及变迁,早期研究将重点放在--些特定的农产品企业服务质量评估上面,不能更完整地体现农产品业这个特殊产业的综合性.和多样性的特征,有学者从农产品业综合性角度对发展质量进行研究,分别从产品质量、环境质量、要素质量、运行质量和产业增长方式5个方面,采用定量方法评价了农产品业综合发展质量评价,也有学者从农产品者、农产品企业层面建农产品业综合发展质量评价体系进行分析,发现政府主导型农产品发展模式效率低下,地区间产品同质化严重,农产品业发展不仅要注重经济、社会量,更要突出农产品者地位,只有转变传统生产方式才能提高发展质量。有学者指出,加快大数据应用与农产品业的融合发展,完善农产品信息共享和农产品产品服务水平,能够有效实现农产品.业层级跃迁,推动农产品产业转型升级,促进我国农产品业高效化、高度化和绿色化发展。

有学者通过时间序列数据研究信息技术的发展对北京市农产品经济发展的贡献度,分析发现信息技术高投入必然推动农产品经济增长,也就是说农产品业从传统的劳动资本驱动转变成了技术驱动,并指出应大力提高大数据应用在农产品管理中的使用,建成集多功能于一体的农产品产业运行监测调度中心,深化大数据应用与农产品业融合,能够提高农产品业部门之间的协作效率,大大提高发展质量,刘怡君采用灰色关联分析方法对天津市农产品经济的主要影响因素进行比较分析发现,天津发展农产品业大数据应用基础设施搭建比较完善,极大地促进了天津农产品业发展,应继续深化大数据应用与农产品业的融合实现高质量发展;付业勤等认为,将最新科技成果例如大数据应用与农产品业深度融合形成农产品大数据,是助力现代农产品业实现信息化发展的根本。

国外对大数据应用影响农产品业发展研究中,Koo和Xiang等认为大数据、人工智能等科技能够促使很多产业共同受益,能够帮助活化农产品资源,提高农产品经济效益;Buhalis等认为通过定性分析发现加大大数据应用发展中技术投入,能够促进游产业发展革新;Ritchie等以加拿大亚伯达省为研究主体,提出发展农产品产业中农产品目的地营销,应采用大数据应用技术构建营销系统的方案,也有人通过分析埃及农产品商业部门发展情况发现,数据应用与农产品产业融合能够显著提高农产品营销效果,大大增加农产品业收入,实现农产品业转型升级。[1]

总体来说,国内外研究农产品业创新发展和大数据技术发展的文献有很多,本文对这些文献进行了分析、归纳和利用。文章对农产品数据进行分析,在此基础上通过可视化分析大数据应用与农产品业综合发展水平

1.3  论文结构

本文分为六章,主要内容如下:

第一章:绪论。论述研究背景与研究意义,对国内外大数据应用对农产品业发展影响进行分析。

第二章:开发技术。介绍设计中需要用到的开发技术,Spark,Python,Mysql数据库,Flask以及数据可视化工具。

第三章:需求分析。 本章主要介绍参与本系统中的主要用户构成,并逐一分析各个不同用的需求,并关联到具体的功能和构造上,总结需求,为设计做准备。

第四章:系统设计。通过需求分析的结果来构建系统的结构,并分析系统的基础框架,同时还包括了系统的数据库设计等。

第五章:系统实现。 通过实际的代码编写来实现系统。

第六章:总结。总结做的工作以及存在的缺点。

2  开发技术

2.1  PySpark

PySpark 是 Apache Spark 的 Python API,它为 Python 开发者提供了与 Spark 集群进行交互的方式。Apache Spark 是一个快速、通用、可扩展的大数据处理引擎,具有内存计算和容错特性,适用于大规模数据处理任务。下面是 PySpark 技术的介绍:

RDD(Resilient Distributed Dataset): RDD 是 Spark 中最基本的抽象,代表了分布式的数据集合。通过 RDD,可以将数据分布式存储在集群中的多个节点上,并对其进行并行操作。PySpark 提供了对 RDD 的 Python 接口,可以通过简单的 API 对 RDD 进行操作。

DataFrame 和 Dataset: DataFrame 和 Dataset 是 Spark 中更高级的抽象,提供了类似于关系型数据库的表格结构。DataFrame 是基于 RDD 构建的,提供了更多的数据操作功能和优化,而 Dataset 则是更加类型安全的 DataFrame。PySpark 提供了 DataFrame 和 Dataset 的 Python 接口,可以通过类似于 SQL 的语法进行数据处理和查询。

Spark SQL: Spark SQL 是 Spark 提供的用于结构化数据处理的模块,可以通过 SQL 或 DataFrame API 进行数据查询和分析。PySpark 提供了与 Spark SQL 交互的 Python 接口,可以使用 SQL 查询语言或 DataFrame API 对结构化数据进行操作。

机器学习库(MLlib): MLlib 是 Spark 提供的机器学习库,包含了多种常用的机器学习算法和工具,如分类、回归、聚类、降维等。PySpark 提供了 MLlib 的 Python 接口,可以通过简单的 API 进行机器学习模型的训练和预测。

流处理(Spark Streaming): Spark 提供了流处理模块,可以实现实时数据处理和分析。PySpark 也提供了与 Spark Streaming 交互的 Python 接口,可以通过简单的 API 进行实时数据处理。

图处理(GraphX): GraphX 是 Spark 提供的用于图数据处理的模块,可以进行图数据的构建、遍历和算法计算。PySpark 提供了 GraphX 的 Python 接口,可以通过简单的 API 进行图数据处理。

总的来说,PySpark 提供了丰富的功能和灵活的接口,可以用于处理各种类型的大规模数据,并支持多种数据处理和分析任务。通过 PySpark,Python 开发者可以利用 Spark 强大的分布式计算能力,实现高效的数据处理和分析。

2.2  Scrapy爬虫技术

爬虫技术的一般流程是:

:(1)明确需要爬取的目标、内容;爬取哪个网站的哪些内容,每个网站的URL是不一样的,需要正确地输入,比如,百度的URL是: http://www.baidu.com; 京东的URL是: http://www.jd.com;需要爬取哪些内容,得正确地书写; (2)用户向服务器发送请求; - -般需要加请求的报头,比如加:“User-Agent",以免被误认为是非法客户的访问; (3)服务器返回给用户的数据;服务器会给用户发回许许多多的数据,包含有价值的数据和无价值的数据等等; (4)解析、提取需要的数据;从服务器返回的数据中,解析和提取有价值的数据,过滤无价值的数据; (5)用文件、数据库或其它方式存储相应的数据;把解析和提取的有价值数据用不同的形式保存以备用。

Python也提供了许多框架来实现爬虫技术,比如Portia、 Crawley、 Scrapy等等。其中Scrapy框架 ,包含下载器 、Spider中间件 (Spider Middlewares)、下 载器中间件等多个组件。同时,Scrapy框架也包含了许多作用不同的相对应的命令,比如使用Scrapy下载器下载的URL并且将内容输出的fetch命令。

但是,由于爬虫的过程中,许多服务器资源会被消耗掉,服务器的稳定性也会受到很大影响,基于种种原因,爬虫是不受网站所有者的欢迎。为了能够顺利地实现爬虫技术,需要先了解网站所有者所制定的限制措施反爬虫,然后,再制定相应的措施来规避反爬虫。比如,可以通过访问频度的调整来规避反爬虫,这种方法主要是针对有些网站设置的访问频度阈值,爬虫时设置的阈值应该恰当,可以比网站设置的访问频度阈值要略低,这样爬取的稳定性会比较好、爬取的效率也会比较高。还有其它规避反爬虫的方法:代理IP、应对网站结构变化等等。Python提供了许多库来实现爬虫技术,比如:BeautifulSoup库、rurlib库、requests 库和pycurl库等等。其中,用得比较多的是requests库,包含以下常用的函数: request、get、 head、 post、 put、 patch、delete等等。

Scarpy爬虫架构图如图2-2所示:

图2-2  架构图

爬虫调度器:总体协调其它几个模块的工作。

URL管理器:负责管理URL,维护已经爬取的URL集合和未爬取的URL集合。

网页下载器:对未爬取的URL下载。

网页解析器:解析已下载的html,并从中提取新的URL交给URL管理器,数据交给存储器处理。

数据存储器:将html解析出来的数据进行存取。

2.3  Mysql

 MySQL是目前IT行业最流行的开放源代码的数据库管理系统,同时它也是一个支持多线程高并发多用户的关系型数据库管理系统。MySQL之所以受到业界人士的青睐,主要是因为其具有以下几方面优点:

(1)开放源代码

MySQL最强大的优势之一在于它是一个开放源代码的数据库管理系统。开源的特点是给予了用户根据自己需要修改DBMS的自由。

(2) 跨平台

MySQL可以在不同的操作系统下运行,简单地说,MySQL可以支持Windows系统、UNIX系统、Linux系统等多种操作系统平台。

(3) 轻量级

MySQL的核心程序完全采用多线程编程,这些线程都是轻量级的进程,它在灵活地为用户提供服务的同时,又不会占用过多的系统资源。因此MySQL能够更快速、高效的处理数据。

(4) 成本低

MySQL分为社区版和企业版,社区版是完全免费的,而企业版是收费的。免费的社区版支持多种数据类型和正规的SQL查询语言,能够对数据进行各种查询、增加、删除、修改等操作,所以一般情况下社区版就可以满足开发需求了,而对数据库可靠性要求比较高的企业可以选择企业版。

总体来说,MySQL是一款开源的、免费的、轻量级的关系型数据库,其具有体积小、速度快、成本低、开放源码等优点,其发展前景是无可限量的。

MySQL的执行流程如图2-3所示:

图2-3  Mysql的执行流程

解析器:在解析器中对 SQL 语句进行语法分析、语义分析。

优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索,还是根据索引来检索等。

执行器:在执行之前需要判断该用户是否具备权限,如果具备权限就执行SQL查询并返回结果。

在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。

2.4 Flask

 Flask 是使用 Python 语言开发的一款免费而且开源的 Web 应用框架。由于 Python 语言的跨平台性,所以 Flask 同样支持 Windows、Linux 和 Mac 系统。

相对于 Python 的其他 Web 框架,Flask 的功能是最完整的,Flask 定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着 Flask 模块之间紧密耦合。

Flask 的主要特点如下:

完善的文档:经过 10 余年的发展和完善,Flask 官方提供了完善的在线文档,为开发者解决问题提供支持。

集成 ORM 组件:Flask 的 Model 层自带数据库 ORM 组件,为操作不同类型的数据库提供了统一的方式。

URL 映射技术:Flask 使用正则表达式管理URL映射,因此给开发者带来了极高的灵活性。

后台管理系统:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台。

错误信息提示:在开发调试过程中如果出现运行异常,Flask 可以提供非常完整的错误信息帮助开发者定位问题。

3  需求分析

3.1  可行性分析

3.1.1  经济可行性

开发系统所涉及到的资料,一般是在图书馆查阅,或是在网上进行查找收集。所需要的一些应用软件也都是在网上可以免费下载的,因此,开发成本是几乎为零。但是开发出来的系统,还是具有高效率,低成本,较高质量的。所以,从经济可行性的角度,该系统符合标准。

3.1.2  技术可行性

技术可行性是考虑在现有的技术条件下,能否顺利完成开发任务。以及判断现有的软硬件配置是否能满足开发的需求。而本系统采用的是本地机器开发框架,并非十分困难,所以在技术上是绝对可行的。此外,计算机硬件配置是完全符合发展的需要。

3.1.3  运行可行性

当前计算机信息化的知识已经十分普及了,现在的操作人员也都是对系统环境有很强的适应性,各类操作人员大都是有过培训补充的,因此完全不影响组织结构,所以在运行上也是可行的。

3.1.4  时间可行性

从时间上看,在大四的最后一个学期,在实习工作与完成毕设两件大事相交叉的时间里,结合之前学习的相关知识,并开发系统,时间上是有点紧,但是也不是完全没可能实现,通过这段时间的努力功能基本实现。

3.2  功能需求分析

3.2.1  总体流程

农产品网站数据采集及分析系统通过对主流的农产品信息网站的数据进行抓取,通过定向分析之后,得到了有价值的数据并呈现到前端页面中,同时将具体的业务映射到系统功能中,构成一个完整的系统。本流程中主要分为三部分,数据采集和预处理、数据分析和数据可视化,三部分互相关联,其中,数据采集得到的有效数据大部分是需要通过数据分析过程的,小部分的数据能直接的使用到前端页面中。通过三部分的关联,就可以完整的展现出系统的基本结构。

图3-1  数据架构图

3.2.2  数据采集

数据采集流程是系统中所有的数据信息的起始,通过这个流程来获取所有的数据信息,交付给数据分析部分最后呈现到页面上。因此,数据采集部分的功能非常重要,具体如图3-2所示。

图3-2 数据采集用例

从图3.2.2可以看出,数据采集的主要任务是抓取工作,包含了四个部分,分别为抓取入口管理、初始数据管理、抓取任务管理和抓取规则管理: 一、抓取入口管理是针对一些特定的网站,需要对抓取的入口网页进行分析,同时对入口方法进行总结,当入口发生变化的时候,需要及时的进行更换和调整,保证系统的抓取流程能一直畅通, 获取更大量的数据信息;二、初始数据管理,初始数据包含了数据提交和数据转换,这对应着不同的数据信息,数据提交的是可以直接进行数据呈现的信息,包括了一些不需要更换的,维护性不强的信息,如景点的介绍信息或者是城市的描述信息等,另外一部分就是需要通过数据分析模块进行分析得到的二次甚至是多次数据,这些数据就需要通过数据转换之后才能进行提交;三、抓取任务管理,当系统中有抓取任务的时候,就需要对任务进行管理,其中包含了任务启动、任务终止和任务变更,这些都是对应着系统的数据需求,当需要不同类型的数据信息的时候,系统中就会提来获取抓取任务,进行数据的抓取;四、抓取规则管理,针对特定的网站,其中所包含的数据字段都是特定的,但是也会随着不同的时间而发生变化,此时,需要根据变化的时间进行更换,对抓取规则进行更换,保证抓取的数据字段不会发生紊乱。

3.2.3  数据分析

数据分析部分是紧接着数据采集和预处理之后的部分,在这个部分,需要了解所抓取的数据所包含的内容,也就是数据的定位和所需要分析的价值是哪些,当明确了这些问题之后,就可以根据对应的数据信息进行分析,采用不同的分析方法来得到价值信息。

3.3  非功能需求分析

非功能性需求不是用户实际提出来的,而且纵观这个系统,为了使用户有良好的使用性和用户体验,并把它作为一个优秀的软件而继续使用的一种重要的因素,因此非功能需求的分析是不可或缺的。

  1.  系统响应

响应时间是用户最为关注的一个指标,当用户点击了所需要的功能后,系统反馈的显示信息如果不能在有效反映时间内出现就会导致用户对系统产生厌烦和抵触。因此,系统响应时间很重要,本系统指定的系统响应时间为5秒以内,保证系统的功能反应最慢不超过5秒钟。

  1.  功能可靠

主要是系统在整个运行周期里都需要与所有的客户端保持高效连接,并且在用户发出了功能需求的时候,系统在进行事务交互或者数据查找的时候不会出现死锁的情况,保证系统的所有功能都能正常的运行。

  1.  方便使用

让用户使用起来更加便捷和顺畅是设计系统的基础,因此,无论是在设计系统的功能,还是在进行功能的逻辑衔接的时候都需要考虑到系统的功能结构,不要让用户在使用过程中,违背正常的使用规则,让一个业务操作可以按照惯常的方式来完成,并可以适当的使用提示信息,方便用户的功能选择和使用,提高系统功能的实用性。

  1.  高效运维

系统在设计完成之后,需要对系统进行运维,维护功能都是依赖于系统的基础性设计,因此,结构设计上就需要考虑到后期调整时的方便。另外系统在进行升级的时候,不需要让用户端进行复杂的操作,简化用户操作,提高运维的高效性。

4  系统设计

4.1  总体设计

在任何信息系统当中有价值的数据都是必不可少的重要部分,如何通过手上

的资源获取得到有价值的数据便是开发系统。首先需要考虑的问题根据系统的功能设计数据获取和处理的流程以及其实现方法都已经基本上确定获取和处理流程。农产品数据分析系统是将数据采集、数据分析和数据可视化融合为一体的分析系统,下面系统的功能结构图,如图4-1所示。

图4-1  系统架构图

从图4-1可以发现,流程中主要分为三部分,数据采集和预处理、数据分析和数据可视化,三部分互相关联,其中,数据采集得到的有效数据大部分是需要通过数据分析过程的,小部分的数据能直接的使用到前端页面中,例如具体的景点信息和机场信息等,这些不需要进一步分析,直接传递给数据库提供给前端页面的使用;而另外一部分就需要使用到数据分析过程,通过数据分析之后的价值信息可以通过图表或者是文本形式展现给用户页面。通过三部分的关联,就可以完整的展现出系统的基本结构。

4.2 数据采集

这个项目我们的主要目的是爬取农产品网站网的农产品数据信息,下面描述本文爬虫工程主要设计步骤。

  1. 创建项目,打开一个终端输入:scrapy startproiect python_nongchanpin _data,Scrapy框架将会在指定目录下生成整个工程框架。系统生成的目录如下图4-3所示:
  2. 修改setting文件

如表4-1所示为修改后的setting文件主要内容,本设计主要修改三项内容,第一个是不遵循机器人协议,第二个是下载间隙,由于下面的程序要下载多个页面,所以需要给一个间隙(不给也可以,只是很容易被侦测到),第三个是请求头,添加一个User-Agent。

(3) 确认要提取的数据,item 项

item定义你要提取的内容(定义数据结构),比如我提取的内容为重庆农产品信息可视化的所在城市和景点农产品详情,于是需要在items类中新建对应的实体类,并需要设置相应的字段取出对应的数据。Field 方法实际上的做法是创建一个字典,给字典添加一个建,暂时不赋值,等待提取数据后再赋值。

  1.  开发爬虫程序,访问下载网页,使用Xpath语法提取内容。

表4-1  爬虫代码

headers = {b'Accept': b'application/json, text/javascript, */*; q=0.01', b'Accept-Encoding': b'gzip, deflate', b'Accept-Language': b'zh-CN,zh;q=0.9,ja;q=0.8,ru;q=0.7', b'Cache-Control': b'no-cache', b'Connection': b'keep-alive', b'Content-Length': b'270', b'Content-Type': b'application/x-www-form-urlencoded; charset=UTF-8', b'Cookie': b'insert_cookie=27508778', b'Host': b'nc.mofcom.gov.cn', b'Origin': b'http://nc.mofcom.gov.cn', b'Pragma': b'no-cache', b'Referer': b'http://nc.mofcom.gov.cn/jghq/marketDetail?eudId=45233', b'User-Agent': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', b'X-Requested-With': b'XMLHttpRequest'}

citys = {'安徽': '340000', '北京': '110000', '福建': '350000', '甘肃': '620000', '广东': '440000', '广西': '450000', '贵州': '520000', '海南': '460000', '河北': '130000', '河南': '410000', '黑龙江': '230000', '湖北': '420000', '湖南': '430000', '吉林': '220000', '江苏': '320000', '江西': '360000', '辽宁': '210000', '内蒙古': '150000', '宁夏': '640000', '青海': '630000', '山东': '370000', '山西': '140000', '陕西': '610000', '上海': '310000', '四川': '510000', '天津': '120000', '西藏': '540000', '新疆': '650000', '云南': '530000', '浙江': '330000', '重庆': '500000'}

for city,value in citys.items():

    url = 'http://nc.mofcom.gov.cn/jghq/marketList'

    m = 'province={}&city=&isprod_mark=&par_craft_index=&pageNo=1'.format(value)

    h = requests.post(url=url, data=m, headers=headers)

    print(h.json())

    for resu in h.json()['result'][:1]:

        EUD_NAME = resu['EUD_NAME']

        print(EUD_NAME)

        ID = resu['ID']

        CONTENT = resu['CONTENT']

        m1 = 'pageNo={}&craftName=&craftIndex=&eudName={}&queryDateType=0&timeRange=&sortColumns=%5B%7B%22column%22%3A%22GET_P_DATE%22%2C%22ordername%22%3A%22asc%22%7D%5D'

        url2 = 'http://nc.mofcom.gov.cn/jghq/marketDetail'

        for i in range(1,7):

            h1 = requests.post(url=url2, data=m1.format(i,parse.quote(EUD_NAME)), headers=headers)

            print(h1.json())

            for resu in h1.json()['result']:

                if not models.XinXi.query.filter(and_(models.XinXi.日期==time.strftime('%Y-%m-%d', time.localtime(resu['GET_P_DATE'] // 1000)),

                                                      models.XinXi.详情=='http://nc.mofcom.gov.cn/jghq/marketDetail?eudId={}'.format(ID),

                                                      models.XinXi.产品==resu['CRAFT_NAME']

                                                      )).all():

                    models.db.session.add(

                        models.XinXi(

                            日期=time.strftime('%Y-%m-%d', time.localtime(resu['GET_P_DATE'] // 1000)),

                            产品=resu['CRAFT_NAME'],

                            价格=resu['AG_PRICE'],

                            市场=resu['EUD_NAME'],

                            省份=city,

                            详情='http://nc.mofcom.gov.cn/jghq/marketDetail?eudId={}'.format(ID),

                            介绍=CONTENT

                        )

                    )

                    models.db.session.commit()

4.3  数据分析

数据分析是针对数据采集模块中得到的数据信息进行定向分析的过程,这个功能主要包括了地图分析、农产品农产品分析、农产品温度分析、农产品季节占比和农产品好评分析,地图分析根据对一个城市的所有用户向全国各地农产品的人数做出分析,代码中的文件路径替换为你实际的数据文件路径。这段代码首先创建了一个 SparkSession 对象,然后使用 spark.read.csv() 方法读取 CSV 文件,将其转换为 DataFrame。接着,我们展示了数据的结构和前几行内容,并使用 DataFrame 的聚合函数计算了平均价格、最高价格和最低价格。最后,我们停止了 SparkSession。 具体数据分析核心代码如下所示。

表4-1  PySpark分析代码

from pyspark.sql import SparkSessionfrom pyspark.sql.functions import avg, min, max

# 创建 SparkSession

spark = SparkSession.builder \

    .appName("AgriPriceAnalysis") \

    .getOrCreate()

# 读取 CSV 文件,假设文件路径为 'agri_prices.csv'

df = spark.read.csv('agri_prices.csv', header=True, inferSchema=True)

# 查看数据结构

df.printSchema()

# 显示数据前几行

df.show()

# 计算平均价格

avg_price = df.select(avg("price")).first()[0]print("Average Price:", avg_price)

# 计算最高价格

max_price = df.select(max("price")).first()[0]print("Maximum Price:", max_price)

# 计算最低价格

min_price = df.select(min("price")).first()[0]print("Minimum Price:", min_price)

# 停止 SparkSession

spark.stop()

5.  系统实现

5.1  大数据环境搭建

5.1.1  部署HDFS

(1)在master服务器上确定存在hadoop安装目录

[root@master ~]# ls  /usr/cstor/hadoop

(2)设置JDK安装目录

编辑文件“/usr/cstor/hadoop/etc/hadoop/hadoop-env.sh”,找到如下一行:

export JAVA_HOME=${JAVA_HOME}

将这行内容修改为:

export JAVA_HOME=/usr/local/jdk1.7.0_79/

(3) 指定HDFS主节点

编辑文件“/usr/cstor/hadoop/etc/hadoop/core-site.xml”,将如下内容嵌入此文件里最后两行的<configuration></configuration>标签之间:

<property>

  <name>hadoop.tmp.dir</name>

  <value>/usr/cstor/hadoop/cloud</value>

</property>

<property>

  <name>fs.defaultFS</name>

  <value>hdfs://master:8020</value>

</property>

(4) 在master服务器上格式化主节点:

[root@master ~]# hdfs  namenode  -format

统一启动HDFS:

[root@master ~]#cd /usr/cstor/hadoop

[root@master hadoop]# sbin/start-dfs.sh

(5) 通过查看进程的方式验证HDFS启动成功

[root@master sbin]#  jps #jps查看java进程

若启动成功,会看到类似的如下信息:

6208 NameNode

6862 Jps

6462 SecondaryNameNode

图5-1  Hadoop启动成功效果图

5.1.2  部署Spark集群

(1) 在master上操作:确定存在spark。

[root@master ~]# ls /usr/cstor

spark/

[root@master ~]#

在master机上操作:进入/usr/cstor目录中。

[root@master ~]# cd /usr/cstor

[root@master cstor]#

进入配置文件目录/usr/cstor/spark/conf, 先拷贝并修改slave.templae为slave。

[root@master ~]# cd /usr/cstor/spark/conf

[root@master cstor]# cp  slaves.template slaves

(2) 在spark-conf.sh中加入JAVA_HOME。

[root@master cstor]# vim /usr/cstor/spark/sbin/spark-config.sh

加入以下内容

export JAVA_HOME=/usr/local/jdk1.7.0_79

(3) 启动Spark集群。

[root@master local]# /usr/cstor/spark/sbin/start-all.sh

图5-2  Spark启动成功效果图

5.2  数据可视化

5.2.1  登录

用户登录时需要在登录界面输入用户名、密码进行身份认证,要求必须是表单认证、校验。其配置文件中配置了相应的Realm 类,当用户登录系统进行身份认证和权限控制时。具体流程如时序图如5-3所示。

图5-3  登录界面

5.2.2  农产品数据管理

如果用户要查看农产品的信息,就需要进入到农产品的管理页面中,添加农产品的相关信息,并且要注意输入正确的信息,输入的农产品记录与数据库的记录不能冲突。添加农产品会有农产品的详细信息,当然用户也可以对农产品信息进行删除。效果如图5-4所示。

图5-4  农产品管理界面

5.2.3  农产品价格预测

用户输入用户名和密码可以登录到系统中,在价格预测界面中能够预测价格的信息,价格预测界面如图5-5所示。

图5-5 价格预测管理

5.3  农产品大屏分析

系统通过对不同类型的农产品数量和均价进行统计,计算,在前端界面渲染结果,最终农产品大数据展示看板如图5-6所示,图中内容展示的是农产品数量的分布情况和农产品均价的情况。

图5-6  全国农产品大屏分析

5.4  本章小结

本章主要分析了基于大数据的农产品信息可视化分析系统开发过程中使用到的技术和具体的实现步骤,这其中主要介绍了基于Spark框架的农产品信息可视化大数据分析系统的搭建环境和开发步骤,包括程序中的一些数据库配置等。前端页面采用的是Echarts和html实现。

6  总结

6.1  结论

本文从整体框架出发,对农产品数据分析系统进行了设计和实施。同时,为更好的完成此次的毕业设计和论文,我们也了解到很多的程序和程序代码。该农产品数据分析系统具有以下优点:

(1)这个农产品数据分析系统是以Flask开放源码系统结构为基础的,它的核心理念是分层,把所有的工程划分为不同的等级,分层的概念不仅可以简化业务过程的逻辑,降低了冗余的冗余,还可以促进工程具有更强的移植性。

(2)一个农产品数据分析系统理制度定义了很多共同的控制单元,所有的单元都要包含一个共同的控制单元,如果在各个单元的代码中都有一个共同的控制单元,那么这个单元就会给人一种代码多余的感觉,这样就可以将所有的控制单元分开。

(3)在先前的实施系统的基础上,采用分页技术来完成多个页面的显示。

6.2  展望

近年来,我国的农产品数据分析系统已具有相当大的发展空间,只要能够扩大规模,做好相关的相关业务,其发展前景不可低估。该系统具有良好的视觉效果、运行稳定、易于维修等特点。不过,因为自己的编程水平,这套系统还是需要完善的。

(1)支付方式,当前的农产品数据分析系统采用的是一种虚拟支付方式,可以通过支付宝的支付接口进行支付。

(2)推荐服务,在登录后,向用户提供有关的系统信息。

(3)界面美化,可以按照 CSS样式来美化用户的界面。

参 考 文 献

[1] 苏照军.基于组合模型的农产品物价预测系统设计与实现[D].中国科学院大学(中国科学院沈阳计算技术研究所),2019.

[2] 朱勉茂.农产品市场价格预测预警系统研究-以广东省猪肉市场为例[D].华南农业大学,2020.

[3] 南京绿色科技研究院有限公司.全国农产品价格监测预测系统[C]//中国畜牧兽医学会信息技术分会第十届学术研讨会.中国畜牧兽医学会信息技术分会, 2015.

[4] 徐鑫洲,马开平.基于系统动力学的我国大豆价格预测分析[J].大豆科学, 2018, 37(5):7..

[5] 许杞刚.基于改进KNN-BPNN算法的山东省农产品价格预测模型[D].济南大学,2015.

[6] 林建辉.基于GPS的用于农业的智能系统:CN201510192860.4[P].CN104778610A[2023-11-29].

[7] 宋丹丹.浅析数据分析在农产品价格预测中的应用[J].南方农业, 2020, 14(29):2..

[8] 王长松.我国农产品价格预测模型的甄选[D].江西财经大学,2016.

[9] 陈旭唐卫红张向飞潘家铭杨娟邵芳.上海农产品价格监测与分析预测系统构建[J].上海农业学报, 2018, 034(004):115-120.

[10] 陈旭,唐卫红,张向飞,等.上海农产品价格监测与分析预测系统构建[J].上海农业学报, 2018, 34(4):6.

[11] 杨雄钢.基于web的农产品市场价格分析与预测信息系统设计与实现[J].农家参谋, 2018(17):2..

致  谢

时间过的飞快,我的大学生涯也即将结束,通过前期的知识储备和论文的撰写,让我明白了做好一件事所需要的不仅仅是方法,还有耐心,最重要的是得到大家的帮助,在此,我要感谢所有帮助过我的人。

首先,我要感谢我的导师,从论文定题开始到论文的不断修改,导师都给了我很多的指导和帮助,在这个过程,我成长的很快,也从一开始的不断犯错到后来的不断总结,了 解了程序开发的基本规范,明白了数据分析的意义和价值,清楚了论文撰写的严谨和科研的认真态度,导师是我的榜样,他的一言一行都在影响着我,让我在今后的人生道路中不断积累,不断前行。

其次,我也要感谢宿舍里的同窗,虽然宿舍里的人来自不同的地区,她们的经历也不同,但是在共同的学习和生活中,她们不仅互相帮助,还互相帮助,互相帮助。我们共同面对并解决了许多问题,这些都使我感到温暖。

最后,我要感谢我的家人,我的求学过程都是在家人的支持下进行的,没有他们的付出,我不能顺利的完成学业,在此,感谢他们的无私奉献。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 用户行为数据分析是当今互联网领域的研究热点之一,它可以帮助企业深入了解用户需求、改进产品服务以及优化营销策略。本文提出了基于Spark的用户行为数据分析系统设计实现,旨在为企业提供一个高效、可扩展且易于使用的数据分析平台。 首先,我们将使用Spark作为底层的数据处理引擎,因为Spark具有良好的并行计算能力和高容错性,可以处理大规模的数据集。同时,Spark提供了丰富的API和库,可以方便地进行数据处理、机器学习和图计算等操作。因此,选择Spark作为数据分析系统的核心组件是十分合适的。 其次,我们将采用分布式架构来设计用户行为数据分析系统系统包括数据采集、数据处理、数据存储和数据分析四个模块。数据采集模块负责从不同渠道收集用户行为数据,并进行初步的清洗和转换。数据处理模块利用Spark进行数据的分布式处理和计算,可以实现实时、批量和增量等处理模式。数据存储模块使用分布式文件系统或NoSQL数据库来存储数据,以满足大规模数据存储和高并发访问的需求。数据分析模块基于Spark提供的机器学习和图计算功能,对数据进行深入挖掘和分析,并产生有价值的业务洞察。 最后,我们将实现一个用户行为数据分析的应用案例。以电子商务为例,我们可以分析用户的购买行为、浏览行为和搜索行为等,为企业提供用户画像、产品推荐和精准营销等服务。通过构建合适的数据模型和算法模型,我们可以挖掘出用户的隐含需求,从而提升用户体验和增加销售额。 总的来说,基于Spark的用户行为数据分析系统设计实现,可以帮助企业实现对用户行为数据的全面分析和理解,为企业的决策和发展提供支持。通过构建高效、可扩展的数据分析平台,我们可以挖掘出更多用户需求,提高产品和服务的质量,从而获得竞争优势。 ### 回答2: 用户行为数据分析系统设计实现是基于spark平台的一个重要研究方向。本文将重点介绍该系统设计实现,详细阐述其研究背景、研究目标和研究方法。 首先,我们介绍用户行为数据分析系统的研究背景。随着互联网的迅猛发展,人们日常生活中产生了大量的用户行为数据,如购买记录、搜索记录等。这些数据包含了丰富的信息,可以帮助企业了解用户需求和行为习惯,从而优化产品设计和营销策略。然而,由于数据量大、数据种类繁多,传统的数据分析方法已经无法满足需求,因此我们需要设计一个高效、可扩展的分析系统来应对这一挑战。 其次,我们明确本文的研究目标。我们的目标是基于spark平台搭建一个用户行为数据分析系统,能够快速处理大规模数据并提供灵活的分析工具。具体来说,我们将主要关注以下几个方面:1)设计一个高效的数据处理框架,包括数据清洗、转换和加载等环节;2)开发适用于不同场景的用户行为分析算法,如用户购买预测、用户聚类等;3)实现用户友好的可视化界面,方便用户进行数据探索和分析。 最后,我们介绍本文的研究方法。基于spark平台的用户行为数据分析系统设计实现主要包含以下几个步骤:1)数据采集:我们首先需要收集用户行为数据,并存储到分布式存储系统中,如Hadoop HDFS;2)数据预处理:对采集到的数据进行清洗和转换,去除噪声和异常值,并将其转化成适合分析的格式;3)数据分析:利用spark强大的分布式计算能力,运用各种机器学习算法进行用户行为数据分析,如协同过滤、决策树等;4)结果可视化:将分析结果通过可视化界面展示给用户,方便用户进行数据探索和分析,并提供交互式操作的功能。 综上所述,本文旨在基于spark平台设计实现一个高效、可扩展的用户行为数据分析系统。通过该系统,用户可以快速处理大规模数据,并进行灵活的数据分析,帮助企业更好地了解用户需求和行为习惯,从而优化产品设计和营销策略。 ### 回答3: 用户行为数据分析系统是一种能够对用户的行为数据进行收集、分析和预测系统。本文介绍了一个基于Spark框架的用户行为数据分析系统设计实现。 首先,我们需要定义系统的目标和功能。本系统的目标是对用户行为数据进行分析,以提供个性化推荐和精准广告投放。系统需要具备以下功能:数据收集、数据预处理、数据挖掘与分析、模型训练和预测、结果展示等。 系统的数据收集模块利用Spark Streaming组件实时获取用户行为数据。数据包括用户浏览记录、购物行为、搜索记录等。数据预处理模块负责数据清洗、去重、转换等。Spark SQL组件用于数据的查询、统计和分析。数据挖掘与分析模块使用Spark MLlib库进行特征提取、聚类分析、关联规则挖掘等。模型训练和预测模块基于Spark的机器学习算法进行模型训练和预测,如协同过滤、分类等。结果展示模块使用可视化工具,如Tableau等,展示数据分析结果。 系统设计上,采用了面向服务的架构,将不同功能模块封装为独立的服务,通过RESTful API进行通信。系统采用分布式存储,如HDFS和HBase,保证系统的性能和可扩展性。Spark提供了高效的分布式计算框架,能够快速处理大规模的用户行为数据。 在实现方面,我们层次化开发,从数据收集、数据预处理到数据挖掘与分析逐步实现。采用Scala编程语言,结合Spark的API进行开发。使用Kafka作为消息队列,实现实时数据的收集和处理。使用Spark SQL和MLlib库进行数据分析和模型训练。使用常见的开源可视化工具展示数据分析结果。 本系统实现将提高用户行为数据分析的效率和精度,能够为企业决策和用户推荐提供有价值的参考。它基于Spark分布式计算框架实现,可以处理大规模的用户行为数据,并且具有良好的扩展性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值