Relacion entre la altitud, precipitación y temperatura en Guatemala¶

Paris Rivera

Descripción¶

Este proyecto se centra en el análisis de datos de 48 estaciones locales de precipitación y temperatura anual del año 1970. Utilizando técnicas de clustering como K-Means y Affinity Propagation, así como Análisis de Componentes Principales (PCA), se busca identificar patrones y agrupamientos significativos en los datos. Además, se visualizan las estaciones en un mapa y se realiza un análisis gráfico para comprender mejor la relación entre las variables estudiadas.

Introducciòn¶

La comprensión del clima y sus variaciones es fundamental para diversas disciplinas, desde la meteorología hasta la agricultura y la planificación urbana. Las estaciones meteorológicas proporcionan datos esenciales sobre variables como la precipitación y la temperatura, que son cruciales para predecir el clima y tomar decisiones informadas. Sin embargo, la influencia de la altitud sobre estas variables no siempre se ha comprendido completamente, lo que limita la capacidad de desarrollar modelos climáticos precisos y estrategias de adaptación eficaces. En este estudi, se analizan datos históricos de 1970 para explorar patrones de precipitación y temperatura en diferentes altitudes.

Antecedentes¶

El análisis de datos de estaciones meteorológicas a través de técnicas de clustering y análisis de componentes principales (PCA) permite identificar patrones y relaciones que no son evidentes a simple vista. Estas técnicas han evolucionado significativamente en las últimas décadas. Por ejemplo, el método K-Means, desarrollado hace más de 50 años, sigue siendo una herramienta potente y ampliamente utilizada para el agrupamiento de datos debido a su simplicidad y eficiencia (Jain, 2010). Además, la propagación de afinidad (Affinity Propagation) es una técnica más reciente que ofrece una perspectiva alternativa sobre el agrupamiento de datos, permitiendo identificar agrupamientos basados en la similitud de datos de entrada sin necesidad de predefinir el número de clusters (Pedregosa et al., 2011).

El uso de herramientas como Scikit-learn y Geopandas ha facilitado enormemente la implementación de estos métodos en Python. Scikit-learn es una biblioteca robusta que ofrece una variedad de algoritmos de aprendizaje automático, incluyendo K-Means y Affinity Propagation, y es ampliamente utilizada en la investigación y la industria debido a su versatilidad y rendimiento (Pedregosa et al., 2011). Por otro lado, Geopandas permite manejar y visualizar datos geoespaciales de manera eficiente, lo que es crucial para proyectos que involucran datos de estaciones meteorológicas dispersas geográficamente.

La normalización de datos es un paso crítico antes de aplicar técnicas de clustering, ya que asegura que todas las variables contribuyan de manera equitativa al análisis. Una vez normalizados los datos, el método del codo se puede utilizar para determinar el número óptimo de clusters en K-Means, lo que ayuda a identificar patrones de agrupamiento significativos (Bishop, 2006). El Análisis de Componentes Principales (PCA) es otra técnica fundamental en este tipo de análisis, ya que permite reducir la dimensionalidad de los datos y destacar las variables que más contribuyen a la variabilidad observada (Bishop, 2006).

Problema¶

La falta de comprensión sobre cómo la altitud influye en la precipitación y la temperatura en diferentes regiones ha limitado la capacidad para predecir y adaptarse a las variaciones climáticas. Aunque se dispone de datos históricos de estaciones meteorológicas, no se han aplicado técnicas avanzadas de análisis de datos para identificar patrones y relaciones significativas entre estas variables. Esto ha dificultado el desarrollo de modelos climáticos precisos y la formulación de políticas efectivas en sectores críticos como la agricultura, la gestión de recursos hídricos y la planificación urbana.

Objetivo¶

Identificar patrones de agrupamiento en las estaciones meteorológicas en función de las variables de precipitación, temperatura y altitud.

Datos Utilizados¶

Estaciones meteorológicas: 48 estaciones locales. Variables: Precipitación anual, temperatura anual, altitud. Año: 1970. Formato: CSV y shapefile para el mapa geográfico.

