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.
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:
- 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.
- 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.
- 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).
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.
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: