Python数据分析-植物生长数据分析(机器学习模型和神经网络模型)

一、研究背景

植物生长受多种环境因素的影响,包括土壤类型、日照时间、浇水频率、肥料类型、温度和湿度等。这些因素不仅影响植物的生长速度和健康状况,还对植物在不同生长阶段的表现有显著影响。随着气候变化和环境污染问题的加剧,研究如何优化植物生长条件以提高农作物产量和质量变得尤为重要。本研究旨在通过分析不同环境变量对植物生长里程碑的影响,找出最佳的种植条件,为农民和园艺师提供科学依据,帮助他们在不同环境下进行有效的种植管理。

二、研究意义

  • 提高农作物产量和质量:通过了解不同环境因素对植物生长的影响,可以优化种植条件,从而提高农作物的产量和质量。
  • 促进可持续农业发展:通过科学的种植管理,减少对化学肥料和过量水资源的依赖,推动农业的可持续发展。
  • 应对气候变化挑战:为应对气候变化带来的农业挑战提供数据支持,帮助制定应对极端天气和环境变化的种植策略。
  • 增强农民和园艺师的决策能力:提供具体的种植指导,帮助农民和园艺师在实际生产中做出更明智的决策,提高生产效率和经济效益。

三、实证分析

该数据集包含Growth_Milestone(目标)和一些影响它的因素 这个问题考虑为二元分类 第 1 部分: 包含对数据的一些分析,除了准备和清理数据之外的DataExplantory 第2部分: 我将使用一些传统的机器学习技术:

目标:根据提供的环境和管理因素对植物的生长里程碑进行预测和分类。 我们的目标:预测植物的生长阶段或里程碑。 特征: Soil_Type:植物生长的土壤类型或成分。 Sunlight_Hours:植物接受阳光照射的持续时间或强度。 Water_Frequency:植物浇水的频率,表示浇水时间表。 Fertilizer_Type:用于滋养植物的肥料类型。 Temperature::植物生长的环境温度条件。 Humidity:植物周围环境中的水分或湿度水平。 Growth_Milestone:指示植物生长过程中的阶段或重要事件的描述或标记。

数据和完整代码

导入包:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号
import IPython.display
from sklearn.preprocessing import LabelEncoder,StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.base import BaseEstimator , TransformerMixin
from sklearn.feature_selection import VarianceThreshold ,f_classif ,SelectKBest
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
from sklearn import tree
from sklearn.metrics import classification_report,confusion_matrix ,ConfusionMatrixDisplay
from sklearn import svm
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB

读取数据和查看其基本信息:

data=pd.read_csv("data.csv")
data.head(5)

 

获取其他信息

 

随后进行描述性统计分析

data.describe().T

 接下来查看数据类型和查看缺失值类型:

data.dtypesdata.isna().mean()

 

接下来可视化查看 GrowthMilestone的占比 


f={"family":"serif","size":25,"color":"r"}
plt.title("Animia Distribution",fontdict=f)
explicit=data["GrowthMilestone"].value_counts()
plt.pie(x=explicit,labels=["Not GrowthMilestone","GrowthMilestone"],colors=["g","r"],explode=[0.1,0],autopct='%1.1f%%')
plt.legend()
plt.show()

观察有多少个 SoilType 

plt.title("SoilType Distribution",fontdict=f)
explicit=data["SoilType"].value_counts()
plt.pie(x=explicit,labels=["clay","sandy","loam"],colors=["g","b","r"],explode=[0.2,0.1,0.1],autopct='%1.1f%%')  
plt.legend()
plt.show()

Water_Frequency = data["WaterFrequency"].value_counts()
plt.subplot(4, 4, 1)  # Create the first subplot
plt.pie(x=Water_Frequency,labels=["daily", "bi-weekly","weekly"],colors=["g","r","b"],explode=[0.1, 0,0.1],autopct='%1.1f%%',radius=2,
)                                                                     plt.title("Water_Frequency_observation", fontdict=f1)
plt.legend()# Plot 2Fertilizer_Type = data["FertilizerType"].value_counts()
plt.subplot(4, 4, 2)  # Create the second subplot
plt.pie(x=Fertilizer_Type,labels=["none", "chemical","organic"],colors=["orange","g","y"],explode=[0.1, 0,0.1],autopct='%1.1f%%',radius=2,
)
plt.title("Fertilizer_Type_observation", fontdict=f1)
plt.legend()
# Adjust the spacing between subplots
plt.subplots_adjust(wspace=2,hspace=1)#plot3:# 观察有多少个 SoilType :plt.subplot(4,4,3)
explicit=data["SoilType"].value_counts()
plt.pie(x=explicit,labels=["clay","sandy","loam"],colors=["g","b","r"],explode=[0.2,0.1,0.1],autopct='%1.1f%%',radius=2)  
plt.title("SoilType Distribution",fontdict=f1)
plt.legend()
plt.show()plt.subplots_adjust(wspace=2,hspace=1)# plot4:# 观察有多少人拥有 GrowthMilestone:
plt.subplot(4,4,4)
plt.title("GrowthMilestone_Distribution",fontdict=f1)
explicit=data["GrowthMilestone"].value_counts()
plt.pie(x=explicit,labels=["Not GrowthMilestone","GrowthMilestone"],colors=["g","r"],explode=[0.1,0],autopct='%1.1f%%',radius=6)
plt.legend()
plt.show()# pacing between subplots
plt.subplots_adjust(wspace=2,hspace=1)

观察每种土壤类型有多少hours_sunlght:

 

观察 Soil_Type vs. GrowthMilestone:要知道每种土壤中的植物数量:

plt.figure(figsize=(7,8))
plt.title("Distribution of GrowthMilestone vs. Soil_Type",fontdict=f)
top=data.groupby("SoilType")["GrowthMilestone"].sum().sort_values(ascending=False)
sns.barplot(x=top.index,y=top.values,color="r",palette='coolwarm')
plt.xticks(rotation=45,color="b")
plt.xlabel("Soil_Type",fontdict=f)
plt.ylabel("GrowthMilestone",fontdict=f)
plt.legend(title="Number of Grough in Every soil",prop={'size': 12})
plt.show()

 

观察 Fertilizer_Type vs.温度分布 :

 

ontinous data的分布

for col in data.select_dtypes("number"):sns.displot(data[col],color="r")plt.title("presention of "+ col,fontdict=f)

 

创建连续特征的对图:

plt.figure(figsize=(25, 15), dpi=300)
sns.set(style="whitegrid")  
sns.set_palette("coolwarm")   
sns.pairplot(data.select_dtypes(include='float64'), plot_kws={'alpha': 0.6, 's': 80})

 

接下来查看相关系数和热力图

corr=data.select_dtypes("number").corr()
print(corr)print("-"*50)kendall=data.select_dtypes("number").corr(method="kendall")
print(kendall)print("-"*50)spearman=data.select_dtypes("number").corr(method="spearman")
print(spearman)print("-"*50)pearson=data.select_dtypes("number").corr(method="pearson")
print(pearson)print("-"*50)# plot the correlation Matrix :plt.figure(figsize=(25,15),dpi=200)
plt.title("Heatmap-Correlation-Matrix",fontdict=f)
sns.heatmap(data.select_dtypes("number").corr(),annot=True,fmt="0.3f",cmap='Blues')
plt.xlabel("Features",fontdict=f)
plt.ylabel("Features",fontdict=f)
plt.xticks(rotation=45,color="b")
plt.yticks(rotation=-45,color="b")
plt.show()

 

接下来划分特征和响应变量 进行模型建立和预测

# 划分X和Y
x=data.drop(columns="GrowthMilestone",axis=1)
y=data["GrowthMilestone"]
print(np.shape(x),np.shape(y))
print(len(x),len(y))
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,stratify=y,random_state=42)
print(np.shape(x_train),np.shape(x_test))
print(np.shape(y_train),np.shape(x_test))

# 随机森林模型

RC1=RandomForestClassifier(random_state=42,n_jobs=-1,max_depth=5,n_estimators=100)
RC1.fit(x_train,y_train)    y_predict=RC1.predict(x_test)
y_predict[:10]
#提升准确率
np.random.seed()
for i in range(10,110,10):print(f"at n_estimators= {i} n_estimators")RC2=RandomForestClassifier(n_estimators=i).fit(x_train,y_train)print(f"accuracy={RC2.score(x_test,y_test)*100:0.2f}%")

 

 

决策树

决策树可视化

plt.figure(figsize=(15,15),dpi=100) 
tree.plot_tree(DT)
plt.title("--<<< Decision_Tree >>>--",fontdict=f)
plt.show()

 支持向量机

 使用 Tensorflow 构建神经网络模型

