Я пытаюсь сделать набор из установленной мощности 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. фактический вывод выше.