玩转PYthon,用Python绘制全球疫情变化地图(好东西,值得一看~~~)

使用Python获取最新疫情数据,制作可视化动态地图,实时展示各地情况 疫情降临转眼已经第三年了,时间过得真快,愿疫情早点结束,世界不再多灾多难。最近疫情稍微好转一些了,所以咱们获取一下最新的疫情数据,做个可视化地图看看。获取到的数据咱们保存到表格 可视化地图颜色是跟网上的一样,可以跟随鼠标移动变色,展示数据的。 还可以实现这种更好看的以及柱状图 还等什么,我们直接开始把~涉及知识点开发环境 实现流程前四步的话,基本大部分*虫都是如此。具体操作,我就不详细写了,这个视频第56集有详细讲,前面几集也有基本思路,可以说很全面。代码总是学完就忘记?100个爬虫实战项目!让你沉迷学习 阅读详情

用Python绘制全球疫情变化地图

目前全球疫情仍然比较严重,为了能清晰地看到疫情爆发以来至现在全球疫情的变化趋势,我绘制了一张疫情变化地图,完整代码共 230 行,需要的朋友在公众号回复关键字 疫情地图 即可。废话不多说,先上图

 

下面就来重点介绍下上面这张图的绘制过程,主要分为以下三个步骤:

  • 数据收集

  • 数据处理

  • 画图

下面一个一个来说。
数据收集

这是万里长城的第一步,俗话说“巧妇难为无米之炊”,既然是变化图,当然需要每个国家、每天的现有确诊病例数。好在现在各大网站都有疫情相关的专题页,我们可以直接抓数据。以网易为例

我们选择 XHR,重新刷新下网页可以看到有几个接口,其中 list-total 接口是获取当前所有有疫情的国家,以及对应的国家id。另外,我们看到还有一个 list-by-area-code 接口,它是获取每个国家历史上每天的疫情数据,请求这个接口需要带 areaCode 参数,这个参数就是我们刚刚说的国家id。所以对我们来说这两个接口是最重要的。下面我们就看看请求 list-total 接口的代码

def get_and_save_all_countries():
    """
    获取所有的国家名以及对应的id,保存为文件
    """

    url = 'https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=317452696323'
    list_total_req = requests.get(url, headers=headers)
    if list_total_req.status_code == 200:
        area_tree = list_total_req.json()['data']['areaTree']

        area_dict = {}
        for area in area_tree:
            country_id = area['id']
            name = area['name']
            area_dict[country_id] = name

        area_json = json.dumps(area_dict, ensure_ascii=False)  # ensure_ascii=False 防止json编码后中文编程\u开头的字符
        write_file('./config/countries_id2name.json', area_json)复制代码

免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流

这里将请求下来的数据临时存放在文件里。有了所有的疫情国家的id,我们就可以请求 list-by-area-code 接口来获取每个国家的疫情数据了。代码与上面的类似,不同的是将请求结果存在了 mongodb 而不是文件,目的是为了方便增删改查。当然为了大家方便使用,我将mongodb中的数据导入了文件 counties_daily.json 中,大家可以在源码根目录找到它。

数据处理

免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流

这一步的处理主要是为第三步画图做准备的。因为我们画图用的是pyecharts框架,它绘制世界地图需要输入的国家名是英文的,而我们收集的国家名是中文的,所以要将中文国家名对应到英文国家名。最终的效果如下

网上能找到这样的对应关系,但想要用起来还需要解决两个问题。第一,两边中文名统一,比如:我们收集的国家名是中非共和国,而对应关系里是中非,那还是对应不上。第二,需要自己增加映射关系,网上找的一般都不全,我们需要根据收集的数据自行增加。经过上面两个步骤处理后,我们就可以将大部分国家名对应到pyechars能识别的英文名了。相关代码如下

def get_cy_properties():
    # 获取配置文件信息
    countries_id2name = read_file('./config/countries_id2name.json')
    cy_id2name_dict = json.loads(countries_id2name)
    cy_ch2en = {v: k for k, v in countries_dict.items()}

    # 调整国家的名字与配置文件一致
    cy_id2name_dict['879'] = '波斯尼亚和黑塞哥维那'
    cy_id2name_dict['8102'] = '多哥'
    cy_id2name_dict['8143'] = '刚果民主共和国'
    cy_id2name_dict['95983'] = '刚果'
    cy_id2name_dict['8144'] = '中非'
    cy_id2name_dict['95000011'] = '多米尼加'

    cy_props = {}
    for key in cy_id2name_dict:
        cy_name = cy_id2name_dict[key]
        if cy_name in cy_ch2en:
            cy_props[cy_name] = {}
            cy_props[cy_name]['id'] = key
            cy_props[cy_name]['en_name'] = cy_ch2en[cy_name]

    return cy_props复制代码