from tensorflow.keras import Sequential 
from tensorflow.keras.layers import Dense,Input,Dropout
from tensorflow.keras.losses import BinaryCrossentropy
from tensorflow.keras.regularizers import l2model_r.compile(loss=BinaryCrossentropy(from_logits=True),optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),metrics=["accuracy"])

绘制训练历史(准确率和损失)

plt.figure(figsize=(12, 6))# Plot training & validation accuracy values
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend(['Train', 'Test'], loc='upper left')# Plot training & validation loss values
plt.subplot(1, 2, 2)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend(['Train', 'Test'], loc='upper left')plt.tight_layout()
plt.show()

 

关于机器学习模型的一些结果:

  • 1- RandomForestClassifier : accuracy -->> %58.97%并且改进模型后,我们发现 n_estimators= 20,准确率-->>64.1%,提高了5.13%
  • 2-DecissionTreeClassifier : 准确率 -->> 51.28% %
  • 3-支持向量机:准确率-->>48.72% 我们不能说最好的模型是 RandomForestClassifier 因为每个模型都有优点和缺点,但是这个个模型为我们提供了高精度。 这是我们从传统机器学习模型中得到的结果。 关于使用 Tensorflow 构建的神经网络模型,我们发现:准确率--->> 67.66%,改进后相同。

四、结论

通过对数据的分析,我们发现了以下几点关键结论:

  1. 土壤类型和植物生长:不同土壤类型对植物生长的影响显著,某些土壤类型在特定条件下能够显著促进植物的生长。
  2. 日照时间和水分管理:适当的日照和科学的水分管理能够显著提高植物的生长里程碑达到率,避免了过多或过少的水分对植物造成的负面影响。
  3. 肥料类型和植物健康:有机肥料相比化学肥料,对植物生长的促进作用更加显著,且对环境更加友好。
  4. 环境温湿度的影响:温度和湿度对植物生长具有综合性影响,在适宜的温湿度条件下,植物的生长里程碑达到率最高。

这些研究结论为农作物种植和管理提供了科学依据,有助于在不同环境条件下进行精准农业操作,提升农业生产效率和可持续发展水平。

创作不易,希望大家多点赞关注评论!!!(类似代码或报告定制可以私信)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3245551.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Spring如何进行动态注册Bean

在Spring框架中&#xff0c;Bean是应用程序的核心组成部分&#xff0c;而BeanDefinition则是这些Bean的元数据表示。随着应用程序的复杂性增加&#xff0c;我们可能需要更灵活地定义和注册Bean。Spring框架提供了几个扩展点&#xff0c;允许我们以编程方式影响Bean的创建和定义…

【vulhub】FRISTILEAKS:1.3

目录 下载地址 1、信息收集获取ip获取端口目录扫描 2、漏洞利用3、提权反弹shell脚本检测脏牛提权 下载地址 FristiLeaks: 1.3 ~ VulnHub 1、信息收集 获取ip 打开靶机就可以看到Ip 192.168.8.23 获取端口 fscan扫一下 获取80端口 目录扫描 网站访问 192.168.8.23:80…

内行人才知道的白酒术语

&#x1f61c;宝子们&#xff0c;今天来给大家分享一些只有内行人懂的白酒术语&#xff0c;让你在酒桌上也能显得很专业&#xff01;&#x1f4aa; ⬆️基酒术语解释&#xff1a;所谓基酒就是最基础的酒&#xff0c;也叫原浆酒&#xff0c;是指成酒后不经过勾调的酒液。基酒度…

烟雾监测与太阳能源:实验装置在其中的作用

太阳光在烟雾中的散射效应研究实验装置是一款模拟阳光透过烟雾环境的设备。此装置能帮助探究阳光在烟雾中的传播特性、散射特性及其对阳光的影响。 该装置主要包括光源单元、烟雾发生装置、光学组件、以及系统。光源单元负责产生类似于太阳光的光线&#xff0c;通常选用高亮度的…

迈克尔的44岁:时间的感悟与人生的智慧

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Ubuntu Desktop Docker 配置代理

Ubuntu Desktop Docker 配置代理 主要解决 docker pull 拉取不了镜像问题. Docker Desktop 配置代理 这个比较简单, 直接在 Docker Desktop 里设置 Proxies, 示例如下: http://127.0.0.1:7890 Docker Engine 配置代理 1.Docker Engine 使用下面配置文件即可, root 用户可…

动手学深度学习6.3 填充和步幅-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;填充和步幅_哔哩哔哩_bilibili 代码实现_哔哩哔哩_bilibili 本节教材地址&#xff1a;6.3. 填充和…

