python根据json数据画疫情分布地图的详细代码

接下来我将为您讲解“python根据json数据画疫情分布地图的详细代码”的完整攻略。

  1. 准备工作

首先,需要确保你安装了以下三个库:

  • folium: 用于生成地图
  • pandas: 用于数据处理
  • requests: 用于获取网络数据

代码如下:

!pip install folium pandas requests
  1. 获取数据

获取数据是画疫情分布地图的第一步。可以从以下两个渠道获取数据:

下面是从API获取数据的示例代码:

import requests
import pandas as pd

url = 'https://route.showapi.com/213-1'
app_id = '你的app_id'
app_secret = '你的app_secret'

params = {'showapi_appid': app_id,
          'showapi_sign': app_secret,
          'province': '',  # 省份
          'city': '',  # 城市
          'area': '',  # 区域
          }

response = requests.get(url, params=params)
json_data = response.json()['showapi_res_body']['list']
df = pd.DataFrame(json_data)
  1. 数据预处理

获取到数据后,需要对数据进行处理,以便在地图上进行展示。下面是对数据的预处理代码示例:

# 1. 将数据类型转换为整型
df[['confirm', 'nowConfirm', 'heal', 'dead']] = df[['confirm', 'nowConfirm', 'heal', 'dead']].astype(int)

# 2. 取出城市名和经纬度
df = df[['city', 'confirm', 'nowConfirm', 'heal', 'dead', 'lat', 'lng']]

# 3. 筛选出有确诊病例的城市
df = df[df['confirm'] > 0]

# 4. 重命名列名
df = df.rename(columns={'confirm': 'Confirmed', 'nowConfirm': 'Active', 'heal': 'Recovered', 'dead': 'Deaths'})
  1. 画地图

在数据处理完成后,就可以开始画地图了。下面是一些示例代码:

# 1. 创建地图
import folium

map = folium.Map(location=[35, 100],
                 zoom_start=4,
                 control_scale=True,
                 tiles='OpenStreetMap')

# 2. 设置颜色和数据
import branca.colormap as cm

color_scale = cm.LinearColormap(colors=['green', 'yellow', 'red'], vmin=0, vmax=df['Confirmed'].max())
color_scale.caption = 'COVID-19 Confirmed Cases'

tooltip_confirmed = folium.features.GeoJsonTooltip(fields=['Confirmed'],
                                                   aliases=['Confirmed cases'],
                                                   labels=True,
                                                   sticky=False)

tooltip_deaths = folium.features.GeoJsonTooltip(fields=['Deaths'],
                                                aliases=['Deaths'],
                                                labels=True,
                                                sticky=False)


# 3. 添加地理数据
def style_function(feature):
    city_name = feature['properties']['name']
    try:
        df_city = df[df['city'] == city_name]
        return {'fillColor': color_scale(df_city['Confirmed'].values[0]),
                'fillOpacity': 0.7,
                'color': 'black',
                'weight': 1}
    except IndexError:
        return {'fillColor': 'lightgrey',
                'fillOpacity': 0.7,
                'color': 'black',
                'weight': 1}


geojson_data = 'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data'
country_data = f'{geojson_data}/world-countries.json'
states_data = f'{geojson_data}/us-states.json'
cities_data = f'{geojson_data}/US_Unemployment_Oct2012.csv'

# 根据经纬度和人口添加圆
for city in df.index:
    folium.CircleMarker(location=[df.loc[city, 'lat'], df.loc[city, 'lng']],
                        radius=df.loc[city, 'Confirmed'] / 1000,
                        popup=f"{df.loc[city, 'city']}: {df.loc[city, 'Confirmed']} cases",
                        tooltip=f"{df.loc[city, 'city']}: {df.loc[city, 'Confirmed']} cases",
                        color=color_scale(df.loc[city, 'Confirmed']),
                        fill=True,
                        fill_color=color_scale(df.loc[city, 'Confirmed']),
                        fill_opacity=0.5
                        ).add_to(map)

# 4. 显示地图
color_scale.add_to(map)
map.save(outfile='covid19_map.html')

这些代码创建了全世界的地图,并在其中添加了圆点表示城市的状况。当你将地图另存为HTML文件时,就可以在网页上浏览地图了。注意,为了使数据尽可能准确,请选择采用可靠的数据源和合理的数据处理方式。

另一种画地图的方式是使用 Folium 库中的 GeoJSON 方法,并使用 folium.Choropleth方法。可以参考下面这个示范代码:

import json
from urllib import request
import pandas as pd
import folium

url = 'https://www.echarts-js.com/examples/data/asset/data/geometryCouties.geojson'
response = request.urlopen(url)
counties = json.loads(response.read())

county_geo = f"{url}/geometryCouties.geojson"

covid19_data_url = 'https://raw.githubusercontent.com/BlankerL/DXY-COVID-19-Data/master/json/DXYArea.json'
covid19_data = pd.read_json(covid19_data_url)

df = covid19_data.groupby(['provinceEnglishName', 'cityEnglishName'], as_index=False)[['confirmedCount', 'deadCount', 'curedCount', 'suspectedCount']].max()

# convert df to dictionary for using in folium.Choropleth
county_dict = df.set_index('cityEnglishName')['confirmedCount'].to_dict()

m = folium.Map(location=[31.22, 121.41], zoom_start=5)

