Fundamentos Teóricos del Centro Medio
El Centro Medio (Mean Center) es el algoritmo espacial más básico, equivalente al "promedio" estadístico aplicado a la geografía. Su objetivo es identificar el punto geográfico (centro de gravedad) que minimiza la suma de las distancias al cuadrado hacia todos los puntos del conjunto. Matemáticamente, se calcula promediando las coordenadas X (longitud) y las coordenadas Y (latitud) por separado.
Como el promedio regular, este cálculo es sensible a valores atípicos (outliers). Puede aplicarse en 3D (Z) y afinarse usando "pesos" ponderados (ej: poblaciones o volúmenes de compra), así como calcularse por categorías para obtener múltiples centros de un conjunto de datos.
Lógica y Pseudocódigo
Consideremos el caso de un grupo de amigos en posiciones en la ciudad que buscan encontrarse en un punto óptimo de desplazamiento. La lógica requiere iterar por cada ubicación, sumar todas las coordenadas (X y Y), y finalmente dividirlas entre el número de ubicaciones.
Implementación Básica en Python
A continuación, implementamos el algoritmo de forma manual utilizando Python puro, iterando las coordenadas de una lista de ubicaciones. Aunque es ideal para aprender la lógica básica, para conjuntos grandes no es lo más eficiente computacionalmente.
# Coordenadas de las casas (Latitud, Longitud) casas_amigos = [ [4.6097, -74.0817], [4.6200, -74.0900], [4.5900, -74.0700], [4.6100, -74.0800], [4.6300, -74.1000] ] suma_total_x = 0 suma_total_y = 0 cantidad_amigos = len(casas_amigos) for amigo in casas_amigos: # Asumiendo posición 0 es latitud (X) y 1 es longitud (Y) para el ejemplo x = amigo[0] y = amigo[1] suma_total_x += x suma_total_y += y centro_x = suma_total_x / cantidad_amigos centro_y = suma_total_y / cantidad_amigos print("Centro Medio:", centro_x, centro_y)
Implementación Avanzada y Visualización con Pandas y Matplotlib
Para simplificar el proceso y preparar los datos de forma escalable (simulando atributos SIG), empleamos pandas. El punto del centro medio se puede calcular rápidamente aplicando el método .mean() directamente sobre las columnas correspondientes del DataFrame.
Para la visualización, utilizamos matplotlib.pyplot. Superponemos las ubicaciones originales como un gráfico de dispersión regular (scatter azul) y destacamos el centro medio (en rojo con forma de estrella) para identificar visiblemente el centro de gravedad o equilibrio del grupo.
import pandas as pd import matplotlib.pyplot as plt datos = { 'Amigo': ['Juan', 'Ana', 'Pedro', 'Carolina', 'Beto'], 'Latitud': [4.6097, 4.6200, 4.5900, 4.6100, 4.6300], 'Longitud': [-74.0817, -74.0900, -74.0700, -74.0800, -74.1000] } df = pd.DataFrame(datos) # Cálculo vectorizado con Pandas centro_lat = df['Latitud'].mean() centro_lon = df['Longitud'].mean() print("Centro Medio (Pandas):", centro_lat, centro_lon) # Visualización plt.scatter(df['Longitud'], df['Latitud'], c='blue', label='Amigos') plt.scatter(centro_lon, centro_lat, c='red', marker='*', s=200, label='Centro Medio') plt.legend() plt.title('Ubicación Óptima de Encuentro') plt.grid(True) plt.show()