Linux下Qt程序打包

文章目录 一、前言二、linuxdeployqt下载安装三、Qt环境变量配置四、准备Qt可执行文件五、打包六、封装成deb安装包 一、前言 在Windows下进行Qt开发&#xff0c;软件开发好之后可以使用windeployqt进行打包&#xff0c;然后程序就可以移动到其它电脑上运行了 在Linux下同样可…

浅析stm32启动文件

浅析stm32启动文件 文章目录 浅析stm32启动文件1.什么是启动文件&#xff1f;2.启动文件的命名规则3.stm32芯片的命名规则 1.什么是启动文件&#xff1f; 我们来看gpt给出的答案&#xff1a; STM32的启动文件是一个关键的汇编语言源文件&#xff0c;它负责在微控制器上电或复位…

开箱即用的AI!九州未来亓绚AI教培一体机全新发布

以大模型、生成式人工智能为代表的人工智能技术在全球引起广泛关注&#xff0c;亦成为催生教育变革的重要力量。 中小学人工智能教育逐步推进&#xff0c;但实施过程中仍然面对诸多挑战。如何更广泛、高质量地开展中小学人工智能教育&#xff0c;成为当下我国教育改革创新的重…

CentOS7 虚谷数据库 单机版部署

单机版最低配置&#xff1a; 安装环境配置 1.CPU设置 关闭 CPU 超线程 查看当前CPU超线程状态&#xff1a; cat /sys/devices/system/cpu/smt/active 如果是0&#xff0c;表示超线程已关闭&#xff1b;返回值是1&#xff0c;表示超线程已开启。 切换超线程状态&#xff1a; &a…

景区客流统计系统提升服务精准度

在当今旅游业蓬勃发展的时代&#xff0c;景区面临着越来越多的挑战和机遇。如何在保障游客良好体验的同时&#xff0c;实现景区的高效管理和可持续发展&#xff0c;成为了摆在景区管理者面前的重要课题。景区客流统计系统的出现&#xff0c;为解决这一问题提供了有力的支持&…

vscode 打开远程bug vscode Failed to parse remote port from server output

vscode 打开远程bug vscode Failed to parse remote port from server output 原因如图&#xff1a; 解决&#xff1a;

Redis实战—附近商铺、用户签到、UV统计

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P88 - P95 目录 附近商铺 数据导入 功能实现 用户签到 签到功能 连续签到统计 UV统计 附近商铺 利用Redis中的GEO数据结构实现附近商铺功能&#xff0c;常见命令如下图所示。…

Monsters Pack 04(游戏卡通可爱怪兽怪物战士模型)

以下模型有3种进化形态: 捕手战士 鱼卫战士 骑士战士 小鬼战士 猴东战士 无鼻战士 坑娃战士 刺头战士 树斯特战士 楔形战士 这些模型是为您的主要角色设计的敌人。进化的每个阶段都会使他变得更加强大,因此您可以用它来增强对手的实力,并作为敌人的boss。 它适用于不同类型的…

算法实验3:贪心算法的应用

实验内容 &#xff08;1&#xff09;活动安排问题 设有n个活动的集合E{1, 2, …, n}&#xff0c;其中每个活动都要求使用同一资源&#xff0c;而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi&#xff0c;且si <f…

厂家置换电费如何达到最大化收益

新能源行业知识体系-------主目录-----持续更新https://blog.csdn.net/grd_java/article/details/140004020 文章目录 一、电能电费二、同时刻不同厂家置换&#xff0c;不会影响最终电能电费结果三、风险防范补偿和回收机制四、我们的数据如何考虑补偿和回收五、如何利用补偿和…

java.lang.IllegalArgumentException: Illegal character in path at index 40解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

RFID涉密载体管控系统|DW-S402功能介绍

文件载体管控系统DW-S402是用于对各种载体进行有效管理的智能柜&#xff08;智能管理系统&#xff09;&#xff0c;实现对载体的智能化、规范化、标准化管理&#xff0c;广泛应用于保密、机要单位以及企事业单位等有载体保管需求的行业。 区域监控管理 主要是通过在需要监控的…

Mysql缓存调优的基本知识(附Demo)

目录 前言1. 配置2. 缓存3. 策略 前言 基本的知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;Mysql优化高级篇&#xff08;全&#xff09;Mysql底层原理详细剖析常见面试题&#xff08;全&#xff09; MySQL…