Para una aplicación django, necesito procesar varios archivos netCDF cada día. Cada archivo contiene una matriz de datos tridimensionales (latitud, longitud, tiempo) de una variable con una forma de (1000, 1000, 24).
En algunas vistas de la aplicación django, quiero acceder a valores específicos de estas matrices de datos, es decir, la serie temporal en una ubicación específica (dada la latitud y la longitud) o el mapa completo de una variable en un momento específico.
En proyectos de ciencia de datos, normalmente hago esto abriendo el archivo con xarray ( xarray.open_dataset('file.nc') ) y usando .sel() de xarray para seleccionar los valores deseados.
En la aplicación django, actualmente almaceno las variables en un modelo similar al siguiente:
class Geoid(models.model): latitude = models.FloatField() longitude = models.FloatField() class Timestamp(models.model): time = models.DateTimeField() class Variable(models.model): geoid = models.ForgeinKey(Geoid) time = models.ForgeinKey(Timestamp) value = models.FloatField() Me di cuenta de que insertar los puntos de datos 1000x1000x24 = 24,000,000 de cada archivo en la base de datos lleva demasiado tiempo, incluso si uso el método .bulk_create() de Django.
Esto me llevó a mis preguntas:
¿Sería realmente mejor leer directamente los datos en una vista de django desde los archivos netCDF usando xarray? ¿Cuáles serían los pros y los contras?
Investigué GeoDjango y el RasterField disponible, pero no pude encontrar un método para buscar valores de píxeles (es decir, dada la latitud y la longitud) de un RasterField de una manera rápida y limpia.