In [ ]:
from google.colab import drive # montar Google Drive en el entorno de Google Colab para acceder a los archivos
import geopandas as gpd # para trabajar con datos geoespaciales.
import pandas as pd # Manipulación y análisis de datos
import matplotlib.pyplot as plt # creación de gráficos y visualizaciones
import numpy as np # cálculo numérico
import seaborn as sns # para dibujar gráficos estadísticos atractivos
from sklearn.cluster import KMeans, AffinityPropagation # librería de aprendizaje automático
from sklearn.decomposition import PCA # Análisis de componentes principale
from sklearn.preprocessing import StandardScaler # normalizar datos
from sklearn.metrics import pairwise_distances_argmin_min #Calcula las distancias por pares y retorna los índices y distancias mínimas.



# Montar Google Drive
drive.mount('/content/drive')

from google.colab import drive
drive.mount('/content/drive', force_remount=True)
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
Mounted at /content/drive
In [ ]:
import os

# Listar archivos en el directorio especificado
path = '/content/drive/My Drive/Lo_curso_python_2024/shapefile'
files = os.listdir(path)
print(files)
['departamentos.shp.xml', 'departamentos.prj', 'departamentos.shx', 'departamentos.sbx', 'departamentos.sbn', 'departamentos.dbf', 'departamentos.shp']
In [ ]:
# Ruta al archivo shape
shape_file_path = '/content/drive/My Drive/Lo_curso_python_2024/shapefile/departamentos.shp'

# Leer el archivo shape
gdf = gpd.read_file(shape_file_path)

# Verificar las columnas del GeoDataFrame
print("Columnas en el GeoDataFrame:")
print(gdf.columns)

# Mostrar una lista de los nombres de los departamentos
departamento_column = 'DEPARTAMEN'  #
if departamento_column in gdf.columns:
    print("\nLista de departamentos:")
    print(gdf[departamento_column].unique())
else:
    print(f"La columna '{departamento_column}' no se encuentra en el GeoDataFrame. Por favor, verifica el nombre de la columna.")
Columnas en el GeoDataFrame:
Index(['DEPTOS4_', 'DEPTOS4_ID', 'DEPARTAMEN', 'COUNT', 'Incendios',
       'geometry'],
      dtype='object')

Lista de departamentos:
['Petén' 'Quiché' 'Huehuetenango' 'Alta Verapaz' 'Izabal' 'San Marcos'
 'Baja Verapaz' 'Zacapa' 'Totonicapán' 'Quetzaltenango' 'El Progreso'
 'Chiquimula' 'Chimaltenango' 'Guatemala' 'Sololá' 'Jalapa' 'Sacatepéquez'
 'Retalhuleu' 'Suchitepéquez' 'Jutiapa' 'Santa Rosa' 'Escuintla']
In [ ]:
# Ruta al archivo CSV
csv_file_path = '/content/drive/My Drive/Lo_curso_python_2024/Estaciones.csv'

# Leer el archivo CSV con la codificación 'latin1' y el delimitador ';'
df_estaciones = pd.read_csv(csv_file_path, encoding='latin1', delimiter=';')

# Mostrar las estaciones con su información como tabla
print("\nEstaciones con su información:")
print(df_estaciones)
Estaciones con su información:
                    Estación     Departamento                   Municipio  \
