基于python django的农业可视化系统,以奶牛牧场为例
本文课题围绕畜牧业高质量发展中牧场管理的现状,现代牧场饲养模式上存在的数据比较零碎、饲养过程中容易经验主义、生产产量不稳、产出效益低、奶牛体况的不合理等现状,设计了多参数大数据智能牧场生产管理决策支撑体系。以牧场信息系统的建设为背景,通过对牧场核心参数的信息化管理,形成牧场智能管理的多维数据分析模型,给牧场管理人员提供合理决策依据。开发框架采用Django实现业务功能处理、Bootstrap完成响应式前端网页设计、MySQL数据表存储并管理产奶量等多个大数据系统分析与处理,利用ECharts可视化引擎展示各变量数据的分布,帮助管理人员理清生产规律。
创新性集成随机森林与多元线性回归模型,实现产奶量预测误差率低于8.5%,设计符合牧场作业特点的决策支持模块,本研究为畜牧业智能化转型提供了可复用的技术框架,为行业数字化转型提供可复制解决方案。
摘 要
Abstract
1引 言
1.1研究背景及意义
1.2国内外研究现状
1.2.1国内研究现状
1.2.2国外研究现状
1.2.3研究趋势和总结
1.1研究背景及意义
2 相关技术介绍
2.1 系统技术简介
2.1.1Django框架技术
2.1.2MySQL技术
2.2随机森林算法
2.3 开发工具和开发环境
2.3.1开发工具
2.3.2开发环境
2.4本章小结
3 系统分析
3.1 系统功能需求分析
3.2 系统非功能性需求
3.3 系统业务流程分析
4 系统设计
4.1 总体功能设计
4.1.1 用户端功能设计
4.1.2 后端功能设计
4.2 功能详细设计
4.2.1 注册登录功能设计
4.2.2 预测功能设计
4.2.3 数据可视化功能设计
4.3 数据库设计
4.3.1 数据库逻辑设计
4.3.2 物理设计
5 基于随机森林模型的设计与实现
5.1 随机森林算法机制原理
5.1.1 随机森林算法
5.1.2 特征重要性评估
5.2 随机森林模型实现
5.2.1 数据读取
5.2.2 数据清洗实现
5.2.3 特征选择
5.2.4 模型参数设置与训练
5.2.5 模型评估
6 系统实现
6.1 登录注册功能实现
6.2 数据展示模块实现
6.3数据可视化模块实现
6.3.1 泌乳天数分布可视化实现
6.3.2 7天平均产量分布实现
6.3.3 昨天总奶量分布
6.4 预测实现
7 系统测试
1引 言
1.1研究背景及意义
我国的奶牛养殖业属于农业经济产业的一个分支,当今全球对于牛奶的需求日益增长,因此奶牛养殖的压力也随之加大。传统的奶牛牧场在进行日常管理中大多采用人工记录及经验的推断形式,效率非常低下,常常导致牧场管理出现了错误,出现了不必要的浪费。在现代农业的发展过程中,数据化的,智能化的管理逐渐成为了现代化牧场提升自身发展效率的利器,通过数据的手段实现牧场对奶的产量预测,尽可能达到最优的状态。
1.2国内外研究现状
1.2.1国内研究现状
随着现代畜牧业的不断发展,奶牛养殖日益趋向于智能化和精细化发展。但在国内逐步发展起来的饲喂方式仍存在一定的不足,无法根据奶牛个体差异化饲喂,传统的精料补饲方式是人工操作,浪费大量人力以及时间,饲养效率低。奶牛在饲喂过程中,其个体的环境温度控制关系到奶牛产量,传统式喷淋以及风扇降温,虽然在降温方面有效果,但降温后浪费大量水资源[1]。通过需求的体现,将奶牛个性化自主饲喂的装置和需求进行设计,并建立一种精细的管理模式的奶牛牧场系统,能够实现奶牛基础混合日粮的要求,同时,根据奶牛个体差异化可以对奶牛精准进行精料补充,同时,在系统中,并无需人工在各阶段进行即时监督或饲喂[2],此设备应用根据不同牧场从种养结合的角度进行综合效益的研究。在过去的二十多年,奶牛养殖业飞速发展的同时,也面临新的挑战,各级政府投入大量精力,通过可持续绿色发展的战略,对奶牛饲养促进种养结合的有序发展。通过研究得出:第一,不同牧场对生态环境的影响差异主要由于较多牧场主人的问题在于用地面越来越少甚至无法种植土地,导致在无法将粪污再利用或大量利用;第二,不同牧场在成本效益的差异是,由于北方牧场日照时间较长,日照时间长有利于牧草及玉米的种植,南方的日照时间少,不利于牧草及玉米种植,南方牧场可考虑豆科作物种植。
1.2.2国外研究现状
畜禽福利评估有助于监控动物健康状况,从而保持生产力,发现伤害和压力并且避免恶化。同时它也是一种重要的营销战略,因为它助长了消费者要求动物治疗更人道的转变的压力。专家和兽医的常见视觉福利方法可能主观和昂贵的,需要训练有素的人员[8]。无人机能实时的收集数据来做出决策会在精准畜牧和农业中发挥作用。无人机已经被用于精准农业[9]。然而,由于面临着一些限制和挑战,室内畜牧业和农业环境并不是这样。这些室内环境受到物理面积的限制,并且因为GPS无法使用,定位也是一个挑战。所以这项研究的目标是为无人机在室内农业和畜牧管理中扮演一个重要的角色。数字化已经作为精准畜牧业(PLF)的形式进入了畜牧业的诸多领域,它是基于数据的农业系统模型以及畜群和农场管理系统的进一步发展。由于可以直接地采集动物的新传感器(生物传感器、视听传感器)、过程和环境数据,它可以自动地检测行为、动物健康和福利的变化以及他们与外部因素的相互作用[10]。在可预见的未来,数据收集、所有权和处理以及缺少标准化的动物福利指标构成了核心的问题。
1.2.3研究趋势和总结
国内学者研究涉及畜牧行业智能化发展和畜牧业可持续发展,以精准化的饲喂机械研发和动物营养饲喂的种养技术模式创新为例,依托自动化降低肉牛种养规模化作业的个体性,优化畜舍环境控制技术节省资源能源消耗,但存在粪污资源化处置技术以及种养业功能紧密耦合对接问题等制约,同时研究方法以技术综合集成研究和案例实证研究为主,注重实用技术的运用,但依然存在单一渠道的数据收集,缺乏评估精准技术依托,导致研究数据搜集的维度单一,数据分析的精细度和预测的准确性不高。国外学者着重发展精准畜牧业(PlannedLivestockFeeding)的技术研究,融合生物传感器和无人机监测等技术手段提升个体畜群福利程度的综合评价系统,依托多元数据和技术实时追踪个体畜群健康状况,研究范式显著强跨学科、跨领域特性[12]。同时室内动物个体空间精确定位等难题、产权数据隐私及伦理等问题制约,影响技术的推广应用规模。从以上两个群体的特征来看,国内外的研究一方面重视生产效能的强化和资源的协调性,另一方面重视动物福利和整体系统可持续,但是都存在数据标准化缺乏以及技术与管理协同不足的共性问题,未来需要进一步重视智能算法的优化及跨领域技术的协同创新,向数据精准化、生态绿色型的畜牧行业发展。
1.3研究背景及意义
本文侧重于奶牛牧场智能管理及奶产量预测,利用可视化系统对牧场进行管理,并对奶牛生产过程中获得的奶产量、饲料消耗、温湿度等相关数据进行管理,对奶牛产奶量的变化规律进行数据分析及机器学习相关算法研究,以寻找影响奶产量的重要影响因子。
奶产量预测模型主要是利用多元线性回归法进行分析,得到温度、湿度、日粮的投入对奶产量的影响情况,利用随机森林算法进一步改善预测效果,为奶牛场管理者提供更为准确的信息。奶量生产数据显示方面可以利用图示的方式,对奶产量的变化情况予以展现,便于管理者的了解,将生产管理工作做相应调节。
最后,系统能够给出优化建议,即根据模型分析结果给牧场提出具体的改善措施,如改变饲料配方比例、改变环境因素等,研究最后的目地是基于数据分析和预知来改善奶牛牧场管理,提高生产效率,降低生产成本,促进养牛业的持续发展。
2 相关技术介绍
2.1 系统技术简介
2.1.1Django框架技术
Django是一个高效且易于扩展的Python Web框架,本系统使用Django作为核心框架来构建Web应用。通过Django的MTV(Model-Template-View)架构,系统能够实现清晰的模块化设计,并提高开发效率[13]。具体来说:
2.1.2MySQL技术
在系统以MySQL为存储系统,存放从京东获取的数据以及数据增删改查操作。但是实现这一功能需要数据表的结构设计,字段类型的设计,设计数据库逻辑设计与物理设计,保障数据的完整性和一致性。而且MySQL有大量的SQL语法和函数实现对数据的聚合、筛选、排序等等操作,进而便于后续数据分析挖掘[14]。
2.2随机森林算法
随机森林是一个高效的集成分类方法,其通过建立多个决策树并将预测结果组合而成,以此提高了系统的性能和泛化能力。随机森林算法采用了两个关键的技术:bagging(bootstrapaggregating,即自助采样法)和特征随机化选取。在随机森林的训练中,对每一个决策树都选择原始训练数据的子集,并在节点划分时只选择特征的子集,该算法使用了“两层的随机性”将过拟合的风险降到最低。
2.3 开发工具和开发环境
2.3.1开发工具
系统的设计与实现使用了多个开发工具,其中包括:
MySQL:能存储和管理数据,对web系统中实现数据的增删改查,并为可视化提供数据支持,起到数据引擎的作用。
PyCharm:Python代码高效地编写、调试工具,有很好的整合能力,可以把不同的库整合到一起,还有一个错误定位跟踪功能,可以辅助编程者快速排查问题。
开发工具的使用,可方便、快捷地设计开发系统,对系统进行分析、展示等。使用boostrap做前端整合与处理、使用MySQL对数据存储与管理、PyCharm作为开发环境,能快速开发出性能强大、完善的数据分析系统。
2.3.2开发环境
程序运行环境:Python3.7及以上版本;操作系统:Windows11;数据库采用MySQL;采用Navicat进行数据库管理(进行可视化操作);Django及机器学习的常用库。
3 系统分析
3.1 系统功能需求分析
本系统旨在提升奶牛牧场的数字化管理水平,主要功能包括数据采集、分析、预测、可视化和决策支持。
3.2 系统非功能性需求
系统性能需求。预测系统是一个需要高并发处理的系统,即使面对多个用户在进行系统预测操作以及数据查询等操作的时候,系统要有良好的性能,进而满足响应时间的需求;另外预测模型比如随机森林也需要快速执行,在模型训练阶段有高性能的要求,同时在查询和预测阶段也是如此;数据存取性能,数据库需要考虑海量数据环境下的数据查询以及数据存储方面的性能,最终确保良好的用户体验。
安全性能要求:系统的使用涉及到用户数据和奶牛生产数据,需要保证数据的安全性与用户隐私。一方面,通过用户注册登录功能对用户进行安全登录认证,如加密码存储、双因素认证等,保证用户访问无侧门。另一方面,系统应该具备严格的有效访问权限控制能力,控制不同用户、管理员等进行相应的访问,避免访问用户与权限发生冲突的异常情况。
扩展性要求在系统用户规模扩大,以及奶牛监测数据增加时,能有足够的系统扩展性,负担更多的系统负荷,并支持开展更复杂的系统分析工作。系统架构水平可拓展,根据实际需求扩充计算能力和存储空间。数据库能支持更高的数据量,支持分布式数据存储,可支持分布式并行计算。预测模型需扩展性好,能很方便地增加新的预测模型,或在更大量的数据集上训练,提升预测模型的准确程度。系统架构模块化设计,具备未来可扩充模块与新增技术、功能接口支持,确保与模块对应的其他功能系统的稳定性。
3.3 系统业务流程分析
本文系统是从采集数据入手的,牧场管理人员利用此系统添加数据或是自动生成奶牛生产数据,如:奶产量、喂饲料量、环境的温湿度等,采集好的数据会以实时的方式存储到MySQL的数据库中,确保数据的安全性以及准确。系统利用数据分析模块,基于多元线性回归与随机森林算法对历史数据进行分析,找出哪些是影响奶产量的主要因素。并且在这些因素的基础上建立了奶产量预测模型。
业务流程如图3-1所示。
图3-1 业务流程图
4 系统设计
4.1 总体功能设计
整个系统由前端和后台构成。前端部分主要实现与用户的交互与展示,后台部分主要实现信息的处理与管理。通过合理的功能模块设计,有利于辅助奶牛牧场生产管理与决策。
4.1.1 用户端功能设计
登录注册:用户进行注册并输入账号及密码登录,系统拥有不同角色的登录账户,有最高管理权限的账户,普通用户账户和游客账户。管理员账户拥有最高的权限,可以注册用户以及录入数据,普通账户可以调取分析结果,游客账户可以浏览信息。
数据展示:牛群号分布可视化:展示不同牛群的分布情况,以柱状图或饼图的形式展示各个牛群的奶产量、健康状况等信息。
泌乳天数分布可视化:显示所有奶牛的泌乳天数分布,帮助管理者了解奶牛的生命周期和产奶高峰期。
7天平均产量分布可视化:通过折线图或柱状图展示过去7天内奶牛的平均每日产奶量,便于识别生产趋势和调整策略。
昨天总奶量分布:显示前一天的整体奶产量,帮助管理者实时监控生产情况,及时做出调整。
预测:基于历史数据和算法模型,预测未来的奶产量,帮助牧场管理者进行生产规划和资源分配。
4.1.2 后端功能设计
用户管理:后端提供用户管理模块,包含用户注册、登录、分配角色、修改用户资料等功能。管理员对系统中的所有用户进行管理,掌握用户的访问操作日志,保障系统的安全性。
泌乳量管理:后端实现泌乳量数据的添加、查询、修改、删除功能。通过管理员定期输入奶牛的产量数据,自动保存于数据库,用户可以根据需要查询历史产乳量的数据,查询分析泌乳量变化情况。
4.2 功能详细设计
本系统对照功能图实现,用户模块也就是系统使用者拥有登录注册、数据采集、数据可视化、预测等功能。
4.2.1 注册登录功能设计
注册时,用户需在页面输入用户名、密码、邮箱等基本信息,点击提交。详细流程如图4-1所示。
图4-1 登录流程图
4.2.2 预测功能设计
预测模块的流程主要分为数据准备、模型训练、预测生成3步模块流程如下图4-2所示。
图4-2 预测流程图
4.2.3 数据可视化功能设计
可视化流程:系统用户成功登录系统进入可视化页面后,前端就会将用户的查看请求封装发送到后端服务器,后端会调用可视化服务中的可视化程序,该程序会加载数据库中的数据,将该数据进行统计等,渲染生成柱形图等图表。如图4-3所示。
图4-3 可视化流程图
4.3 数据库设计
4.3.1 数据库逻辑设计
根据该系统的数据库表的设计,将系统的数据种类归分为用户、牧场数据信息2个实体。用户信息E-R图如图4-4所示,牧场数据信息E-R图如图4-5所示,系统总体E-R图如图4-6所示。
图4-4 用户信息实体图
图4-5 牧场数据实体图
图4-6 系统总体E-R图
4.3.2 物理设计
本数据分析系统数据逻辑结构设计如下。表4-1用户表用于管理平台用户的个人信息,核心字段包括用户唯一标识(自增主键id)、登录凭证(username和password)、联系方式(email、phone、address)以及个人简介(content)。所有字段均以文本或整型存储,支持用户注册、身份验证及信息维护功能,确保数据完整性与系统基础服务的高效运行。
表4-1 用户表
字段名 | 类型 | 长度 | 说明 |
id | int | 0 | 用户编号(主键、自增) |
username | varchar | 255 | 用户名 |
password | varchar | 255 | 密码 |
| text | 0 | 邮箱 |
content | text | 0 | 简介 |
address | text | 0 | 地址 |
phone | text | 0 | 手机号 |
表4-2牧场数据信息表记录奶牛每日挤奶行为与生产数据,核心字段包括牛号、群号(标识个体与群体),以及分时段挤奶位置、产量、降产量、低流量和挤奶持续时间(各3次挤奶数据),同时涵盖7天平均产量、昨日总奶量、今日产量和泌乳天数。所有字段均以非空文本存储,用于实时监测奶牛产奶效率、健康状态及生产波动,为牧场优化挤奶流程、预警异常情况提供数据支撑。
表4-2 牧场数据信息表
字段名 | 类型 | 长度 | 说明 |
牛号 | int | 11 | 不为空 |
群号 | int | 11 | 不为空 |
昨天挤奶位置1 | int | 11 | 不为空 |
昨天挤奶位置2 | int | 11 | 不为空 |
昨天挤奶位置3 | int | 11 | 不为空 |
昨天的产量1 | float | 11 | 不为空 |
昨天的产量2 | float | 11 | 不为空 |
昨天的产量3 | float | 11 | 不为空 |
7天的平均产量 | float | 11 | 不为空 |
昨天总奶量 | float | 11 | 不为空 |
今天的产量1 | float | 11 | 不为空 |
泌乳天数 | int | 11 | 不为空 |
昨天降产1 | float | 11 | 不为空 |
昨天降产2 | float | 11 | 不为空 |
昨天降产3 | float | 11 | 不为空 |
昨天低流量1 | float | 11 | 不为空 |
昨天低流量2 | float | 11 | 不为空 |
昨天低流量3 | text | 255 | 不为空 |
昨天挤奶持续时间1 | text | 255 | 不为空 |
昨天挤奶持续时间2 | text | 255 | 不为空 |
昨天挤奶持续时间3 | text | 255 | 不为空 |
5 基于随机森林模型的设计与实现
5.1 随机森林算法机制原理
5.1.1 随机森林算法
随机森林(random forest)是将多个模型综合起来创建更高性能模型的方法,既可用于回归,也可用于分类。
随机森林算法示意图如下5-1所示。
图5-1 随机森林算法示意图
5.1.2 特征重要性评估
现实情况下,一个数据集中往往有许多个特征,如何在其中选择比结果影响最大的那几个特征,以此来缩减建立模型时的特征数是我们比较关心的问题。
5.2 随机森林模型实现
5.2.1 数据读取
采用Django Web技术框架,导入pandas模块,通过ORM或者文件读取MySql数据库中的奶牛牧场数据,此数据文件共有牛号、产奶量记录(7d平均值)等栏目。主要代码如图5-2所示,转换成dataframe结果如图5.3所示:
图5-2 读取数据代码图
图5-3 转换成dataframe结果
主要代码如图5-4所示:
图5-4 dataframe处理代码图
5.2.2 数据清洗实现
缺失值处理主要代码如下图5-5所示:
图5-5 缺失值处理主要代码图
具体流程见图5-6所示。
图5-6 数据清洗流程示意图
5.2.3 特征选择
综合统计分析和模型方式提取特征。方差检验主要代码如图5-7所示,方差结果如表5-1所示。
图5-7 方差检验代码图
表5-1 方差结果
Feature | F-Score | P-Value | Feature |
昨天的产量2 | 2257.041933 | 2.6768E-279 | 昨天的产量2 |
昨天总奶量 | 1439.478457 | 2.0178E-208 | 昨天总奶量 |
昨天的产量1 | 1263.028774 | 2.9245E-190 | 昨天的产量1 |
今天的产量1 | 1099.818097 | 2.8632E-172 | 今天的产量1 |
昨天的产量3 | 1091.901749 | 2.2988E-171 | 昨天的产量3 |
昨天低流量2 | 128.2525557 | 2.45806E-28 | 昨天低流量2 |
泌乳天数 | 113.957208 | 1.72338E-25 | 泌乳天数 |
昨天低流量3 | 99.53711681 | 1.38447E-22 | 昨天低流量3 |
昨天低流量1 | 66.71682097 | 7.78873E-16 | 昨天低流量1 |
昨天挤奶位置3 | 4.69836676 | 0.030384994 | 昨天挤奶位置3 |
群号 | 3.042992803 | 0.081339159 | 群号 |
昨天挤奶位置2 | 1.186171496 | 0.276319144 | 昨天挤奶位置2 |
昨天挤奶位置1 | 0.155948227 | 0.692983932 | 昨天挤奶位置1 |
5.2.4 模型参数设置与训练
训练随机森林与多元线性回归双模型。模型主要代码如图5-8所示,模型最佳参数结果如图5-9所示:
图5-8 模型主要代码图
图5-9 模型最佳参数结果图
5.2.5 模型评估
利用预测输出的均方差(MSE)、R²值衡量模型的结果优劣评估结果主要代码如下图5-10所示。评估结果如表5-2所示。
图5-10 模型评估结果主要代码图
表5-2 评估结果
最优模型参数 | Mean Squared | R² Score | 模型 |
12.852563743513622 | 0.6305677663246039 | 多元线性 | |
'max_depth': 10, 'max_features': 'sqrt', 'min_samples_leaf': 2, 'min_samples_split': 2, 'n_estimators': 20 | 6.969930937680693 | 0.7996573130267395 | 随机森林 |
6 系统实现
6.1 登录注册功能实现
用户注册功能前端采用了Bootstrap框架实现交互的UI,后端采用RESTfulAPI提供服务。前端用户注册页面提供用户名、密码和邮箱输入框,HTML5的form对字段非空进行检查,客户端的页面对邮箱格式的正确性进行表单正则表达式检查
图6-1 用户登录窗口前端页面
图6-2 用户注册窗口前端页面
6.2 数据展示模块实现
列表渲染单元以Jinja2模板渲染引擎和Bootstrap框架为基础,使用响应式布局(MobileFirst),即根据屏幕的宽度,自适应于台式机、笔记本电脑、平板以及移动设备(移动电话和触摸屏)。。
图6-3 数据展示页面
6.3数据可视化模块实现
6.3.1 泌乳天数分布可视化实现
整体出图功能采用了ECharts中饼图类型的组件,饼图主要的数据采用后端查询时的聚合,可视化如下图6-4所示。(泌乳天数分布可视化的关键代码如附录A所示)。
图6-4 泌乳天数分布可视化页面
6.3.2 7天平均产量分布实现
图表四为奶牛生产性能柱状图动态表示,X轴值输出在柱状图中用{{city.0|safe}}(产量的分段值,如20-25kg、25-30kg),Y轴值输出在柱状图中用{{city.1|safe}}(各个生产性能区间的奶牛数量),。
图6-5 牛群7天平均产量分布页面
6.3.3 昨天总奶量分布
昨天总奶量分布将数据源更新为当天产奶数量。x标签{{city.0|safe}}为一天生产分组,如30-35kg;y标签{{city.1|safe}}为当天每组中奶牛的数量。
图6-6 昨天总奶量分布图
6.4 预测实现
Bootstrap是一个前端框架,可以设计多种界面,主要用于Web页面设计。。
图6-7 预测页面图
7 系统测试
(1)用户登录测试用例,如表7-1所示。
表7-1 用户登录测试用例
序号 | 输入 | 期望结果 | 实际结果 |
1 | 写入空白符 | 警告提示 | 警告提示 |
2 | 写入正确格式的用户名、写入不符合数据库的密码 | 提示密码不符合 | 提示密码不符合 |
3 | 写入正确格式的用户名、写入符合数据库的密码 | 顺利登入系统 | 顺利进入系统首页 |
(2)用户注册用例,如表7-2所示。
表7-2 用户注册测试用例
序号 | 输入 | 期望结果 | 实际结果 |
1 | 用户名是空白符 | 警告提示用户名不合规范 | 警告提示用户名错误 |
2 | 密码是空白符 | 警告提示密码不合规范 | 警告提示密码错误 |
3 | 写入符合规范的字符 | 顺利登入系统 | 顺利登入系统 |
(3)可视化用例,如表7-3所示。
表7-3 功能测试用例
序号 | 输入 | 期望结果 | 实际结果 |
1 | 数据展示模块生成 | 数据展示等功能都能正常进入 | 进入对应功能,有信息展示 |
2 | 数据分布模块 | 数据分布等功能都可以进入,且界面显示正常。 | 进入对应页面,且图表显示正常。 |
3 | 数据预测模块 | 预测等功能页面可正常进入,界面显示正常。 | 能进入界面,且预测信息显示正确。 |