正版链接:https://blog.csdn.net/meenr/article/details/107326104
基于python语言的生猪价格爬取与可视化分析
长文,多图预警,建议先收藏,后阅读。需要工程代码可直接阅读文末。
1 项目背景及目的
1.1 项目背景
猪肉在我国肉类产品消费中的占比超过66%,在食品中的占比超过20%,因而猪肉是关乎国计民生的重要食品,生猪生产自然而然也就成为了重中之重,受到了社会的广泛关注。
生猪是我国农产品市场中最基本、最重要的组成部分,生猪价格是农产品市场的核心要素。然而,近年来生猪价格波动异常,经常陷入“猪贵伤民,猪贱伤农”的恶性循环,并表现出明显的波动性及周期性。生猪市场价格的频繁波动给生产经营者带来了很大困扰,在一定程度上打击了农户的生产积极性。如果能够对生猪市场价格的波动作出较准确的分析和预测则能够帮助生产经营者制定决策,并为以后的产销计划提供一定的参考依据,能够在很大程度上减缓生猪价格波动带来的不良影响,减少生产经营者的经济损失。
1.2 目的和意义
近年来,我国生猪市场价格波动频繁,不仅给生产经营者造成巨大的经济损失,而且也给广大消费者造成了巨大困扰,不利于生猪市场的健康持续发展,进而给农产品市场带来不利的影响。如何准确掌握生猪价格的波动规律和周期以及对生猪价格进行精准预测就显得尤为重要。而玉米号称“饲料之王”。目前,以玉米为主的饲料成本占我国生猪养殖成本的75%,玉米价格的变动对生猪价格有较大的影响,生猪价格和玉米价格又是影响CPI走势的主要因素,其上涨必然会引起通货膨胀预期,因此,生猪价格和玉米价格一直受到我国政府的关注。因此,研究玉米价格与生猪价格之间的传导关系对掌握生猪价格的变动规律、改善猪肉市场供给有着重要作用。
1.3 数据资源
爬取最近一年的每天的生猪(包括外三元、内三元和土杂猪)的价格和相关饲料原料(玉米和豆粕)的价格。
数据特性如表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 总结及展望
4.1 技术总结及创新点说明
门限回归模型(Threshold Regressive Model,简称TR模型或TRM)的基本思想是通过门限变量的控制作用,当给出预报因子资料后,首先根据门限变量的门限阈值的判别控制作用,以决定不同情况下使用不同的预报方程,从而试图解释各种类似于跳跃和突变的现象。其实质上是把预报问题按状态空间的取值进行分类,用分段的线性回归模式来描述总体非线性预报问题。多元门限回归的建模步骤就是确实门限变量、率定门限数L、门限值及回归系数的过程,为了计算方便,本次项目的数据挖掘分析采用二分割(即L=2)。
4.2 生猪价格数据挖掘系统实际应用价值分析
玉米作为生猪成本的重要组成部分,玉米价格不仅仅对生猪价格产生正向影响,随着生猪价格波动幅度的增加,玉米价格对生猪价格的影响由正向变为负向。很好地拟合了去年以来,我国生猪价格持续高位运行,而玉米价格不涨反降的现象。基于适应性预期理论的分析认为,玉米价格对生猪价格之所以产生负向影响,是因为在不同机制状态下玉米价格波动对生猪价格的成本效应和风险效应的作用不同。
5 资料获取
感兴趣的读者可获取参照以下方式获取本文相关资料。优先推荐途径一,若遇途径一失效,请再尝试途径二。
途径一
优先推荐该途径
第一步:扫描下方二维码,或打开微信搜索并关注“ 2贰进制 ”公众号;
第二步:回复“ 生猪价格 ”可获取本文相关资料。
途径二
优先推荐途径一,该途径管理可能不能秒回
扫描下方二维码,加入学习交流QQ群“ 480558240 ”,联系管理员获取包括但不限于本篇内容的更多学习资料。
2贰进制–Echo 2020年4月
我认同兴趣是最好的老师,但是除了兴趣其次是侮辱,所以如果您觉得本文还不错,请点赞+评论+收藏,要是关注那更是对我极大地羞辱了,您的羞辱便是我前进的动力!
如果本文对你有所帮助,解决了您的困扰,可以通过赞赏来给予我更大支持:
此致
感谢您的阅读、点赞、评论、收藏与打赏。
参考文献
[1]陈宁,杨文静.我国猪肉价格波动及其影响因素分析——基于Markov区制转换VAR模型的实证检验[J].中国畜牧杂志,2016,52(20):51-56.
[2]曹先磊,张颖.我国生猪饲料市场价格波动特征分析——基于产业链视角[J].华中农业大学学报(社会科学版),2017(01):55-63+142.
[3]陈哲蕊,田文勇,吴秀敏.饲料价格、加工价格、猪肉价格波动关系实证分析[J].价格月刊,2017(03):47-52.