コード例 #1
0
clave_default = credencial.get('clave')

if __name__ == "__main__":
    matplotlib.use('TkAgg')

    # DESCRIPCIÓN DEL PROBLEMA:

    # Problema 1:
    # Geolocalizar todas las estaciones meteorológicas de Argentina en un mapa. Identificar la estación Pehuajó (ID OMM
    # 87544) y todas las estaciones geográficamente vecinas que se encuentren dentro de un radio de 300 kilómetros.

    # SOLUCIÓN DEL PROBLEMA:

    # 1. Búsqueda de estaciones de Argentina (AR, para otros países utilizar el código ISO de 2 letras correspondiente)
    estaciones = consumir_servicio_JSON(url=base_url + "/estaciones/AR",
                                        usuario=usuario_default,
                                        clave=clave_default)

    # 2. Búsqueda de estaciones vecinas a Pehuajó (omm_id = 87544).
    #    Se buscan estaciones dentro de un radio de 300km.
    omm_central_id = 87544
    maxima_distancia_km = 300
    url_vecinas = f"{base_url}/estaciones_vecinas/{omm_central_id}?max_distancia={maxima_distancia_km}"
    estaciones_vecinas = consumir_servicio_JSON(url=url_vecinas,
                                                usuario=usuario_default,
                                                clave=clave_default)

    # 3. Indico si la estación es Central (Pehuajó), Vecina u Otra
    estaciones = estaciones.assign(tipo=lambda df: df.apply(
        lambda x: 'Central' if x['omm_id'] == omm_central_id else 'Vecina'
        if x['omm_id'] in estaciones_vecinas['omm_id'].values else 'Otra',
コード例 #2
0
if __name__ == "__main__":
    matplotlib.use('TkAgg')

    # DESCRIPCIÓN DEL PROBLEMA:

    # Problema 3:
    # Obtener las series temporales de SPI-3 para Pehuajó (87544) calculado mediante un ajuste paramétrico de
    # precipitaciones dentro del período de referencia 1971-2010, utilizando el método de máxima verosimilitud
    # sin remuestreo. Graficar la serie para el período 2017-2019.

    # SOLUCIÓN DEL PROBLEMA:

    # Se obtiene un listado de configuraciones de índices y se seleccionan los SPI con escala de 3 meses.
    configuraciones = consumir_servicio_JSON(
        url=f"{base_url}/indices_sequia_configuraciones",
        usuario=usuario_default,
        clave=clave_default)
    # Seleccionar SPI y escala de 3 meses
    configuraciones = configuraciones.query('indice == "SPI" and escala == 3')
    # Vista de las configuraciones en una tabla
    print(configuraciones.to_markdown(tablefmt="github", showindex=False))

    # Ahora procedemos a buscar la serie temporal de SPI-3 para Pehuajó entre 2017 y 2019.
    omm_id = 87544
    indice_configuracion_id = 43
    fecha_desde = dateutil.parser.parse("2017-01-01").isoformat()
    fecha_hasta = dateutil.parser.parse("2019-12-31").isoformat()
    url_valores_indice = f"{base_url}/indices_sequia_valores/{indice_configuracion_id}/" \
                         f"{omm_id}/{fecha_desde}/{fecha_hasta}"
    serie_temporal_spi = consumir_servicio_JSON(url=url_valores_indice,
                                                usuario=usuario_default,
コード例 #3
0
    # Problema 2:
    # Buscar los valores de precipitación acumulada de 3 meses para los meses de enero a marzo de la estación Pehuajó.
    # Utilizar el período de referencia 1971-2010 para ajustar una distribución no paramétrica a dichos valores.

    # SOLUCIÓN DEL PROBLEMA:

    # Se buscan los valores de precipitación acumulada de enero a marzo para Pehuajó (87544)
    omm_id = 87544
    ancho_ventana = 18
    fecha_desde = dateutil.parser.parse("1971-01-01").isoformat()
    fecha_hasta = dateutil.parser.parse("2010-12-31").isoformat()
    url_estadisticas = f"{base_url}/estadisticas_moviles/{omm_id}/Suma/{ancho_ventana}/{fecha_desde}/{fecha_hasta}"

    estadisticas = consumir_servicio_JSON(url=url_estadisticas,
                                          usuario=usuario_default,
                                          clave=clave_default)
    estadisticas['fecha_desde'] = pd.to_datetime(estadisticas['fecha_desde'])
    estadisticas['fecha_hasta'] = pd.to_datetime(estadisticas['fecha_hasta'])
    estadisticas = estadisticas.query(
        'fecha_hasta.dt.month == 3 and fecha_hasta.dt.day == 31')

    # Datos necesarios para el ajuste
    tamano_bin = 50  # Ancho de cada intervalo
    muestra_original = estadisticas['valor'].values

    # 1. Histograma de datos originales
    r_hist_counts, r_hist_breaks = np.histogram(muestra_original,
                                                bins=range(
                                                    0, 900 + 1, tamano_bin))
    r_hist_mids = 0.5 * (r_hist_breaks[1:] + r_hist_breaks[:-1])