画图

这一步涉及到两个核心过程——构造数据结构和画图。首先,我构造了3个数据结构,分别是date_list、cy_name_list 和 ncov_data。date_list存放的是日期列表,因为我们画动图,所以需要一段时间;cy_name_list 存放收集的所有国家列表(英文名);ncov_data是一个字典,key是日期,value是数组,存放各个国家当天的确诊病例数。生成这三个数据结构的代码如下

def parse_ncov_data(start_date, end_date, records):
    if not records:
        return

    date_list = get_date_range(start_date, end_date)
    cy_name_list = []
    res = {}
    # 获取各国每天现有确认病例
    for i, record in enumerate(records):
        cy_name = record['cy_en_name']
        cy_name_list.append(cy_name)

        # 解析每天数据并计算现有确认病例
        existing_case_dict = {}
        for ncov_daily in record['data']['list']:
            date_str = ncov_daily['date']
            confirm = ncov_daily['total']['confirm']  # 累计确诊
            heal = ncov_daily['total']['heal']  # 累计确诊
            dead = ncov_daily['total']['dead']  # 累计死亡

            existing_case = confirm - heal - dead
            existing_case_dict[date_str] = existing_case

        last_existing_case = 0
        # 将每天确诊病例数合并到res中
        for date_str in date_list:
            if date_str not in res:  # 初始化
                res[date_str] = []

            existing_case = existing_case_dict.get(date_str)
            if existing_case is None:
                existing_case = last_existing_case
            res[date_str].append(existing_case)

            last_existing_case = existing_case

    return date_list, cy_name_list, res复制代码

参数 records 是一个数组,数组每个元素代表一个国家,内容便是我们在第一步请求 list-by-area-code 接口的数据。最后,用 pyecharts 来画图,直接上代码

def render_map(date_list, cy_name_list, ncov_data):
    tl = Timeline()  # 创建时间线轮播多图,可以让图形按照输入的时间动起来
    #  is_auto_play:自动播放
    #  play_interval:播放时间间隔,单位:毫秒
    #  is_loop_play:是否循环播放
    tl.add_schema(is_auto_play=True, play_interval=50, is_loop_play=False)

    for date_str in date_list:  # 遍历时间列表
        map0 = (
            Map()  # 创建地图图表
            # 将国家名 cy_name_list 以及各国当天确诊病例 ncov_data[date_str] 加入地图中
            .add("全球疫情趋势", [list(z) for z in zip(cy_name_list, ncov_data[date_str])], 
                "world", is_map_symbol_show=False)
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 不显示国家名
            .set_global_opts(
                title_opts=opts.TitleOpts(title="%s日" % date_str),  # 图表标题
                visualmap_opts=opts.VisualMapOpts(max_=80),   # 当确诊病例大于80 ,地图颜色是红色
            )
        )
        tl.add(map0, "%s" % date_str)  # 将当天的地图状态加入时间线中

    tl.render()  # 生成最终轮播多图,会在当前目录创建 render.html 文件复制代码

代码里加了注释,这里就不再赘述了。
运行 render_map 函数会在当前目录生成 render.html 文件,打开后便自动播放疫情变化趋势,如文章开头 gif。另外,有些朋友可能会问,能不能直接输出 gif。这一点我也尝试过,百度、谷歌、GitHub上的教程基本上都试了一遍,比较遗憾没有找到靠谱的方法。所以劝大家还是放弃这条路,曲线救国,录制一个视频转成 gif 即可,方便快捷。毕竟人生苦短,Python 为我们节省下的时间不能再被这些无谓的坑再填回去。这样整个过程就介绍完了,虽然思路不复杂,但局部细节上还是需要花一些时间处理的。完整代码共 230 行,需要的朋友在公众号回复关键字 疫情地图 即可。

最近国内某些地方出现了反弹的迹象,希望大家无论是在工作还是生活上都能继续保持警惕。希望这次疫情早点过去,等待全球地图变白的那一天。

清明节用python统计死亡人数,并绘制绘饼状图、 长条图、堆积条形图、折线图 因为回不辽家,所以想到了和死亡相关的。 阅读详情

相关推荐

手把手教学|用飞书+扣子工作流实现自动化批量图片生成,效率提升99%!体验完整操作流程

在先前的文章中,我们已经深入探讨了扣子智能体的多种应用场景,以及如何创建和使用工作流进行高效管理。本文将引领大家通过一个具体案例,将扣子的工作流功能嵌入飞书应用中,实现操作的自动化与高效化。

weixin_66485800的博客 6028

中国护照含金量再上升,Qbao Network 教你玩转全球54个国家!(一)

