![cover](https://img-blog.csdnimg.cn/5672066c620c4c7fb2605afeade5b32f.png)
基于农产品(蔬菜)数据挖掘的分析与实现(Python+Spider)
数掘是指从大量的数据中抽取隐含的、不为人知的、有用的信息。“开采”信息,通常表示为数据集的语义结构的模型,其中模型可用于预测或分类的新数据[6]。数据信息模块当中的各种不同农产品数据的类型的数据采集环境中的数据来自农产品网站,然后再把数据信息模块中的数据经过Python工具进行处理,再把模块上的处理过的数据,通过组建的爬虫网络进行数据传输,将数据发送给用户;在农产品(蔬菜)的数据挖掘数据处理中,我
目 录
摘 要 I
Abstract II
1绪论 1
1.1研究背景 1
1.2项目来源 1
1.3研究目的 2
1.3研究现状 2
1.4主要内容及预期目标 3
1.4.1数据挖掘技术简述及优点 3
1.4.2程序设计思路 3
1.4.3节点布置方案 4
1.4.4预期目标 5
2农产品(蔬菜)价格形成机制及影响因素分析 6
2.1蔬菜价格形成机制研究 6
2.2蔬菜价格影响因素分析 6
2.2.1市场内部影响因素 6
2.2.2市场外部影响因素 9
2.3蔬菜价格影响因素的测度 10
2.3.1变量与样本的选择 10
2.3.2模型形式与估计方法 11
2.3.3估计结果分析 11
3农产品(蔬菜)价格数据模型方案及功能分析 13
3.1分析与设计 13
3.2技术路线 13
3.2.1使用工具 13
3.2.2时间序列短期预测方法及模型 14
3.2.3数据采集模块 14
3.2.4功能实现模块 15
3.3数据仓库的组建 16
4农产品(蔬菜)价格短期预测模型的构建和实现 17
4.1 研究方法以及模型的基本原理 17
4.1.1研究方法 17
4.1.2模型的基本原理 17
4.2 估计步骤 19
4.2.1 利用ADF检验序列及其一阶差分的平稳性 19
4.2.2 选择模型的滞后阶数 19
4.2.3 Granger因果检验 20
3.2.4 Johansen协整检验及模型的建立 20
3.2.5误差修正模型的构建及检验 21
4.3 Python数据爬取网站 21
4.4 Python分析思路 21
4.5 Python爬虫源码说明 24
4.5.1首先创建一个Spider 24
4.5.2行情数据 24
4.5.3产地数据 29
4.5.4行情分布 32
4.5.5价格走势 41
4.5.6设计字典 44
4.5.7数据入库 47
总 结 53
参考文献 54
致 谢 55
1.4主要内容及预期目标
1.4.1数据挖掘技术简述及优点
数掘是指从大量的数据中抽取隐含的、不为人知的、有用的信息。数据挖掘是发现以前未知和潜在有趣的过程,在大数据集的模式(Piatetsky Shapiro和Frawley,1991)。“开采”信息,通常表示为数据集的语义结构的模型,其中模型可用于预测或分类的新数据[6]。数据挖掘也能被描述为试图创建一个数据库中描述的复杂世界的简单的模型,因而我们也可以说数据挖掘是处理大量信息的方法,并且它有助于比人更快的速度发现有用的信息[7]。数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现数据挖掘[8]。
1.4.2程序设计思路
在农产品(蔬菜)的数据挖掘数据处理中,我们首先要寻找到足够的大量的农产品相关的数据信息的来源,因为拥有大量的数据信息是数据挖掘和数据处理的基础。其次是我们要做一些数据的准备:选择数据,就是确定待挖掘的数据的目标;数据预处理:研究数据的质量,确定将要进行的数据类型;数据转换:就是转换成一个分析模型。然后进行数据的挖掘:选择合适的挖掘算法。最后就是结果分析,主要是对提取的数据信息的可靠性、有效性等进行评估。
3农产品(蔬菜)价格数据模型方案及功能分析
3.1分析与设计
数据信息模块当中的各种不同农产品数据的类型的数据采集环境中的数据来自农产品网站,然后再把数据信息模块中的数据经过Python工具进行处理,再把模块上的处理过的数据,通过组建的爬虫网络进行数据传输,将数据发送给用户;用户模块接收Python工具模块发送过来的数据,并将这些数据进行处理、分析、整合,由结果分析模块把处理出来的数据经过结果分析模块将数据显示出来;结果分析模块通过建立的后台数据库将数据进行存储。设计的总体结构图如图3所示。
图3 总体结构图
3.2技术路线
3.2.1使用工具
(1)Python编程语言
(2)再用Hadoop处理数据
(3)MySQL数据库
(4)Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架
3.2.2时间序列短期预测方法及模型
随着计量经济建模理论的发展与完善,时间序列分析与预测得到了广泛应用。目前,常用的时间序列短期预测方法与模型主要有时间趋势外推
法、季节分解法、指数平滑法和 Box Jenkins 法。
趋势外推法。当时间序列具有某种上升或下降的趋势,并且无明显的季节波动时,通常采用简单趋势外推预测模型,主要包括多项式曲线预测模型、指数曲线预测模型、对数曲线预测模型、生长曲线预测模型等 4种。当既有某种上升或下降趋势,又存在季节性波动时,需要加入季节虚拟变量。常用方法有截距变动模型、斜率变动模型、截距和斜率同时变动模型。
季节分解法。将影响时间序列变化的因素分为 4 种:长期趋势因素( trend,T ) ,表示随着时间变化按照某种规律稳步上升、下降或保持在某一水平上; 季节变动因素( seasonal,S) ,表示在 1 个年度内依一定周期规律性变化; 循环变动因素( circle,C) ,表示以若干年为周期的变动变化; 不规则变动因素 ( irregular,I) ,表示不可控的偶然因素,如地震、水灾、恶劣天气、罢工和意外事故等。季节分解常用模型有:乘法模型( Y = T SCI ) 和加法模型( Y =T + S + C+ I) 。
指数平滑法。以本期实际数和本期预测数为基础,引入 1 个简化加权因子( 平滑系数) 的一种指数平滑预测法。
Box Jenkins 法。如果时间序列是非平稳的,先将序列变成平稳序列,变化后的新序列仍保持原时间序列的随机性。主要模型包括:自回归模型( AR) 、移动平均模型( M A) 、自回归移动平均模型( ARMA) 或差分自回归移动平均模型( ARIM A 或SARIM A) 。
# -*- coding: utf-8 -*-
importscrapy
frommySpider.items import MyspiderChanDi
fromcopy import deepcopy
classChandiSpider(scrapy.Spider):
name = 'chandi'
allowed_domains = ['hangqing.ymt.com']
start_urls =['http://hangqing.ymt.com/chandi_8031_0_0']
#省份数据
def parse(self, response):
#产地列表
li_list =response.xpath("//div[@class='fl sku_name']/ul//li")
for li in li_list:
items = MyspiderChanDi()
items["ymt_province_href"] =li.xpath("./a/@href").extract_first()
items["ymt_province_id"]= items["ymt_province_href"].split("_")[-1]
items["ymt_province_name"]= li.xpath("./a/text()").extract_first()
yield scrapy.Request(
items["ymt_province_href"],
callback=self.parse_city_detail,
meta={"item":deepcopy(items)}
)
#城市数据
def parse_city_detail(self, response):
item = response.meta["item"]
option =response.xpath("//select[@class='location_select'][1]//option")
if len(option) > 0:
for op in option:
name = op.xpath("./text()").extract_first()
if name != "全部":
item["ymt_city_name"] = name
item["ymt_city_href"] =op.xpath("./@data-url").extract_first()
item["ymt_city_id"] = item["ymt_city_href"].split("_")[-1]
yield scrapy.Request(
item["ymt_city_href"],
callback=self.parse_area_detail,
meta={"item":deepcopy(item)}
)
else:
item["ymt_city_name"] =""
item["ymt_city_href"] =""
item["ymt_city_id"] = 0
yield scrapy.Request(
item["ymt_city_href"],
callback=self.parse_area_detail,
meta={"item":deepcopy(item)}
)
#县市数据
def parse_area_detail(self, response):
item = response.meta["item"]
area_list =response.xpath("//select[@class='location_select'][2]//option")
if len(area_list) > 0:
for area in area_list:
name =area.xpath("./text()").extract_first()
if name != "全部":
item["ymt_area_name"] = name
item["ymt_area_href"] = area.xpath("./@data-url").extract_first()
item["ymt_area_id"] =item["ymt_area_href"].split("_")[-1]
yield item
else:
item["ymt_area_name"] =""
item["ymt_area_href"] =""
item["ymt_area_id"] = 0
yield item
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)