Python实现疫情数据爬虫与可视化分析

一只小鹿
一只小鹿
发布时间:2026-10-16| 6人浏览过
原创

本文详细介绍如何使用Python进行疫情数据爬取与可视化。通过requests获取腾讯接口数据,利用pandas清洗保存,最后使用pyecharts绘制死亡率、治愈率及各地区确诊分布图表,完整展示从数据获取到可视化展示的全流程。

本文涉及的核心知识点包括爬虫的基本工作流程、JSON数据格式处理、网络请求库requests的使用、数据处理与存储库pandas的应用,以及可视化展示库pyecharts的操作。

  1. 爬虫的基本流程通常包含几个关键步骤:首先确定目标数据源,接着构建并发送网络请求,随后获取服务器返回的数据,对数据进行解析提取,将有效数据保存至本地或数据库,最后对数据进行可视化展示以直观呈现结果。
  2. JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在爬虫开发中,大多数API接口返回的数据格式均为JSON,因此掌握JSON数据的解析与处理是爬虫开发的基础技能。
  3. 在Python爬虫开发中,requests库是发送HTTP网络请求最常用的第三方库。它允许用户轻松发送HTTP/1.1请求,无需手动添加查询字串或POST数据。通过简单的API调用,即可实现GET、POST等常见请求方式,是获取网页数据的首选工具。
  4. pandas是Python中用于数据处理和分析的强大库,特别擅长处理表格型数据。在爬虫项目中,pandas常用于数据的清洗、转换、聚合以及保存。例如,将爬取的JSON数据转换为DataFrame格式,并方便地导出为CSV或Excel文件,便于后续分析。
  5. pyecharts是一个基于Echarts的Python可视化库,支持多种图表类型如柱状图、折线图、饼图、地图等。它能够生成高质量的交互式图表,非常适合用于数据展示和分析结果的可视化,帮助用户更直观地理解数据背后的趋势和规律。

选择合适的开发环境对于提高开发效率至关重要。本文推荐的开发环境配置旨在提供一个稳定且功能丰富的编程平台,确保代码编写的顺畅以及数据分析的准确性。

Python 3.8是一个相对稳定且广泛使用的解释器版本。推荐使用Anaconda发行版,它预装了众多科学计算库,并集成Jupyter Notebook作为交互式编码环境。Jupyter Notebook支持代码、文本、公式和图表的混合编写,非常适合数据分析和原型开发。

PyCharm是一款专业的Python代码编辑器,由JetBrains开发。它提供了代码补全、调试、版本控制集成等功能,并支持按年份和月份划分版本,满足不同开发阶段的需求。对于大型项目或专业开发,PyCharm能显著提升编码效率和代码质量。

以下是实现疫情数据爬取与可视化的完整代码示例,涵盖了从模块导入、数据获取、解析保存到可视化展示的全过程。

在编写爬虫代码之前,首先需要导入所需的Python模块。这些模块包括用于网络请求的requests、处理JSON数据的json、格式化输出的pprint、数据处理与分析的pandas,以及用于可视化的pyecharts相关组件。


import requests      # 发送网络请求模块
import json
import pprint        # 格式化输出模块
import pandas as pd  # 数据分析当中一个非常重要的模块

在开始爬取之前,必须对目标网站进行分析,确定数据获取的方式和接口。这包括识别目标URL、分析请求参数以及理解返回数据的结构,从而制定有效的爬取策略。

首先,需要明确今天要爬取的具体目标数据。在本例中,目标是获取最新的疫情统计数据,包括确诊病例、死亡人数、治愈人数等关键指标。

目标数据来源于腾讯新闻的疫情专题页面,其具体访问地址为:https://news.qq.com/zt2020/page/feiyan.htm#/。该页面提供了实时的疫情数据展示,是获取相关数据的重要来源。

