Folium choropleth key_on - мне не хватает чего-то очевидного - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь сделать набор из установленной мощности PV по почтовому индексу. У меня есть данные установки в серии pandas (tas_kW_series), индекс - это почтовый индекс как int. Я скачал файлы форм ESRI для Австралии, преобразовал их в GeoJson (используя онлайн-инструмент). Визуально формат правильный. Мне пришлось разделить Geojson на состояния, чтобы уменьшить размер, отдельные jsons работают со слоем geojson, но не с хороплетом

Я могу заставить фигуры отображаться на слое Geojson, но хороплет не работает, я думаю, что по параметру key_on я просто не могу понять, что с ним не так - он отображается на правильную часть геойсон и входные данные представляют собой серию, поэтому не нужно указывать имена столбцов.

Мне пришлось добавить новое поле 'properties' ('pc_int') с почтовым индексом, преобразованным в 'int', чтобы соответствовать индексу серии. Это в файле JSON

Данные имели больше почтовых индексов, чем геойсон, я удалил лишние

Я проверял каждый способ, которым я знаю, что структура geojson соответствует 'feature.properties.pc_int', который я использую в вызывающей стороне.

Я прошелся по исходному коду и уверен, что он правильный

Postcode Data (following tas_kW_series.to_dict())
{7000: 2027.2620000000002,
 7001: 94.36,
 7002: 13.5,
 7004: 910.943,
 7005: 1644.2499999999998,
 7006: 25.1,
 7007: 612.258,
 7008: 1525.3100000000004,
 7009: 1478.017,
 7010: 1876.863,
 7011: 1770.325,
 7012: 205.06,
 7015: 1557.3830000000003,
 7016: 233.579,...

GeoJson (с некоторым редактированием для удаления деталей многоугольника) TAS_data = json.load (TAS.json)

TAS_data['features'][0] = 

{'type': 'Feature',
 'geometry': {'type': 'Polygon',
  'coordinates': [[[147.3199543290001, -42.85551239399996],
    [147.32003433700004, -42.85554737699994],
    [147.32014234000007, -42.85558237899994],
    [147.3202043540001, -42.855599380999934],...
...
    [147.31961900400006, -42.856079991999934],
    [147.31967809700006, -42.85600952499993],
    [147.3199543290001, -42.85551239399996]]]},
 'properties': {'POA_CODE16': '7000',
  'POA_NAME16': '7000',
  'AREASQKM16': 10.8544,
  'pc_int': 7000}}

Звонок хороплета -

folium.Choropleth(geo_data = 'TAS.json', 
                  data = tas_kW_series,
                  name = 'Tasmania STC Installations - Total Capacity (kW)',
                  key_on = 'feature.properties.pc_int',
                  bins = 10,
                  fill_opacity = 0.7,
                  line_opacity = 0.2,
                  legend_name = 'Installed Capacity (kW)').add_to(m)

отслеживающий

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-46-7bcc2e3b37d6> in <module>
      7                   fill_opacity = 0.7,
      8                   line_opacity = 0.2,
----> 9                   legend_name = 'Installed Capacity (kW)').add_to(m)

~\AppData\Local\conda\conda\envs\mlbook\lib\site-packages\folium\features.py in __init__(self, geo_data, data, columns, key_on, bins, fill_color, nan_fill_color, fill_opacity, nan_fill_opacity, line_color, line_weight, line_opacity, name, legend_name, overlay, control, show, topojson, smooth_factor, highlight, **kwargs)
    932         self._name = 'Choropleth'
    933 
--> 934         if data is not None and not color_brewer(fill_color):
    935             raise ValueError('Please pass a valid color brewer code to '
    936                              'fill_local. See docstring for valid codes.')

~\AppData\Local\conda\conda\envs\mlbook\lib\site-packages\branca\utilities.py in color_brewer(color_code, n)
    147 
    148     if base_code not in core_schemes:
--> 149         raise ValueError(base_code + ' is not a valid ColorBrewer code')
    150 
    151     try:

ValueError: blue is not a valid ColorBrewer code

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

1 Ответ

0 голосов
/ 03 мая 2019

См. Карта хороплета с использованием фолиума и панд

Фрейм данных и геойсон должны включать только данные key_on. Это также помогло запустить преобразованный geoJSON через фрейм данных геопанд, добавить данные для визуализации и разбить на геоданные и информационные данные, включая только значение, которое будет использоваться в качестве ключа в геоджоне.

tl; dr, отлично работал после удаления лишних полей из словаря свойств.

...