| import osimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom ismn.interface import ISMN_Interface# 设置解压后的数据目录路径(根据自己的路径)data_path = r'F:\ISMN土壤湿度\ismn666\ismn'# 初始化 ISMN_Interface (使用 parallel=True 加速元数据加载)ismn_data = ISMN_Interface(data_path, parallel=True)# 输出读取的数据集概览,查看所有网络信息print("数据集概览:")for network_name in ismn_data.networks: # 获取网络列表 print(f"网络: {network_name},包含站点:{list(ismn_data[network_name].stations.keys())}")# 选择目标网络和站点network_name = 'ARM'station_name = 'Lamont-CF1'# 获取指定网络下的站点station = ismn_data[network_name][station_name]# 输出该站点的传感器信息print(f"\n站点 '{station_name}' 的传感器信息:")sensor_names = list(station.sensors.keys()) # 获取传感器名称列表print(sensor_names)# 选择指定传感器sensor_name = 'Hydraprobe-II-Sdi-12-E_soil_moisture_0.050000_0.050000'if sensor_name in sensor_names: print(f"选择的传感器: {sensor_name}")else: print(f"错误:传感器 '{sensor_name}' 在站点 '{station_name}' 中未找到。") exit() # 如果传感器不存在,停止执行# 获取该传感器的元数据,并将其转化为 DataFrame 显示sensor = station.sensors[sensor_name] # 正确访问传感器sensor_metadata = sensor.metadata.to_pd()print(f"\n传感器 '{sensor_name}' 的元数据:")print(sensor_metadata)# 获取土壤湿度时间序列数据sensor_data = sensor.data# 可视化土壤湿度数据fig, ax = plt.subplots(figsize=(12, 6))sensor_data.plot(ax=ax)ax.set_xlabel('Date')ax.set_ylabel('Soil Moisture [$m^3 m^{-3}$]')ax.set_title(f"station '{station_name}' - sensor '{sensor_name}' Soil Moisture Time Series")plt.xticks(rotation=45)plt.tight_layout()plt.show()# 可选:将数据保存为文本文件,例如保存为 .dat 文件output_file = ( f"{station_name}_{sensor_name.replace('/', '_')}" + "_soil_moisture.dat")sensor_data.to_csv(output_file, sep='\t', header=True, index=True)print(f"数据已保存到文件: {output_file}")# 额外功能:遍历所有网络、站点和传感器并导出数据def save_all_network_data(): # 遍历所有网络,选择特定的站点和传感器 for network_name in ismn_data.networks: print(f"\n正在处理网络: {network_name}") # 遍历该网络的所有站点 for station_name in ismn_data[network_name].stations: station = ismn_data[network_name][station_name] print(f" 正在处理站点: {station_name}") # 遍历该站点的所有传感器 for sensor_name in station.sensors: sensor = station.sensors[sensor_name] # 使用正确的索引方式 print(f" 正在处理传感器: {sensor_name}") # 获取土壤湿度数据并可视化 sensor_data = sensor.data fig, ax = plt.subplots(figsize=(12, 6)) sensor_data.plot(ax=ax) ax.set_xlabel('Date') ax.set_ylabel('soil moisture [$m^3 m^{-3}$]') ax.set_title(f"站点 '{station_name}' - 传感器 '{sensor_name}' 土壤湿度时间序列") plt.xticks(rotation=45) plt.tight_layout() # 保存每个传感器的数据到文件 output_file = ( f"{network_name}_{station_name}_{sensor_name.replace('/', '_')}" + "_soil_moisture.dat" ) sensor_data.to_csv(output_file, sep='\t', header=True, index=True) print(f" 数据已保存到文件: {output_file}")# 调用遍历函数,批量处理所有数据并保存# save_all_network_data() # 如果你需要遍历所有站点数据,可以取消注释此行 |