Карта фолио после кластеризации не может отображать цвета для кластеров - PullRequest
0 голосов
/ 03 апреля 2019

Я применил кластеризацию Kmeans для своих данных и попытался сопоставить кластеры с фолием

Код для карты:


    Toronto_map_clusters = folium.Map(location=[latitude, longitude], zoom_start=11)

    x = np.arange(kclusters)
    ys = [i + x + (i*x)**2 for i in range(kclusters)]
    colors_array = cm.rainbow(np.linspace(0, 1, len(ys)))
    rainbow = [colors.rgb2hex(i) for i in colors_array]

    markers_colors = []
    for lat, lon, poi, cluster in zip(Toronto_merged['Latitude'], Toronto_merged['Longitude'], Toronto_merged['Neighborhood'], Toronto_merged['Cluster Labels']):
        label = folium.Popup(str(poi) + ' Cluster ' + str(cluster), parse_html=True)
        folium.CircleMarker(
            [lat, lon],
            radius=5,
            popup=label,
            color=rainbow[cluster-1],
            fill=True,
            fill_color=rainbow[cluster-1],
            fill_opacity=0.7).add_to(Toronto_map_clusters)
    Toronto_map_clusters

Я получаю ошибку ниже:

TypeError                                 Traceback (most recent call last)
<ipython-input-81-5c051a345a95> in <module>()
     16         radius=5,
     17         popup=label,
***18         color=rainbow[cluster-1]***
     19         fill=True,
    *** 20         fill_color=rainbow[cluster-1]***

TypeError: list indices must be integers or slices, not float

Карта отображается без линий 18 и 20, но без разделения цветов кластера (так как значения цвета отсутствуют).

Спасибо за любые предложения!

1 Ответ

0 голосов
/ 18 апреля 2019

Ошибка говорит о том, что вы используете значения с плавающей запятой, где ожидаются целые числа или срезы. Я предлагаю вам взглянуть на столбец меток кластера вашего информационного кадра Toronto_merged и преобразовать его в int. вам может потребоваться проверить значения NaN, поскольку ваша итерационная структура не обеспечивает NaN, следовательно, вы можете удалить значения NaN из Torfto_merge dataframe (используйте df.isnull () для проверки нулевых значений)

`Toronto_merged['Cluster Labels] =Toronto_merged['Cluster Labels].astype(int)`
...