v0.20 — Ediția 2026. Stăpânește Folium v0.20 în acest curs audio, ediția 2026. Învață cum să conectezi ecosistemul de date din Python cu Leaflet.js pentru a crea hărți web interactive și puternice.
Descoperă abstracția de bază din Folium: conectarea ecosistemului de date din Python cu Leaflet.js. Învață cum să inițializezi un Map, să setezi locația de pornire și să randezi prima ta hartă HTML interactivă.
4m 03s
2
Personalizarea fundalului
Învață cum să transformi stilul vizual al hărții tale folosind tilesets și bounds. Discutăm despre xyzservices, map tiles personalizate și cum să restricționezi derularea (scrolling) pentru utilizatori.
3m 46s
3
Marcarea datelor
Stăpânește arta de a adăuga pini pe harta ta Folium. Explorăm Markers, Icons personalizate și diferența crucială dintre Tooltips și Popups.
3m 47s
4
Interactivitate avansată în Popups
Du-ți popups-urile la nivelul următor prin încorporarea de conținut bogat. Învață să parsezi HTML, să încorporezi Pandas DataFrames, să injectezi grafice Vega și să optimizezi folosind lazy loading.
4m 10s
5
Organizarea vectorilor și a straturilor
Desenează trasee și grupează-ți datele pentru a păstra hărțile curate. Explorăm PolyLines, FeatureGroups și cum să oferi control utilizatorilor cu LayerControls.
3m 39s
6
Suprapuneri spațiale cu GeoJSON
Deblochează funcționalități spațiale avansate importând GeoJSON în Folium. Învață cum să cartografiezi granițe și să le integrezi perfect cu GeoPandas DataFrames.
3m 40s
7
Distribuții cu hărți Choropleth
Combină geografia cu statistica folosind hărți Choropleth. Învață cum să asociezi Pandas DataFrames cu regiuni GeoJSON pentru a vizualiza distribuțiile de date.
3m 15s
8
Performanță și Plugins
Îmbunătățește-ți hărțile cu plugins Folium. Descoperă MarkerClusters pentru seturi masive de date cu puncte, HeatMaps pentru densitate și instrumente Draw pentru interacțiuni pe hartă.
3m 38s
Episoade
1
Puntea Folium
4m 03s
Descoperă abstracția de bază din Folium: conectarea ecosistemului de date din Python cu Leaflet.js. Învață cum să inițializezi un Map, să setezi locația de pornire și să randezi prima ta hartă HTML interactivă.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 1 din 8. Ai un dataset masiv de coordonate geografice și ai nevoie de o hartă interactivă pentru a le înțelege. Problema este că, de obicei, construirea de hărți interactive înseamnă să ieși din Python și să te lupți cu librării JavaScript. Puntea Folium este soluția exact pentru această bătaie de cap.
Folium este o librărie Python care acționează ca un traducător între workflow-urile tale de date și Leaflet dot js. Leaflet este o librărie JavaScript open-source foarte populară, folosită pentru construirea de hărți interactive mobile-friendly. Ca data scientist, preferi să duci greul - manipularea, filtrarea și analiza datelor - în Python. Folium îți permite să rămâi în acel mediu. Îți preia obiectele Python și generează HTML-ul și JavaScript-ul necesare pentru a randa o hartă Leaflet. Obții interactivitatea unei hărți web fără a scrie o singură linie de cod frontend.
Să începi e simplu. Instalezi librăria folosind package managers standard, cum ar fi pip, rulând comanda pip install folium. Odată instalată, workflow-ul principal se învârte în jurul creării unui obiect map de bază. Să presupunem că evaluezi coordonate potențiale pentru o nouă locație a unui magazin de retail. Ai latitudinea și longitudinea exacte și trebuie să vezi zona din jur.
În scriptul tău, imporți librăria folium. Apoi apelezi funcția Map atașată acelei librării. Această funcție necesită o informație critică pentru a fi utilă imediat: punctul central de pornire. Pasezi acest punct central folosind parametrul location. Parametrul location așteaptă un list sau un tuple simplu care conține două numere. Latitudinea este prima, urmată de longitudine. De exemplu, pasezi 45.52 pentru latitudine și minus 122.68 pentru longitudine. Când execuți asta, Folium construiește un obiect map centrat precis pe acele coordonate.
Acum ai un obiect map existent în memorie. Cum îl vezi de fapt? Folium oferă două căi principale, în funcție de workspace-ul tău. Dacă lucrezi într-un Jupyter Notebook, procesul este foarte simplu. Pur și simplu tastezi numele obiectului map pe ultima linie a cell-ului și îl rulezi. Mediul notebook recunoaște reprezentarea HTML bogată a obiectului și randează automat harta interactivă Leaflet direct sub cell-ul tău de cod. Poți face imediat pan și zoom pentru a inspecta acea locație potențială a magazinului.
Totuși, adesea trebuie să dai share la această hartă cu stakeholders care nu folosesc Jupyter. Aici intervine a doua metodă. Iei obiectul map și apelezi metoda save pe el. Pasezi un nume de fișier ca string acestei metode, cum ar fi index dot html. Folium preia toată logica Leaflet din spate, coordonatele și instrucțiunile de randare și le scrie într-un fișier HTML standalone pe hard drive-ul tău. Oricine poate face dublu clic pe acel fișier și poate deschide o hartă interactivă complet funcțională în browserul web standard. Nu este necesar niciun environment Python pentru a vizualiza rezultatul final.
Iată ideea cheie. Folium nu randează hărți nativ în Python; este pur și simplu un motor care generează codul web necesar unui browser pentru a le randa. Acționează strict ca o punte către Leaflet, făcând datele tale Python instantaneu web-ready.
Dacă găsești aceste episoade utile și vrei să susții emisiunea, poți căuta DevStoriesEU pe Patreon - fiecare contribuție ne ajută să menținem luminile aprinse. Asta e tot pentru acest episod. Mersi că asculți și continuă să construiești!
2
Personalizarea fundalului
3m 46s
Învață cum să transformi stilul vizual al hărții tale folosind tilesets și bounds. Discutăm despre xyzservices, map tiles personalizate și cum să restricționezi derularea (scrolling) pentru utilizatori.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 2 din 8. Construiești o hartă interactivă frumoasă a unui parc național, dar în momentul în care utilizatorul dă click și face drag, alunecă de pe coastă și se pierde într-un ocean gri nesfârșit. Ai nevoie de imaginile de fundal potrivite și trebuie să blochezi camera exact acolo unde se află datele tale. Totul se rezumă la personalizarea acelui canvas.
Când inițializezi o hartă Folium, aceasta folosește implicit tiles standard OpenStreetMap. Acestea sunt acele tiles pătrate cu imagini, lipite de browser pentru a forma fundalul hărții. Hărțile stradale standard nu sunt întotdeauna alegerea potrivită. Modifici acest lucru folosind parametrul tiles atunci când creezi harta. Dacă dorești un fundal estompat, minimalist, astfel încât datele tale să iasă în evidență, poți pasa un string simplu, cum ar fi cartodb positron. Dar pentru un parc național, probabil că vrei imagini din satelit sau de teren.
Aici intervine integrarea Folium cu un package numit xyzservices. Nu trebuie să cauți linkuri către servere de hărți third-party. Folium include sute de providers preconfigurați. Pur și simplu accesezi dicționarul providers din modulul folium map și îl alegi pe cel de care ai nevoie. Poți alege o hartă topografică Esri sau un feed specific din satelit. Pasezi acel obiect provider direct parametrului tiles, iar Folium gestionează request-urile către server în fundal.
Uneori, organizația ta are un server privat de hărți sau ai nevoie de un overlay foarte specializat care nu se află în lista built-in. În acest caz, poți pasa un string URL custom parametrului tiles. Serverele de hărți utilizează o structură URL standardizată care conține placeholders pentru nivelul de zoom, reprezentat de obicei de Z, împreună cu coordonatele X și Y ale acelui tile de hartă. Furnizezi direct acel template URL. Există o cerință strictă aici. Când folosești un URL custom, Folium te obligă să incluzi un al doilea parametru numit attr, care vine de la attribution. Trebuie să oferi un string care să acorde credit sursei de date. Fără parametrul attribution, Folium va refuza să randeze acele tiles custom.
Acum, harta ta are fundalul topografic perfect. Dar încă ai problema de panning. Utilizatorii pot da scroll departe de parcul național. Poți preveni acest lucru prin setarea limitelor de viewport. Când creezi obiectul hărții, definești un bounding box folosind patru parametri specifici: latitudine minimă, latitudine maximă, longitudine minimă și longitudine maximă. Pasezi limitele coordonatelor parcului tău acestor parametri.
Iată ideea cheie. Simpla definire a acelor patru coordonate nu împiedică utilizatorul să facă panning. Pentru a bloca activ viewport-ul, trebuie să setezi și parametrul max bounds la true. Când activezi această opțiune, Folium instruiește engine-ul de mapping din spate să readucă camera la locul ei dacă utilizatorul încearcă să facă drag la view în afara dreptunghiului specificat. Aceștia sunt liberi să dea zoom in și zoom out pentru a explora traseele, dar harta îi împiedică fizic să se rătăcească în ocean.
Stabilirea unor limite stricte menține publicul concentrat asupra zonei geografice relevante, iar potrivirea acestor limite cu acele tiles de teren corecte oferă datelor tale contextul exact pe care îl merită. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
3
Marcarea datelor
3m 47s
Stăpânește arta de a adăuga pini pe harta ta Folium. Explorăm Markers, Icons personalizate și diferența crucială dintre Tooltips și Popups.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 3 din 8. O hartă este de fapt doar o imagine statică până când începi să plasezi pini pe ea pentru a evidenția locații specifice. Dar acești pini nu trebuie să arate toți ca aceeași lacrimă albastră default. Să localizezi datele eficient înseamnă să oferi userilor tăi indicii vizuale și context interactiv chiar la nivel de coordonate.
Pentru a plasa un punct de interes pe harta ta, folosești clasa folium punct Marker. Singura cerință absolută pentru crearea unui marker este parametrul location. Îi pasezi o secvență de două numere, cu latitudinea prima, urmată de longitudine. După ce creezi acest obiect marker în codul tău, îl atașezi la harta ta de bază folosind metoda add to. Asta îți dă un pin standard situat exact la acele coordonate.
Dar un pin simplu îi spune userului doar că există ceva acolo. Trebuie să comunice ce este acel ceva. Folium îți oferă două moduri principale de a atașa text la un marker, iar developerii le confundă constant. Distincția e simplă. Un tooltip este text pe hover. Un popup este o etichetă pe click.
Gândește-te la o hartă care arată diferite stațiuni de schi dintr-un lanț muntos. Vrei ca tooltip-ul să conțină numele stațiunii, cum ar fi Aspen sau Snowbird. Asta îi permite userului să scaneze rapid harta mutând cursorul de la un pin la altul, văzând instant cum numele apar și dispar. Popup-ul este rezervat pentru informații secundare care necesită intenția de a le citi. Când userul dă click activ pe pinul Aspen, popup-ul dezvăluie detalii precum o diferență de nivel de trei mii de picioare sau condițiile meteo actuale. Folosești tooltip-ul pentru identificare rapidă, și popup-ul pentru un context mai profund. Le configurezi pe amândouă pasând text parametrilor tooltip și popup atunci când îți creezi markerul.
Acum, să te uiți la cincizeci de pini albaștri identici este un user experience prost. Îi poți diferenția vizual folosind clasa folium punct Icon. Când îți creezi markerul, poți pasa un obiect Icon custom parametrului său icon. Asta îți permite să modifici culoarea pinului în sine și grafica afișată în interiorul lui.
Pentru parametrul color, Folium acceptă mai multe nume standard de string-uri, cum ar fi red, green, purple sau orange. Revenind la stațiunile noastre de schi, le-ai putea categorisi vizual marcând stațiunile pentru începători cu verde, și stațiunile doar pentru experți cu roșu.
Pentru a schimba simbolul din interiorul pinului, folosești parametrul icon din clasa Icon. By default, Folium folosește glyphicons de la Bootstrap. Poți pasa nume precum cloud sau info dash sign pentru a obține acele grafice specifice în interiorul markerului tău. Dacă librăria default nu are simbolul exact de care ai nevoie, poți trece la icon-urile Font-Awesome. Faci asta setând parametrul prefix din obiectul tău Icon la string-ul f a. După ce schimbi parametrul prefix, poți pasa orice nume standard Font-Awesome parametrului icon. Asta deschide o librărie masivă de simboluri, permițându-ți să plasezi o grafică cu un fulg de zăpadă pe stațiunile de iarnă în loc de o formă generică.
Iată ideea cheie. Markerele de pe harta ta poartă narațiunea reală a datelor tale spațiale. Combinarea de culori distincte, simboluri recognoscibile și împărțirea corectă între textul pe hover și acțiunile pe click transformă o grilă simplă de coordonate într-o interfață foarte ușor de citit.
Mulțumesc că m-ați ascultat. Aveți grijă de voi toți.
4
Interactivitate avansată în Popups
4m 10s
Du-ți popups-urile la nivelul următor prin încorporarea de conținut bogat. Învață să parsezi HTML, să încorporezi Pandas DataFrames, să injectezi grafice Vega și să optimizezi folosind lazy loading.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 4 din 8. Dai click pe un marker de pe o hartă așteptând o descriere detaliată, dar în schimb, primești un bloc înghesuit și ilizibil de plain text. S-ar putea să crezi că pin-urile de pe hartă sunt făcute doar pentru etichete scurte. Dar, de fapt, poți integra un întreg tabel de date interactiv sau un mini-grafic chiar în interiorul acelui pin. Despre asta vorbim astăzi: Interactivitate complexă în popup-uri.
By default, popup-urile Folium acceptă un simplu string de text. Dar sunt făcute să gestioneze mult mai mult. Gândește-te la o hartă imobiliară. Când un user dă click pe pin-ul unei case, o adresă nu e de ajuns. Vrei să afișezi o poză a proprietății și un tabel curat, formatat, cu statisticile locuinței. Obții asta tratând popup-ul ca pe o pagină web izolată.
În primul rând, poți pasa string-uri de raw HTML direct în popup. Setând argumentul parse html pe true, instruiești Folium să randeze string-ul ca elemente web structurale, în loc să afișeze pe ecran parantezele unghiulare ca atare. Asta îți permite să incluzi tag-uri de imagine, headere și formatare web standard direct în interiorul marker-ului.
Pentru layout-uri mai avansate, folosești o componentă specifică din framework-ul de bază al Folium, numită Branca IFrame. Un IFrame creează o fereastră izolată, cu scroll, în interiorul popup-ului. Asta e crucial când dai embed la structuri complexe, pentru că previne scurgerea styling-ului intern al popup-ului sau a imaginilor mari, care ți-ar strica layout-ul principal al hărții. Îți creezi string-ul HTML, îl pasezi obiectului IFrame, setezi un width și un height fixe, și apoi pasezi acel IFrame direct în Popup-ul tău.
Acest workflow se potrivește perfect cu librăriile de analiză de date. Nu e nevoie să construiești manual tabele HTML ca să afișezi metricile. Dacă ai un Pandas DataFrame care conține statisticile proprietății, trebuie doar să apelezi metoda standard Pandas to html. Iei acel string HTML generat, îl introduci în IFrame-ul tău, iar pin-ul de pe hartă conține acum un tabel de date precis și complet formatat.
Poți duce asta și mai departe folosind clasele Folium Vega și VegaLite. Aceste clase îți permit să dai embed la vizualizări interactive. În loc să pasezi HTML, pasezi o specificație JSON a unui chart către clasa Vega, și o atribui direct popup-ului. Acum, când dai click pe pin-ul casei, se afișează un line chart dinamic cu valorile istorice ale proprietății, alături de tabelul de date.
Iată ideea cheie. Încărcarea a tot acestui conținut complex creează un bottleneck masiv de performanță. Dacă harta ta imobiliară are cinci mii de pin-uri de case, și fiecare popup conține un tabel de date, un link de imagine și un chart Vega, browser-ul va încerca să randeze toate cele cinci mii de structuri ascunse în momentul în care se încarcă harta. Pagina se va bloca instant.
Pentru a rezolva asta, obiectul Popup acceptă un parametru numit lazy. Setând lazy pe true, Folium nu injectează inițial conținutul popup-ului în pagina web. Harta randează marker-ele, dar HTML-ul greoi, IFrame-urile și chart-urile sunt complet ignorate. Browser-ul face fetch și randează conținutul doar în momentul exact în care user-ul dă click pe un anumit pin. Asta amână costul de calcul, ceea ce înseamnă că o hartă cu mii de popup-uri interactive și greoaie se va încărca la fel de repede ca o hartă cu etichete de text standard.
Adevărata putere a unei hărți web nu stă în locul în care plasezi pin-urile, ci în cât de mult context poți împacheta în ele fără să degradezi experiența user-ului. Mersi că m-ai ascultat. Aveți grijă de voi, tuturor.
5
Organizarea vectorilor și a straturilor
3m 39s
Desenează trasee și grupează-ți datele pentru a păstra hărțile curate. Explorăm PolyLines, FeatureGroups și cum să oferi control utilizatorilor cu LayerControls.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 5 din 8. Trasezi cincizeci de rute de livrare și o duzină de depozite pe o singură hartă. Rezultatul este o rețea haotică de linii intersectate pe care nimeni nu le poate citi. Ai nevoie de o modalitate prin care să le permiți utilizatorilor să filtreze zgomotul. Aici intervine organizarea vectorilor și a layerelor.
Mai întâi, trebuie să desenezi traseele. Pentru a reprezenta coordonate conectate pe o hartă, folosești clasa Folium PolyLine. Un PolyLine primește o secvență de perechi de latitudine și longitudine și desenează segmente drepte între ele. Dacă ai traseele GPS de la un camion de livrare, pur și simplu pasezi acea listă de coordonate obiectului PolyLine. Poți configura proprietăți vizuale precum culoarea, grosimea și opacitatea. Asta îți permite să desenezi o linie albastră groasă pentru o rută principală de transport și o linie gri subțire pentru o rută de livrare locală.
Dacă atașezi un PolyLine direct la base map, va fi vizibil permanent. Pentru o hartă logistică complexă, asta e o greșeală.
Iată ideea cheie. În loc să atașezi forme direct la obiectul map, ar trebui să le pui într-un FeatureGroup. Un FeatureGroup este un container logic. Grupează elementele similare la un loc, astfel încât să poată fi gestionate ca o singură unitate.
În scenariul nostru logistic, începi prin a crea două FeatureGroup-uri separate. Îl numești pe primul Delivery Routes și pe al doilea Warehouse Locations. Apoi, pe măsură ce generezi elementele hărții, le schimbi destinația. Când creezi un PolyLine pentru un traseu de camion, îl adaugi în grupul Delivery Routes. Când creezi un marker standard pentru o clădire, îl adaugi în grupul Warehouse Locations. După ce toate elementele individuale sunt sortate în containerele respective, adaugi ambele FeatureGroup-uri la obiectul map principal.
În această etapă, harta generată arată identic cu una în care totul a fost aruncat direct pe base layer. Rezultatul vizual nu s-a schimbat, dar structura de date din spate, da. Această structură este cea care permite interacțiunea utilizatorului.
Pentru a expune această structură utilizatorului, instanțiezi un Folium LayerControl și îl adaugi la hartă. LayerControl scanează obiectul map, găsește toate FeatureGroup-urile pe care le-ai atașat și construiește automat un meniu interactiv în colțul de sus al ecranului.
FeatureGroup-urile tale devin overlays pe care le poți comuta. Utilizatorul va vedea un checkbox pentru Delivery Routes și un alt checkbox pentru Warehouse Locations. Dacă ecranul este prea aglomerat, poate debifa rutele pentru a inspecta doar facilitățile.
LayerControl separă datele hărții în două categorii: base layers și overlays. Base layer-ele sunt tile-urile hărții din spate, cum ar fi un street view sau un satellite view. Acestea sunt prezentate cu radio buttons, deoarece un singur base map poate fi activ la un moment dat. Overlay-urile sunt vectorii și markerii pe care i-ai adăugat prin FeatureGroups. Acestea folosesc checkbox-uri, permițând mai multor seturi de date să se suprapună unele peste altele.
Cea mai importantă regulă a interactivității hărții este că interfața cu utilizatorul poate manipula doar ceea ce definește structura ta de date. Dacă atașezi fiecare linie și marker la root map, meniul tău layer control va fi gol, iar utilizatorul nu va controla nimic.
Atât pentru episodul ăsta. Ne auzim data viitoare!
6
Suprapuneri spațiale cu GeoJSON
3m 40s
Deblochează funcționalități spațiale avansate importând GeoJSON în Folium. Învață cum să cartografiezi granițe și să le integrezi perfect cu GeoPandas DataFrames.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 6 din 8. Să plasezi o mie de markeri individuali pe o hartă e simplu. Dar ce se întâmplă când trebuie să desenezi granițele exacte și neregulate ale tuturor celor cincizeci de state din SUA, sau limitele administrative șerpuite ale unui oraș întreg? Să randezi manual fiecare vertex nu e o opțiune. Overlay-urile spațiale cu GeoJSON sunt soluția pentru asta.
GeoJSON este formatul standard în industrie pentru reprezentarea elementelor geografice complexe. În timp ce un marker standard reprezintă o singură coordonată, GeoJSON gestionează linii, poligoane și multi-poligoane. Când ai de-a face cu granițe din lumea reală, lucrezi cu array-uri care conțin mii de perechi de latitudine și longitudine ce definesc o singură formă. Folium folosește clasa GeoJson pentru a prelua aceste date dense despre granițe și a le randa ca un overlay vizual pe harta ta de bază.
Să luăm scenariul în care cartografiezi granițele districtelor unui oraș. Ai datele spațiale pentru douăzeci de districte și trebuie să le vezi contururile pe o hartă stradală. Unele districte sunt poligoane simple, în timp ce altele pot include insule sau zone deconectate, necesitând multi-poligoane. Folium îți oferă mai multe modalități de a importa aceste date complexe. Poți pasa un string care conține un URL ce pointează direct către un fișier GeoJSON hostat online. Poți pasa un file path local. Poți chiar să pasezi un dicționar Python parsat, dacă ai încărcat deja datele în memorie.
Iată ideea cheie. Folium nu citește doar fișiere text statice. Se integrează nativ cu ecosistemul mai larg de data science din Python. Clasa GeoJson va accepta orice obiect Python care implementează proprietatea standard geo-interface. Acesta este un protocol comun în librăriile spațiale din Python, care permite diferitelor tool-uri să partajeze structuri de date geografice fără probleme.
Datorită acestui standard, nu e nevoie să extragi manual string-uri JSON dacă folosești deja tool-uri analitice moderne. Poți pasa un GeoDataFrame din GeoPandas direct în Folium. Pentru a face asta, încarci mai întâi limitele districtelor într-un GeoDataFrame folosind GeoPandas. Apoi, îți generezi harta de bază standard centrată pe oraș. După care, apelezi clasa GeoJson și îi pasezi pur și simplu GeoDataFrame-ul tău ca argument principal. În cele din urmă, adaugi acel obiect GeoJson nou creat la harta ta de bază.
Folium citește geo-interface-ul din dataframe, extrage formele geometrice pentru toate cele douăzeci de districte ale orașului și desenează granițele exacte peste tile-urile hărții. Ocolești complet manipularea de fișiere raw și treci direct de la o structură de date la o vizualizare.
Ține minte, acest proces specific de overlay este strict despre afișarea limitelor spațiale. Nu este vorba despre a face join între datele statistice și acele limite pentru a le colora în funcție de populație sau venit. Acesta este un concept complet diferit. Clasa GeoJson este pur și simplu despre definirea formelor fizice și plasarea lor pe hartă.
Puterea layer-ului GeoJSON din Folium nu constă doar în faptul că poate desena granițe geografice complexe, din mai multe părți, ci și în faptul că servește ca o punte directă între obiecte analitice precum un GeoDataFrame și harta ta interactivă finală, fără să necesite absolut nicio manipulare manuală a coordonatelor.
Asta e tot pentru acest episod. Mersi că m-ai ascultat și continuă să construiești!
7
Distribuții cu hărți Choropleth
3m 15s
Combină geografia cu statistica folosind hărți Choropleth. Învață cum să asociezi Pandas DataFrames cu regiuni GeoJSON pentru a vizualiza distribuțiile de date.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 7 din 8. Cea mai ușor de recunoscut hartă din data science colorează regiunile geografice pe baza unei valori statistice. Ca să faci granițele geografice să se potrivească cu datele din spreadsheet, de obicei ai nevoie de o operațiune de merge destul de complicată într-o librărie spațială separată. În Folium, clasa Choropleth gestionează geometria, data binding-ul și color scaling-ul într-un singur pas.
Un choropleth asociază datele numerice cu granițele geografice. Tu dai formele, tu dai numerele, iar harta colorează formele pe baza acelor numere. Ia în considerare exemplul clasic de mapare a ratei șomajului pe statele din SUA. Ca să construiești asta, instanțiezi clasa Choropleth și îi pasezi patru informații esențiale.
Prima constă în datele geografice. Pasezi un fișier GeoJSON care conține granițele poligoanelor pentru statele din SUA parametrului geo data.
A doua constă în datele statistice. Pasezi parametrului data acel Pandas DataFrame care conține statisticile despre șomaj.
A treia, îi spui lui Folium ce părți din DataFrame-ul tău contează. Oferi o listă cu exact două nume de coloane parametrului columns. Prima coloană conține identificatorul regiunii, cum ar fi abrevierea statului. A doua coloană conține valoarea numerică pe care vrei să o vizualizezi, adică rata șomajului.
Aici este ideea cheie. DataFrame-ul și formele geografice sunt obiecte complet separate. Trebuie să îi spui explicit lui Folium cum să le lege între ele folosind parametrul key on. Acest parametru primește un string care reprezintă calea precisă din fișierul GeoJSON unde se află identificatorul corespondent. Dacă GeoJSON-ul tău definește un stat folosind un feature property numit id, parametrul tău key on va fi string-ul feature dot id. Această cale trebuie să se potrivească perfect cu identificatorul din prima coloană a DataFrame-ului tău. Când se potrivesc, datele statistice fac bind cu geometria.
Odată ce datele fac bind, harta aplică culorile. Parametrul fill color acceptă palete standard precum YlGn pentru un gradient de la galben la verde. By default, Folium ia valorile minime și maxime din dataset-ul tău și taie color scale-ul în felii matematice egale. Dacă datele tale despre șomaj sunt puternic asimetrice, această tăiere liniară ar putea grupa majoritatea statelor într-o singură bandă de culoare, făcând harta inutilă. Ca să controlezi asta, pasează o listă de praguri numerice specifice parametrului bins. Asta forțează color scale-ul să se schimbe exact acolo unde datele tale se împart în mod natural, oferindu-ți control deplin asupra distribuției vizuale.
Dataset-urile din lumea reală au adesea goluri. Dacă unui stat din fișierul tău de granițe GeoJSON îi lipsește un rând corespondent în DataFrame, Folium va desena în continuare granița, dar va lăsa interiorul necolorat. Gestionezi aceste regiuni goale cu parametrul nan fill color. Setarea acestuia la o nuanță neutră, cum ar fi gri, asigură că datele lipsă sunt marcate explicit, fără să distragă atenția de la restul hărții.
Alinierea dintre cheia din DataFrame și property path-ul din GeoJSON este singurul punct de eșec pentru majoritatea hărților choropleth. Setează corect parametrul key on, iar harta se construiește singură.
Dacă găsești utile aceste deep dive-uri tehnice, poți susține emisiunea căutând DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Îți mulțumesc că ai ascultat și continuă să construiești!
8
Performanță și Plugins
3m 38s
Îmbunătățește-ți hărțile cu plugins Folium. Descoperă MarkerClusters pentru seturi masive de date cu puncte, HeatMaps pentru densitate și instrumente Draw pentru interacțiuni pe hartă.
Salut, sunt Alex de la DEV STORIES DOT EU. Folium, episodul 8 din 8. Să plotezi o sută de puncte pe o hartă web e ușor. Plotează zece mii de puncte, iar browserul tău se va bloca complet. Document Object Model-ul pur și simplu nu poate duce atât de multe elemente grafice individuale deodată. Soluția pentru acest bottleneck este performanța și plugin-urile.
Ai un dataset cu o sută de mii de locații de preluare pentru taxiuri dintr-un oraș. Dacă faci un loop prin acea listă și adaugi markeri standard direct pe harta ta de bază, pagina va da crash înainte măcar să termine de încărcat. Aici intervine plugin-ul MarkerCluster. În loc să atașezi punctele direct pe hartă, creezi un obiect de tip cluster dedicat. Faci un loop prin dataset-ul tău, adaugi absolut fiecare locație de preluare în acest obiect cluster, iar la final atașezi întregul cluster pe hartă.
Când harta se încarcă cu zoom out complet, browserul nu încearcă să deseneze o sută de mii de pini. Desenează câteva cercuri mari cu numere în ele, care reprezintă numărul total de locații din acea zonă extinsă. Pe măsură ce dai zoom in, acele clustere masive se sparg dinamic în clustere mai mici, localizate. Dacă dai click pe un cerc numerotat, harta calculează automat limitele și dă zoom in pe acea regiune specifică. Gestionează matematica spațială în background, asigurându-se că browserul randează markerii individuali doar atunci când ești suficient de aproape ca să-i vezi efectiv.
Uneori, locațiile exacte ale punctelor nu sunt ceea ce ai nevoie de fapt să comunici. Vrei să vezi densitatea. Plugin-ul HeatMap ia aceeași listă masivă de coordonate de taxi și randează un gradient de culoare fin în loc de mii de pini suprapuși. Pasezi lista ta raw de perechi de latitudine și longitudine direct în funcția heatmap și o atașezi la hartă. Plugin-ul calculează concentrația spațială a datelor tale. Zonele de preluare cu densitate mare strălucesc intens, în timp ce zonele rare se estompează. Este mult mai ieftin din punct de vedere computațional pentru browser să randeze acest singur overlay decât forme vectoriale discrete, și dezvăluie instantaneu hotspot-urile fără să transforme ecranul într-o harababură haotică de iconițe.
Până în acest punct, hărțile au fost strict read-only. Plugin-ul Draw schimbă complet acest comportament. Adaugă un toolbar interactiv direct în user interface. Activezi plugin-ul în scriptul tău Python, iar când userul deschide fișierul rezultat, poate da click pe tool-uri ca să schițeze poligoane custom, să deseneze linii sau să pună propriii markeri peste datele tale de taxi.
Iată ideea principală. Aceste forme desenate nu sunt doar pixeli morți pe un ecran. Ele generează date spațiale valide. Un user poate desena un boundary în jurul unui anumit cartier cu cerere mare de taxiuri și poate exporta exact acea formă ca un fișier GeoJSON direct din toolbar. Asta transformă vizualizarea ta dintr-un raport static într-un tool activ de selecție și adnotare.
Plugin-urile Folium fac legătura între scripturile Python simple și web mapping-ul de front-end complex, oferindu-ți performanță avansată în browser fără să te oblige să scrii JavaScript. Te încurajez să explorezi documentația oficială, să încerci aceste tool-uri hands-on, sau să vizitezi devstories dot eu ca să sugerezi subiecte despre care vrei să auzi într-o serie viitoare. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
Tap to start playing
Browsers block autoplay
Share this episode
Episode
—
Copy this episode in another language:
Acest site nu folosește cookie-uri. Furnizorul nostru de hosting ar putea înregistra adresa ta IP în scopuri de analiză. Află mai multe.