0                Alameda ICTA   Chimaltenango                    El Tejar   
1                      Chixoy           Quiché                   Chicamán   
2                     Cubulco     Baja Verapaz                    Cubulco   
3                  El Capitán           Sololá          San Lucas Tolimán   
4                  El Tablón            Sololá      Santa María El Tablón   
5                   INSIVUMEH       Guatemala                  Guatemala    
6                 Los Albores     El Progreso   San Agustín Acasaguastlán   
7               Los Esclavos        Santa Rosa                    Cuilapa   
8                   Sacapulas           Quiché                  Sacapulas   
9               San Jerónimo      Baja Verapaz              San Jerónimo    
10     San Martín Jilotepeque   Chimaltenango     San Martín Jilotepeque    
11        Santa Cruz Balanyá    Chimaltenango         Santa Cruz Balanyá    
12          Santiago Atitlán            Sololá          Santiago Atitlán    
13             Suiza Contenta     Sacatepéquez     San Lucas Sacatepéquez   
14  San Agustín Acasaguastlán     El Progreso   San Agustín Acasaguastlán   
15                  La Aurora       Guatemala                  Guatemala    
16                  Chinique            Quiché                  Chinique    
17                  Catarina       San Marcos                   Catarina    
18                 Retalhuleu       Retalhuleu                 Retalhuleu   
19              Sabana Grande        Escuintla                Guanagazapa   
20                Mazatenango    Suchitepéquez               Mazatenango    
21                  Las Vegas          Izabal                  Livingston   
22            Puerto Barrios           Izabal              Puerto Barrios   
23        Santa María Cahabón     Alta Verapaz       Santa María Cahabón    
24                     Cobán      Alta Verapaz                     Cobán    
25                    Panzós      Alta Verapaz                    Panzós    
26                     Nebaj            Quiché                     Nebaj    
27                    Flores             Petén                     Flores   
28                    Poptún             Petén                    Poptún    
29             Huehuetenango     Huehuetenango             Huehuetenango    
30              Labor Ovalle   Quetzaltenango                Olintepeque    
31                San Marcos       San Marcos                 San Marcos    
32           San Pedro Necta     Huehuetenango           San Pedro Necta    
33              Todos Santos     Huehuetenango    Todos Santos Cuchumatán   
34                 Los Altos   Quetzaltenango             Quetzaltenango    
35                   Montúfar          Jutiapa                     Moyuta   
36           Puerto San José         Escuintla                  San José    
37                Champerico        Retalhuleu                Champerico    
38                Tecún Umán       San Marcos                 Tecún Umán    
39                   Camotán       Chiquimula                     Camotán   
40                Esquipulas       Chiquimula                  Esquipulas   
41                La Ceibita           Jalapa                      Monjas   
42                 La Fragua            Zacapa                 Estanzuela   
43                  La Unión            Zacapa                  La Unión    
44                  Pasabién            Zacapa                 Río Hondo    
45          Potrero Carrillo           Jalapa                      Jalapa   
46             Asunción Mita           Jutiapa              Asunción Mita   
47                    Quesada          Jutiapa                    Quesada   

    Latitud   Longitud   Elevación       pp  t_max  t_mean  t_min  
