在 Python 上创建等值统计图时出现问题

Issue with creating choropleth map on Python

我正在尝试在 python 上使用 folium 创建等值线图,并且我能够获得底图 运行,但是当我尝试添加具有邻域边界的图层时,它不会显示在 html 页面上。我想也许我必须增加线条的不透明度,但事实并非如此。

这是我的代码:

import folium
    import pandas as pd
    
    crimeData = pd.read_csv('NYC_crime.csv')
    crime2020 = crimeData[crimeData.CMPLNT_FR_DT == 2020]
    
    nycMap = folium.Map(location=[40.693943, -73.985880],zoom_start = 10)
    mapLines = 'nbhdMap.geojson.json'
    
    folium.Choropleth(geo_data = mapLines,
                      data = crime2020,
                      fill_color = 'OrRd',
                      fill_opacity=0.5,
                      line_opacity=1.0,
                      key_on = 'feature.geometry.coordinates',
                      columns = ['Lat_Lon']
                      )
    
    nycMap.save(outfile='index.html')

我在用数据填充地图时也遇到了问题。我正在努力做到这一点,以便使用 2020 年以来记录在 CSV 文件中的每项投诉来显示哪些区域接到的电话最多。但是我得到这个错误:

Traceback (most recent call last):
  File "/Users/kenia/Desktop/CSCI233/PRAC.py", line 10, in <module>
    folium.Choropleth(geo_data = mapLines,
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/folium/features.py", line 1158, in __init__
    color_data = data.set_index(columns[0])[columns[1]].to_dict()
IndexError: list index out of range

这是社区边界:https://data.beta.nyc/dataset/pediacities-nyc-neighborhoods/resource/35dd04fb-81b3-479b-a074-a27a37888ce7

这是我的数据:https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243


[编辑] 所以我用一个更简单的数据集尝试了@r-beginners 的建议:https://data.cityofnewyork.us/Health/Restaurants-rolled-up-/59dk-tdhz

import pandas as pd
import folium 

data = pd.read_csv('nycrestaurants.csv')
data = pd.concat([data, str(data['ZIPCODE']).split(',')], axis=1)
data.columns = ['CAMIS', 'DBA', 'BORO', 'BUILDING', 'STREET', 'ZIPCODE']
resData = data.groupby(['ZIPCODE'])['DBA'].sum().reset_index()


nycMap = folium.Map(location=[40.693943, -73.985880],zoom_start = 10)
mapLines = 'zipMap.geojson.json'

folium.Choropleth(geo_data = mapLines,
                  data = resData,
                  key_on = 'feature.properties.postalCode',
                  columns = ['ZIPCODE', 'DBA'],
                  fill_color = 'OrRd',
                  fill_opacity=0.5,
                  line_opacity=1.0
                  ).add_to(nycMap)

nycMap.save(outfile='index.html')

但现在我收到此错误消息:

Traceback (most recent call last):
  File "/Users/kenia/Desktop/CSCI233/PRAC.py", line 5, in <module>
    data = pd.concat([data, str(data['ZIPCODE']).split(',')], axis=1)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 274, in concat
    op = _Concatenator(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 359, in __init__
    raise TypeError(msg)
TypeError: cannot concatenate object of type '<class 'list'>'; only Series and DataFrame objs are valid

由于在另一个问题中向您展示了投诉数据,因此您从 here 获得了相应邮政编码范围的 GEOJSON 数据。至于这个过程,我们已经按照邮政编码的数量制表,并与出现的次数挂钩。

import pandas as pd
import numpy as np

df = pd.read_csv('./data/311_Noise_Complaints.csv', sep=',')
df['Incident Zip'].fillna(0, inplace=True)
df['Incident Zip'] = df['Incident Zip'].astype(int)
df_zip = df['Incident Zip'].value_counts().to_frame().reset_index()
df_zip.columns = ['postal_code', 'counts']
df_zip['postal_code'] = df_zip['postal_code'].astype(str)

import folium

nycMap = folium.Map(location=[40.693943, -73.985880], zoom_start=10)
mapLines = './data/nyc_zip_code_tabulation_areas_polygons.geojson'

choropleth = folium.Choropleth(geo_data = mapLines,
                  data = df_zip,
                  columns = ['postal_code', 'counts'],
                  key_on = 'feature.properties.postalcode',
                  fill_color = 'BuPu',
                  fill_opacity=0.5,
                  line_opacity=1.0
                  ).add_to(nycMap)

choropleth.geojson.add_child(
    folium.features.GeoJsonTooltip(['po_name'], labels=False)
)

nycMap.save(outfile='index.html')
nycMap