Как показать сумму данных в группах функций folium - PullRequest
0 голосов
/ 04 августа 2020

Что я хочу сделать:

Я хочу показать сумму выбранных данных на карте. Поэтому, если я проверю data2, data4 и data5, он покажет мне сумму этих кадров данных в маркерах.

Что он делает сейчас:

Теперь, когда я проверьте data2, data4 и data5, он просто покажет мне нижний поверх каждой карты, так что в этом случае он покажет мне data5.

Я хочу, чтобы сумма данных была показать на моем маркере.

Вот мой код:

#Reading data
df = pd.read_csv('C:/EzterLAPTOP/Ezter/source/Data/taulu2.csv', encoding='utf-8')
dictionary={'ä':'a','ö':'o','Ä':'A','å':'a'}
df.replace(dictionary, regex=True, inplace=True)

#Reading geojson
kunnat_geo = r'C:/EzterLAPTOP/Ezter/kuntarajat.geojson'
with open(kunnat_geo, encoding='utf-8') as kunnat_file:
    kunnat_json = json.load(kunnat_file)
    
#Cleaning data
df = df.rename(columns={'ALUE':'Kunta'})
df.drop(df.loc[df['lat']=='0.0'].index, inplace=True)
df.dropna(inplace=True)
df = df[df.lat != 0]

#Creating map
map = folium.Map(location=[65,26], zoom_start=4, tiles='openstreetmap')
#Making a function that creates a choropleth map
def choromapping(name, col1):
    choropleth = folium.Choropleth(
        geo_data=kunnat_geo,
        name=name,
        data=df,
        columns=['Kunta',col1],
        key_on='feature.properties.Name',
        fill_color='OrRd',
        fill_opacity=0.8,
        line_opacity=0.2,
        legend_name=name,
        show=False
    ).add_to(map)

    choromarker = MarkerCluster().add_to(choropleth)
#Adding markers
    for i in range(0,len(df)):
        folium.Marker(
            [df.iloc[i]['lat'],
             df.iloc[i]['lng']],
            popup=(df.iloc[i][col1],
                   df.iloc[i]['Kunta']),
            tooltip=df.iloc[i]['Kunta']
        ).add_to(choromarker)
    
#Generating maps
choromapping('data1','MIELENTERVEYDEN KUNTOUTUSKOTIEN ASIAKKAAT VUONNA 2018')
choromapping('data2','KEHITYSVAMMALAITOKSEN_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data3','VANHAINKOTIEN_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data4','KOTIHOIDON_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data5','TEHOSTETUN_HOIDON_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data6','PALVELUASUMISEN_ASIAKKAAT_YHTEENSÄ_2018')
LayerControl().add_to(map)
map

Мои данные Мое местоположение json

1 Ответ

0 голосов
/ 27 августа 2020

Изменено несколько вещей

  1. с использованием map в качестве имени переменной. map - ключевая функция в ядре Python
  2. нет необходимости в таком большом количестве отдельных обращений к фрейму данных с iloc только l oop над данными, которые вам нужны
  3. исключенных точек, где значение равно нулю. Я предполагаю, что вы действительно не хотите помещать их в слой
  4. изменено всплывающее окно , которое будет построено из f-строки вместо передачи tuple
  5. you обратите внимание, вы хотите sum. Я не видел, чтобы ваши данные можно было агрегировать df.loc[:,["lat","lng","Kunta",'MIELENTERVEYDEN KUNTOUTUSKOTIEN ASIAKKAAT VUONNA 2018']].groupby(["lat","lng","Kunta"]).sum() по-прежнему возвращает 311 строк
import folium.plugins
import pandas as pd
import json
#Reading data
df = pd.read_csv('taulu2.csv', encoding='utf-8')
dictionary={'ä':'a','ö':'o','Ä':'A','å':'a'}
df.replace(dictionary, regex=True, inplace=True)

#Reading geojson
kunnat_geo = r'kuntarajat.geojson'
with open(kunnat_geo, encoding='utf-8') as kunnat_file:
    kunnat_json = json.load(kunnat_file)

    #Cleaning data
df = df.rename(columns={'ALUE':'Kunta'})
df.drop(df.loc[df['lat']==0.0].index, inplace=True)

#Creating map
m = folium.Map(location=[65,26], zoom_start=4, tiles='openstreetmap')
#Making a function that creates a choropleth map
def choromapping(name, col1):
    choropleth = folium.Choropleth(
        geo_data=kunnat_geo,
        name=name,
        data=df,
        columns=['Kunta',col1],
        key_on='feature.properties.Name',
        fill_color='OrRd',
        fill_opacity=0.8,
        line_opacity=0.2,
        legend_name=name,
        show=False
    ).add_to(m)

    choromarker = folium.plugins.marker_cluster.MarkerCluster().add_to(choropleth)
    #Adding markers
    for r in df.loc[df[col1].ne(0),["lat","lng","Kunta",col1]].to_dict(orient="records"):
        folium.Marker(
            [r['lat'],
             r['lng']],
            popup=f"({r[col1]},{r['Kunta']})",
            tooltip=r['Kunta']
        ).add_to(choromarker)

    
#Generating maps
choromapping('data1','MIELENTERVEYDEN KUNTOUTUSKOTIEN ASIAKKAAT VUONNA 2018')
choromapping('data2','KEHITYSVAMMALAITOKSEN_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data3','VANHAINKOTIEN_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data4','KOTIHOIDON_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data5','TEHOSTETUN_HOIDON_ASIAKKAAT_YHTEENSÄ_2018')
choromapping('data6','PALVELUASUMISEN_ASIAKKAAT_YHTEENSÄ_2018')
folium.map.LayerControl().add_to(m)
m

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

...