“参数 + 天气 + 农事 → 交给 ParameterProvider → 选模型 → run_till_terminate() → get_output() → DataFrame”
四类数据分别怎么来
| 类别 | 代码里变量名 | 文件格式 / 来源 | 读取类 | 一句话备注 |
|---|---|---|---|---|
| 作物参数 | cropd | .crop(CABO) 或.yml(YAML) | CABOFileReader或YAMLCropDataProvider | 官方.crop在 WOFOST Control Centre;YAML 例程见 ajwdewit/WOFOST_crop_parameters |
| 土壤参数 | soild | .soil(CABO) 或.json | CABOFileReader | 同一下载包,ec3.soil = “medium fine sand” |
| 站点 | sited | 代码字典 | WOFOST72SiteDataProvider(WAV=10, CO2=360, LAT=..., LON=...) | WAV 是最关键字段:初始土壤含水量 mm |
| 农事管理 | agromanagement | .agro(YAML) | YAMLAgroManagementReader | 指定播/收日期、最大持续天数、灌溉事件等 |
| 逐日天气 | weatherdataprovider | .xlsx/.csv/ NASA-POWER 在线 | ExcelWeatherDataProvider/CSVWeatherDataProvider/NASAPowerWeatherDataProvider | 列名必须含 DAY、IRRAD、TMIN、TMAX、VAP、WIND、RAIN |
模型怎么选(import 哪一行)
| 生产级别 | 对应类 | 说明 |
|---|---|---|
| 潜在生产 Potential | Wofost72_PP | 不缺水、不缺氧、无病虫害,上限产量 |
| 水分限制 Water-limited | Wofost72_WLP_CWB | 加入土壤水平衡,可配灌溉,最常用的“实际产量” |
| 氮素限制 Nutrient-limited | Wofost72_WLP_NWB | 需要土壤氮素参数文件,再做施肥情景 |
最小可运行模板
from pathlib import Path
from pcse.input import CABOFileReader, YAMLAgroManagementReader
from pcse.util import WOFOST72SiteDataProvider
from pcse.base import ParameterProvider
from pcse.models import Wofost72_WLP_CWB # 水分限制
from pcse.db import NASAPowerWeatherDataProvider
import pandas as pd
d = Path(“data”) # 1. 改这里
cropd = CABOFileReader(d / “crop” / “SUG0601.crop”)
soild = CABOFileReader(d / “soil” / “ec3.soil”)
sited = WOFOST72SiteDataProvider(WAV=10, CO2=360, LAT=52.0, LON=5.2)
params = ParameterProvider(cropdata=cropd, soildata=soild, sitedata=sited)
agro = YAMLAgroManagementReader(d / “agro” / “sugarbeet_calendar.agro”)
weather = NASAPowerWeatherDataProvider(latitude=52.0, longitude=5.2, year=2020)
wofost = Wofost72_WLP_CWB(params, weather, agro)
wofost.run_till_terminate()
df = pd.DataFrame(wofost.get_output()).set_index(“day”)
df.to_csv(“sugarbeet_wlp.csv”)
快速换自己的数据
**换作物:**把 SUG0601.crop 换成你自己的 .crop 或 .yml,并在 YAML 管理文件里同步 crop_name
**换土壤:**换 ec3.soil 即可,WAV 初始值可在 sited 里再微调
换气象:
– 本地 Excel → ExcelWeatherDataProvider(“nl1.xlsx”)
– 本地 CSV → CSVWeatherDataProvider(“meteo.csv”)
– 在线 NASA → NASAPowerWeatherDataProvider(lat, lon, year)
**换播期:**直接改 .agro 文件里的 crop_start_date / emergence_date / harvest_date