climate change datos funcionales

Análisis mediante datos funcionales del clima de una zona

July 11, 2023

El cambio climático es el cambio que se produce en patrones climáticos asociado en gran parte a la acción humana y que es muy comentado en los medios de comunicación. No hay ninguna duda, salvo a personas que son ciegas a la evidencia, que está ocurriendo y que va a azotar a todo el planeta durante los próximos años. En este artículo planteo un modelo para analizar el cambio ocurrido durante un mes en concreto de dos años consecutivos utilizando datos funcionales. No es una prueba del cambio climático. La correlación no indica causalidad, pero es interesante ver como en una escala de un año, que geológico es despreciable, sí que se notan leves cambios.

En este artículo se va a trabajar con datos funcionales y se van a crear gráficas de la evolución de la temperatura a lo largo de los días del mes de junio de 2023, enfrentándose con los valores de 2021. Se utiliza Python y ChatGPT.

Qué son los datos funcionales

El análisis de datos funcionales es una rama de la Estadística que analiza los datos proporcionando información sobre curvas, superficies o cualquier otra variable que cambia sobre un continuo. Cada elemento de la muestra se considera una función. El continuo físico sobre el que las funciones se definen a menudo es el tiempo, pero también se puede utilizar localización espacial, longitud de onda, probabilidad. etc..

Una variable aleatoria χ se le denomina variable funcional si toma valores en un espacio métrico completo o bien en un semimétrico funcional. Una observación x de χ se le llama dato funcional.

Pasos para iniciar a trabajar con datos funcionales

Los principales pasos en el análisis de datos funcionales son:

  • Coleccionar, limpiar y ordenar los datos en bruto.
  • Convertir esos datos en su forma funcional.
  • Explorar los datos mediante gráficos plot y resumen de estadísticas.
  • Llevar a cabo análisis exploratorios, como por ejemplo análisis de componentes principales.
  • Registrar los datos, si es necesario, de modo que los valores importantes ocurren en los mismos argumentos.
  • Construir un modelo.
  • Por último, evaluar el rendimiento del modelo.

Estación de trabajo

Para realizar este trabajo he utilizado los datos de la estación meteorológica Castro Vicaludo, situada en Oia, en la provincia de Pontevedra, España. La estación Castro Vicaludo (Fig. 1) está ubicada a 42º de latitud y -8,86º de longitud con una altitud de 473 metros y viene recogiendo datos desde el 28 de Abril de 2004.

Figura 1. Estación meteorológica de Castro Vicaludo, Oia, Pontevedra, España.

El periodo de medición va a ser de dos períodos y se utilizan variable diez-minutales, es decir, se recogen datos cada 10 minutos:

  • Variables diez-minutales. Periodo de consulta: 01-06-2023 a 30-06-2023
  • Variables diez-minutales. Periodo de consulta: 01-06-2021 a 30-06-2021

Datos funcionales de temperatura máxima a 1 metro por día

Se descargan los datos desde la página https://www.meteogalicia.gal y se trabaja con dos ficheros json:

  • oia062021.json, que tiene los datos de temperatura a 0.1 metros medidos para todos los días del mes de junio de 2021 a intervalos de 10 minutos.
  • oia062023.json, que tiene los datos de temperatura a 0.1 metros medidos para todos los días del mes de junio de 2021 a intervalos de 10 minutos.

El término “encabezado” no se aplica directamente a los archivos JSON, ya que los archivos JSON no tienen un encabezado específico como los archivos CSV o los archivos de texto plano. Sin embargo, si quieres ver la estructura o las claves principales de un archivo JSON, puedes seguir los siguientes pasos:

  1. Leer el archivo JSON: Abre el archivo y lee su contenido en una variable. Puedes hacerlo utilizando las funciones proporcionadas por tu lenguaje de programación.
  2. Analizar el JSON: Una vez que hayas leído el archivo JSON, debes analizarlo para convertirlo en un objeto JSON en tu lenguaje de programación. Esto te permitirá acceder a las claves y los valores del JSON.
  3. Visualizar las claves del JSON: Puedes mostrar las claves principales del JSON utilizando las funciones proporcionadas por tu lenguaje de programación. Esto te dará una idea de la estructura del archivo JSON.

Se puede utilizar este código de Python:

import json

with open('oia062023.json') as file:
    data = json.load(file)

# Obtener las claves del JSON
keys = data.keys()

# Mostrar las claves
for key in keys:
    print(key)

Del fichero json extraemos la información referente a temperatura media a 0.1 metros:

import json
import matplotlib.pyplot as plt
from datetime import datetime

with open('oia062023.json') as file:
    data = json.load(file)

fechas = []
temperaturas = []

for resultado in data['resultados']:
    fecha = datetime.strptime(resultado['Data'], "%Y-%m-%d %H:%M:%S.%f")
    temperatura = resultado['Valor']
    fechas.append(fecha)
    temperaturas.append(temperatura)

Se crea un gráfico en donde el eje X es el intervalo de tiempo, mediciones cada día minutos a lo largo de un día, y el eje Y es el valor de la temperatura media. Se utiliza este código:

import json
import matplotlib.pyplot as plt
from datetime import datetime

with open('oia062023.json') as file:
    data = json.load(file)

datos_por_dia = {}

