ResNet1D / data_load.py
AISkywalker's picture
Upload 65 files
3a85408 verified
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
def load_soil_data(file_path, target_columns):
"""
参数:
- file_path: 包含土壤数据的文件路径(假设为CSV格式)
- target_columns: 列表,包含8个目标土壤指标的列名
返回:
- X_train, X_test, y_train, y_test: 训练和测试集的特征和目标值,划分为8:2
- wavelengths: 波长信息数组
"""
# 读取CSV文件
data = pd.read_csv(file_path)
# 提取波长信息(波长在前4200列的列头中)
wavelengths = data.columns[:4200].str.replace('spc.', '').astype(float)
# 假设每个Record包含4200个数据点
X = data.iloc[:, :4200].values # 取前4200列作为特征
y = data[target_columns].values # 取目标列作为标签
# 确保特征数据是浮点数类型
X = X.astype('float32')
# 分割数据集为训练集和测试集,训练集占80%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 将特征数据重塑为ResNet模型的输入形状
# 对于1D卷积,我们需要(batch_size, channels, sequence_length)的形状
X_train = X_train.reshape(-1, 1, 4200) # 一个通道,序列长度为4200
X_test = X_test.reshape(-1, 1, 4200)
return X_train, X_test, y_train, y_test, wavelengths
if __name__ == "__main__":
# 使用示例
file_path = 'LUCAS.2009_abs.csv'
target_columns = ['pH.in.CaCl2', 'pH.in.H2O', 'OC', 'CaCO3', 'N', 'P', 'K', 'CEC']
X_train, X_test, y_train, y_test, wavelengths = load_soil_data(file_path, target_columns)
print("X_train shape:", X_train.shape)
print("X_test shape:", X_test.shape)
print("y_train shape:", y_train.shape)
print("y_test shape:", y_test.shape)
print("wavelengths shape:", wavelengths.shape)