2018年末将至,眼看藏着、捂着攒下的带薪假期数字还是2位数,小Q 心底便按耐不住的激动!又可以计划一番快乐的出游了! 早就对申根签证有所耳闻,小Q 此次琢磨了一番,原来根据申根协议,只要获得某个国家的签证,即可在签证有效期内在所有申根国家自由旅行!难怪无数旅行爱好者为之着迷,能在二十多个国家之间自由穿梭,想想就很幸福呢! 小Q 已经决定立刻马上准备材料去办一张申根签证了。 值得一提的是,申根国、...

QbaoNetwork的博客 541

从NASA官网到分析图:MOD09A1地表反射率数据的完整处理流程(含QC筛选)

本文详细介绍了MOD09A1地表反射率数据的完整处理流程,从NASA官网数据下载到QC筛选,再到NDVI图生成。特别强调了质量控制(QC)信息在筛选可靠像元中的关键作用,帮助研究人员获取高质量遥感数据。

weixin_42542669的博客 111

【R语言篇】医学生福音,全球疾病负担数据库GBD 2021即将更新!!!

相信数据一经发表,过不了多久pubmed又将涌现一大波疾病负担相关文章。后面会陆续更新gbd数据库介绍、分析方法以及写作方面的内容,欢迎留言交流~更新的全球疾病负担数据库。

weixin_53499537的博客 2647

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1173

【01、Go与VSCode的安装】

小白学Go语言

wangruil的博客 1536

Python之基础详解(十):用python的pyecharts模块绘制世界地图(疫情)

pyecharts可视化疫情确诊人数世界地图 首先,我们需要进行环境的配置:python版本需要3.6.x ,pyecharts版本1.x 使用pip自动安装最新版本(这里的版本是1.7.1)

zhu_rui的博客 1万+

第五章 PCIe介绍 5.1-5.7

为什么SSD要用PCIe接口?因为它快,比SATA快。通道,PCIe最多可以有32个通道。两个设备之间的PCIe连接,叫做一个Link。如下图,设备A和设备B是个双向连接,两个PCIe设备之间,有专门的发送和接收通道,数据可以同时往两个方向传输,PCIe Spec称这种工作模式为,可以理解为。和PCIe一样,SATA有独立的发送和接收通道。但与PCIe工作模式不一样,同一时间,SATA只有一条通道可以进行数据传输。这种工作模式称为。与SATA单通道不同,PCIe连接可以通过增加通道数扩展带宽。

fengbaobaola的博客 2968

【毕业设计】python+大数据构建疫情可视化分析系统

🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是🚩基于python/大数据的疫情分析可视化系统🥇学长这里给一个题目综合评分(每项满分5分)难度系数4分工作量4分创新点3分🧿httpshttpshttpshttpshttpshttpshttpshttpshttps。...

HUXINY的博客 7504

【Matlab 六自由度机器人】基于改进型D-H参数的运动学建模与蒙特卡洛工作空间分析

本文详细介绍了如何使用改进型D-H参数法为六自由度机器人建立运动学模型,并利用Matlab Robotics Toolbox实现正运动学计算与可视化。通过蒙特卡洛法对机器人工作空间进行分析,生成三维点云图以直观展示其可达范围,为机器人选型与任务规划提供关键依据。

weixin_29040367的博客 438

【WorkBuddy从入门到精通实战教程】使用手册 第 1 章 初识 WorkBuddy

腾讯推出全场景AI办公助手WorkBuddy,突破传统聊天机器人局限,实现从需求理解到结果交付的全流程自动化。该工具通过自然语言交互,可自主规划执行复杂任务,包括文件处理、数据分析、PPT制作等,支持多模型切换和技能扩展。内置权限管控机制确保本地文件操作安全,显著降低人工切换工具的成本,提升职场效率。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 1283

毕业设计 大数据疫情可视化分析系统

摘要:该项目基于Python/大数据技术开发了疫情分析与可视化系统,通过爬取疫情数据并构建数据库,实现了疫情数据的实时追踪与多维度可视化展示。系统包含数据爬虫模块(使用Requests库获取数据并存储至MySQL)、数据处理模块(解析JSON数据并格式化)和可视化模块(采用ECharts绘制动态图表)。功能涵盖历史数据统计、地区疫情分布、趋势分析等,界面包含地图、折线图、柱状图等多种交互式图表,为疫情防控决策提供数据支持。项目难度适中,工作量饱满,具有一定的实用价值,可作为毕业设计参考案例。

Mr.D学长 302

笔试题-2023-加特兰-数字IC设计【纯净题目版】

笔试题-2023-加特兰-数字IC设计【纯净题目版】

w0shishabi的博客 2248
上一篇: 重大消息!重大消息!(Python机甲合体!!!文件超兽武装~)Python文件操作大全,看这篇就够了(二)
下一篇: 写了那么久的Python,你应该学会使用yield关键字了,骚年~
测试小小小
博客等级 码龄6年 265粉丝 364原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值