正版链接:https://blog.youkuaiyun.com/meenr/article/details/107326104
基于python语言的生猪价格爬取与可视化分析
长文,多图预警,建议先收藏,后阅读。需要工程代码可直接阅读文末。
1 数据资源
爬取最近一年的每天的生猪(包括外三元、内三元和土杂猪)的价格和相关饲料原料(玉米和豆粕)的价格。
数据特性如表1.1所示:
名称 | 描述 |
---|---|
pigprice | 生猪(外三元)价格 |
pig_in | 生猪(内三元)价格 |
pig_local | 生猪(土杂猪)价格 |
maizeprice | 玉米价格 |
bean | 豆粕价格 |
time | 日期 |
pork | 猪肉价格 |
2 生猪价格数据挖掘系统设计
2.1 系统总体设计
2.1.1 系统设计目标
通过对过去一年的的每天的生猪(包括外三元、内三元和土杂猪)的价格和相关饲料原料(玉米和豆粕)的价格数据进行数据挖掘,建立模型,再通过玉米价格变化来预测生猪价格。
2.1.2 系统流程图
2.1.3 系统组成简介
本系统由数据爬取、数据预处理与可视化、数据简单回归分析、门限回归预测与可视化、误差分析与可视化五大模块组成。爬取互联网上的生猪(包括外三元、内三元和土杂猪)的价格和相关饲料原料(玉米和豆粕)的价格数据,判断生猪价格的趋势,预测生猪价格随玉米价格变化的情况、以及进行数据处理分析、与可视化。
2.2 系统功能模块设计
2.2.1 数据爬取模块设计
该模块主要功能是从网络上获取数据。将获得的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) 运行结果及分析
该模块运行后现象:
打印“请求成功”,即表示网络请求正常,可以访问;打印爬取到的数据,即爬取成功;打印生成的最近一年的日期列表。
保存了网页源码“pig.html”文件到本地;保存爬取到的数据“原始数据.xlsx”文件到本地。
3.2.2 数据预处理与可视化
(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.2.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) 运行结果及分析
运行结果打印出:简单回归评分: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) 运行结果及分析
运行结果打印出预测的所有数据。绘制生猪实际价格与预测价格随玉米价格变化的波动情况的图像,如图3.16-3.19所示。
3.2.5 预测结果误差分析与可视化
(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) 运行结果及分析
运行后打印出生猪价格预测值、实际值以及它们的标准差和方差,如图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 ”,联系管理员获取包括但不限于本篇内容的更多学习资料。
2贰进制–Echo 2020年4月
兴趣是最好的老师,赠人玫瑰手留余香,如果您觉得本文还不错,请点赞+评论+收藏,关注更是我前进的动力!
如果本文对你有所帮助,解决了您的困扰,可以通过赞赏来给予我更大支持:
此致
感谢您的阅读、点赞、评论、收藏与打赏。