1.项目背景
随着现代农业的发展,对植物生长过程中环境因素的影响有了越来越多的关注,基于2023年8月3日至2023年9月19日期间记录的70个不同生菜样本的生长数据进行分析,可以更好地理解温度、湿度、pH值和总溶解固体(TDS)等环境条件如何影响生菜的生长动态。
2.数据说明
字段 | 说明 |
---|---|
Plant_ID | 植物编号 |
Date | 日期 |
Temperature (°C) | 温度(摄氏度) |
Humidity (%) | 湿度(百分比) |
TDS Value (ppm) | TDS值(ppm) |
pH Level | pH值 |
Growth Days | 生长天数 |
Temperature (F) | 温度(华氏度) |
Humidity | 湿度 |
3.Python库导入及数据读取
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
from scipy.stats import spearmanr,mannwhitneyu
from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report,confusion_matrix,roc_curve, auc
data = pd.read_csv("/home/mw/input/12228739/lettuce_dataset_updated.csv")
直接执行这个代码的话,会报错:
文件的编码格式与默认的 UTF-8 编码不兼容。为了正确加载数据,需要尝试不同的格式,一般常见的编码格式有:UTF-8、UTF-16、ISO-8859-1、GB2312 / GBK / GB18030、BIG5、ASCII。
data = pd.read_csv("/home/mw/input/12228739/lettuce_dataset_updated.csv", encoding='ISO-8859-1')
4.数据预览及预处理
print('查看数据信息:')
data.info()
查看数据信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3169 entries, 0 to 3168
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Plant_ID 3169 non-null int64
1 Date 3169 non-null object
2 Temperature (°C) 3169 non-null float64
3 Humidity (%) 3169 non-null int64
4 TDS Value (ppm) 3169 non-null int64
5 pH Level 3169 non-null float64
6 Growth Days 3169 non-null int64
7 Temperature (F) 3169 non-null float64
8 Humidity 3169 non-null float64
dtypes: float64(4), int64(4), object(1)
memory usage: 222.9+ KB
print(f'查看重复值:{
data.duplicated().sum()}')
查看重复值:0
由于温度和湿度均有两列数据,只需要保留其中一列即可,这里选择保留百分比的湿度和摄氏度情况。
data['Date'] = pd.to_datetime(data['Date'])
data = data.drop(columns=['Temperature (F)','Humidity'])
feature_map = {
'Temperature (°C)': '温度(摄氏度)',
'Humidity (%)': '湿度(百分比)',
'TDS Value (ppm)': 'TDS值(ppm)',
'pH Level': 'pH值',
'Growth Days': '生长天数'
}
plt.figure(figsize=(15, 10))
for i, (col, col_name) in enumerate(feature_map.items(), 1):
plt.subplot(2, 3, i)
sns.boxplot(y=data[col])
plt.title(f'{
col_name}的箱线图', fontsize=14)
plt.ylabel('数值', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

数据干净,不存在异常值,由于原数据中并不能很好的体现不同环境下生菜生长需要的天数,所以需要通过对Plant_ID进行分组来研究。
# 按 Plant_ID 分组,计算所需统计指标
plant_stats = data.groupby('Plant_ID').agg