用python做交互式地图

数据储存在:https://raw.githubusercontent.com/HEPINGSUN/Maine-Data/main/Maine%20data.csv%EF%BC%8C 这个csv文件中每一列分别为:“OBJECTID”,“Geographic Identifier - FIPS Code”,“Name“,“State“,“County“,“Total households“,“Percent of Households that Have No Computer, Smartphone, or Tablet“,“Percent of Households with No Internet Access”,“Ookla Median Download Speed (Mbps)”,“Ookla Median Upload Speed (Mbps)”以及“Population 2019 (FCC Estimate)”。我的需求是提取“Geographic Identifier - FIPS Code”中以23开头也就是Maine州的数据。计算每一个county所占State的人口百分比记录为“Percent of population”。然后按照0.3“Percent of population+0.3 Percent of Households that Have No Computer, Smartphone, or Tablet+0.3.* Percent of Households with No Internet Access-0.05* Ookla Median Download Speed (Mbps)-0.05* Ookla Median Upload Speed (Mbps)这个公式得到一个值名为INFA,这个值应该对应的是每一个county,使用python实现,并在网站中呈现出一个交互式的地图。

这个问题可以通过gat解决,试试怎么解决

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    答案:

    1. 首先,我们需要读取CSV文件并将其放入Pandas DataFrame中。我们可以使用pandas模块中的read_csv()来完成这个步骤:
    import pandas as pd
    
    url = 'https://raw.githubusercontent.com/HEPINGSUN/Maine-Data/main/Maine%20data.csv'
    df = pd.read_csv(url)
    
    1. 接下来,我们需要保留以23开头的FIPS代码,这代表着在Maine州的区域。我们可以使用Pandas DataFrame对象中str方法来完成这个步骤:
    fips = df[df['Geographic Identifier - FIPS Code'].str.startswith('23')]
    
    1. 接下来,我们需要计算每个州县所占的总人口数,这可以通过将数据按"County"列进行分组,并应用sum()函数来实现:
    total_population = fips.groupby('County')['Population 2019 (FCC Estimate)'].sum().reset_index(name='Total Population')
    
    1. 然后,我们需要计算每个县的INFA指数。这可以通过按"County"列进行分组,并应用计算INFA公式的lambda函数来实现。然后,我们可以将INFA值添加到total_population数据框中。
    total_population['INFA'] = (0.3 * fips.groupby('County')['Percent of Households that Have No Computer, Smartphone, or Tablet'].mean()) + \
                                (0.3 * fips.groupby('County')['Percent of Households with No Internet Access'].mean()) - \
                                (0.05 * fips.groupby('County')['Ookla Median Download Speed (Mbps)'].mean()) - \
                                (0.05 * fips.groupby('County')['Ookla Median Upload Speed (Mbps)'].mean())
    
    1. 最后,我们需要在交互式地图上显示结果。爆炸可以使用Folium库完成。 首先,安装folium库:
    !pip install folium
    
    1. 然后,使用以下代码创建一个基本地图:
    import folium
    
    m = folium.Map(location=[45.2538, -69.4455], zoom_start=7)
    

    这将创建一个地图,并将地图的初始位置设置为缩放级别为7的Maine州中心。

    1. 接下来,我们需要将每个县的名称、INFA指数和总人口数添加到地图上。我们可以使用以下代码完成这个步骤:
    for _, row in total_population.iterrows():
        name = row['County'] + ', Maine'
        infavalue = round(row['INFA'], 2)
        populationvalue = int(row['Total Population'])
    
        folium.Marker(
            location=[fips.loc[fips['County'] == row['County']]['Latitude'].iloc[0],
                      fips.loc[fips['County'] == row['County']]['Longitude'].iloc[0]],
            popup=f'<strong>{name}</strong><br>INFA Value: {infavalue}<br>Total Population: {populationvalue}',
            tooltip=name,
            icon=folium.Icon(color='blue')
        ).add_to(m)
    
    1. 最后,我们需要在Anaconda Prompt或终端命令行中运行以下命令,打开交互式地图:
    m
    

    完整代码如下:


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^