0       14.6      -90.8      1750.0   715.0   21.6    16.4   10.2  
1       15.4      -90.7       680.0  1379.2   30.3    24.3   17.4  
2       15.1      -90.6       994.0  1053.7   29.0    21.3   14.3  
3       14.6      -91.1      1562.0  1086.2   24.5    18.3   12.0  
4       14.8      -91.2      2397.0  1268.7   19.9    13.8    8.3  
5       14.6      -90.5      1502.0  1113.3   24.2    18.8   14.8  
6       15.1      -89.9      1900.0  1763.7   24.0    18.8   12.5  
7       14.3      -90.3       737.0  1557.4   30.3    23.0   15.5  
8       15.3      -91.1      1180.0   724.4   29.3    21.8   14.2  
9       15.1      -90.2      1000.0   832.9   27.6    20.8   15.1  
10      14.8      -90.8      1800.0  1430.9   23.1    17.4   11.0  
11      14.7      -90.9      2080.0   920.5   21.8    15.9    8.5  
12      14.6      -91.2      1569.0  1230.7   24.4    18.6   12.7  
13      14.6      -90.7      2105.0  1040.5   20.0    15.1    7.5  
14      15.0      -90.0       371.0   742.5   29.8    25.4   20.4  
15      14.6      -90.5      1491.0  1094.3   24.6    19.7   15.4  
16      15.0      -91.0      1880.0  1368.3   22.0    16.8    9.4  
17      14.9      -92.1       233.0  2694.1   32.6    25.6   18.3  
18      14.5      -91.7       205.0  3271.0   29.2    23.9   18.4  
19      14.4      -90.8       730.0  4577.1   31.3    26.0   20.7  
20      14.5      -91.5       352.0  2640.1   32.8    25.6   21.0  
21      15.6      -88.9        10.0  1721.5   30.9    26.4   20.3  
22      15.7      -88.6         2.0  2385.7   29.4    25.7   20.7  
23      15.6      -89.8       380.0  2319.9   30.2    24.6   18.7  
24      15.5      -90.4      1323.0  2353.8   24.1    17.8   12.7  
25      15.4      -89.6        33.0  2515.8   31.9    25.6   19.9  
26      15.4      -91.1      1906.0  1974.0   22.8    16.3    9.5  
27      16.9      -89.9       123.0  1618.0   31.1    25.3   19.7  
28      16.3      -89.4       479.0  1795.8   28.0    23.0   18.2  
29      15.3      -91.5      1870.0   920.2   24.7    15.7    9.7  
30      14.9      -91.5      2380.0   787.6   21.3    13.3    5.0  
31      15.0      -91.8      2420.0  1152.7   19.4    12.9    5.3  
32      15.5      -91.8      1641.0  1439.2   23.9    18.4   11.7  
33      15.5      -91.6      2480.0  1178.1   18.1    12.9    6.1  
34      14.9      -91.5      2389.0   779.6   18.6    14.8    7.2  
35      13.8      -90.2        29.0  1487.0   33.0    27.9   21.0  
36      13.9      -90.8         6.0  1617.8   31.3    26.3   20.7  
37      14.3      -91.9         5.0  1111.8   32.4    27.7   23.0  
38      14.7      -92.1        44.0  1443.3   33.5    27.7   21.4  
39      14.8      -89.4       450.0  1317.4   31.7    25.5   19.5  
40      14.6      -89.3       950.0  1525.5   26.6    21.0   16.9  
41      14.5      -89.9       960.0   649.5   27.6    21.7   15.7  
42      15.0      -89.6       227.0   776.4   33.2    26.8   20.6  
43      15.0      -89.3      1000.0  1594.8   25.4    21.1   17.4  
44      15.0      -89.7       260.0   706.8   32.7    26.6   20.1  
45      14.8      -89.9      1760.0  1133.8   21.0    16.1    8.9  
46      14.3      -89.7       478.0  1449.7   32.2    26.1   20.3  
47      14.2      -90.0       980.0  1147.5   29.0    22.2   15.3  
In [ ]:
# Verificar los nombres de las columnas
print("\nNombres de las columnas en el DataFrame de estaciones:")
print(df_estaciones.columns)
Nombres de las columnas en el DataFrame de estaciones:
Index(['Estación ', 'Departamento ', 'Municipio', 'Latitud ', 'Longitud ',
       'Elevación ', 'pp', 't_max', 't_mean', 't_min'],
      dtype='object')
In [ ]:
# Usar los nombres de las columnas para longitud y latitud
# Reemplaza 'Longitud' y 'Latitud' con los nombres correctos
longitud_col = 'Longitud '
latitud_col = 'Latitud '

# Convertir el DataFrame de estaciones a un GeoDataFrame
gdf_estaciones = gpd.GeoDataFrame(
    df_estaciones,
    geometry=gpd.points_from_xy(df_estaciones[longitud_col], df_estaciones[latitud_col]),
    crs="EPSG:4326"
)

# Graficar todas las estaciones
fig, ax = plt.subplots(figsize=(10, 8))
gdf.plot(ax=ax, color='lightgrey', edgecolor='black')  # Mapa base con los departamentos
gdf_estaciones.plot(ax=ax, color='red', markersize=10)  # Estaciones
plt.title('Mapa con todas las estaciones')
plt.show()
No description has been provided for this image
In [ ]:
# Verificar las columnas
print(df_estaciones.columns)

# Mostrar las primeras filas del DataFrame
print(df_estaciones.head())
Index(['Estación ', 'Departamento ', 'Municipio', 'Latitud ', 'Longitud ',
       'Elevación ', 'pp', 't_max', 't_mean', 't_min'],
      dtype='object')
      Estación    Departamento               Municipio  Latitud   Longitud   \
