Назначение и синтаксис

Шаблоны в data/assets/*.csv содержат только первую строку заголовка (UTF-8, запятая, точка десятичного разделителя, без строк примера). Одна строка = одна определённая ниже единица наблюдения; не смешивать одну строку на делянку со строкой на фотоснимок. Времена: RFC 3339/ISO 8601 с часовым смещением (+03:00) либо UTC (Z), дата YYYY-MM-DD; время зоной региона сопровождается timezone IANA в studies.csv. Пустое поле = ещё нет измерения/нет значения, 0 — измеренный нуль, код причины в missing_reason; строковое NA, запятая в десятичных значениях и автоматическое округление недопустимы. Категории на латинице с описанием здесь, кодировки версионируют вместе со схемой. Сопоставление MIAPPE: studies → Study, plots → Observation unit + factors, samples → Sample, observations/measurements → observed variable (trait+method+scale). Это удобный локальный экспорт, не готовый ISA-Tab MIAPPE.

Справочник полей

Во всех таблицах study_id — стабильный ASCII ключ одного site-season (SITE-YEAR, место/год задаются исследователем); plot_id — неизменный ASCII ключ одной делянки одного сезона; observed_at — время фактической регистрации; operator_role — функциональная роль; source_id — прибор/лаборатория/поставщик данных (не имя); method_id — документированная версия СОП; qc_flag ∈ raw|pass|suspect|invalid|missing|derived; missing_reason ∈ not_scheduled|not_observed|instrument_failure|cloud|plot_lost|sample_lost|below_detection|other с пояснением в событии. raw = не проверено, suspect = оставить для ручного решения; invalid = не использовать в расчётах, raw не стирать.

Файл: гранулярность и ключПоля и трактовка
studies.csv: сезон/место; study_idsite_id, season_year (целый год), latitude_deg, longitude_deg WGS84 и coordinate_uncertainty_m (заполнять только при разрешении на публикацию), timezone IANA, crop_taxon, spring_type (bool true/false), preceding_crop, protocol_version, study_license (SPDX/URL). Точная публичная география не обязательна при риске приватности; отдельная закрытая карта.
plots.csv: делянка; plot_idstudy_id, block_id (1–3 как код), row,column позиции, material_id,seed_lot_id, sowing_timing_level,seeding_rate_level категориальные назначения, target_seeds_m2 проектная норма шт./м², actual_sowing_date, actual_seeds_m2, gross_area_m2,harvest_area_m2 м², geometry_ref URI схемы, deviation_note. Не раскрывать факторы контрольного года при слепой настройке.
events.csv: событие; event_idplot_id пустое только если событие охватывает весь study_id; occurred_at, event_type (sowing/fertilization/pesticide/irrigation/lodging/flood/harvest/maintenance/other), input_name, dose_value,dose_unit, description, operator_role, source_id. Отличать проектную норму от действительной операции.
soil_samples.csv: отбор; sample_idplot_id или site-референтная зона в sampling_unit_id, collected_at, depth_top_cm,depth_bottom_cm, core_count, composite bool, sampling_pattern, storage_condition, method_id; soil_results.csv: sample_id, analyte_id (pH_H2O/pH_KCl/organic_carbon/available_P/available_K/nitrate_N/gravimetric_water), result_value,result_unit,lab_batch_id,method_id, qc_flag. Метод экстракции обязательно писать в методе; P/K разных экстракций несравнимы.
weather_hourly.csv: станция/час; (station_id,interval_start,interval_end)study_id, UTC timestamps, air_temp_mean_c,air_temp_min_c,air_temp_max_c, relative_humidity_mean_pct, rain_mm за интервал, wind_mean_m_s, solar_mj_m2 за интервал, soil_temp_c,soil_vwc_m3_m3, source_id,qc_flag, missing_reason; пустая ячейка для отсутствующего датчика. Смешанную периодичность хранить в разных сериях, а не выдавать за часовую.
phenology.csv: стадия/обход/делянка; (plot_id,observed_at,visit_id,bbch_code)bbch_code двухзначный код, stage_fraction_pct доля оценённых растений на стадии (не число открытых цветков), plants_count, stage_rule_id, operator_role, qc_flag, missing_reason; параллельные стадии — отдельные записи с тем же visit_id и разными bbch_code, доли при полной классификации суммарно 100%, но не одна усреднённая «BBCH=65.4».
biometry.csv: растение/сессия/показатель; measurement_idplot_id,plant_id постоянный внутри сезона, observed_at,trait_id (height_cm/leaf_count/pods_per_plant/other), value,unit,method_id,position_ref,operator_role,qc_flag,missing_reason.
samples.csv: физическая проба; sample_idplot_id,parent_sample_id для лабораторных алиquot, sample_type (biomass/seed/soil), collected_at, sample_area_m2, plant_count, fresh_mass_g, dry_mass_g,drying_temp_c,drying_end_rule,storage_condition,operator_role,qc_flag; для уборки отдельная таблица. parent_sample_id никогда не меняет число делянок.
harvest.csv: итог делянки; plot_idharvested_at,harvest_area_m2,gross_seed_mass_kg,tare_kg,clean_seed_mass_kg,seed_moisture_pct_wb,reference_moisture_pct_wb,yield_kg_ha_ref,loss_note,method_id,qc_flag; первичные массы не заменять вычисленным урожаем.
oil_assays.csv: аналитическое определение; assay_idplot_id,sample_id,lab_batch_id,aliquot_id,assayed_at,method_id,oil_pct_basis (`as_received
images.csv: отдельный кадр/сцена; image_idplot_id пусто для спутниковой сцены участка без доказуемой деляночной детализации, acquired_at,platform (ground/uav/sentinel2/landsat),asset_uri,sha256,camera_or_product_id,view_azimuth_deg,height_m,scale_ref,pixel_size_m,footprint_ref,cloud_fraction_pct,usable_fraction_pct,qc_flag,license_id; снимок не самостоятельная репликация.
file_manifest.csv: исходный файл; file_idasset_uri,sha256,created_at,retrieved_at,source_url,license_id,access_scope (public/restricted/private),processor_version,derived_from_file_ids (JSON-массив CSV quoted),description. Не публиковать private пути, персональные данные/секреты.
instruments.csv: датчик/период установки; deployment_idstudy_id,station_id,source_id,sensor_type (air_temp/rh/precip/wind/radiation/soil_temp/soil_vwc/camera/scale),make_model,serial_ref (только закрытый),mounted_at,unmounted_at,height_m,depth_cm,latitude_deg,longitude_deg,exposure_notes,maintenance_interval_days,method_id; новая установка = новый deployment_id, закрытые координаты не выпускать публично.
calibrations.csv: контроль прибора; calibration_idsource_id,performed_at,valid_from,valid_until,reference_instrument_id,reference_value,reading_value,unit,correction_value,acceptance_rule,decision (pass/fail),method_id,operator_role,certificate_ref; не приписывать просроченной калибровке статус годной задним числом.

Сводные правила

id — текстовый ключ без пробелов, никакого преобразования 001 в 1; sample_id ссылается на существующую делянку либо отдельную site-зону, aliquot_id на исходную пробу. weather_hourly связывают с делянками только через study_id и географию станции: поле погоды не репликация 36 измерений. Точная формула пересчёта урожая в уборке, доступные на дату предикторы в holdout, QA в обработке. Первичные файлы сохраняются без редактирования; исправления — новая версия и журнал.

Источники к действию

MIAPPE: trait–method–scale объясняет обязательность method_id и единиц; FAIR: provenance/license объясняет манифест и связи между файлами.

Связи

  • Экспериментальные единицы — объясняют ключи и вложенность.
  • Почва — метод и глубина делают числа сравнимыми.
  • Метеоданные — интервалы и локальная/UTC дата определяют суммы.
  • QA — значения и флаги не сливаются в одно.
  • Модели — границы данных на момент прогноза используют timestamp и происхождение.