admin管理员组文章数量:1564668
目录
1 开发环境
2 程序功能介绍
(1)实验目的
(2)数据说明
(3)技术说明
3 程序设计的思路
4 关键技术及难点
5 程序的详细设计
5.1 爬取数据
5.2 读取数据
5.3查看数据的整体情况
5.4数据清洗
5.5数据分析
6 可视化展示
7 结论
1 开发环境
主要是Jupyter Notebook
2 程序功能介绍
(1)实验目的
参考智慧农业导论课程内容,结合本专业已学课程知识,开展涉农数据的“爬取—清洗—存储—可视化—结论性分析”的工作,通过分析,实现对数据的整体评价或预测。
(2)数据说明
本次爬虫实验共爬取了100页,2000条数据,八列分别为产地、单位、发布日期、品名、平均价、最低价、最高价、规格等,其中无重复值,产地有403个缺失值,规格有1259个缺失值,缺失值过多不能直接删除,这两个变量在后续研究中只看比较关系,无需填充,所以不用进行缺失值处理。数据类型有两类,object类型的数据有产地、单位、发布日期、品名、规格等,float64类型的数据包括平均价、最低价、最高价等。
(3)技术说明
采用Python3技术使用requests库的post()方法来爬取数据。
3 程序设计的思路
向HTML网页提交POST请求的方法,对应于HTTP的POST,找到蔬菜信息页面,然后进行翻页,发现页面的url没有发生改变,所有蔬菜信息是通过接口数据动态获取的,是动态数据。进行chrom调试抓包,找到每个页面信息所在的url,发现每个信息的url都相同,post请求,formdata不同。通过修改提交的data来获取不同页面的蔬菜信息。
4 关键技术及难点
- 如何爬取大量数据且保证数据的有效性
- 数据处理的方法,相关函数的应用,图像的制作
- 选定所要制作图像的数据
- 对所得结果的综合性分析
5 程序的详细设计
5.1 爬取数据
利用在页码框输入页码指定需要爬取的页面数目
爬取数据网址:新发地官网:http://www.xinfadi/priceDetail.html
import json #解析网页函数 #解析json函数 |
5.2 读取数据
导入数据集并进行查看,(爬取蔬菜相关信息.xlsx)
import pandas as pd df1 = pd.read_excel(r'E:\\爬取蔬菜相关信息.xlsx') df1 df1.head()#显示前5条记录 |
5.3查看数据的整体情况
查看数据的规模,对数据的初步统计信息有所了解
(1)查看数据的规模:行数和列数 print(df1.shape) #查看维度 print(df1.index.size) #获得行数 print(df1.columns.size) #获得列数 数据规模(2000,8) (2)利用info()查看数据的维度、字段名及类型等 df1.info() (3)利用describe()查看数据初步统计信息 df1.describe() 数据的初步统计信息 图一 |
5.4数据清洗
对重复值,缺失值进行查看与处理
(1)重复值处理 #查看是否存在重复行 df1.duplicated() #查看重复行与非重复行的数量 cf = df1.duplicated() cf.value_counts() 无重复行,无需对重复行进行操作 (2)缺失值处理 #查看各元素是否为空值 df1.isnull() #查看各列是否存在空值 #只要该列有空值,就为True df1.isnull().any() #各列含空值的具体数目 df1.isnull().sum() 可以得到该数据集中产地有403个缺失值,规格有1259个缺失值,缺失值过多不能直接删除,这两个变量在后续研究中只看比较关系,所以无需填充 (3)产看规格列包含具体种类 p1 = df1['规格'].drop_duplicates() ww = [] for i in p1: ww.append(i) ww #查看规格列各种类出现的次数 from collections import Counter Counter(df1['规格']) 可以看到规格为'袋\箱'的较多,出现了68次,其次依次是'洗'47次,'新'47次,'泥\洗'34次,'老'30次等,'散装'出现较少,仅有4次,规格列缺失较多,但我们只需对已有的值进行分析,缺失值不影响比较结果,所以不对其进行处理 |
5.5数据分析
(1)查看每一列的数据类型 df1.dtypes (2)查看价格的相关情况 #最高价的平均值 pj1 = df1['最高价'].mean() print("最高价的平均值是{}".format(pj1)) #最高价的众数: zs1 = df1['最高价'].mode() print("最高价的众数是:{}".format(zs1)) #最高价的方差: fc1 = df1['最高价'].var() print("最高价的方差是:{}".format(fc1)) #最低价的平均值 pj2 = df1['最低价'].mean() print("最低价的平均值是{}".format(pj2)) #最低价的众数: zs2 = df1['最低价'].mode() print("最低价的众数是:{}".format(zs2)) #最低价的方差: fc2 = df1['最低价'].var() print("最低价的方差是:{}".format(fc2)) #平均价的平均值 pj3 = df1['平均价'].mean() print("平均价的平均值是{}".format(pj3)) #平均价的众数: zs3 = df1['平均价'].mode() print("平均价的众数是:{}".format(zs3)) #平均价的方差: fc3 = df1['平均价'].var() print("平均价的方差是:{}".format(fc3)) data = {'平均值':[pj1,pj2,pj3],'众数':[zs1,zs2,zs3],'方差':[fc1,fc2,fc3]} w = pd.DataFrame(data,index= |
版权声明:本文标题:农业领域数据资源获取与分析——爬取新发地官网信息 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1727109232a1098059.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论