《Python数据分析项目案例》猪肉(生猪)价格爬取与可视化分析(期末大作业、课程设计、毕业设计) | 您所在的位置:网站首页 › 大数据技术期末大作业 › 《Python数据分析项目案例》猪肉(生猪)价格爬取与可视化分析(期末大作业、课程设计、毕业设计) |
声明
本文仅在CSDN发布,其他均为盗版。请支持正版!
正版链接:https://blog.csdn.net/meenr/article/details/107326104 基于python语言的生猪价格爬取与可视化分析长文,多图预警,建议先收藏,后阅读。需要工程代码可直接阅读文末。 目录 基于python语言的生猪价格爬取与可视化分析1 数据资源2 生猪价格数据挖掘系统设计2.1 系统总体设计2.1.1 系统设计目标2.1.2 系统流程图2.1.3 系统组成简介 2.2 系统功能模块设计2.2.1 数据爬取模块设计2.2.2数据预处理与可视化模块设计2.2.3 数据简单回归分析模块设计2.2.4 门限回归预测与可视化模块设计2.2.5 预测结果误差分析与可视化模块设计 3 生猪价格数据挖掘系统实现3.1 系统运行环境配置(计算机配置、Python软件简介)3.2 系统功能模块实现3.2.1 数据爬取3.2.2 数据预处理与可视化3.2.3 数据简单回归分析3.2.4 门限回归预测与可视化3.2.5 预测结果误差分析与可视化 4 资料获取途径一途径二 1 数据资源爬取最近一年的每天的生猪(包括外三元、内三元和土杂猪)的价格和相关饲料原料(玉米和豆粕)的价格。 数据特性如表1.1所示: 表1.1 数据特性 名称描述pigprice生猪(外三元)价格pig_in生猪(内三元)价格pig_local生猪(土杂猪)价格maizeprice玉米价格bean豆粕价格time日期pork猪肉价格 2 生猪价格数据挖掘系统设计 2.1 系统总体设计 2.1.1 系统设计目标通过对过去一年的的每天的生猪(包括外三元、内三元和土杂猪)的价格和相关饲料原料(玉米和豆粕)的价格数据进行数据挖掘,建立模型,再通过玉米价格变化来预测生猪价格。 2.1.2 系统流程图本系统由数据爬取、数据预处理与可视化、数据简单回归分析、门限回归预测与可视化、误差分析与可视化五大模块组成。爬取互联网上的生猪(包括外三元、内三元和土杂猪)的价格和相关饲料原料(玉米和豆粕)的价格数据,判断生猪价格的趋势,预测生猪价格随玉米价格变化的情况、以及进行数据处理分析、与可视化。 2.2 系统功能模块设计该模块主要功能是从网络上获取数据。将获得的json格式数据进行转换,并保存到本地的Excel表格中。 2.2.2数据预处理与可视化模块设计该模块主要功能是对爬取的原始数据进行预处理,如对外三元、内三元和土杂猪三类生猪价格求均值等,方便后续使用。另外对原始数据各个变量随时间变化的情况进行可视化分析,绘制变化趋势的图像。 2.2.3 数据简单回归分析模块设计该模块主要功能是通过对数据进行三种简单的回归分析,找到三种回归模型中最合适的回归模型。 2.2.4 门限回归预测与可视化模块设计该模块主要功能是通过对玉米价格与生猪价格进行门限回归预测建模分析,预测生猪价格。 2.2.5 预测结果误差分析与可视化模块设计该模块主要功能是对预测的生猪价格和生猪实际价格进行误差分析,并进行可视化分析,绘制标准差、方差的图像。 3 生猪价格数据挖掘系统实现 3.1 系统运行环境配置(计算机配置、Python软件简介)计算机配置:Windows10 Python软件:Python3.7,Anaconda(Spyder3),PyCharm 2019, 3.2 系统功能模块实现 3.2.1 数据爬取(1) 流程及操作步骤说明 该模块是获得数据的关键,获得原始数据的必由之路,从网络爬取生猪价格等信息。 (2) 程序代码及详细注释 ''' 部分代码 ''' list_date = [time.strftime(format1, time.localtime(i)) for i in range(bgn, end + 1, 3600 * 24)] return list_date def Html_Data(url): response = requests.get(url=url, headers=header) if response.status_code == 200: data = response.content file = open("pig.html", "wb", 1) file.write(data) file.close() return data else: print("请求失败") def Get_Json(url): response = requests.get(url, headers=header) json_text = response.json() 图3.1 数据爬取代码(3) 运行结果及分析 该模块运行后现象: 打印“请求成功”,即表示网络请求正常,可以访问;打印爬取到的数据,即爬取成功;打印生成的最近一年的日期列表。 保存了网页源码“pig.html”文件到本地;保存爬取到的数据“原始数据.xlsx”文件到本地。 (1) 流程及操作步骤说明 该模块对爬取获得的原始数据进行预处理,标准化数据 。 (2) 程序代码及详细注释 ''' 部分代码 ''' data2=pd. DataFrame(data2, columns=columns) data2.rename(columns={'time': '日期', 'pig_mean': '生猪', 'maizeprice': '玉米', 'bean': '豆粕'}, inplace=True) data2.to_excel("预处理1.xlsx", index=False) data2['日期'] = pd.to_datetime(data2['日期'], format='%Y%m%d') data2.to_excel("预处理2.xlsx", index=False) def Fig(data): mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] x = data['日期'] y1 = data['生猪'] y2 = data['玉米'] fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(x, y1,'r-') ax1.set_ylabel("生猪平均价格(元/公斤)") ax1.set_title("生猪价格与玉米价格波动情况") plt.legend(['生猪价格']) ax2 = ax1.twinx() ax2.plot(x, y2, 'b-') ax2.set_ylabel('玉米(15%水分) 元/吨') ax2 = plt.gca() ax2.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) plt.xticks(pd.date_range('2019-5-1', '2020-5-10', freq='1m')) plt.legend(['玉米价格']) plt.figure() 图3.3 数据预处理和可视化代码1(3) 运行结果及分析 通过对数据的预处理获得该项目研究需要的数据,将三种生猪价格求均值,方便项目后续使用。行列操作也将数据排列更加易于后续使用。 另外通过可视化分析可以清楚直观的反应出最近一年生猪价格、玉米价格和豆粕价格的波动情况。 从以上两幅图可以对比验证生猪(外三元)价格数据的准确性。 生猪价格是对三种生猪价格求均值得到的,所以会有较小的偏差。 (1) 流程及操作步骤说明 该模块对预处理后获得的数据进行简单回归分析。 (2) 程序代码及详细注释 '''部分代码''' plt.ylabel('生猪价格') plt.grid(True) plt.plot(x, y, 'k.') plt.show() def Anlys2(data): matplotlib.rc('font', **font) matplotlib.rcParams['axes.unicode_minus'] = False def Anlys3(data): mpl.rcParams['axes.unicode_minus'] x = data[['玉米']] y = data[['生猪']] print("===", data['玉米'].corr(data['生猪']), "===") pf = PolynomialFeatures(degree=2) x_2_fit = pf.fit_transform(x) 图3.13 数据简单回归分析代码(3) 运行结果及分析 运行结果打印出:简单回归评分:0.15和玉米价格为1990,2000,2010时对应预测的三个生猪价格分别为:29.22、29.53、29.74。 绘制生猪价格与玉米价格的散点图图像,如图3.14所示。 从图3.14和打印的回归评分可以看出,生猪价格和玉米价格几乎不存在单纯的线性关系,所以若要通过玉米价格预测生猪价格,必须换更高级的回归模型。 3.2.4 门限回归预测与可视化(1) 流程及操作步骤说明 通过查找资料文献得到了分析生猪价格与玉米价格的方法,该模块对预处理后的获得的数据构建门限回归模型预测生猪价格,设计了九个函数,除此之外,还进行了可视化分析。 (2) 程序代码及详细注释 '''部分代码''' Y=np.column_stack((Y,data[:,data.shape[1]-1])) Y=resort_bymenxian(Y,0) Y=resort_bymenxian(Y,0) pdt = pd.DataFrame(Y) pdt.rename(columns={0: '玉米',1: '预测',2: '实际'}, inplace=True) pdt.to_excel("预测数据.xlsx", index=False) print("预测值:",Y[:,1]) mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] ax1 = plt.subplot(211) plt.plot(Y[:,0],Y[:,1],'r', linestyle=":") plt.title('预测值',fontsize=10) plt.xlabel('玉米价格') plt.ylabel('生猪价格') ax1 = plt.subplot(212) plt.plot(Y[:,0],Y[:,2],'g', linestyle=":") plt.title('实际值',fontsize=10) plt.xlabel('玉米价格') 图3.15 数据门限回归分析代码(3) 运行结果及分析 运行结果打印出预测的所有数据。绘制生猪实际价格与预测价格随玉米价格变化的波动情况的图像,如图3.16-3.19所示。 (1) 流程及操作步骤说明 该模块对门限回归预测后的获得的数据进行误差分析和可视化,设计了三个函数。 (2) 程序代码及详细注释 '''部分代码''' data1 = df[0:][['预测', '实际']] data2 = data1.T data2.loc["标准差"]= data2.apply(lambda x: x.std()) data2.loc["方差"] = data1.T.apply(lambda x: x.var()) data2.to_excel("误差分析.xlsx", index=True) def Fig(df1): data=read_excel('误差分析.xlsx').T data.to_excel("误差分析1.xlsx", index=False,columns=None) data1 = read_excel('误差分析1.xlsx') data1.rename(columns={0: '预测', 1: '实际',2: '标准差',3: '方差'}, inplace=True) data2=data1.drop(index=[0]) mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 mpl.rcParams['axes.unicode_minus'] x1 = df1['日期'] y1 = data2['预测'] y2 = data2['实际'] y3 = data2['标准差'] y4 = data2['方差'] 图3.20 预测误差分析代码(3) 运行结果及分析 运行后打印出生猪价格预测值、实际值以及它们的标准差和方差,如图3.21所示;绘制出生猪价格预测值与实际值的波动情况,以及它们的标准差和方差与时间的图像,如图3.22-3.25。 从图3.25可以看出预测误差较小的价格月份和预测误差较大的月份有哪些。2019.07.15-2019.09.15、2019.12.01-2020.12.31、2020.02.15-2020.03.15、2020.04.01-2020.05.08这几个时间段预测较为稳定准确。 4 资料获取感兴趣的读者可获取参照以下方式获取本文相关资料。优先推荐途径一,若遇途径一失效,请再尝试途径二。 途径一优先推荐该途径 第一步:扫描下方二维码,或打开微信搜索并关注“ 2贰进制 ”公众号; 第二步:回复“ 生猪价格 ”可获取本文相关资料。 优先推荐途径一,该途径管理可能不能秒回 扫描下方二维码,加入学习交流QQ群“ 480558240 ”,联系管理员获取包括但不限于本篇内容的更多学习资料。 此致 感谢您的阅读、点赞、评论、收藏与打赏。 |
CopyRight 2018-2019 实验室设备网 版权所有 |