0  Alameda ICTA  Chimaltenango                El Tejar      14.6      -90.8   
1        Chixoy          Quiché               Chicamán      15.4      -90.7   
2       Cubulco    Baja Verapaz                Cubulco      15.1      -90.6   
3    El Capitán          Sololá      San Lucas Tolimán      14.6      -91.1   
4    El Tablón           Sololá  Santa María El Tablón      14.8      -91.2   

   Elevación       pp  t_max  t_mean  t_min  
0      1750.0   715.0   21.6    16.4   10.2  
1       680.0  1379.2   30.3    24.3   17.4  
2       994.0  1053.7   29.0    21.3   14.3  
3      1562.0  1086.2   24.5    18.3   12.0  
4      2397.0  1268.7   19.9    13.8    8.3  
In [ ]:
# Seleccionar las columnas necesarias
cols = ['Estación ', 'Departamento ', 'Municipio', 'Latitud ', 'Longitud ', 'Elevación ', 'pp', 't_max', 't_mean', 't_min']
df = df_estaciones[cols]

# Manejar datos faltantes (si es necesario)
df = df.dropna()

# Convertir a GeoDataFrame
gdf_estaciones = gpd.GeoDataFrame(
    df,
    geometry=gpd.points_from_xy(df['Longitud '], df['Latitud ']),
    crs="EPSG:4326"
)
In [ ]:
# Analisis K.Means
# Normalizar los datos
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df[['pp', 'Elevación ', 't_max', 't_mean', 't_min']])

# Algoritmo del codo para determinar el número óptimo de clusters
sse = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, random_state=0, n_init=10).fit(df_scaled)
    sse.append(kmeans.inertia_)

plt.figure(figsize=(10, 6))
plt.plot(range(1, 11), sse, marker='o')
plt.xlabel('Número de clusters')
plt.ylabel('SSE')
plt.title('Algoritmo del Codo')
plt.show()
No description has been provided for this image
In [ ]:
# El número óptimo de clusters es 3 segun el codo
kmeans = KMeans(n_clusters=3, random_state=0, n_init=10)
df['cluster'] = kmeans.fit_predict(df_scaled)

# Visualizar los clusters
plt.figure(figsize=(10, 6))
sns.scatterplot(x=df['pp'], y=df['Elevación '], hue=df['cluster'], palette='viridis')
plt.title('Clustering K-Means (Precipitación vs Elevación)')
plt.xlabel('Precipitación (mm)')
plt.ylabel('Elevación (m)')
plt.show()
No description has been provided for this image
In [ ]:
# Visualizar los clusters
plt.figure(figsize=(10, 6))
sns.scatterplot(x=df['t_mean'], y=df['Elevación '], hue=df['cluster'], palette='viridis')
plt.title('Clustering K-Means (Temperatura media vs Elevación)')
plt.xlabel('Temperatura media (Celsius)')
plt.ylabel('Elevación (metros)')
plt.show()
No description has been provided for this image
In [ ]:
# Análisis de Clustering Adicional (Affinity Propagation)
affinity_propagation = AffinityPropagation(random_state=0)
df['cluster_ap'] = affinity_propagation.fit_predict(df_scaled)

# Visualizar los clusters de Affinity Propagation
plt.figure(figsize=(10, 6))
sns.scatterplot(x=df['pp'], y=df['Elevación '], hue=df['cluster_ap'], palette='viridis')
plt.title('Clustering Affinity Propagation (Precipitación vs Elevación)')
plt.xlabel('Precipitación (mm)')
plt.ylabel('Elevación (m)')
plt.show()
No description has been provided for this image
In [ ]:
# Análisis de Clustering Adicional (Affinity Propagation)
affinity_propagation = AffinityPropagation(random_state=0)
df['cluster_ap'] = affinity_propagation.fit_predict(df_scaled)

