Coropletas com geopandas

Visualizando dados geoespaciais em Python

Mary van Valkenburg

Data Science Program Manager, Nashville Software School

gráfico de colormaps sequenciais

Visualizando dados geoespaciais em Python

Coropleta com GeoDataFrame.plot()

districts_with_counts.plot(column = 'school_density', legend = True)
plt.title('Schools per decimal degrees squared area')
plt.xlabel('longitude')
plt.ylabel('latitude');

coropleta de densidade de escolas usando o colormap viridis

Visualizando dados geoespaciais em Python

Coropleta com GeoDataFrame.plot()

districts_with_counts.plot(column = 'school_density', cmap = 'BuGn', edgecolor = 'black', legend = True)
plt.title('Schools per decimal degrees squared area')
plt.xlabel('longitude')
plt.ylabel('latitude');

coropleta de densidade de escolas com colormap azul-verde

Visualizando dados geoespaciais em Python

Área em quilômetros quadrados

# 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
Visualizando dados geoespaciais em Python

Área em quilômetros quadrados

# 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
Visualizando dados geoespaciais em 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')
Visualizando dados geoespaciais em 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
Visualizando dados geoespaciais em Python

Calculando a densidade de escolas

# 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('Schools per kilometers squared')
plt.xlabel('longitude')
plt.ylabel('latitude')
plt.show();
Visualizando dados geoespaciais em Python

coropleta de densidade de escolas por quilômetro quadrado

Visualizando dados geoespaciais em Python

Vamos praticar!

Visualizando dados geoespaciais em Python

Preparing Video For Download...