es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice NetCDF con shapefile y calcule el promedio y la anomalía para todos los polígonos dentro del shapefile.

Hay varios tutoriales (ejemplo 1, ejemplo 2, ejemplo 3) sobre cómo enmascarar archivos NetCDF utilizando un shapefile y calcular medidas promedio. Sin embargo, me confundí con esos flujos de trabajo sobre cómo enmascarar archivos NetCDF y extraer medidas como el promedio, y esos tutoriales no incluyeron la extracción de anomalías (por ejemplo, la diferencia entre la temperatura en 2019 y una temperatura promedio base).

Aquí hago un ejemplo. Descargué la temperatura mensual (descargar archivo de temperatura) desde 2000 hasta 2019 y el shapefile de nivel estatal de EE. UU. (descargar shapefile). Quiero obtener la temperatura promedio a nivel estatal basada en la temperatura mensual promedio de 2000 a 2019 y la anomalía de temperatura del año 2019 en relación con la temperatura promedio base de 2000 a 2010. Específicamente, el dataframe final se ve así:

estado temp_promedio anom_temp2019
AL xx xx
AR xx xx
WY xx xx
# Cargar librerías
%matplotlib inline

import regionmask
import numpy as np
import xarray as xr
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt

# Leer shapefile
us = gpd.read_file('./shp/state_cus.shp')

# Leer datos gráficos
ds = xr.open_mfdataset('./temp/monthly_mean_t2m_*.nc')
...

Agradezco mucho su ayuda al proporcionar un flujo de trabajo explícito que pueda realizar la tarea anterior. Muchas gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Enmascarar NetCDF utilizando Shapefile y extraer medidas con Python

    Aquí hay un flujo de trabajo que puede ayudarte a extraer la temperatura promedio a nivel estatal basada en la temperatura promedio mensual de 2000 a 2019 y la anomalía de temperatura relativa de 2019 en comparación con la temperatura base de 2000 a 2010. El flujo de trabajo incluye:

    1. Leer y cargar bibliotecas.
    2. Leer Shapefile y datos de temperatura en cuadrícula.
    3. Enmascarar datos de NetCDF utilizando Shapefile.
    4. Agregar datos enmascarados a nivel estatal utilizando regionmask.
    5. Calcular la temperatura promedio a nivel estatal a partir de la temperatura promedio mensual.
    6. Calcular la anomalía de temperatura de 2019 en relación con la temperatura base de 2000 a 2010.
    7. Crear un marco de datos final con la temperatura promedio a nivel estatal y la anomalía de temperatura.
    # Cargar bibliotecas
    %matplotlib inline
    
    import regionmask
    import numpy as np
    import xarray as xr
    import pandas as pd
    import geopandas as gpd
    import matplotlib.pyplot as plt
    
    # Leer Shapefile
    us = gpd.read_file('./shp/state_cus.shp')
    
    # Leer datos en cuadrícula
    ds = xr.open_mfdataset('./temp/monthly_mean_t2m_*.nc')
    
    # Definir el rango de tiempo para la temperatura base
    baseline_start = '2000-01-01'
    baseline_end = '2010-12-31'
    
    # Definir el rango de tiempo para la anomalía de temperatura
    anomaly_start = '2019-01-01'
    anomaly_end = '2019-12-01'
    
    # Enmascarar datos de NetCDF utilizando Shapefile
    mask = regionmask.mask_geopandas(us, ds.lon, ds.lat)
    masked_ds = ds.where(mask > 0)
    
    # Agregar datos enmascarados a nivel estatal utilizando regionmask
    state_ds = masked_ds.groupby(mask).mean('stacked_lat_lon')
    
    # Calcular la temperatura promedio a nivel estatal a partir de la temperatura promedio mensual
    state_avg_temp = state_ds.mean(dim='time').t2m
    
    # Calcular la temperatura base de 2000 a 2010
    baseline_temp = state_ds.sel(time=slice(baseline_start, baseline_end)).mean(dim='time').t2m
    
    # Calcular la anomalía de temperatura de 2019 en relación con la temperatura base de 2000 a 2010
    anom_temp2019 = state_ds.sel(time=slice(anomaly_start, anomaly_end)).mean(dim='time').t2m - baseline_temp
    
    # Crear un marco de datos final con la temperatura promedio a nivel estatal y la anomalía de temperatura
    df = pd.DataFrame({'estado': state_avg_temp.region.values,
                       'temp_prom': state_avg_temp.values,
                       'anom_temp2019': anom_temp2019.values})
    

    Este flujo de trabajo debería darte el marco de datos final de la siguiente manera:

    estado temp_prom anom_temp2019
    AL xx xx
    AR xx xx
    WY xx xx

    Espero que esto te ayude a lograr tu tarea. Si tienes alguna pregunta adicional o necesitas ayuda adicional, no dudes en preguntar.

Comments are closed.