v0.20 — 2026 Edition. Meistere Folium v0.20 in diesem Audiokurs der 2026 Edition. Lerne, wie du das Daten-Ökosystem von Python mit Leaflet.js verbindest, um interaktive, leistungsstarke Webkarten zu erstellen.
Entdecke die Kernabstraktion von Folium: die Verbindung des Daten-Ökosystems von Python mit Leaflet.js. Lerne, wie du eine Map initialisierst, den Startort festlegst und deine erste interaktive HTML-Karte renderst.
4m 01s
2
Die Kartenfläche anpassen
Lerne, wie du den visuellen Stil deiner Karte mithilfe von Tilesets und Bounds veränderst. Wir behandeln xyzservices, benutzerdefinierte Map Tiles und wie du das Scrollen für Benutzer einschränkst.
3m 38s
3
Daten punktgenau markieren
Meistere die Kunst, Pins auf deiner Folium-Karte zu platzieren. Wir erkunden Markers, benutzerdefinierte Icons und den entscheidenden Unterschied zwischen Tooltips und Popups.
3m 54s
4
Umfangreiche Interaktivität in Popups
Bringe deine Popups auf das nächste Level, indem du Rich Content einbettest. Lerne, wie du HTML parst, Pandas DataFrames einbettest, Vega-Diagramme injizierst und mit Lazy Loading optimierst.
4m 12s
5
Vektoren und Layers organisieren
Zeichne Pfade und gruppiere deine Daten, um Karten übersichtlich zu halten. Wir erkunden PolyLines, FeatureGroups und wie du Benutzern mit LayerControls die Kontrolle gibst.
3m 38s
6
Räumliche Overlays mit GeoJSON
Schalte erweiterte räumliche Funktionen frei, indem du GeoJSON in Folium importierst. Lerne, wie du Grenzen kartierst und nahtlos mit GeoPandas DataFrames integrierst.
4m 20s
7
Verteilungen mit Choropleths
Kombiniere Geografie mit Statistik mithilfe von Choropleth-Karten. Lerne, wie du Pandas DataFrames an GeoJSON-Regionen bindest, um Datenverteilungen zu visualisieren.
4m 26s
8
Performance und Plugins
Optimiere deine Karten mit Folium-Plugins. Entdecke MarkerClusters für riesige Punktdatensätze, HeatMaps für Dichte und Draw-Tools für Karteninteraktionen.
3m 43s
Episoden
1
Die Folium-Brücke
4m 01s
Entdecke die Kernabstraktion von Folium: die Verbindung des Daten-Ökosystems von Python mit Leaflet.js. Lerne, wie du eine Map initialisierst, den Startort festlegst und deine erste interaktive HTML-Karte renderst.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 1 von 8. Du hast einen riesigen Datensatz mit geografischen Koordinaten und brauchst eine interaktive Map, um sie zu verstehen. Das Problem ist: Interaktive Maps zu bauen bedeutet normalerweise, Python zu verlassen und sich mit JavaScript-Libraries herumzuschlagen. Die Folium-Bridge ist die Lösung für genau dieses Kopfzerbrechen.
Folium ist eine Python-Library, die als Übersetzer zwischen deinen Data-Workflows und Leaflet dot js fungiert. Leaflet ist eine sehr beliebte Open-Source-JavaScript-Library, um mobile-friendly, interaktive Maps zu bauen. Als Data Scientist machst du die Hauptarbeit – Data Manipulation, Filtering und Analyse – am liebsten in Python. Mit Folium kannst du in diesem Environment bleiben. Es nimmt deine Python-Objekte und generiert das HTML und JavaScript, das zum Rendern einer Leaflet-Map benötigt wird. Du bekommst die Interaktivität einer Web-Map, ohne eine einzige Zeile Frontend-Code schreiben zu müssen.
Der Einstieg ist ganz einfach. Du installierst die Library mit Standard-Package-Managern wie pip, indem du pip install folium ausführst. Nach der Installation dreht sich der Core-Workflow darum, ein Base-Map-Objekt zu erstellen. Angenommen, du bewertest potenzielle Koordinaten für einen neuen Store-Standort. Du hast die genaue Latitude und Longitude und musst die Umgebung sehen.
In deinem Script importierst du die Folium-Library. Anschließend rufst du die Map-Funktion dieser Library auf. Diese Funktion braucht eine wichtige Information, um sofort nützlich zu sein: den zentralen Startpunkt. Diesen Center-Point übergibst du über den location-Parameter. Der location-Parameter erwartet eine einfache List oder ein Tuple mit zwei Zahlen. Die Latitude kommt zuerst, gefolgt von der Longitude. Zum Beispiel übergibst du 45.52 für die Latitude und minus 122.68 für die Longitude. Wenn du das ausführst, erstellt Folium ein Map-Objekt, das genau auf diese Koordinaten zentriert ist.
Jetzt hast du ein Map-Objekt, das im Memory existiert. Wie kannst du es jetzt tatsächlich sehen? Folium bietet zwei Hauptwege, abhängig von deinem Workspace. Wenn du in einem Jupyter Notebook arbeitest, ist der Prozess nahtlos. Du tippst einfach den Namen deines Map-Objekts in die letzte Zeile der Cell und führst sie aus. Das Notebook-Environment erkennt die Rich-HTML-Representation des Objekts und rendert die interaktive Leaflet-Map automatisch direkt unter deiner Code-Cell. Du kannst sofort pannen und zoomen, um diesen potenziellen Store-Standort zu untersuchen.
Oft musst du diese Map jedoch mit Stakeholdern teilen, die kein Jupyter verwenden. Hier kommt die zweite Methode ins Spiel. Du nimmst dein Map-Objekt und rufst die save-Methode darauf auf. Du übergibst dieser Methode einen Dateinamen als String, wie zum Beispiel index dot html. Folium nimmt die gesamte zugrundeliegende Leaflet-Logik, die Koordinaten und die Rendering-Instructions und schreibt sie in eine standalone HTML-Datei auf deiner Festplatte. Jeder kann diese Datei per Doppelklick starten und eine voll funktionsfähige, interaktive Map in seinem Standard-Web-Browser öffnen. Es ist kein Python-Environment erforderlich, um das finale Ergebnis zu sehen.
Hier ist der entscheidende Punkt: Folium rendert Maps nicht nativ in Python; es ist einfach eine Engine, die den Web-Code generiert, der nötig ist, damit ein Browser sie rendern kann. Es fungiert strikt als Bridge zu Leaflet und macht deine Python-Daten sofort web-ready.
Wenn dir diese Episoden helfen und du die Show unterstützen möchtest, kannst du auf Patreon nach DevStoriesEU suchen – jeder Beitrag hilft uns, den Podcast am Laufen zu halten. Das war’s für diese Folge. Danke fürs Zuhören und keep building!
2
Die Kartenfläche anpassen
3m 38s
Lerne, wie du den visuellen Stil deiner Karte mithilfe von Tilesets und Bounds veränderst. Wir behandeln xyzservices, benutzerdefinierte Map Tiles und wie du das Scrollen für Benutzer einschränkst.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 2 von 8. Du baust eine wunderschöne interaktive Map eines Nationalparks, aber in dem Moment, in dem der User klickt und zieht, rutscht er von der Küste ab und verliert sich in einem endlosen grauen Ozean. Du brauchst das richtige Hintergrundbild und musst die Kamera genau da fixieren, wo deine Daten liegen. Hier dreht sich alles um das Customizing des Canvas.
Wenn du eine Folium-Map initialisierst, verwendet sie standardmäßig OpenStreetMap-Tiles. Das sind die quadratischen Image-Tiles, die vom Browser zusammengesetzt werden, um den Map-Hintergrund zu bilden. Standard-Straßenkarten sind nicht immer die richtige Wahl. Du änderst das über den tiles Parameter, wenn du deine Map erstellst. Wenn du einen blassen, minimalistischen Hintergrund willst, damit deine Daten hervorstechen, kannst du einen einfachen String wie cartodb positron übergeben. Aber für einen Nationalpark willst du wahrscheinlich Gelände- oder Satellitenbilder.
Hier integriert sich Folium mit einem Package namens xyzservices. Du musst nicht mehr nach Third-Party Map-Server-Links suchen. Folium bündelt hunderte vorkonfigurierte Provider. Du greifst einfach auf das providers Dictionary aus dem folium map Module zu und wählst den aus, den du brauchst. Du könntest eine topografische Karte von Esri oder einen bestimmten Satelliten-Feed wählen. Du übergibst dieses Provider-Object direkt an den tiles Parameter, und Folium kümmert sich im Hintergrund um die Server-Requests.
Manchmal hat deine Organisation einen privaten Map-Server, oder du brauchst ein hochspezialisiertes Overlay, das nicht in der Built-in-Liste steht. In dem Fall kannst du einen Custom-URL-String an den tiles Parameter übergeben. Map-Server nutzen eine standardisierte URL-Struktur mit Platzhaltern für das Zoom-Level, meistens durch ein Z dargestellt, zusammen mit den X- und Y-Koordinaten des Map-Tiles. Du übergibst dieses URL-Template direkt. Hier gibt es eine strikte Anforderung. Wenn du eine Custom-URL nutzt, zwingt dich Folium, einen zweiten Parameter namens attr einzubinden, was für Attribution steht. Du musst einen String übergeben, der die Datenquelle nennt. Ohne den Attribution Parameter weigert sich Folium, die Custom-Tiles zu rendern.
Jetzt hat deine Map den perfekten topografischen Hintergrund. Aber du hast immer noch das Panning-Problem. User können weit vom Nationalpark wegscrollen. Das verhinderst du, indem du Viewport-Limits setzt. Wenn du das Map-Object erstellst, definierst du eine Bounding Box mit vier spezifischen Parametern: minimaler Breitengrad, maximaler Breitengrad, minimaler Längengrad und maximaler Längengrad. Du übergibst die Koordinatengrenzen deines Parks an diese Parameter.
Hier ist die wichtige Erkenntnis. Nur diese vier Koordinaten zu definieren, hält den User nicht vom Panning ab. Um den Viewport aktiv zu locken, musst du außerdem den max bounds Parameter auf true setzen. Wenn du das aktivierst, weist Folium die zugrundeliegende Mapping-Engine an, die Kamera wieder zurückspringen zu lassen, falls der User versucht, die Ansicht aus deinem festgelegten Rechteck herauszuziehen. User können frei rein- und rauszoomen, um die Wanderwege zu erkunden, aber die Map blockiert sie physisch daran, in den Ozean abzudriften.
Harte Grenzen zu setzen, hält den Fokus deiner Audience auf der relevanten Geografie, und diese Grenzen mit den richtigen Terrain-Tiles abzustimmen, gibt deinen Daten genau den Kontext, den sie verdienen. Das war's für diese Folge. Danke fürs Zuhören und keep building!
3
Daten punktgenau markieren
3m 54s
Meistere die Kunst, Pins auf deiner Folium-Karte zu platzieren. Wir erkunden Markers, benutzerdefinierte Icons und den entscheidenden Unterschied zwischen Tooltips und Popups.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 3 von 8. Eine Karte ist im Grunde nur ein statisches Bild, bis du anfängst, Pins darauf zu setzen, um bestimmte Orte hervorzuheben. Diese Pins müssen aber nicht alle wie der exakt gleiche blaue Default-Tropfen aussehen. Daten effektiv zu lokalisieren bedeutet, deinen Usern visuelle Hinweise und interaktiven Kontext direkt auf Koordinatenebene zu geben.
Um einen Point of Interest auf deiner Karte zu platzieren, nutzt du die folium dot Marker Klasse. Die einzige absolute Voraussetzung für die Erstellung eines Markers ist der location Parameter. Du übergibst ihm eine Sequenz aus zwei Zahlen: zuerst den Breitengrad, gefolgt vom Längengrad. Sobald du dieses Marker-Objekt in deinem Code erstellt hast, hängst du es mit der add to Methode an deine Base Map an. Dadurch erhältst du einen Standard-Pin, der genau an diesen Koordinaten sitzt.
Ein nackter Pin zeigt dem User jedoch nur an, dass dort etwas existiert. Er muss auch kommunizieren, was dieses Etwas ist. Folium gibt dir zwei Hauptwege, um Text an einen Marker anzuhängen, und Developer verwechseln sie ständig. Die Unterscheidung ist simpel: Ein Tooltip ist Text beim Hovern. Ein Popup ist ein Label beim Klicken.
Stell dir eine Karte vor, die verschiedene Skigebiete in einem Gebirge zeigt. Du möchtest, dass der Tooltip den Namen des Skigebiets enthält, wie Aspen oder Snowbird. So kann der User die Karte schnell scannen, indem er den Cursor von Pin zu Pin bewegt und sofort sieht, wie Namen auftauchen und wieder verschwinden. Das Popup ist für sekundäre Informationen reserviert, die eine bewusste Leseabsicht erfordern. Wenn der User aktiv auf den Aspen-Pin klickt, enthüllt das Popup Details wie einen Höhenunterschied von dreitausend Fuß oder die aktuellen Wetterbedingungen. Du nutzt den Tooltip für die schnelle Identifikation und das Popup für tieferen Kontext. Du konfigurierst beides, indem du beim Erstellen deines Markers Text an die tooltip und popup Parameter übergibst.
Fünfzig identische blaue Pins anzuschauen, ist eine schlechte User Experience. Du kannst sie mithilfe der folium dot Icon Klasse visuell unterscheiden. Wenn du deinen Marker erstellst, kannst du ein custom Icon-Objekt an seinen icon Parameter übergeben. Dadurch kannst du die Farbe des Pins selbst und die darin angezeigte Grafik ändern.
Für den color Parameter akzeptiert Folium verschiedene Standard-String-Namen wie red, green, purple oder orange. Um auf unsere Skigebiete zurückzukommen: Du könntest sie visuell kategorisieren, indem du anfängerfreundliche Gebiete in green und Gebiete nur für Experten in red markierst.
Um das Symbol im Pin zu ändern, nutzt du den icon Parameter innerhalb der Icon Klasse. Standardmäßig verwendet Folium Bootstrap Glyphicons. Du kannst Namen wie cloud oder info dash sign übergeben, um genau diese Grafiken in deinen Marker zu bekommen. Wenn die Default-Library nicht das exakte Symbol hat, das du brauchst, kannst du zu Font-Awesome Icons wechseln. Das machst du, indem du den prefix Parameter in deinem Icon-Objekt auf den String f a setzt. Sobald du das prefix änderst, kannst du jeden Standard-Font-Awesome-Namen an den icon Parameter übergeben. Das eröffnet dir eine riesige Library an Symbolen, mit der du eine Schneeflocken-Grafik auf deinen Winterresorts platzieren kannst, anstatt einer generischen Form.
Hier ist die wichtigste Erkenntnis: Die Marker auf deiner Karte tragen das eigentliche Narrativ deiner Spatial Data. Die Kombination aus klaren Farben, erkennbaren Symbolen und der richtigen Aufteilung zwischen Hover-Text und Click-Actions macht aus einem simplen Koordinaten-Grid ein extrem gut lesbares Interface.
Vielen Dank fürs Zuhören. Macht's gut, Leute.
4
Umfangreiche Interaktivität in Popups
4m 12s
Bringe deine Popups auf das nächste Level, indem du Rich Content einbettest. Lerne, wie du HTML parst, Pandas DataFrames einbettest, Vega-Diagramme injizierst und mit Lazy Loading optimierst.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 4 von 8. Du klickst auf einen Marker auf einer Map und erwartest eine detaillierte Aufschlüsselung, bekommst aber stattdessen einen zusammengequetschten, unlesbaren Block aus Plain Text. Du denkst vielleicht, Map Pins sind nur für kurze Labels gedacht. Aber du kannst tatsächlich eine komplette interaktive Data Table oder ein Mini-Chart direkt in diesen Pin einbetten. Genau darum geht es heute: Rich Interactivity in Popups.
Standardmäßig nehmen Folium-Popups einen einfachen Text-String entgegen. Aber sie sind dafür gebaut, mit viel mehr umzugehen. Stell dir eine Immobilienkarte vor. Wenn ein User auf einen Haus-Pin klickt, reicht eine Adresse nicht aus. Du willst ein Foto der Immobilie und eine saubere, formatierte Tabelle mit Immobilienstatistiken anzeigen. Das erreichst du, indem du das Popup wie eine isolierte Webseite behandelst.
Zuerst kannst du raw HTML-Strings direkt an das Popup übergeben. Indem du das parse html Argument auf true setzt, weist du Folium an, den String als strukturelle Web-Elemente zu rendern, anstatt die buchstäblichen spitzen Klammern auf dem Bildschirm anzuzeigen. Das erlaubt es dir, Image-Tags, Header und Standard-Webformatierungen direkt in den Marker einzufügen.
Für fortgeschrittenere Layouts nutzt du eine spezielle Component aus dem zugrundeliegenden Framework von Folium namens Branca IFrame. Ein IFrame erstellt ein isoliertes, scrollbares Fenster innerhalb des Popups. Das ist entscheidend beim Einbetten komplexer Strukturen, weil es verhindert, dass das interne Styling des Popups oder große Bilder nach außen leaken und dein Haupt-Map-Layout zerschießen. Du erstellst deinen HTML-String, übergibst ihn an das IFrame-Objekt, setzt eine feste Breite und Höhe, und übergibst diesen IFrame dann direkt in dein Popup.
Dieser Workflow passt perfekt zu Data-Analysis-Libraries. Du musst HTML-Tabellen nicht manuell zusammenbauen, um Metriken anzuzeigen. Wenn du einen Pandas DataFrame hast, der die Immobilienstatistiken enthält, rufst du einfach die Standardmethode Pandas to html auf. Du nimmst diesen generierten HTML-String, fütterst ihn in deinen IFrame, und dein Map Pin enthält jetzt eine vollständig formatierte, akkurate Data Table.
Du kannst das noch weiter treiben, indem du die Folium-Klassen Vega und VegaLite benutzt. Diese Klassen erlauben es dir, interaktive Visualisierungen einzubetten. Anstatt HTML zu übergeben, übergibst du eine JSON-Spezifikation eines Charts an die Vega-Klasse und weist das direkt dem Popup zu. Wenn du jetzt auf den Haus-Pin klickst, wird neben der Data Table ein dynamisches Line Chart mit historischen Immobilienwerten angezeigt.
Hier ist die wichtigste Erkenntnis. All diesen Rich Content zu laden, erzeugt einen massiven Performance-Bottleneck. Wenn deine Immobilienkarte fünftausend Haus-Pins hat und jedes Popup eine Data Table, einen Image-Link und ein Vega-Chart enthält, wird der Browser versuchen, alle fünftausend versteckten Strukturen in dem Moment zu rendern, in dem die Map lädt. Die Page wird sofort einfrieren.
Um das zu lösen, akzeptiert das Popup-Objekt einen Parameter namens lazy. Wenn du lazy auf true setzt, injiziert Folium den Popup-Content anfangs nicht in die Webseite. Die Map rendert die Marker, aber das schwere HTML, die IFrames und die Charts werden komplett ignoriert. Der Browser lädt und rendert den Content erst in genau dem Moment, in dem der User auf einen bestimmten Pin klickt. Das verzögert den Rechenaufwand, was bedeutet, dass eine Map mit Tausenden von schweren, interaktiven Popups genauso schnell lädt wie eine Map mit Standard-Text-Labels.
Die wahre Power einer Web Map liegt nicht darin, wo du die Pins platzierst, sondern wie viel Kontext du in sie packen kannst, ohne die User Experience zu verschlechtern. Danke fürs Zuhören. Macht's gut zusammen.
5
Vektoren und Layers organisieren
3m 38s
Zeichne Pfade und gruppiere deine Daten, um Karten übersichtlich zu halten. Wir erkunden PolyLines, FeatureGroups und wie du Benutzern mit LayerControls die Kontrolle gibst.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 5 von 8. Du plottest fünfzig Lieferrouten und ein Dutzend Lagerhallen auf einer einzigen Map. Das Ergebnis ist ein chaotisches Netz aus sich kreuzenden Linien, das niemand mehr lesen kann. Du brauchst einen Weg, wie User den Noise filtern können. Genau hier kommt die Organisation von Vectors und Layern ins Spiel.
Zuerst musst du die Pfade zeichnen. Um verbundene Koordinaten auf einer Map darzustellen, nutzt du die Folium PolyLine Class. Eine PolyLine nimmt eine Sequence aus Latitude- und Longitude-Paaren und zeichnet gerade Segmente dazwischen. Wenn du die GPS-Traces von einem Lieferwagen hast, übergibst du diese Liste von Koordinaten einfach an das PolyLine Object. Du kannst visuelle Properties wie Color, Weight und Opacity konfigurieren. So kannst du eine dicke blaue Linie für eine Hauptlieferroute und eine dünne graue Linie für eine lokale Lieferroute zeichnen.
Wenn du eine PolyLine direkt an deine Base Map anhängst, ist sie permanent sichtbar. Bei einer komplexen Logistik-Map ist das ein Fehler.
Hier ist der entscheidende Punkt. Anstatt Shapes direkt an das Map Object anzuhängen, solltest du sie in eine FeatureGroup packen. Eine FeatureGroup ist ein logischer Container. Sie gruppiert zusammengehörige Elemente, damit sie als eine einzige Einheit gemanagt werden können.
In unserem Logistik-Szenario erstellst du zuerst zwei separate FeatureGroups. Die erste nennst du Delivery Routes und die zweite Warehouse Locations. Wenn du dann deine Map-Elemente generierst, änderst du ihren Zielort. Wenn du eine PolyLine für eine LKW-Route erstellst, fügst du sie der Delivery Routes Gruppe hinzu. Wenn du einen Standard-Marker für ein Gebäude erstellst, fügst du ihn der Warehouse Locations Gruppe hinzu. Sobald alle deine einzelnen Elemente in ihre jeweiligen Container einsortiert sind, fügst du beide FeatureGroups zum Main Map Object hinzu.
In diesem Stadium sieht die generierte Map exakt so aus wie eine, bei der alles direkt auf den Base Layer gekippt wurde. Der visuelle Output hat sich nicht verändert, die zugrunde liegende Datenstruktur aber schon. Genau diese Struktur ist es, die User-Interaktion ermöglicht.
Um diese Struktur für den User zugänglich zu machen, instanziierst du ein Folium LayerControl und fügst es zur Map hinzu. Das LayerControl scannt das Map Object, findet alle FeatureGroups, die du angehängt hast, und baut automatisch ein interaktives Menü in der oberen Ecke des Screens.
Deine FeatureGroups werden zu togglebaren Overlays. Der User sieht eine Checkbox für Delivery Routes und eine weitere Checkbox für Warehouse Locations. Wenn der Screen zu überladen ist, kann er die Routen abwählen, um sich nur die Standorte anzusehen.
Das LayerControl trennt deine Map-Daten in zwei Kategorien: Base Layers und Overlays. Base Layers sind die zugrunde liegenden Map Tiles, wie eine Straßenansicht oder eine Satellitenansicht. Diese werden mit Radio Buttons dargestellt, weil immer nur eine Base Map gleichzeitig aktiv sein kann. Overlays sind die Vectors und Marker, die du über FeatureGroups hinzugefügt hast. Diese verwenden Checkboxes, wodurch mehrere Datensätze übereinander gestapelt werden können.
Die absolut wichtigste Regel bei Map-Interaktivität ist, dass das User Interface nur das manipulieren kann, was deine Datenstruktur definiert. Wenn du jede Line und jeden Marker an die Root Map anhängst, bleibt dein LayerControl-Menü leer und der User kontrolliert gar nichts.
Das war's für dieses Mal. Bis zum nächsten Mal!
6
Räumliche Overlays mit GeoJSON
4m 20s
Schalte erweiterte räumliche Funktionen frei, indem du GeoJSON in Folium importierst. Lerne, wie du Grenzen kartierst und nahtlos mit GeoPandas DataFrames integrierst.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 6 von 8. Tausend einzelne Marker auf einer Karte zu plotten, ist unkompliziert. Doch was passiert, wenn du die exakten, zackigen Grenzen aller fünfzig US-Bundesstaaten oder die verschlungenen Verwaltungsgrenzen einer ganzen Stadt zeichnen musst? Jeden einzelnen Vertex manuell zu plotten, ist keine Option. Spatial Overlays mit GeoJSON sind die Lösung dafür.
GeoJSON ist das branchenübliche Format zur Darstellung komplexer geografischer Features. Während ein Standard-Marker eine einzelne Koordinate repräsentiert, verarbeitet GeoJSON Linien, Polygone und Multi-Polygone. Wenn du mit realen Grenzen arbeitest, hast du es mit Arrays zu tun, die Tausende von Latitude- und Longitude-Paaren enthalten, die ein einziges Shape definieren. Folium nutzt die GeoJson-Klasse, um diese dichten Boundary-Daten zu nehmen und sie als visuelles Overlay auf deiner Base Map zu rendern.
Nehmen wir mal das Szenario, die Grenzen von Stadtbezirken zu mappen. Du hast die Spatial-Daten für zwanzig Bezirke und musst ihre Umrisse auf einer Street Map sehen. Manche Bezirke sind einfache Polygone, während andere Inseln oder getrennte Zonen enthalten könnten, die Multi-Polygone erfordern. Folium bietet dir verschiedene Möglichkeiten, diese komplexen Daten einzulesen. Du kannst einen String mit einer URL übergeben, die direkt auf eine online gehostete GeoJSON-Datei zeigt. Du kannst einen lokalen Dateipfad übergeben. Du kannst sogar ein geparstes Python-Dictionary übergeben, wenn du die Daten bereits in den Memory geladen hast.
Hier ist der entscheidende Punkt: Folium liest nicht nur statische Textdateien. Es integriert sich nativ in das breitere Python Data Science Ökosystem. Die GeoJson-Klasse akzeptiert jedes Python-Objekt, das die Standard geo-interface Property implementiert. Das ist ein gängiges Protokoll in Python Spatial Libraries, das es verschiedenen Tools erlaubt, geografische Datenstrukturen nahtlos zu teilen.
Wegen dieses Standards musst du JSON-Strings nicht manuell extrahieren, wenn du bereits moderne Analysetools nutzt. Du kannst ein GeoPandas GeoDataFrame direkt an Folium übergeben. Dafür lädst du zuerst deine Bezirksgrenzen mit GeoPandas in ein GeoDataFrame. Als Nächstes generierst du deine Standard Base Map, zentriert auf die Stadt. Dann rufst du die GeoJson-Klasse auf und übergibst ihr einfach dein GeoDataFrame als primäres Argument. Zum Schluss fügst du dieses neu erstellte GeoJson-Objekt deiner Base Map hinzu.
Folium liest das geo-interface des DataFrames, extrahiert die geometrischen Shapes für alle zwanzig Stadtbezirke und zeichnet die exakten Grenzen über die Map Tiles. Du umgehst die rohe File-Manipulation komplett und gehst direkt von einer Datenstruktur zu einer Visualisierung.
Denk daran, bei diesem speziellen Overlay-Prozess geht es ausschließlich um die Anzeige räumlicher Grenzen. Es geht nicht darum, statistische Daten an diese Grenzen zu joinen, um sie basierend auf Bevölkerung oder Einkommen einzufärben. Das ist ein völlig anderes Konzept. Bei der GeoJson-Klasse geht es rein darum, die physischen Shapes zu definieren und sie auf die Karte zu bringen.
Die Power des Folium GeoJSON Layers ist nicht nur, dass er komplexe, mehrteilige geografische Grenzen zeichnen kann, sondern dass er als direkte Brücke zwischen analytischen Objekten wie einem GeoDataFrame und deiner fertigen interaktiven Karte dient, was absolut null manuelles Coordinate Wrangling erfordert.
Das war's für diese Folge. Danke fürs Zuhören und keep building!
7
Verteilungen mit Choropleths
4m 26s
Kombiniere Geografie mit Statistik mithilfe von Choropleth-Karten. Lerne, wie du Pandas DataFrames an GeoJSON-Regionen bindest, um Datenverteilungen zu visualisieren.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 7 von 8. Die bekannteste Karte in der Data Science färbt geografische Regionen anhand eines statistischen Wertes ein. Um die geografischen Grenzen an deine Spreadsheet-Daten anzupassen, ist normalerweise eine umständliche Merge-Operation in einer separaten Spatial Library nötig. In Folium übernimmt die Choropleth-Klasse die Geometrie, das Data Binding und das Color Scaling in einem einzigen Schritt.
Eine Choropleth-Karte bindet numerische Daten an geografische Grenzen. Du lieferst die Shapes, du lieferst die Zahlen, und die Karte färbt die Shapes basierend auf diesen Zahlen ein. Nehmen wir das klassische Beispiel: das Mapping der Arbeitslosenquote über die US-Bundesstaaten. Um das zu bauen, instanziierst du die Choropleth-Klasse und übergibst ihr vier wichtige Informationen.
Erstens: die geografischen Daten. Du übergibst eine GeoJSON-Datei mit den Polygongrenzen der US-Bundesstaaten an den geo_data-Parameter.
Zweitens: die statistischen Daten. Du übergibst deinen Pandas DataFrame mit den Arbeitslosenstatistiken an den data-Parameter.
Drittens sagst du Folium, welche Teile deines DataFrames wichtig sind. Du übergibst eine Liste mit genau zwei Spaltennamen an den columns-Parameter. Die erste Spalte enthält den Region-Identifier, wie zum Beispiel die Abkürzung des Bundesstaates. Die zweite Spalte enthält den numerischen Wert, den du visualisieren willst, also die Arbeitslosenquote.
Hier ist die wichtigste Erkenntnis: Der DataFrame und die geografischen Shapes sind komplett separate Objekte. Du musst Folium über den key_on-Parameter explizit mitteilen, wie sie miteinander verknüpft werden. Dieser Parameter nimmt einen String entgegen, der den genauen Pfad innerhalb der GeoJSON-Datei repräsentiert, wo der passende Identifier liegt. Wenn dein GeoJSON einen Bundesstaat über eine Feature-Property namens id definiert, ist dein key_on-Parameter der String feature dot id. Dieser Pfad muss exakt mit dem Identifier in der ersten Spalte deines DataFrames übereinstimmen. Wenn sie übereinstimmen, binden sich die statistischen Daten an die Geometrie.
Sobald das Data Binding abgeschlossen ist, wendet die Karte die Farben an. Der fill_color-Parameter akzeptiert Standard-Paletten wie YlGn für einen Gelb-zu-Grün-Gradienten. Standardmäßig nimmt Folium die Minimum- und Maximum-Werte in deinem Dataset und schneidet die Color Scale in gleich große mathematische Scheiben. Wenn deine Arbeitslosendaten stark verzerrt sind, könnte dieses lineare Slicing die meisten Bundesstaaten in ein einziges Farbband werfen, was die Karte unbrauchbar macht. Um das zu kontrollieren, übergibst du eine Liste spezifischer numerischer Thresholds an den bins-Parameter. Das zwingt die Color Scale, sich genau dort zu verschieben, wo deine Daten natürliche Brüche haben, und gibt dir die volle Kontrolle über die visuelle Verteilung.
Real-World-Datasets haben oft Lücken. Wenn einem Bundesstaat in deiner GeoJSON-Boundary-Datei eine passende Zeile in deinem DataFrame fehlt, zeichnet Folium trotzdem die Grenze, lässt das Innere aber ungefärbt. Du verwaltest diese leeren Regionen mit dem nan_fill_color-Parameter. Wenn du diesen auf einen neutralen Ton wie Grau setzt, stellst du sicher, dass fehlende Daten explizit markiert sind, ohne vom Rest der Karte abzulenken.
Das Alignment zwischen dem DataFrame-Key und dem GeoJSON-Property-Pfad ist der Single Point of Failure für die meisten Choropleths. Wenn du den key_on-Parameter richtig setzt, baut sich die Karte von selbst.
Wenn du diese technischen Deep Dives hilfreich findest, kannst du die Show unterstützen, indem du auf Patreon nach DevStoriesEU suchst. Das war's für diese Folge. Danke fürs Zuhören und keep building!
8
Performance und Plugins
3m 43s
Optimiere deine Karten mit Folium-Plugins. Entdecke MarkerClusters für riesige Punktdatensätze, HeatMaps für Dichte und Draw-Tools für Karteninteraktionen.
Hallo, hier ist Alex von DEV STORIES DOT EU. Folium, Folge 8 von 8. Hundert Punkte auf einer Web Map zu plotten, ist einfach. Plottest du zehntausend Punkte, friert dein Browser komplett ein. Das Document Object Model kann so viele einzelne grafische Elemente einfach nicht gleichzeitig verarbeiten. Die Lösung für diesen Bottleneck sind Performance und Plugins.
Du hast ein Dataset von hunderttausend Taxi-Pickup-Locations in einer Stadt. Wenn du in einer Loop durch diese Liste gehst und Standard-Marker direkt zu deiner Base Map hinzufügst, crasht die Seite, noch bevor sie fertig geladen ist. Hier kommt das MarkerCluster Plugin ins Spiel. Anstatt die Punkte direkt an die Map anzuhängen, erstellst du ein dediziertes Cluster-Objekt. Du loopst durch dein Dataset, fügst jede einzelne Pickup-Location zu diesem Cluster-Objekt hinzu und hängst ganz am Ende den gesamten Cluster an die Map an.
Wenn die Map komplett herausgezoomt lädt, versucht der Browser nicht, hunderttausend Pins zu zeichnen. Er zeichnet ein paar große Kreise mit Zahlen darin, die die Gesamtzahl der Locations in diesem großen Bereich repräsentieren. Wenn du hineinzoomst, brechen diese riesigen Cluster dynamisch in kleinere, lokalisierte Cluster auseinander. Wenn du auf einen nummerierten Kreis klickst, berechnet die Map automatisch die Boundaries und zoomt in diese spezifische Region. Sie erledigt die Spatial Math im Hintergrund und stellt sicher, dass der Browser einzelne Marker nur dann rendert, wenn du nah genug dran bist, um sie auch wirklich zu sehen.
Manchmal sind exakte Punkt-Locations gar nicht das, was du eigentlich kommunizieren willst. Du willst die Dichte sehen. Das HeatMap Plugin nimmt dieselbe riesige Liste von Taxi-Koordinaten und rendert einen weichen Farbverlauf anstelle von tausenden überlappenden Pins. Du übergibst deine rohe Liste von Latitude- und Longitude-Paaren direkt in die Heatmap-Funktion und hängst sie an die Map an. Das Plugin berechnet die räumliche Konzentration deiner Daten. High-Density Pickup-Zonen leuchten intensiv, während spärliche Bereiche ausblenden. Es ist für den Browser rechnerisch viel billiger, dieses einzelne Overlay zu rendern als diskrete Vektor-Shapes, und es deckt Hotspots sofort auf, ohne den Screen in ein chaotisches Durcheinander von Icons zu verwandeln.
Bis zu diesem Punkt waren die Maps strikt read-only. Das Draw Plugin ändert dieses Verhalten komplett. Es fügt dem User Interface direkt eine interaktive Toolbar hinzu. Du aktivierst das Plugin in deinem Python-Script, und wenn der User die resultierende Datei öffnet, kann er Tools anklicken, um Custom-Polygone zu skizzieren, Linien zu zeichnen oder seine eigenen Marker über deinen Taxi-Daten zu platzieren.
Hier ist die wichtigste Erkenntnis. Diese gezeichneten Shapes sind nicht einfach nur tote Pixel auf einem Screen. Sie generieren valide Spatial Data. Ein User kann eine Boundary um ein bestimmtes Viertel mit hoher Taxi-Nachfrage zeichnen und genau dieses Shape direkt aus der Toolbar als GeoJSON-File exportieren. Das verwandelt deine Visualisierung von einem statischen Report in ein aktives Selection- und Annotation-Tool.
Folium Plugins schließen die Lücke zwischen simplen Python-Scripts und heavy-duty Front-End Web Mapping und geben dir fortgeschrittene Browser-Performance, ohne dich zu zwingen, JavaScript zu schreiben. Ich ermutige dich, die offizielle Dokumentation zu erkunden, diese Tools hands-on auszuprobieren oder devstories dot eu zu besuchen, um Themen vorzuschlagen, über die du in einer zukünftigen Serie hören willst. Das war's für diese Folge. Danke fürs Zuhören und keep building!
Tap to start playing
Browsers block autoplay
Share this episode
Episode
—
Copy this episode in another language:
Diese Website verwendet keine Cookies. Unser Hosting-Anbieter protokolliert möglicherweise deine IP-Adresse zu Analysezwecken. Mehr erfahren.