v0.20 — Edição de 2026. Domine o Folium v0.20 neste curso em áudio da edição de 2026. Aprenda a ligar o ecossistema de dados do Python ao Leaflet.js para criar mapas web interativos e poderosos.
Análise GeoespacialMapeamento InterativoVisualização de Dados
Descubra a abstração central do Folium: ligar o ecossistema de dados do Python ao Leaflet.js. Aprenda a inicializar um Map, a definir a localização inicial e a renderizar o seu primeiro mapa HTML interativo.
3m 45s
2
Personalizar a Tela
Aprenda a transformar o estilo visual do seu mapa utilizando tilesets e bounds. Abordamos xyzservices, map tiles personalizados e como restringir o scroll do utilizador.
3m 22s
3
Localizar Dados com Precisão
Domine a arte de colocar pins no seu mapa Folium. Exploramos Markers, Icons personalizados e a diferença crucial entre Tooltips e Popups.
3m 42s
4
Interatividade Rica em Popups
Eleve os seus popups ao próximo nível incorporando conteúdo rico. Aprenda a fazer o parse de HTML, a incorporar Pandas DataFrames, a injetar gráficos Vega e a otimizar com lazy loading.
3m 56s
5
Organizar Vetores e Layers
Desenhe caminhos e agrupe os seus dados para manter os mapas limpos. Exploramos PolyLines, FeatureGroups e como dar controlo aos utilizadores com LayerControls.
3m 46s
6
Sobreposições Espaciais com GeoJSON
Desbloqueie funcionalidades espaciais avançadas importando GeoJSON para o Folium. Aprenda a mapear fronteiras e a integrar perfeitamente com GeoPandas DataFrames.
3m 19s
7
Distribuições com Choropleths
Combine geografia com estatística utilizando mapas Choropleth. Aprenda a ligar Pandas DataFrames a regiões GeoJSON para visualizar distribuições de dados.
3m 39s
8
Desempenho e Plugins
Potencie os seus mapas com plugins do Folium. Descubra MarkerClusters para conjuntos de dados de pontos massivos, HeatMaps para densidade e ferramentas Draw para interações no mapa.
3m 38s
Episódios
1
A Ponte do Folium
3m 45s
Descubra a abstração central do Folium: ligar o ecossistema de dados do Python ao Leaflet.js. Aprenda a inicializar um Map, a definir a localização inicial e a renderizar o seu primeiro mapa HTML interativo.
Olá, daqui é o Alex da DEV STORIES DOT EU. Folium, episódio 1 de 8. Tens um enorme dataset de coordenadas geográficas e precisas de um mapa interativo para lhes dar sentido. O problema é que criar mapas interativos normalmente significa sair de Python e andar às voltas com libraries JavaScript. A ponte Folium é a solução exata para essa dor de cabeça.
O Folium é uma library Python que funciona como um tradutor entre os teus workflows de dados e o Leaflet dot js. O Leaflet é uma library JavaScript open-source muito popular, usada para criar mapas interativos mobile-friendly. Como data scientist, preferes fazer o trabalho pesado — manipulação, filtragem e análise de dados — em Python. O Folium permite-te ficar nesse ambiente. Ele pega nos teus objetos Python e gera o HTML e o JavaScript necessários para renderizar um mapa Leaflet. Ganhas a interatividade de um web map sem escreveres uma única linha de código frontend.
Começar é simples. Instalas a library usando package managers standard, como o pip, correndo pip install folium. Uma vez instalada, o workflow principal gira em torno da criação de um objeto base map. Imagina que estás a avaliar potenciais coordenadas para a localização de uma nova loja. Tens a latitude e a longitude exatas e precisas de ver a vizinhança em redor.
No teu script, importas a library folium. A seguir, chamas a função Map associada a essa library. Esta função requer uma informação crucial para ser útil imediatamente: o ponto central inicial. Passas este ponto central usando o parâmetro location. O parâmetro location espera uma list ou tuple simples contendo dois números. A latitude vem primeiro, seguida da longitude. Por exemplo, passas 45.52 para a latitude e -122.68 para a longitude. Quando executas isto, o Folium constrói um objeto map centrado precisamente nessas coordenadas.
Agora tens um objeto map a existir em memória. Como é que o consegues ver? O Folium oferece dois caminhos principais, dependendo do teu workspace. Se estiveres a trabalhar dentro de um Jupyter Notebook, o processo é fluido. Basta escreveres o nome do teu objeto map na última linha da cell e correres. O ambiente do notebook reconhece a representação HTML rich do objeto e renderiza automaticamente o mapa interativo Leaflet diretamente debaixo da tua code cell. Podes imediatamente fazer pan e zoom para inspecionar essa potencial localização da loja.
No entanto, muitas vezes precisas de partilhar este mapa com stakeholders que não usam o Jupyter. É aqui que entra o segundo método. Pegas no teu objeto map e chamas o método save nele. Passas um filename como uma string para este método, como index dot html. O Folium pega em toda a lógica subjacente do Leaflet, nas coordenadas e nas instruções de renderização, e escreve-as num ficheiro HTML standalone no teu disco rígido. Qualquer pessoa pode fazer duplo clique nesse ficheiro e abrir um mapa interativo e totalmente funcional no seu web browser standard. Não é necessário nenhum ambiente Python para ver o resultado final.
Aqui está o ponto chave. O Folium não renderiza mapas nativamente em Python; é simplesmente um engine que gera o web code necessário para que um browser os renderize. Atua estritamente como uma ponte para o Leaflet, tornando os teus dados em Python instantaneamente web-ready.
Se estás a achar estes episódios úteis e queres apoiar o programa, podes procurar por DevStoriesEU no Patreon — qualquer ajuda contribui para mantermos as luzes acesas. É tudo por agora. Obrigado por ouvires, e continua a programar!
2
Personalizar a Tela
3m 22s
Aprenda a transformar o estilo visual do seu mapa utilizando tilesets e bounds. Abordamos xyzservices, map tiles personalizados e como restringir o scroll do utilizador.
Olá, daqui é o Alex da DEV STORIES DOT EU. Folium, episódio 2 de 8. Crias um belo mapa interativo de um parque nacional, mas no momento em que o utilizador clica e arrasta, desliza para fora da costa e perde-se num oceano cinzento infinito. Precisas das imagens de background certas e precisas de fixar a câmara exatamente onde estão os teus dados. Tudo isto tem a ver com customizar o canvas.
Quando inicializas um mapa Folium, ele usa por default os tiles standard do OpenStreetMap. Estes são os tiles de imagem quadrados, unidos pelo browser para formar o background do mapa. Mapas de ruas standard nem sempre são a escolha certa. Mudas isto usando o parâmetro tiles quando crias o teu mapa. Se quiseres um background desvanecido e minimalista para que os teus dados se destaquem, podes passar uma simples string com o nome, como cartodb positron. Mas para um parque nacional, provavelmente vais querer imagens de terreno ou de satélite.
É aqui que o Folium se integra com um package chamado xyzservices. Não precisas de andar à procura de links de servidores de mapas de terceiros. O Folium traz centenas de providers pré-configurados. Basta acederes ao dicionário providers a partir do módulo map do Folium e escolheres o que precisas. Podes escolher um mapa topográfico da Esri ou um feed de satélite específico. Passas esse objeto provider diretamente para o parâmetro tiles, e o Folium trata dos requests ao servidor nos bastidores.
Às vezes, a tua organização tem um servidor de mapas privado, ou precisas de um overlay altamente especializado que não está na lista built-in. Nesse caso, podes passar uma string de URL custom para o parâmetro tiles. Os servidores de mapas usam uma estrutura de URL standard que contém placeholders para o nível de zoom, geralmente representado por Z, juntamente com as coordenadas X e Y do tile do mapa. Forneces esse template de URL diretamente. Há um requisito rigoroso aqui. Ao usar um URL custom, o Folium obriga-te a incluir um segundo parâmetro chamado attr, que significa attribution. Tens de fornecer uma string a dar crédito à fonte de dados. Sem o parâmetro attribution, o Folium vai recusar-se a fazer o render dos tiles custom.
Agora, o teu mapa tem o background topográfico perfeito. Mas ainda tens o problema de panning. Os utilizadores podem fazer scroll para muito longe do parque nacional. Evitas isto definindo limites de viewport. Quando crias o objeto map, defines uma bounding box usando quatro parâmetros específicos: latitude mínima, latitude máxima, longitude mínima e longitude máxima. Passas os limites de coordenadas do teu parque para estes parâmetros.
Aqui está o ponto-chave. Apenas definir essas quatro coordenadas não impede o utilizador de fazer panning. Para bloquear ativamente o viewport, também tens de definir o parâmetro max bounds como true. Quando ativas isto, o Folium instrui o engine de mapeamento subjacente a reposicionar a câmara se o utilizador tentar arrastar a view para fora do retângulo especificado. Eles são livres de fazer zoom in e zoom out para explorar os trilhos, mas o mapa impede-os fisicamente de se aventurarem pelo oceano.
Definir limites rígidos mantém o teu público focado na geografia relevante, e combinar esses limites com os tiles de terreno corretos dá aos teus dados o contexto exato que merecem. É tudo por este episódio. Obrigado por ouvires, e continua a construir!
3
Localizar Dados com Precisão
3m 42s
Domine a arte de colocar pins no seu mapa Folium. Exploramos Markers, Icons personalizados e a diferença crucial entre Tooltips e Popups.
Olá, daqui é o Alex da DEV STORIES DOT EU. Folium, episódio 3 de 8. Um mapa é basicamente uma imagem estática até começares a adicionar pins para destacar locais específicos. Mas esses pins não têm de ser todos iguais, com a mesma aparência daquela gota azul default. Localizar dados com eficácia significa dar aos teus utilizadores pistas visuais e contexto interativo logo ao nível das coordenadas.
Para colocares um ponto de interesse no teu mapa, usas a class folium dot Marker. O único requisito absoluto para criar um marker é o parameter location. Passas-lhe uma sequência de dois números, com a latitude primeiro, seguida da longitude. Depois de criares este object marker no teu código, anexas ao teu mapa base usando o method add to. Isso dá-te um pin standard posicionado exatamente nessas coordenadas.
Mas um pin simples apenas diz ao utilizador que algo existe ali. Ele precisa de comunicar o que é esse algo. O Folium dá-te duas maneiras principais de anexar texto a um marker, e os developers confundem-nas constantemente. A distinção é simples. Um tooltip é texto em hover. Um popup é uma label em click.
Imagina um mapa a mostrar diferentes estâncias de esqui numa cordilheira. Tu queres que o tooltip tenha o nome da estância, como Aspen ou Snowbird. Isto permite ao utilizador analisar o mapa rapidamente, movendo o cursor de pin em pin, vendo instantaneamente os nomes a aparecer e a desaparecer. O popup é reservado para informação secundária que exige intenção de leitura. Quando o utilizador faz click ativamente no pin de Aspen, o popup revela detalhes como um desnível vertical de três mil pés ou as condições meteorológicas atuais. Usas o tooltip para identificação rápida, e o popup para contexto mais profundo. Configuras ambos passando texto para os parameters tooltip e popup ao criares o teu marker.
Agora, olhar para cinquenta pins azuis idênticos é uma má user experience. Podes diferenciá-los visualmente usando a class folium dot Icon. Ao criares o teu marker, podes passar um object Icon custom para o seu parameter icon. Isto permite-te alterar a cor do próprio pin e o gráfico exibido lá dentro.
Para o parameter color, o Folium aceita vários nomes de string standard, como red, green, purple ou orange. Voltando às nossas estâncias de esqui, poderias categorizá-las visualmente marcando as estâncias para iniciantes a verde, e as estâncias exclusivas para experts a vermelho.
Para alterar o símbolo dentro do pin, usas o parameter icon dentro da class Icon. Por default, o Folium usa os glyphicons do Bootstrap. Podes passar nomes como cloud ou info dash sign para obteres esses gráficos específicos dentro do teu marker. Se a library default não tiver o símbolo exato de que precisas, podes mudar para os icons do Font-Awesome. Fazes isto definindo o parameter prefix no teu object Icon para a string f a. Depois de alterares o prefix, podes passar qualquer nome standard do Font-Awesome para o parameter icon. Isto abre uma enorme library de símbolos, permitindo-te colocar um gráfico de floco de neve nas tuas estâncias de inverno em vez de uma forma genérica.
Aqui está o insight principal. Os markers no teu mapa carregam a verdadeira narrativa dos teus dados espaciais. Combinar cores distintas, símbolos reconhecíveis e a divisão certa entre texto em hover e ações de click transforma uma simples grelha de coordenadas numa interface altamente legível.
Obrigado por ouvirem. Cuidem-se todos.
4
Interatividade Rica em Popups
3m 56s
Eleve os seus popups ao próximo nível incorporando conteúdo rico. Aprenda a fazer o parse de HTML, a incorporar Pandas DataFrames, a injetar gráficos Vega e a otimizar com lazy loading.
Olá, daqui fala o Alex da DEV STORIES DOT EU. Folium, episódio 4 de 8. Clicas num marker no mapa à espera de uma análise detalhada, mas, em vez disso, recebes um bloco de plain text apertado e ilegível. Podes pensar que os pins do mapa servem apenas para labels curtas. Mas, na verdade, podes fazer embed de uma data table interativa completa ou de um minigráfico diretamente dentro desse pin. É isso que vamos abordar hoje: Interatividade Rica em popups.
Por default, os popups do Folium aceitam uma simples string de texto. Mas foram construídos para lidar com muito mais. Imagina um mapa imobiliário. Quando um utilizador clica num pin de uma casa, o endereço não é suficiente. Queres exibir uma foto do imóvel e uma tabela organizada e formatada com estatísticas imobiliárias. Consegues isso tratando o popup como uma página web isolada.
Primeiro, podes passar strings de raw HTML diretamente para o popup. Ao definir o argumento parse html como true, instruis o Folium a renderizar a string como elementos web estruturais, em vez de exibir os parênteses angulares literais no ecrã. Isto permite-te incluir tags de imagem, headers e formatação web standard diretamente dentro do marker.
Para layouts mais avançados, usas um componente específico da framework subjacente do Folium, chamado Branca IFrame. Um IFrame cria uma janela isolada e com scroll dentro do popup. Isto é crucial ao fazer embed de estruturas complexas, porque impede que o styling interno do popup ou imagens grandes vazem e quebrem o layout principal do teu mapa. Crias a tua string HTML, passas para o objeto IFrame, defines uma largura e altura fixas, e depois passas esse IFrame diretamente para o teu Popup.
Este workflow combina perfeitamente com libraries de análise de dados. Não precisas de construir tabelas HTML manualmente para exibir métricas. Se tiveres um DataFrame do Pandas com as estatísticas da propriedade, basta chamares o método standard to html do Pandas. Pegas nessa string HTML gerada, passas para o teu IFrame, e o pin do teu mapa agora contém uma data table totalmente formatada e precisa.
Podes levar isto ainda mais longe usando as classes Vega e VegaLite do Folium. Estas classes permitem-te fazer embed de visualizações interativas. Em vez de passares HTML, passas uma especificação JSON de um gráfico para a classe Vega, e atribuis isso diretamente ao popup. Agora, ao clicar no pin da casa, é exibido um gráfico de linhas dinâmico com os valores históricos do imóvel ao lado da data table.
Aqui está o ponto chave. Carregar todo este conteúdo rico cria um enorme bottleneck de performance. Se o teu mapa imobiliário tiver cinco mil pins de casas, e cada popup contiver uma data table, um link de imagem e um gráfico Vega, o browser vai tentar renderizar todas as cinco mil estruturas ocultas no momento em que o mapa faz load. A página vai congelar instantaneamente.
Para resolver isto, o objeto Popup aceita um parâmetro chamado lazy. Ao definir lazy como true, o Folium não injeta o conteúdo do popup na página web inicialmente. O mapa renderiza os markers, mas o HTML pesado, os IFrames e os gráficos são completamente ignorados. O browser faz fetch e renderiza o conteúdo apenas no momento exato em que o utilizador clica num pin específico. Isto adia o custo computacional, o que significa que um mapa com milhares de popups interativos e pesados vai fazer load tão rápido como um mapa com text labels standard.
O verdadeiro poder de um web map não está em onde colocas os pins, mas na quantidade de contexto que consegues incluir neles sem degradar a user experience. Obrigado por ouvirem. Fiquem bem, pessoal.
5
Organizar Vetores e Layers
3m 46s
Desenhe caminhos e agrupe os seus dados para manter os mapas limpos. Exploramos PolyLines, FeatureGroups e como dar controlo aos utilizadores com LayerControls.
Olá, daqui é o Alex do DEV STORIES DOT EU. Folium, episódio 5 de 8. Mapeias cinquenta rotas de entrega e uma dúzia de armazéns num único mapa. O resultado é uma teia caótica de linhas que se cruzam e que ninguém consegue ler. Precisas de uma forma de permitir que os utilizadores filtrem o ruído. É aí que entra a organização de vetores e layers.
Primeiro, precisas de desenhar os caminhos. Para representar coordenadas ligadas num mapa, usas a classe PolyLine do Folium. Uma PolyLine recebe uma sequência de pares de latitude e longitude e desenha segmentos retos entre eles. Se tiveres os registos de GPS de um camião de entregas, basta passares essa lista de coordenadas para o objeto PolyLine. Podes configurar propriedades visuais como cor, espessura e opacidade. Isto permite-te desenhar uma linha azul grossa para uma rota de envio principal e uma linha cinzenta fina para uma rota de entrega local.
Se anexares uma PolyLine diretamente ao teu mapa base, ela fica permanentemente visível. Para um mapa de logística complexo, isto é um erro.
Aqui está o ponto-chave. Em vez de anexares formas diretamente ao objeto do mapa, deves colocá-las dentro de um FeatureGroup. Um FeatureGroup é um container lógico. Agrupa elementos relacionados para que possam ser geridos como uma única unidade.
No nosso cenário de logística, começas por criar dois FeatureGroups separados. Dás ao primeiro o nome de Rotas de Entrega e ao segundo Localizações de Armazéns. Depois, à medida que geras os elementos do mapa, alteras o seu destino. Quando crias uma PolyLine para o trajeto de um camião, adicionas essa PolyLine ao grupo Rotas de Entrega. Quando crias um marker padrão para um edifício, adicionas esse marker ao grupo Localizações de Armazéns. Assim que todos os teus elementos individuais estiverem organizados nos seus respetivos containers, adicionas ambos os FeatureGroups ao objeto principal do mapa.
Nesta fase, o mapa gerado é idêntico a um onde tudo foi despejado diretamente na base layer. O output visual não mudou, mas a estrutura de dados subjacente sim. Esta estrutura é o que permite a interação do utilizador.
Para expor esta estrutura ao utilizador, instancias um LayerControl do Folium e adicionas ao mapa. O LayerControl examina o objeto do mapa, encontra todos os FeatureGroups que anexaste, e cria automaticamente um menu interativo no canto superior do ecrã.
Os teus FeatureGroups tornam-se overlays que podes ativar e desativar. O utilizador vai ver uma checkbox para Rotas de Entrega e outra checkbox para Localizações de Armazéns. Se o ecrã estiver muito cheio, pode desmarcar as rotas para inspecionar apenas as instalações.
O LayerControl separa os dados do teu mapa em duas categorias: base layers e overlays. As base layers são os tiles subjacentes do mapa, como uma vista de rua ou uma vista de satélite. Estas são apresentadas com radio buttons, porque apenas um mapa base pode estar ativo de cada vez. Os overlays são os vetores e markers que adicionaste através dos FeatureGroups. Estes usam checkboxes, permitindo que vários conjuntos de dados sejam empilhados uns sobre os outros.
A regra mais importante da interatividade do mapa é que a interface de utilizador só pode manipular o que a tua estrutura de dados define. Se anexares cada linha e marker ao mapa raiz, o teu menu de layer control vai ficar vazio e o utilizador não controla nada.
Por hoje é tudo. Até à próxima!
6
Sobreposições Espaciais com GeoJSON
3m 19s
Desbloqueie funcionalidades espaciais avançadas importando GeoJSON para o Folium. Aprenda a mapear fronteiras e a integrar perfeitamente com GeoPandas DataFrames.
Olá, daqui é o Alex da DEV STORIES DOT EU. Folium, episódio 6 de 8. Fazer o plot de mil marcadores individuais num mapa é simples. Mas o que acontece quando precisas de desenhar as fronteiras exatas e irregulares de todos os cinquenta estados dos Estados Unidos, ou os limites administrativos sinuosos de uma cidade inteira? Fazer o plot de cada vértice manualmente não é opção. Spatial Overlays com GeoJSON são a forma de resolveres isto.
O GeoJSON é o formato standard da indústria para representar características geográficas complexas. Enquanto um marcador standard representa uma única coordenada, o GeoJSON lida com linhas, polígonos e multi-polygons. Quando estás a lidar com fronteiras do mundo real, estás a lidar com arrays que contêm milhares de pares de latitude e longitude a definir uma única forma. O Folium usa a class GeoJson para pegar nestes dados densos de fronteiras e fazer o render como um overlay visual no teu base map.
Vamos usar o cenário de mapear as fronteiras de distritos da cidade. Tens os dados espaciais de vinte distritos e precisas de ver os seus contornos num mapa de ruas. Alguns distritos são polígonos simples, enquanto outros podem incluir ilhas ou zonas desconectadas, o que exige multi-polygons. O Folium dá-te várias formas de ingerir estes dados complexos. Podes passar uma string com um URL que aponta diretamente para um ficheiro GeoJSON alojado online. Podes passar um file path local. Podes até passar um dicionário de Python com parse feito, caso já tenhas carregado os dados em memória.
Aqui está o ponto chave. O Folium não se limita a ler ficheiros de texto estáticos. Ele integra-se nativamente com o ecossistema mais alargado de data science de Python. A class GeoJson aceita qualquer objeto de Python que implemente a property standard geo-interface. Este é um protocolo comum em libraries espaciais de Python que permite que diferentes ferramentas partilhem estruturas de dados geográficos de forma transparente.
Graças a este standard, não precisas de extrair strings JSON manualmente se já estiveres a usar ferramentas analíticas modernas. Podes passar um GeoDataFrame de GeoPandas diretamente para o Folium. Para fazeres isto, primeiro carregas os limites dos teus distritos para um GeoDataFrame usando o GeoPandas. A seguir, geras o teu base map standard centrado na cidade. Depois, chamas a class GeoJson e simplesmente passas-lhe o teu GeoDataFrame como argumento principal. Finalmente, adicionas esse objeto GeoJson recém-criado ao teu base map.
O Folium lê a geo-interface do dataframe, extrai as formas geométricas para todos os vinte distritos da cidade e desenha as fronteiras exatas sobre os map tiles. Ignoras completamente a manipulação de raw files e vais direto de uma estrutura de dados para uma visualização.
Tem em mente que este processo de overlay específico é estritamente sobre a exibição de fronteiras espaciais. Não se trata de fazer join de dados estatísticos a essas fronteiras para as colorir com base na população ou no rendimento. Isso é um conceito completamente diferente. A class GeoJson serve puramente para definir as formas físicas e colocá-las no mapa.
O poder da layer GeoJSON do Folium não é apenas poder desenhar fronteiras geográficas complexas e multi-partes, mas sim servir como uma ponte direta entre objetos analíticos, como um GeoDataFrame, e o teu mapa interativo final, exigindo zero manipulação manual de coordenadas.
É tudo por este episódio. Obrigado por ouvires, e continua a construir!
7
Distribuições com Choropleths
3m 39s
Combine geografia com estatística utilizando mapas Choropleth. Aprenda a ligar Pandas DataFrames a regiões GeoJSON para visualizar distribuições de dados.
Olá, daqui fala o Alex da DEV STORIES DOT EU. Folium, episódio 7 de 8. O mapa mais reconhecido em data science colore regiões geográficas com base num valor estatístico. Fazer com que as fronteiras geográficas correspondam aos dados da tua folha de cálculo normalmente exige uma operação de merge confusa numa library espacial separada. No Folium, a class Choropleth trata da geometria, do data binding e da escala de cores numa única etapa.
Um choropleth liga dados numéricos a fronteiras geográficas. Forneces as formas, forneces os números, e o mapa colore as formas com base nesses números. Considera o exemplo clássico de mapear a taxa de desemprego nos estados dos EUA. Para construíres isto, instancias a class Choropleth e passas-lhe quatro informações essenciais.
Primeiro, os dados geográficos. Passas um ficheiro GeoJSON contendo as fronteiras dos polígonos dos estados dos EUA para o parâmetro geo data.
Segundo, os dados estatísticos. Passas o teu DataFrame de Pandas contendo as estatísticas de desemprego para o parâmetro data.
Terceiro, dizes ao Folium quais as partes do teu DataFrame que importam. Forneces uma lista com exatamente dois nomes de colunas para o parâmetro columns. A primeira coluna guarda o identificador da região, como a abreviatura do estado. A segunda coluna guarda o valor numérico que queres visualizar, que é a taxa de desemprego.
Aqui está o ponto chave. O DataFrame e as formas geográficas são objetos completamente separados. Tens de dizer explicitamente ao Folium como ligá-los usando o parâmetro key on. Este parâmetro recebe uma string que representa o caminho exato dentro do ficheiro GeoJSON onde o identificador correspondente se encontra. Se o teu GeoJSON define um estado usando uma feature property chamada id, o teu parâmetro key on será a string feature dot id. Este caminho deve corresponder perfeitamente ao identificador na primeira coluna do teu DataFrame. Quando correspondem, os dados estatísticos fazem bind à geometria.
Assim que os dados fazem bind, o mapa aplica as cores. O parâmetro fill color aceita paletas standard como YlGn para um gradiente de amarelo para verde. Por defeito, o Folium pega nos valores mínimo e máximo do teu dataset e divide a escala de cores em fatias matemáticas iguais. Se os teus dados de desemprego estiverem muito enviesados, este corte linear pode agrupar a maioria dos estados numa única faixa de cor, tornando o mapa inútil. Para controlar isto, passa uma lista de limites numéricos específicos para o parâmetro bins. Isto força a escala de cores a mudar exatamente onde os teus dados se dividem naturalmente, dando-te controlo total sobre a distribuição visual.
Datasets do mundo real têm frequentemente lacunas. Se um estado no teu ficheiro de fronteiras GeoJSON não tiver uma row correspondente no teu DataFrame, o Folium vai na mesma desenhar a fronteira, mas deixa o interior sem cor. Geres estas regiões vazias com o parâmetro nan fill color. Definir isto para um tom neutro como cinzento garante que os dados em falta sejam marcados explicitamente sem distrair do resto do mapa.
O alinhamento entre a key do DataFrame e o property path do GeoJSON é o único ponto de falha para a maioria dos choropleths. Acerta no parâmetro key on, e o mapa constrói-se sozinho.
Se achas estes deep dives técnicos úteis, podes apoiar o programa procurando por DevStoriesEU no Patreon. É tudo por este episódio. Obrigado por ouvires, e continua a construir!
8
Desempenho e Plugins
3m 38s
Potencie os seus mapas com plugins do Folium. Descubra MarkerClusters para conjuntos de dados de pontos massivos, HeatMaps para densidade e ferramentas Draw para interações no mapa.
Olá, daqui é o Alex do DEV STORIES DOT EU. Folium, episódio 8 de 8. Plotar cem pontos num web map é fácil. Plota dez mil pontos, e o teu browser vai congelar completamente. O Document Object Model simplesmente não consegue lidar com tantos elementos gráficos individuais ao mesmo tempo. A solução para este bottleneck é Performance e Plugins.
Tens um dataset de cem mil locais de recolha de táxis numa cidade. Se fizeres um loop por essa lista e adicionares markers standard diretamente ao teu base map, a página vai crashar antes sequer de acabar de carregar. É aqui que entra o plugin MarkerCluster. Em vez de anexares pontos diretamente ao mapa, crias um cluster object dedicado. Fazes um loop pelo teu dataset, adicionas cada local de recolha a este cluster object, e depois anexas o cluster inteiro ao mapa no final.
Quando o mapa carrega totalmente em zoom out, o browser não tenta desenhar cem mil pins. Ele desenha alguns círculos grandes com números lá dentro, que representam a contagem total de locais nessa área ampla. À medida que fazes zoom in, esses clusters massivos dividem-se dinamicamente em clusters menores e localizados. Se clicares num círculo numerado, o mapa calcula automaticamente as boundaries e faz zoom in para essa região específica. Ele lida com a matemática espacial em background, garantindo que o browser apenas renderiza os markers individuais quando estás perto o suficiente para os veres.
Às vezes, as localizações exatas dos pontos não são o que realmente precisas de comunicar. Queres ver a densidade. O plugin HeatMap pega nessa mesma lista enorme de coordenadas de táxis e renderiza um gradiente de cores suave em vez de milhares de pins sobrepostos. Passas a tua lista raw de pares de latitude e longitude diretamente para a função heatmap, e anexas ao mapa. O plugin calcula a concentração espacial dos teus dados. Zonas de recolha de alta densidade brilham intensamente, enquanto áreas esparsas fazem fade out. É computacionalmente muito mais barato para o browser renderizar este único overlay do que formas vetoriais discretas, e revela instantaneamente os hotspots sem transformar o ecrã numa confusão caótica de ícones.
Até este ponto, os mapas têm sido estritamente read-only. O plugin Draw muda esse comportamento por completo. Ele adiciona uma toolbar interativa diretamente à user interface. Ativas o plugin no teu script Python, e quando o utilizador abre o ficheiro resultante, pode clicar nas tools para desenhar polígonos customizados, traçar linhas, ou largar os seus próprios markers sobre os teus dados de táxis.
Aqui está o ponto chave. Estas formas desenhadas não são apenas dead pixels num ecrã. Elas geram dados espaciais válidos. Um utilizador pode desenhar uma boundary fence à volta de um bairro específico com alta procura de táxis e exportar essa forma exata como um ficheiro GeoJSON diretamente da toolbar. Isto transforma a tua visualização de um relatório estático numa tool ativa de seleção e anotação.
Os plugins do Folium preenchem a lacuna entre scripts Python simples e front-end web mapping pesado, dando-te uma performance avançada no browser sem te obrigar a escrever JavaScript. Encorajo-te a explorares a documentação oficial, a experimentares estas tools hands-on, ou a visitares devstories dot eu para sugerires tópicos sobre os quais queres ouvir numa série futura. É tudo por este episódio. Obrigado por ouvires, e continua a construir!
Tap to start playing
Browsers block autoplay
Share this episode
Episode
—
Copy this episode in another language:
Este site não utiliza cookies. O nosso fornecedor de alojamento pode registar o seu endereço de IP para efeitos analíticos. Saber mais.