Карта Choropleth не отображает затенение для границ геоджсона

Folium отображает картограмму с границами полицейских сил, но все они серые и не соответствуют цвету данных во фрейме данных.

Я также удостоверился, что используется новая версия документации, то есть folium.Choropleth. Я также проверил, что я key_on = 'feature.properties.pfa16nm', проверив json в geojson.io Функция пишется с заглавной буквы при проверке geojson, однако, когда я меняю его на это, я получаю сообщение об ошибке и нет карты рендеры. Я также переименовал файл, чтобы в качестве расширения использовался только geojson, и это не сработало.

import pandas as pd
import folium
import json
import os
adults_trafficked = pd.read_excel('Adults trafficked.xlsx')
force_boundaries = 'Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json'

m = folium.Map([52.6333, -1.1333], zoom_start=4)
folium.Choropleth(
    geo_data=force_boundaries,
    data=adults_trafficked,
    columns=['Police_Force', 'Adults_Exploited'],
    key_on='feature.properties.pfa16nm',
    threshold_scale=[0, 25, 50, 75, 100, 125, 150, 175],
    fill_color='BuPu',
    legend_name='Trafficked Humans',
).add_to(m)
m

Вывод, что я получаю  введите описание изображения здесь

Я ожидаю, что карта Leaflet будет отображаться с каждой границей полиции, заштрихованной до соответствующего уровня на основе данных столбца фрейма данных. Карта Chorpleth отлично отображает границы, однако все они серые и не содержат ожидаемого цветового диапазона. Пожалуйста, найдите здесь код, данные и ссылку json.


person Analyst    schedule 04.04.2019    source источник
comment
У меня точно такая же проблема, не могу найти решения. Ссылка на вопрос: stackoverflow.com/questions/55563700/   -  person Rahul    schedule 08.04.2019
comment
Пожалуйста, разместите свои данные и данные geojson на вашем диске, а затем поделитесь ссылкой. Ссылка, которой вы поделились, предназначена для страницы. У нас нет времени искать кнопку загрузки. Опубликуйте минимальную версию своей проблемы, чтобы мы могли помочь вам быстро и эффективно.   -  person Himanshu Poddar    schedule 09.04.2019
comment
Пожалуйста, обновите данные и файл geojson, чтобы я мог ответить на ваш вопрос.   -  person Himanshu Poddar    schedule 09.04.2019
comment
Я создал github с необходимой информацией github.com/Crime-Analytics/Human_Trafficking.git спасибо за вашу ожидаемую помощь. Сначала я подумал, что мне придется отредактировать файл json вручную.   -  person Analyst    schedule 10.04.2019
comment
Файл данных не соответствует pfa16nm в файле json. Если вы можете сделать так, чтобы они совпадали, ваш код должен работать. Например, файл Excel имеет Cumbria Constabulary, тогда как файл json имеет Cumbria.   -  person Baris Tasdelen    schedule 11.04.2019


Ответы (2)


Проблема в том, что файл excel не соответствует файлу json. Когда вы используете

columns=['Police_Force', 'Adults_Exploited'],
key_on='feature.properties.pfa16nm',

Police_Force должен соответствовать pfa16nm в вашем json файле.

Этот код даст вам pfa16nms в вашем json.

import json 
policejson = json.load(open('Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json')) 
for x in policejson['features'] : 
    print (x['properties']['pfa16nm']) 

Затем вам нужно исправить свой файл Excel и убедиться, что столбец Police_Force соответствует именам в вашем файле json.

person Baris Tasdelen    schedule 11.04.2019
comment
Большое спасибо, этот ответ сработал отлично; извлечен ценный урок! Я скоро обновлю свой новый гитхаб рабочим кодом. - person Analyst; 11.04.2019
comment
Химаншу Поддар: Я тщательно проработал ваш ответ, и он также сработал для меня и позволил мне редактировать в пандах, сэкономив мне время, исправляя несоответствие названий полицейских сил. Я объединю это новое обучение в новую записную книжку и загрузю на github, я поблагодарил вас после вашего ответа, чтобы подтвердить это. Спасибо за ваше время и образование. - person Analyst; 11.04.2019

Проблема в том, что имя ключа и имя Police_Force в вашей базе данных не совпадают. Итак, проанализировав ваши данные, а также файл json, я провел некоторую предварительную обработку ваших данных, чтобы имя совпало с ключом в нашем файле json.

Вот полноценное решение вашего вопроса.

# import libraries
import pandas as pd
import folium
import json
import webbrowser

# read data
adults_trafficked = pd.read_excel('Adults trafficked.xlsx')

# Pre processing of data
adults_trafficked['Police_Force'] = adults_trafficked['Police_Force'].replace('Police|Constabulary','', regex=True, ).replace('&','and', regex=True)
adults_trafficked.loc[adults_trafficked['Police_Force'] == "Metropolitan  Service",'Police_Force' ] = 'Metropolitan Police'

# remove any trailing or leading white spaces
adults_trafficked['Police_Force'] = adults_trafficked['Police_Force'].str.strip()

# border json file 
force_boundaries = 'Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json'

# choropleth map
m = folium.Map([52.6333, -1.1333], zoom_start=7)

m.choropleth(
    geo_data=force_boundaries,
    data=adults_trafficked,
    columns=['Police_Force', 'Adults_Exploited'],
    key_on='feature.properties.pfa16nm',
    threshold_scale=[0, 40, 80, 120, 160, 200],
    fill_color='BuPu',
    legend_name='Trafficked Humans',
)
m.save('map.html')
webbrowser.open('map.html')

Обратите внимание, что длина threshold_scale не может быть больше 6. Я вижу, что у вас было 8. Также в вашем json-файле есть только 44 данных police_force, а длина вашего набора данных - 47. Таким образом, эти 3 данных, которые не совпадают, были проигнорированы по folium. Это то, что вы получите

введите здесь описание изображения

Если у вас возникли проблемы с пониманием какой-либо части кода, оставьте комментарий ниже.

person Himanshu Poddar    schedule 11.04.2019
comment
Благодарю вас, это также сработало для меня и предоставило средства для изменения фрейма данных с помощью pandas. Я сохранил folium.Choropleth (), чтобы избежать предупреждения об устаревании. Спасибо также за примечание о длине x6 в шкале порогов, я учту это. Я также обнаружил, что 3 пропущенных значения можно игнорировать. Для этого есть веские причины, поскольку он набирал очки только за Англию и Уэльс; таким образом, полиция Шотландии и Белфаста не включена, и, наконец, британская транспортная полиция не имеет географической границы, что объясняет этот момент. Ваша работа ценится. - person Analyst; 11.04.2019