folium.Choropleth(
    geo_data=county_geo,
    name='choropleth',
    data=df,
    columns=['cityEnglishName', 'confirmedCount'],
    key_on='feature.properties.name',
    fill_color='YlGn',
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name='Confirmed Cases'
).add_to(m)

folium.LayerControl().add_to(m)
m.save('covid19_county.html')

这个例子展示了使用 Folium 生成地理图形,需要包含以下三个步骤:

  1. 从 json 下载地图的几何图形文件。使用 urlopen 和 json.loads 函数
url = 'https://www.echarts-js.com/examples/data/asset/data/geometryCouties.geojson'
response = request.urlopen(url)
counties = json.loads(response.read())
  1. 数据体数组织,通常最好使用 Pandas 。
covid19_data_url = 'https://raw.githubusercontent.com/BlankerL/DXY-COVID-19-Data/master/json/DXYArea.json'
covid19_data = pd.read_json(covid19_data_url)

df = covid19_data.groupby(['provinceEnglishName', 'cityEnglishName'], as_index=False)[['confirmedCount', 'deadCount', 'curedCount', 'suspectedCount']].max()
  1. 生成 geojson 类型和数据以画图。
folium.Choropleth(
    geo_data=county_geo,
    name='choropleth',
    data=df,
    columns=['cityEnglishName', 'confirmedCount'],
    key_on='feature.properties.name',
    fill_color='YlGn',
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name='Confirmed Cases'
).add_to(m)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python根据json数据画疫情分布地图的详细代码 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python内置数据类型中的集合详解

    以下是“Python内置数据类型中的集合详解”的完整攻略。 1. 集合Set的概述 集合Set是Python内置的一种数据类型,它是由一组无序且不重的元素组成。集合Set的元素必须是可哈希的,因此集合Set中不能包含可变的元素,如列表字典等。 2. 集合Set的创建 我们可以使用set()函数或者{}来创建一个集合Set。例如: set1([1, 2, 3]…

    python 2023年5月13日
    00
  • Python学习之用pygal画世界地图实例

    下面我将详细讲解如何使用pygal库画世界地图的实例攻略。这个过程主要分为以下几个步骤: 安装pygal库:在命令行中输入pip install pygal即可安装。 导入pygal库和需要使用的数据:pygal库提供多种地图类型,这里我们使用pygal.maps.world.World来实现世界地图。我们还需要一些数据来给地图填色,以示不同的国家或地区之间…

    python 2023年5月19日
    00
  • VSCode配置python环境及中文问题解决方法

    我来为您讲解如何在VSCode中配置Python环境及解决中文问题的方法。 VSCode配置Python环境 确认Python已安装并设置环境变量 在VSCode中使用Python需要先确认Python已经被正确安装,并设置了环境变量。可以在命令行中输入以下命令来确认是否已经安装: python –version 如果已经成功安装Python,会显示出Py…

    python 2023年5月20日
    00
  • python中数据爬虫requests库使用方法详解

    当然,下面是对《python中数据爬虫requests库使用方法详解》的完整攻略: 1. requests库简介 requests库是Python的一个常用库,用来向网站发送HTTP请求。它的优点是简单易用,功能强大,支持HTTP/1.0和HTTP/1.1。requests库还支持HTTP代理,Cookie,HTTPS等功能。 2. requests库使用方…

    python 2023年5月14日
    00
  • mysql事件之修改事件(ALTER EVENT)、禁用事件(DISABLE)、启用事件(ENABLE)、事件重命名及数据库事件迁移操作详解

    MySQL的事件是一种特殊类型的定期操作,可用于自动执行任务。本文将详细讲解MySQL事件的修改、禁用、启用、重命名以及数据库事件迁移等操作技巧,希望对相关人员有所帮助。 修改事件(ALTER EVENT) 要修改已定义的MySQL事件,可以使用ALTER EVENT语句。可以使用该语句来更改事件的名称、安排方式、计划等。以下是一个修改事件的示例: ALTE…

    python 2023年6月13日
    00
  • 【Python】Python的urllib模块、urllib2模块批量进行网页下载文件

    Python的urllib模块、urllib2模块批量进行网页下载文件完整攻略 一、背景介绍 Python的urllib模块、urllib2模块是Python标准库中用来进行URL处理的模块,可以使用这两个模块进行网页的下载和解析。本文将详细介绍如何批量使用Python的urllib模块、urllib2模块进行网页下载文件的操作。 二、操作步骤 2.1 使用…

    python 2023年6月3日
    00
  • Python自动化办公之Excel数据的写入

    Python自动化办公之Excel数据的写入 Excel数据写入是自动化办公中常见的一种操作,Python提供了多种方式来实现Excel数据写入。下面是Python自动化办公之Excel数据的写入的完整攻略。 Excel数据写入的准备工作 要使用Python实现Excel数据写入,需要先安装openpyxl和pandas两个库。openpyxl库提供了操作E…

    python 2023年6月5日
    00
  • python列表:开始、结束、步长值实例

    在Python中,列表是一种非常常用的数据类型,可以存储多个元素。在访问列表元素时,我们可以使用切片(slice)来访问列表中的一部分元素。切片的语法如下: lst[start:end:step] 其中,start表示切片的起始位置,end表示切片的结束位置(不包括该位置的元素),step表示切片的步长(默认为1)。 下面是一个简单的例: # 示例1:使用切…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部