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实现文本文件转Excel

    下面我逐步介绍“基于Python实现文本文件转Excel”的完整实例教程: 需求分析 我们需要将一个包含文本数据的文件转换为Excel格式,以便于更加直观和方便的查看、处理和分析数据。整个实例分为以下几个步骤: 读取文本文件 将文本数据解析成二维数组 创建Excel文件并写入数据 保存Excel文件并关闭 实现过程 1. 读取文本文件 我们可以使用Pytho…

    python 2023年5月13日
    00
  • 使用Python轻松实现绘制词云图项目(附详细源码)

    首先,我们需要明确一下什么是词云图。词云图是一种经常出现在文章中的可视化方式。它可以将给定的文本通过调整单词的字体大小和颜色等属性,形象地反映出文本中一些关键词的出现频率和重要性。比如,如果我们要通过一篇文章来了解它所讨论的主题是什么,词云图可以作为一个非常直观而有趣的帮助我们完成这个任务的工具。 那么,如何用Python来制作一个词云图呢? 一、安装所需的…

    python 2023年5月19日
    00
  • 高效测试用例组织算法pairwise之Python实现方法

    高效测试用例组织算法pairwise之Python实现方法 什么是pairwise算法? pairwise算法是一种测试用例组织算法,它可以帮助我们在测试中尽可能地减少测试用例的数量,同时证测试覆盖率。它的基本思想是:对于每个测试用例,选择一组不同的参数值进行测试,以尽可能地覆盖所有的参数组合。 实现pairwise法的方法 Python实现pairwise…

    python 2023年5月14日
    00
  • 使用Python中的NumPy对Hermite数列进行积分,并在积分常数加入前将结果乘以一个标量

    首先,我们需要了解什么是Hermite数列。Hermite数列是一个特殊的数列,与物理学中的量子力学运动方程、量子谐振子等问题有关。在数学上,它是以赫尔米特(Hermite)的名字命名的。数列的通项公式为: $$H_n(x)=(-1)^ne^{x^2}\frac{d^n}{dx^n} e^{-x^2}$$ 其中, $n$ 为非负整数, $x$ 为实数。接下来…

    python-answer 2023年3月25日
    00
  • 基于Python实现自动抠图小程序

    基于Python实现自动抠图小程序攻略 介绍 自动抠图是一项目前比较热门的技术,在很多领域都有广泛的应用,比如图像处理、视频剪辑、人工智能等。本文将介绍一种使用Python实现自动抠图的小程序。 技术实现 可选工具 PyTorch:一个针对深度学习任务的开源机器学习库。 OpenCV:一个跨平台的计算机视觉库。 Pillow:Python平台下的开源图像处理…

    python 2023年5月19日
    00
  • python3之模块psutil系统性能信息使用

    Python3之模块psutil系统性能信息使用 介绍 psutil是一个跨平台的Python库,可以实现系统进程和系统监控的信息获取。 安装 推荐使用pip进行安装,命令如下: pip install psutil 常用功能 查看CPU使用率 import psutil # 获取CPU使用率 percent = psutil.cpu_percent(int…

    python 2023年5月30日
    00
  • GTK treeview原理及使用方法解析

    GTK TreeView原理与使用方法解析 什么是GTK TreeView? GTK TreeView是GTK+库中非常重要的一个控件,它是一种树形结构的控件,通常用于显示具有层次结构的数据。例如,在文件管理器中,我们可以将文件夹按照树状形式列表显示,其中每一个文件夹都可以展开或者折叠,里面的文件也可以在不同的目录下进行移动或者复制。GTK TreeView…

    python 2023年6月13日
    00
  • 如何使用Python在MySQL中使用字符集?

    在MySQL中,字符集用于指定表中的文本数据的编码方式。在Python中,可以使用MySQL连接来执行字符集查询和设置。以下是在Python中使用字符集的完整攻略,包括字符集的基本语法、使用字符集的示例以及如何在Python中使用字符集。 字符集的基本语法 在MySQL中,可以使用CHAR SET关键字来指定表中的字符集。以下是创建表时指定字符集的基本语法:…

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