# Visualizar los clusters de Affinity Propagation
plt.figure(figsize=(10, 6))
sns.scatterplot(x=df['t_mean'], y=df['Elevación '], hue=df['cluster_ap'], palette='viridis')
plt.title('Clustering Affinity Propagation (Precipitación vs Elevación)')
plt.xlabel('Temperatura media (Celsius)')
plt.ylabel('Elevación (metros)')
plt.show()
No description has been provided for this image
In [ ]:
# Cálculo de la matriz de covarianza
cov_matrix = np.cov(df_scaled.T)
print("Matriz de Covarianza:")
print(cov_matrix)
Matriz de Covarianza:
[[ 1.0212766  -0.37467708  0.33656224  0.36126372  0.38874311]
 [-0.37467708  1.0212766  -0.96917755 -0.99605225 -0.98637623]
 [ 0.33656224 -0.96917755  1.0212766   0.99395365  0.95952484]
 [ 0.36126372 -0.99605225  0.99395365  1.0212766   1.00091748]
 [ 0.38874311 -0.98637623  0.95952484  1.00091748  1.0212766 ]]

Resultados¶

La matriz de covarianza proporciona información sobre la relación entre las variables. En este caso, las variables son la precipitación (pp), la elevación, y las temperaturas máximas (t_max), medias (t_men), y mínimas (t_min).

1.) Precipitación y Elevación: La covarianza positiva entre la precipitación y la elevación (0.3366) indica que a medida que la elevación aumenta, la precipitación tiende a aumentar. Esto es coherente con la noción de que las áreas montañosas tienden a recibir más precipitación que las áreas bajas.

2.) Temperaturas y Elevación: Las covarianzas negativas entre la elevación y las temperaturas (t_max, t_men, t_min) indican que a medida que la elevación aumenta, las temperaturas tienden a disminuir. Esto también es coherente con el hecho de que las áreas de mayor elevación suelen ser más frías.

3.) Precipitación y Temperaturas: Las covarianzas negativas entre la precipitación y las temperaturas indican que a medida que la precipitación aumenta, las temperaturas tienden a disminuir. Esto podría deberse al efecto de la lluvia en el enfriamiento del aire y la reducción de las temperaturas.

4.) Covarianzas entre las Temperaturas: Las covarianzas positivas entre las diferentes temperaturas (t_max, t_men, t_min) indican que estas variables tienden a moverse juntas en la misma dirección. Es decir, cuando una de las temperaturas aumenta, es probable que las otras también lo hagan, y viceversa.

In [ ]:
# Análisis de Componentes Principales (PCA)
pca = PCA(n_components=2)
pca_components = pca.fit_transform(df_scaled)

# Convertir a DataFrame para facilidad de uso
df_pca = pd.DataFrame(data=pca_components, columns=['PC1', 'PC2'])
df_pca['cluster'] = kmeans.labels_

# Graficar los componentes principales
plt.figure(figsize=(10, 6))
sns.scatterplot(x='PC1', y='PC2', hue='cluster', data=df_pca, palette='viridis')
plt.title('PCA de las Estaciones (Primeras dos componentes)')
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.show()

# Mostrar la varianza explicada por cada componente principal
print("Varianza explicada por cada componente principal:")
print(pca.explained_variance_ratio_)
No description has been provided for this image
Varianza explicada por cada componente principal:
[0.81179678 0.16686039]
In [ ]:
# Obtener los pesos de las características (loadings) de las dos primeras componentes principales
loadings = pca.components_[:2].T * np.sqrt(pca.explained_variance_[:2])

# Crear un DataFrame para visualizar los loadings
loadings_df = pd.DataFrame(loadings, columns=['PC1', 'PC2'], index=['pp', 'Elevación', 't_max', 't_men', 't_min'])

# Mostrar los loadings
print("Loadings de las variables en las dos primeras componentes principales:")
print(loadings_df)
Loadings de las variables en las dos primeras componentes principales:
                PC1       PC2
pp        -0.463731  0.897833
Elevación  0.991971  0.094213
t_max     -0.980630 -0.134079
t_men     -0.999861 -0.114165
t_min     -0.992439 -0.077854

