Cartogrammes avec geopandas

Visualisation de données géospatiales avec Python

Mary van Valkenburg

Data Science Program Manager, Nashville Software School

graphique des cartes de couleurs séquentielles

Visualisation de données géospatiales avec Python

Cartogramme avec GeoDataFrame.plot()

districts_with_counts.plot(column = 'school_density', legend = True)
plt.title('Écoles par degré décimal carré')
plt.xlabel('longitude')
plt.ylabel('latitude');

cartogramme des densités d'écoles avec la carte de couleurs viridis

Visualisation de données géospatiales avec Python

Cartogramme avec GeoDataFrame.plot()

districts_with_counts.plot(column = 'school_density', cmap = 'BuGn', edgecolor = 'black', legend = True)
plt.title('Écoles par degré décimal carré')
plt.xlabel('longitude')
plt.ylabel('latitude');

cartogramme des densités d'écoles avec carte de couleurs bleu-vert

Visualisation de données géospatiales avec Python

Superficie en kilomètres carrés

# starting CRS
print(school_districts.crs)
epsg:4326
# convert to EPSG 3857
school_districts = school_districts.to_crs(epsg = 3857)
print(school_districts.crs)
epsg:3857
Visualisation de données géospatiales avec Python

Superficie en kilomètres carrés

# define a variable for m^2 to km^2
sqm_to_sqkm = 10**6

school_districts['area'] = school_districts.area / sqm_to_sqkm
school_districts.head(2)
district    geometry                             area
1          (POLYGON ((-965.055 4353528.766...    563.134380
3          (POLYGON ((-965.823 4356392.677...    218.369949
Visualisation de données géospatiales avec Python
# change crs back to 4326
school_districts = school_districts.to_crs(epsg = 4326)
print(school_districts.crs)
epsg:4326
print(school_districts.head(2))
district      geometry                       area
1             (POLYGON ((-86.771 36.383...   563.134380
3             (POLYGON ((-86.753 36.404...   218.369949
# spatial join to get districts that contain schools
schools_in_districts = gpd.sjoin(school_districts, schools_geo, predicate = 'contains')
Visualisation de données géospatiales avec Python
# aggregate to get counts
school_counts = schools_in_districts.groupby(['district']).size()
# convert school_counts to a df 
school_counts_df = school_counts.to_frame()
school_counts_df = school_counts_df.reset_index(level=0)
school_counts_df.columns = ['district', 'school_count']
# merge
districts_with_counts = pd.merge(school_districts,
                                 school_counts_df, on = 'district')
districts_with_counts.head(1)
district  geometry                       area       school_count
1         (POLYGON ((-86.771 36.383..    563.134380    30
Visualisation de données géospatiales avec Python

Calculer la densité d'écoles

# create school_density
districts_with_counts['school_density'] = districts_with_counts.apply(
    lambda row: row.school_count/row.area, axis = 1)
# plot it
districts_with_counts.plot(column = 'school_density', cmap = 'BuGn', 
                           edgecolor = 'black', legend = True)
plt.title('Écoles par kilomètre carré')
plt.xlabel('longitude')
plt.ylabel('latitude')
plt.show();
Visualisation de données géospatiales avec Python

cartogramme des densités d'écoles par kilomètre carré

Visualisation de données géospatiales avec Python

Passons à la pratique !

Visualisation de données géospatiales avec Python

Preparing Video For Download...