Las pistas largas de los aeropuertos en España

Las pistas largas de los aeropuertos en España

Aquí un resumen gráfico sobre los aeropuertos en España con las pistas muy largas.

¡Qué sorpresa! Madrid tiene más pistas largas de España donde la aerolínea estatal „Iberia“ tiene su base. Además, la aerolínea privada „Air Europa“ tiene su base aquí también.

Las pistas largas en España. Los datos son guardados en el base de datos MongoDB.

Zaragoza fue un aeropuerto alternativo para el aterrizaje de emergencia del transbordador espacial de la NASA.

El código

Aquí está el código por este diagrama. Es una conexión con una base de datos (MongoDB) donde guardo los datos.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pymongo import MongoClient

# --- Schritt 1: Verbindung zur MongoDB ---
client = MongoClient("mongodb://localhost:27017/")
db = client.Espana
collection = db.aeropuerto_stats

# Alle Daten für 2025 laden (ganz Spanien)
query = {"jahr": 2025}
df = pd.DataFrame(list(collection.find(query)))

# --- Schritt 2: Daten vorbereiten ---

# Funktion, um die längste Bahn zu finden (behandelt Arrays und Einzelwerte)
def get_max_runway_length(row):
    # Fall 1: 'pistas' ist ein Array/Liste (wie bei Málaga)
    if isinstance(row.get('pistas'), list):
        if not row['pistas']: # Falls die Liste leer ist
            return 0
        return max(p['pistas_largo'] for p in row['pistas'])
    
    # Fall 2: 'pistas_largo' ist ein Einzelwert (wie bei Sevilla)
    return row.get('pistas_largo', 0)

# Neue Spalte mit der maximalen Bahnlänge erstellen
df['max_piste_laenge'] = df.apply(get_max_runway_length, axis=1)

# --- NEU: Highlight-Spalte definieren ---
# Wir erstellen eine neue Spalte 'highlight', die 'Andalusien' enthält,
# wenn die Comunidad 'Andalucia' ist, sonst 'Rest-Spanien'.
df['highlight'] = df['comunidad'].apply(lambda x: 'Andalucía' if x == 'Andalucia' else 'España')

# Nach Bahnlänge sortieren (absteigend) und die Top 10 nehmen
df_top10 = df.sort_values(by='max_piste_laenge', ascending=False).head(10)

# --- Schritt 3: Visualisierung mit Matplotlib & Seaborn ---

# Seaborn Style setzen
sns.set_theme(style="whitegrid")

# Figur-Größe festlegen
plt.figure(figsize=(12, 8))

# --- NEU: Farben definieren ---
# Wir erstellen ein 'Palette'-Wörterbuch, das 'Andalusien' eine andere Farbe zuweist.
my_palette = {'Andalucía': '#2e7d32', 'España': '#90caf9'} # Grün vs. Hellblau

# Balkendiagramm erstellen
chart = sns.barplot(
    data=df_top10,
    x='max_piste_laenge',
    y='aeropuerto',
    palette=my_palette, # Wir übergeben unsere benutzerdefinierte Palette
    hue='highlight', # Wir färben basierend auf der 'highlight'-Spalte
    dodge=False, # Verhindert, dass die Balken nebeneinander geschoben werden
)

# Titel und Achsenbeschriftungen
plt.title('Top 10 pistas largas en España (2025)', fontsize=16, fontweight='bold')
plt.xlabel('Pistas largas en metros', fontsize=12)
plt.ylabel('aeropuerto', fontsize=12)

# Legende anpassen
plt.legend(title='Region', fontsize=10, title_fontsize=12)

# Die tatsächlichen Werte an die Balken schreiben
for i, bar in enumerate(chart.patches):
    width = bar.get_width()
    # Da Seaborn bei hue die Balken anders intern verwaltet,
    # nutzen wir eine robustere Methode, um die Werte zu platzieren.
    if width > 0: # Verhindert Fehler bei leeren Balken
        plt.text(
            width + 50, # X-Position
            bar.get_y() + bar.get_height() / 2, # Y-Position (mittig)
            f'{int(width):,}', # Der Wert (formatiert)
            ha='left', va='center', fontsize=10, fontweight='bold'
        )

# Grafik als Datei speichern
plt.tight_layout()
plt.savefig("top10_pisten_spanien_highlight_2025.png", dpi=300)

# Grafik anzeigen (falls im Notebook)
plt.show()

print("Die Highlight-Grafik wurde als 'Top_10_pistas_largas_en_Espana_2025.png' gespeichert.")
Die Kommentare sind geschlossen.