• 🏡 Home
  • 🚨 GDPR Compliant
  • ⚡️ Data Science
  • 📌 Machine Learning
  • 🔒 Privacy Preserving
  • 🏡 Home
  • 🚨 GDPR Compliant
  • ⚡️ Data Science
  • 📌 Machine Learning
  • 🔒 Privacy Preserving
Data Science, machine-learning

Folium: geospatial data python

Folium: geospatial data python

Folium è una python data visualization library creata con l’intento di aiutarci nella visualizzazione di geospatial data, i dati geospaziali.

Nei precedenti post abbiamo analizzato dei metodi di data visualziation base, semplici e avanzati.

Capita sovente che all’interno del dataset siano presenti coordinate geografiche. Come possiamo rappresentarne il valore al meglio?

Scopriamolo!

Folium

La libreria Folium consente la facile creazione di una mappa per qualsiasi luogo nel mondo, a patto che si disponga delle relative coordinate.

La visualizzazione predefinita fa uso di OpenStreet Map.

Possiamo creare:

  • Mappe
  • Marcatori sovrapposti
  • Cluster di mappe

Inoltre sono disponibili differenti stili, tra cui:

  • Street Levl Map
  • Stamen Toner Map, utile per evidenziare corsi d’acqua e aree costiere
  • Stamen Terrain Map, utile per visualizzare aree montuose e vegetazione.

Rispetto ad altre librerie multiuso, Folium gestistisce unicamente questa particolare tipologia di dati, e offre illimitate chiamate API in modo totalmente gratuito.

La documentazione è reperibile qui.

Geospatial Data Python Tutorial

Per questo breve tutorial useremo il California Housing Dataset, che raccoglie dati catastali californiani datati 1990. Vecchiotto, ma funzionale.

Il dataset è reperibile all’interno della repository ageron, sviluppata per la parte pratica del libro Hands-On Machine Learning, di cui consiglio l’acquisto: una risorsa formidabile!

ATTENZIONE
Per limitare la prolissità del post, ho riportato il solo codice relativo all’analisi dati geospaziali. Onde evitare lacune e incomprensioni, ti consiglio di fare sempre riferimento al Jupyter Netbook allegato a fondo pagina, dove puoi trovare tutto il flow completo del tutorial.

Importiamo il dataset, quindi creiamo una mappa della California centrata nell coordinate medie, ottenute con describe(), nel dataset.

# defined the world map centerd around california with a higher zoom level
world_map = folium.Map(location=[35,-119], zoom_start=6) #[lat, long]

# display the world map
world_map

Attraverso il parametro tiles siamo in grado di controllare lo stile della mappa. Possiamo scegliere tra:

  • Stamen (Terrain, Toner, Watercoolor)
  • Mapbox Bright
  • CartDB
  • Mapbox Control Room
# defined the world map centerd around california with a higher zoom level
world_map = folium.Map(location=[35,-119], zoom_start=6, tiles="Mapbox Bright") #[lat, long]

# display the world map
world_map

Quest’ultima tipologia di mappa è simile a quella default: nasconde però i bordi degli stati a zoom bassi, e ne riporta i nomi in lingua inglese (contrariamente a visualizzarli nella relativa lingua)

Markers

Aggiungiamo alla mappa dei datapoints:

# define our map's parameter and superimpose single datapoint
lat  = 37
lng = -122

# create the map
california_map = folium.Map(location=[lat,lng], zoom_start=12)

# in order to superimpose the locations of the datapoint we firstly create a feature group with its own feature and style, 
# then add it ot the map

# instantiate a feature group for the datapoints in the dataframe
datapoints = folium.map.FeatureGroup()

# add each datapoint ot the feature group
for lng, lat in zip(df.longitude, df.latitude):
    datapoints.add_child(
           folium.vector_layers.CircleMarker(
            [lat, lng],
            radius=5, # set the markers width
            color='green',
            fill=True,
            fill_color='white',
            fill_opacity=.2
        )
    )
    
# add pop-up text to each marker
lats = list(df.latitude)
lngs = list(df.longitude)
labels = list(df.housing_median_age)

for lat, lng, label in zip(lats, lngs, labels):
    folium.Marker([lat, lng], popup=label).add_to(california_map)
    
# add datapoints to map
california_map.add_child(datapoints)

Map Clusters

Prima di salutarci un rapido sguardo alla creazione di map cluster, particolarmente utile per evitare un’eccessiva congestione di dati.

from folium import plugins

# let's start again with a clean copy of the map of California
california_map = folium.Map(location = [lat, lng], zoom_start = 12)