Resultados¶

Los "loadings" en el análisis de componentes principales (PCA) representan la contribución de cada variable original a cada componente principal. Valores más altos (positivos o negativos) indican una mayor contribución de esa variable al componente principal correspondiente. Aquí hay una interpretación de los resultados para los loadings de las variables en las dos primeras componentes principales:

1.) Componente Principal 1 (PC1):

  • Precipitación (pp): Tiene un loading negativo (-0.4637) en PC1. Esto significa que la precipitación tiene una fuerte contribución negativa a la dirección de PC1. Variables con loadings negativos altos en una componente principal tienden a estar inversamente relacionadas con esa componente.
  • Elevación: Tiene un loading positivo (0.9919) en PC1. Esto indica una fuerte contribución positiva de la elevación a la dirección de PC1. Variables con loadings positivos altos en una componente principal tienden a estar directamente relacionadas con esa componente.
  • Temperaturas (t_max, t_men, t_min): Todas las temperaturas tienen loadings negativos altos en PC1, con los valores más altos para t_men y t_min. Esto sugiere una fuerte contribución negativa de las temperaturas a la dirección de PC1. En otras palabras, las temperaturas más bajas están inversamente relacionadas con PC1.

2.) Componente Principal 2 (PC2):

  • Precipitación (pp): Tiene un loading positivo (0.8978) en PC2. Esto indica una fuerte contribución positiva de la precipitación a la dirección de PC2. Variables con loadings positivos altos en una componente principal tienden a estar directamente relacionadas con esa componente.
  • Elevación: Tiene un loading positivo (0.0942) en PC2, pero su valor es relativamente bajo en comparación con el de PC1. Aunque contribuye positivamente a PC2, su contribución es mucho menor que la de la precipitación.
  • Temperaturas (t_max, t_men, t_min): Todas las temperaturas tienen loadings negativos en PC2, pero sus valores son relativamente bajos en comparación con PC1. Esto sugiere una contribución negativa de las temperaturas a PC2, pero es mucho menos significativa que su contribución a PC1.

3.) PC1 parece estar principalmente influenciado por la elevación y las temperaturas, mientras que PC2 está más influenciado por la precipitación. Esto sugiere que las estaciones con patrones similares de elevación y temperatura estarán más cercanas en el espacio de las dos primeras componentes principales, mientras que las estaciones con patrones similares de precipitación estarán más cercanas en la dirección de PC2.

In [ ]:
# Graficar el círculo de correlación
plt.figure(figsize=(8, 8))
sns.scatterplot(x='PC1', y='PC2', data=df_pca, hue='cluster', palette='viridis')
for feature, (x, y) in loadings_df.iterrows():
    plt.arrow(0, 0, x, y, color='r', head_width=0.05, head_length=0.05)
    plt.text(x, y, feature, fontsize=12)
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.title('Círculo de correlación')
plt.grid()
plt.show()
No description has been provided for this image

Conclusiones¶

  • La normalización de datos y la aplicación de técnicas de clustering permitieron identificar agrupamientos significativos en las estaciones meteorológicas.

  • El método del codo indicó que 3 clusters eran óptimos para el análisis de K-Means, revelando patrones distintos en las variables de precipitación y temperatura.

  • Affinity Propagation proporcionó una perspectiva diferente de agrupamiento, mostrando cómo los métodos alternativos pueden ofrecer insights complementarios.

  • El Análisis de Componentes Principales mostró que la altitud y la temperatura son las variables que explican la mayor parte de la variabilidad en los datos, mientras que la precipitación es la segunda componente principal.

Bibliografia¶

  • Jain, A. K. (2010). Data clustering: 50 years beyond K-means. Pattern Recognition Letters, 31(8), 651-666.
  • Scikit-learn: Machine Learning in Python. Pedregosa et al., JMLR 12, pp. 2825-2830, 2011.
  • Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.
  • "Clustering Algorithms: K-Means, Affinity Propagation" - Documentation from Scikit-learn library.
  • "Geopandas: Python tools for geographic data" - Documentation from Geopandas library.