python draws beautiful maps

Posted by trulyafrican on Mon, 07 Oct 2019 19:44:30 +0200

Import packages to create a world map

import folium
import pandas as pd
# define the world map
world_map = folium.Map()
# display world map
world_map


2. input latitude and longitude, scale, here we take (37.7749 degrees N, 122.4194 degree W) as an example.

//If you are interested in python, I have a Python learning base, which has a lot of learning materials, interested.+Q Group:688244617

# San Francisco latitude and longitude values
latitude = 37.77
longitude = -122.42
# Create map and display it
san_map = folium.Map(location=[latitude, longitude], zoom_start=12)
# Display the map of San Francisco
san_map


Change the map display, default to the'OpenStreetMap'style, we can also choose'Stamen Terrain','Stamen Toner' and so on.

# Create map and display it
san_map = folium.Map(location=[latitude, longitude], zoom_start=12,tiles='Stamen Toner')


3. read data set (crime data set)

# Read Dataset 
cdata = pd.read_csv('https://cocl.us/sanfran_crime_dataset')
cdata.head()


4. Display the top 200 crime data on the map

# get the first 200 crimes in the cdata
limit = 200
data = cdata.iloc[0:limit, :]
# Instantiate a feature group for the incidents in the dataframe
incidents = folium.map.FeatureGroup()
# Loop through the 200 crimes and add each to the incidents feature group
for lat, lng, in zip(cdata.Y, data.X):
 incidents.add_child(
 folium.CircleMarker(
 [lat, lng],
 radius=7, # define how big you want the circle markers to be
 color='yellow',
 fill=True,
 fill_color='red',
 fill_opacity=0.4
 )
 )
# Add incidents to map
san_map = folium.Map(location=[latitude, longitude], zoom_start=12)
san_map.add_child(incidents)


5. Add Geographical Labels

# add pop-up text to each marker on the map
latitudes = list(data.Y)
longitudes = list(data.X)
labels = list(data.Category)
for lat, lng, label in zip(latitudes, longitudes, labels):
 folium.Marker([lat, lng], popup=label).add_to(san_map) 
 
# add incidents to map
san_map.add_child(incidents)


6. Statistics of the total number of regional crimes

from folium import plugins
# let's start again with a clean copy of the map of San Francisco
san_map = folium.Map(location = [latitude, longitude], zoom_start = 12)
# instantiate a mark cluster object for the incidents in the dataframe
incidents = plugins.MarkerCluster().add_to(san_map)
# loop through the dataframe and add each data point to the mark cluster
for lat, lng, label, in zip(data.Y, data.X, cdata.Category):
 folium.Marker(
 location=[lat, lng],
 icon=None,
 popup=label,
 ).add_to(incidents)
# add incidents to map
san_map.add_child(incidents)


7. read the geojson file to visualize 10 different Neighborhood boundaries.

import json
import requests
url = 'https://cocl.us/sanfran_geojson'
san_geo = f'{url}'
san_map = folium.Map(location=[37.77, -122.4], zoom_start=12)
folium.GeoJson(
 san_geo,
 style_function=lambda feature: {
 'fillColor': '#ffff00',
 'color': 'black',
 'weight': 2,
 'dashArray': '5, 5'
 }
).add_to(san_map)
#display map
san_map


8. Statistics on the number of criminal incidents in each region

# Count crime numbers in each neighborhood
disdata = pd.DataFrame(cdata['PdDistrict'].value_counts())
disdata.reset_index(inplace=True)
disdata.rename(columns={'index':'Neighborhood','PdDistrict':'Count'},inplace=True)
disdata


9. Create Choropleth Map (shades of color represent the number of criminal incidents in each district)

m = folium.Map(location=[37.77, -122.4], zoom_start=12)
folium.Choropleth(
 geo_data=san_geo,
 data=disdata,
 columns=['Neighborhood','Count'],
 key_on='feature.properties.DISTRICT',
 #fill_color='red',
 fill_color='YlOrRd',
 fill_opacity=0.7,
 line_opacity=0.2,
 highlight=True,
 legend_name='Crime Counts in San Francisco'
).add_to(m)
m


10. Creating Thermal Diagrams

# let's start again with a clean copy of the map of San Francisco
san_map = folium.Map(location = [latitude, longitude], zoom_start = 12)
# Convert data format
heatdata = data[['Y','X']].values.tolist()
# add incidents to map
HeatMap(heatdata).add_to(san_map)
san_map


The effect is shown in the following figure.

Topics: Python JSON Lambda