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:确定目标网站 首先,我们需要确定目标网站,以便爬取今日新闻。我们可以使用Python的requests库来获取网页内容,使用BeautifulSoup库来解析HTML文档。 步骤2:分析网页结构 接下来,我们需要分析目标网站的网页结构,以便确定…

    python 2023年5月15日
    00
  • python 包 requests 实现请求操作

    以下是关于Python包requests实现请求操作的攻略: Python包requests实现请求操作 requests是一个流行的HTTP库,用于向Web服务器发送HTTP请求和接响应。以下是Python包requests实现请求操作的攻略: 发送GET请求 以下是使用requests包发送GET请求的示例: import requests url = …

    python 2023年5月14日
    00
  • python用Configobj模块读取配置文件

    ConfigObj是Python中一种解决配置文件读写的模块。和ini文件相比,ConfigObj更加灵活,可以支持嵌套的Section。下面是使用Configobj模块读取配置文件的步骤: 安装Configobj模块 可以使用pip进行安装,命令如下: pip install configobj 编写配置文件 可以使用文本编辑器编写配置文件。示例配置文件如…

    python 2023年6月3日
    00
  • Pandas日期处理之生成工作日与节假日

    我们来详细讲解一下“Pandas日期处理之生成工作日与节假日”的完整攻略。 一、背景介绍 在数据处理中,日期处理是一个非常重要的环节。Pandas是Python中用于数据处理的一个重要库,它提供了丰富的日期处理相关的功能。本文将介绍如何使用Pandas生成指定日期范围内的工作日与节假日。 二、生成指定日期范围内的工作日 要生成指定日期范围内的工作日,我们可以…

    python 2023年6月3日
    00
  • Python实现统计单词出现的个数

    以下是Python实现统计单词出现个数的完整攻略。 步骤一:读取文本文件 首先,我们需要读取文本文件,可以使用Python自带的open函数来打开文件,并通过read()方法将文件中的内容读取出来。通常情况下,我们可以将读取到的文本内容存储为一个字符串类型的变量,例如: with open(‘example.txt’, ‘r’) as f: text = f…

    python 2023年6月3日
    00
  • python 实现两个线程交替执行

    要实现两个线程交替执行,可以通过线程同步技术,如锁、条件变量来实现。下面我详细讲解一下完整攻略: 创建两个线程对象 首先,我们需要创建两个线程对象,该线程对象实例化Thread类即可。例如: import threading thread1 = threading.Thread(target=func1) thread2 = threading.Thread…

    python 2023年5月19日
    00
  • python通过urllib2爬网页上种子下载示例

    下面就详细讲解一下“Python通过urllib2爬网页上种子下载示例”的完整攻略。 准备工作 在使用Python爬虫之前需要先安装urllib2模块,可以在Python交互式命令行输入以下指令安装: pip install urllib2 爬取网页 首先,需要使用Python的urllib2库读取目标网页的内容。可以使用以下代码: import urlli…

    python 2023年6月3日
    00
  • python获取指定日期范围内的每一天,每个月,每季度的方法

    要获取指定日期范围内的每一天,每个月,每季度的方法,需要使用Python标准库中的datetime和dateutil模块。以下是详细的攻略步骤: 步骤一:导入模块 from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta 在这里,date…

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