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

yizhihongxing

接下来我将为您讲解“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探索之实现一个简单的HTTP服务器

    Python探索之实现一个简单的HTTP服务器 简介 在web开发中,服务器是一个非常关键的组件,它可以解析来自浏览器的HTTP请求,并返回相应的HTML文件。Python作为一门强大的编程语言,具有内置的Web服务器组件,不需要任何第三方库即可实现基本的HTTP服务器功能。 环境准备 使用Python内置的HTTPServer模块,不需要额外的库依赖。 实…

    python 2023年5月19日
    00
  • Python HTMLTestRunner如何下载生成报告

    PythonHTMLTestRunner 是一个 Python 的测试框架,可以生成 HTML 格式的测试报告。以下是 PythonHTMLTestRunner 如何下载生成报告的完整攻略。 1. 安装 PythonHTMLTestRunner 首先,我们需要安装 PythonHTMLTestRunner 库,可以使用以下命令来安装: pip install…

    python 2023年5月15日
    00
  • Python实现多脚本处理定时运行

    Python实现多脚本处理定时运行攻略 在Python中,我们可以使用cronjob或者apscheduler等库实现多脚本定时运行功能,以下是详细步骤。 步骤一:安装定时任务库 我们可以使用pip命令来安装cronjob或apscheduler库。 pip install cronjob 或者 pip install apscheduler 步骤二:编写定…

    python 2023年5月19日
    00
  • python学习-学生信息管理系统并打包exe

    在B站自学Python站主:Python_子木授课:杨淑娟平台: 马士兵教育python: 3.9.9 python打包exe文件 #安装PyInstaller pip install PyInstaller #-F打包exe文件,stusystem\stusystem.py到py的路径,可以是绝对路径,可以是相对路径 pyinstaller -F stus…

    python 2023年4月22日
    00
  • python实现简单爬虫功能的示例

    下面是关于“python实现简单爬虫功能的示例”的完整攻略。 简介 爬虫是一种自动采集互联网数据的技术,它可以模拟人的操作,在互联网上寻找相关信息并进行整理分析。而Python作为一种快速、简单、易上手的编程语言,为爬虫功能提供了很多支持。在这里,我们将介绍如何使用Python实现简单的爬虫功能。 1. 准备工作 在开始之前,我们需要安装两个Python库:…

    python 2023年5月14日
    00
  • python实现定时器的5种方法

    下面就详细讲解“Python实现定时器的5种方法”的完整攻略。 简介 定时器是指在一定的时间间隔内执行某些操作的一种机制,常用于定时任务、轮询和延时。Python提供了多种实现定时器的方式,本文将介绍其中的5种方法。 1. 使用time.sleep()方法 使用time.sleep()方法可以实现定时器的功能。该方法可以让程序睡眠指定的时间,从而实现定时操作…

    python 2023年5月19日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘1.8’”怎么处理?

    当使用pip安装Python包时,可能会遇到“OSError: [Errno 13] Permission denied”错误。这个错误通常是由以下原因之一引起的: 没有足够的权限:如果没有足够的权限,则可能会出现此错误。在这种情况下,需要使用管理员权限运行pip。 文件或目录权限不正确:如果文件或目录权限不正确,则可能会出现此错误。在这种情况下,需要更改文…

    python 2023年5月4日
    00
  • Python实战之天气预报系统的实现

    Python实战之天气预报系统的实现 天气预报系统是一个非常实用的应用程序,可以帮助我们了解未来几天的天气情况。本攻略将介绍如何使用Python编写一个简单的天气预报系统,包括如何获取天气数据、如何进行数据解析和展示等。 获取天气数据 我们可以使用Python的requests库来获取天气数据。以下是一个示例代码,用于获取北京市的天气数据: import r…

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