# instantiate a mark cluster object for the datapoints in the dataframe
datapoints = plugins.MarkerCluster().add_to(california_map)

# loop through the dataframe and add each data point to the mark cluster
for lat, lng, label, in zip(df.latitude, df.longitude, df.housing_median_age):
    folium.Marker(
        location=[lat, lng],
        icon=None,
        popup=label,
    ).add_to(datapoints)

# display map
california_map

Folium Choropleth Maps

Choropleth Map (Mappa Coropletica) è una mappa tematica con aree colorate di differente tonalità in proporzione alla magnitudine della variabile statistica rappresentata su di essa.

Una Choropleth Map rappresenta un sofisticato sistema per la visualizzazione delle misurazioni variabili in funzione dell’area geografica.

Un esempio, la distribuzione di popolazione per miglio quadrato in USA.

Image

La realizzazione di una mappa simile è complessa. Folium agevola il lavoro, benché sia necessario che si disponga di una particolare struttura dati riportante i contorni di demarcazione delle diverse aree tematiche.

Una volta in possesso del file, generalmente un json, puoi procedere come segue:

json_boundaries = r'boundaries.json' # geojson file

# create a plain world map
World_map = folium.Map(location=[0, 0], zoom_start=2, tiles='Mapbox Bright')

# overlap the geojson
World_map.choropleth(
    geo_data=json_boundaries,
    data=df,
    columns=['Columna A','Columna B'],
    fill_color='YlOrRd', 
    key_on='some.key.CASE.SENSITIVE',
    fill_opacity=0.7, 
    line_opacity=0.2,
    legend_name='A legend name'
)

# display map
World_map

Occhio ad alcuni elementi:

  • il key_on è la key all’interno del file json contenente la variabile d’interesse. Per determinarla è necessario aprire il json ed esplorarlo. Ricorda che le key del JSON sono case sensitive, occhio a maiuscole e minuscole.

Un caldo abbraccio, Andrea.

Written by Andrea Provino - Novembre 12, 2019
Tags | data science, data scientist, dataset, tutorial

You Might Also Like

GDPR-personal-data-definition-definizione-dati-personali-guida-italiano-consulenza

GDPR Definition of Personal Data

Ottobre 26, 2020
google-colab-cos'è-machine-learning-data-science-jupyter-notebooks-online-guida.

Cos’è Google Colab: jupyter notebooks online

Ottobre 25, 2019

One Versus All (OvA) vs One Versus One (OvO) | Multiclass Classifiers

Settembre 30, 2019

1 Comment

  • DBSCAN: Density-based spatial clustering of applications with noise - Machine Learning & Data Science Blog Novembre 13, 2019 at 21:50

    […] particolari librerie usate, Folium è senz’altro una delle più curiose: torna particolarmente utile per la visualizzazione di […]

    Reply
  • Please Post Your Comments & Reviews
    Annulla risposta

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

    Next Post
    Previous Post

    Una pubblicità che non vedi se usi AdBlock

    EXPAND YOUR KNOWLEDGE

    • Blockchain

      Patricia Merkle Trie

      Maggio 30, 2023
    • Artistic representation of a tree Blockchain

      Tree Data Structure: cos’è un Merkle Tree

      Maggio 26, 2023
    • Cover image for Bitcoin UTXO explanation post Blockchain

      UTXO: come funziona il modello Unspent Transaction Outputs

      Maggio 23, 2023
    • Blockchain

      Cos’è Ethereum

      Maggio 15, 2023
    • Blockchain Developer

      Circuito aritmetico

      Novembre 1, 2022
    • machine-learning

      Un nuovo inizio

      Settembre 4, 2021
    • Zero Knwoledge Proof Article Privacy Preserving

      Zero Knowledge Proof: zk-SNARK e zk-STARK | Prova a conoscenza zero

      Luglio 8, 2021
    • oblivious-transfer-spiegazione-italiano-ot-explanation Privacy Preserving

      Oblivious Transfer (OT)

      Luglio 6, 2021
    • Aleo Studio Website Preview machine-learning

      Aleo Studio: un IDE per Zero-Knowledge Proofs Applications

      Luglio 1, 2021
    • privacy-enhancing-technologies-data-machine-learning-data-science Privacy Preserving

      Perché il Privacy Tech è un vantaggio competitivo micidiale

      Giugno 17, 2021

    Quello che Google pensa ti possa piacere

    Prodotti che i Cookie dicono potresti trovare interessanti

    AI Blog - © 2019-2021 Andrea Provino