for resultado in data['resultados']:
    fecha = datetime.strptime(resultado['Data'], "%Y-%m-%d %H:%M:%S.%f").date()
    temperatura = resultado['Valor']
    if fecha not in datos_por_dia:
        datos_por_dia[fecha] = {'temperaturas': []}
    datos_por_dia[fecha]['temperaturas'].append(temperatura)

# Crear una gráfica para cada día
for fecha, datos in datos_por_dia.items():
    plt.plot(datos['temperaturas'], label=fecha.strftime("%d"))

# Configurar etiquetas y título del gráfico
plt.xlabel('Intervalo de tiempo')
plt.ylabel('Temperatura (ºC)')
plt.title('Evolución de la temperatura a 0.1m por día')

# Reformatear la leyenda
plt.legend(title='Día del mes', loc='center left', bbox_to_anchor=(1, 0.5))

# Mostrar la gráfica
plt.show()

Con este código se obtiene este resultado para el año 2023. Cada día del mes tiene una curva asociada y un color. En el eje X se trata del intervalo de tiempo desde las 0.10 am hasta las 11.50 pm, es decir, 144 puntos de datos, al tratarse de valores diezminutales (valores tomados cada 10 minutos a lo largo del día).

datos funcionales

Comparando los datos con el año 2021

Ahora se va a comparar los datos de 2023 con los de 2021. Para obtener los datos de 2021 se descargan de nuevo desde meteogalicia.gal. Y se obtiene esta gráfica del 2021.

datos funcionales

Variables estadísticas para comparar ambos años

Para comparar ambos años se va a utilizar el siguiente código de Python con algunas fórmulas estadísticas:

import json
from datetime import datetime
import statistics

# Leer los datos del primer archivo JSON (062023.json)
with open('oia062023.json') as file:
    data_2023 = json.load(file)

# Leer los datos del segundo archivo JSON (062021.json)
with open('oia062021.json') as file:
    data_2021 = json.load(file)

# Extraer las temperaturas de cada archivo JSON
temperaturas_2023 = [resultado['Valor'] for resultado in data_2023['resultados']]
temperaturas_2021 = [resultado['Valor'] for resultado in data_2021['resultados']]

# Realizar cálculos estadísticos en los datos de 2023
temperatura_promedio_2023 = statistics.mean(temperaturas_2023)
temperatura_maxima_2023 = max(temperaturas_2023)
temperatura_minima_2023 = min(temperaturas_2023)
temperatura_mediana_2023 = statistics.median(temperaturas_2023)
desviacion_estandar_2023 = statistics.stdev(temperaturas_2023)

# Realizar cálculos estadísticos en los datos de 2021
temperatura_promedio_2021 = statistics.mean(temperaturas_2021)
temperatura_maxima_2021 = max(temperaturas_2021)
temperatura_minima_2021 = min(temperaturas_2021)
temperatura_mediana_2021 = statistics.median(temperaturas_2021)
desviacion_estandar_2021 = statistics.stdev(temperaturas_2021)

# Imprimir los resultados
print("Resultados para el año 2023:")
print(f"Temperatura promedio: {temperatura_promedio_2023} °C")
print(f"Temperatura máxima: {temperatura_maxima_2023} °C")
print(f"Temperatura mínima: {temperatura_minima_2023} °C")
print(f"Temperatura mediana: {temperatura_mediana_2023} °C")
print(f"Desviación estándar: {desviacion_estandar_2023} °C")
print()
print("Resultados para el año 2021:")
print(f"T. promedio: {temperatura_promedio_2021} °C")
print(f"T. máxima: {temperatura_maxima_2021} °C")
print(f"T. mínima: {temperatura_minima_2021} °C")
print(f"T. mediana: {temperatura_mediana_2021} °C")
print(f"Desviación estándar: {desviacion_estandar_2021} °C")

Y se obtiene este resultado organizado como una tabla:

|   Año |   T. promedio (°C) |   T. máxima (°C) |   T. mínima (°C) |   T. mediana (°C) |   Desviación estándar (°C) |
|------:|-------------------:|-----------------:|-----------------:|------------------:|---------------------------:|
|  2023 |            19.1679 |            33.95 |            10.64 |            17.665 |                    4.98359 |
|  2021 |            16.9068 |            39.65 |             5.52 |            14.97  |                    6.2705  |

Resumen

Se han comparado los datos de temperatura de junio de 2023 con los de junio de 2021. Según los datos obtenidos puede verse que la temperatura media promedio del año 2023 fue de 19,16 ºC, mientras que en 2021 fue de 16,90 ºC. La temperatura máxima en 2023 fue de 33.95, mientras que en 2021 fue de 39,65. La temperatura mínima en 2023 fue de 10.64, 5,52 ºC en 2021. La mediana (el valor medio de los datos) fue de 17,66 en 2023 frente a 14,97 en 2021.

Por último, se comparan los dos años en la siguiente imagen, derecha 2023 e izquierda 2021:

User Avatar

Avelino Dominguez

👨🏻‍🔬 Biologist 👨🏻‍🎓 Teacher 👨🏻‍💻 Technologist 📊 Statistician 🕸 #SEO #SocialNetwork #Web #Data ♟Chess 🐙 Galician

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

functional data
Previous Story

Analysis using functional data of the climate of an area

genmo
Next Story

GenMo, generar imágenes y videos mediante inteligencia artificial

Top

Don't Miss

números primo primo

Verificar si un número es primo o no utilizando Python

Este artículo explica cómo saber si
prime numbers

Check if a number is prime or not using Python

This article explains how to tell