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.

¿Existe un método rápido para archivos grib en xarray?

Me estoy encontrando con un problema. Tengo múltiples archivos grib por hora para varios años, más de 180 días cada uno. Tarda 3.5 segundos en cargar un archivo en xarray. Probado durante 9 días.

import dask
import glob
import cfgrib
import numpy as np
import xarray as xr
import pandas as pd
import netCDF4 as nc
from scipy import spatial
from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import matplotlib.ticker as ticker
from dask.distributed import Client
import matplotlib.patheffects as path_effects

client = Client()
client

filenames = glob.glob("/2017100*/*")
dsmerged = xr.open_mfdataset(
                      filenames,
                      #compat='override',
                      combine = 'nested',
                      concat_dim = 'valid_time',
                      engine="cfgrib",)

Tiempos de CPU: usuario 12min 34s, sys: 1min 15s, total: 13min 50s
Tiempo de ejecución: 12min 37s. El tiempo de carga es un problema. También estoy buscando recursos para métodos para convertir grib a netcdf https://confluence.ecmwf.int/display/OIFS/How+to+convert+GRIB+to+netCDF. Sin embargo, ¿hay algún método en Python para cargar directamente el grib más rápido? Si no hay un método que se convierta correctamente a netcdf en Python, podría terminar usando NCL CDO y NCO, pero preferiría encontrar primero un método en Python. Actualmente estoy buscando en stackoverflow y muchos otros recursos también.

Edición

Podría hacer algo en bash en su lugar, algo como:

for file in *.grib
do
ncl_convert2nc $file
ncks lat lon
done
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás enfrentando un problema con el tiempo de carga de múltiples archivos grib por hora. El código actual tarda 3.5 segundos en cargar un archivo en xarray, lo cual ha sido probado durante 9 días.

    Ya has explorado recursos para convertir grib a netcdf, sin embargo, también estás buscando un método en python para cargar archivos grib más rápido o convertirlos correctamente a netcdf en python.

    Es recomendable verificar si existen bibliotecas o métodos alternativos que proporcionen una carga más rápida de archivos grib en python. Puedes considerar revisar la biblioteca PyNIO, la cual ofrece una interfaz de Python para las bibliotecas de E/S NCAR para leer y escribir archivos grib. Además, PyNIO también permite la conversión de datos de grib a netcdf.

    Junto a esto, puedes optimizar aún más el código actual haciendo uso de técnicas de paralelización a través de bibliotecas como Dask o reduciendo la cantidad de datos cargados al mismo tiempo.

    Como alternativa, puedes considerar utilizar bibliotecas externas como NCL, CDO o NCO para convertir archivos grib a netcdf en un entorno de bash. El fragmento de código que proporcionaste parece ofrecer una solución viable para convertir múltiples archivos grib a netcdf utilizando NCL.

    En general, sería mejor explorar una combinación de estos enfoques para optimizar el tiempo de carga y resolver tu problema.

Comments are closed.