Choropleth карта не отображается в Python, никаких ошибок не возвращается - PullRequest
0 голосов
/ 28 марта 2019

Я создал «лондонский» фрейм данных для лондонских районов с названиями, населением и координатами. Затем я создал карту фолиума и добавил маркеры каждого района. Это сработало на отлично. Однако затем я попытался создать карту хороплета, показывающую интенсивность населения в каждом районе. Я использую платформу IBM Watson Studio Python Notebook.

Я нашел файл геойсона для лондонских районов по следующей ссылке https://skgrange.github.io/www/data/london_boroughs.json. Он имеет следующую структуру, со списком «Элемент», заполненным данными района и его координатами, и так далее по одному.


{
  "type": "FeatureCollection",
  "crs": {
    "type": "name",
    "properties": {
      "name": "urn:ogc:def:crs:OGC:1.3:CRS84"
    }
  },
  "features": [
    {
      "type": "Feature",
      "id": 0,
      "properties": {
        "id": 1,
        "name": "Kingston upon Thames",
        "code": "E09000021",
        "area_hectares": 3726.117,
        "inner_statistical": 0
      },
      "geometry": {"type": "MultiPolygon", "coordinates": [] }
    },
    {
      "type": "Feature",
      "id": 23,
      "properties": {
        "id": 24,
        "name": "Kensington and Chelsea",
        "code": "E09000020",
        "area_hectares": 1238.379,
        "inner_statistical": 1
      },
      "geometry": {"type": "MultiPolygon","coordinates": [] }
}

Я проверил фрейм данных London ['Population'], это float. Все названия районов в Лондоне ['Borough'] совпадают с именами в файле json.

Когда я запускаю типичный код choropleth, ноутбук не отображает ничего. Также не появляется сообщение об ошибке. Я попробовал все, не зная, в чем может быть проблема. Неверный файл JSON? Возможно, вы можете посоветовать лучший JSON, если это так. Пожалуйста, помогите.

from geopy.geocoders import Nominatim
import folium

address = 'London'

geolocator = Nominatim(user_agent="ny_explorer")
location = geolocator.geocode(address)
latitude = location.latitude
longitude = location.longitude

map_london = folium.Map(location=[latitude, longitude], zoom_start=10, height = '70%', width = '70%')

# add markers to map
for lat, lng, borough in zip(London['Latitude'], London['Longitude'], London['Borough']):
    label = '{}'.format(borough)
    label = folium.Popup(label, parse_html=True)
    folium.CircleMarker(
        [lat, lng],
        radius=5,
        popup=label,
        color='blue',
        fill=True,
        fill_color='#3186cc',
        fill_opacity=0.7,
        parse_html=False).add_to(map_london)  

the above section worked perfectly well with beautiful London and borough markers shown.

!wget --quiet https://skgrange.github.io/www/data/london_boroughs.json -O london.json
london_geo = r'london.json'

map_london.choropleth(
 geo_data=london_geo,
 name='choropleth',
 data=London,
 columns=['Borough', 'Population'],
 key_on='Features.properties.name',
 fill_color='BuPu',
 fill_opacity=0.7,
 line_opacity=0.2,
 legend_name='Population rate of London Boroughs'
)
#Nothing appears here. No error message.
...