通过浏览器开发者工具或网络抓包,可以找到实际返回数据的API接口URL。这个URL通常包含特定的参数,用于请求特定格式的数据,如JSON格式。找到正确的URL是成功获取数据的关键步骤。

使用requests库向找到的API URL发送GET请求。在发送请求时,可能需要设置特定的headers或处理SSL验证(如设置verify=False以跳过证书验证,适用于自签名证书或测试环境)。


url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&_=1638361138568'
response = requests.get(url, verify=False)

接收服务器返回的响应后,提取响应体中的JSON数据。通常,响应对象包含一个json()方法,可以直接将响应内容解析为Python字典或列表结构,便于后续处理。


json_data = response.json()['data']

对获取的原始JSON数据进行解析和清洗。这包括从嵌套的JSON结构中提取所需字段,如省份名称、新增确诊、死亡人数、治愈人数、死亡率及治愈率等,并将这些数据整理为结构化的列表或字典。


json_data = json.loads(json_data)
china_data = json_data['areaTree'][0]['children'] # 列表
data_set = []
for i in china_data:
    data_dict = {}
    # 地区名称
    data_dict['province'] = i['name']
    # 新增确认
    data_dict['nowConfirm'] = i['total']['nowConfirm']
    # 死亡人数
    data_dict['dead'] = i['total']['dead']
    # 治愈人数
    data_dict['heal'] = i['total']['heal']
    # 死亡率
    data_dict['deadRate'] = i['total']['deadRate']
    # 治愈率
    data_dict['healRate'] = i['total']['healRate']
    data_set.append(data_dict)

将解析后的数据保存为本地文件,通常使用CSV格式。利用pandas库的DataFrame功能,可以将数据列表转换为表格,并调用to_csv方法保存为data.csv文件,便于后续读取和分析。


df = pd.DataFrame(data_set)
df.to_csv('data.csv')

数据可视化是将抽象数据转化为直观图表的过程。通过pyecharts库,可以创建多种类型的图表,如柱状图、折线图、饼图和地图,以展示疫情数据的分布、趋势和对比情况。

在可视化部分,首先需要导入pyecharts的相关模块,包括选项配置opts以及各类图表类如Bar(柱状图)、Line(折线图)、Pie(饼图)、Map(地图)和Grid(网格布局)。


from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Pie,Map,Grid

读取之前保存的CSV数据文件,将其加载为pandas DataFrame对象。对数据进行排序、筛选和转换,为可视化做准备。例如,按确诊人数排序,提取前几名省份的数据进行展示。


df2 = df.sort_values(by=['nowConfirm'],ascending=False)[:9]
df2

使用折线图展示各地区的死亡率与治愈率情况。通过add_xaxis添加省份名称,add_yaxis分别添加死亡率与治愈率数据,并设置图表标题为“死亡率与治愈率”,最后渲染至Notebook显示。


line = (
    Line()
    .add_xaxis(list(df['province'].values))
    .add_yaxis("治愈率", df['healRate'].values.tolist())
    .add_yaxis("死亡率", df['deadRate'].values.tolist())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="死亡率与治愈率"),

    )
)
line.render_notebook()

 

使用柱状图展示各地区确诊人数与死亡人数的对比情况。通过add_xaxis添加省份名称,add_yaxis分别添加死亡人数与治愈人数数据,并设置图表标题为“各地区确诊人数与死亡人数情况”,同时启用数据缩放功能以优化展示效果。


bar = (
    Bar()
    .add_xaxis(list(df['province'].values)[:6])
    .add_yaxis("死亡", df['dead'].values.tolist()[:6])
    .add_yaxis("治愈", df['heal'].values.tolist()[:6])
    .set_global_opts(
        title_opts=opts.TitleOpts(title="各地区确诊人数与死亡人数情况"),
        datazoom_opts=[opts.DataZoomOpts()],
        )
)
bar.render_notebook()

以上就是Python爬虫爬取疫情数据并可视化展示的详细内容,更多关于Python爬取数据 可视化展示的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。