使用tushare数据画疫情感染人数地图

news2024/11/15 9:04:42

总是看到网上有各种各样的可以用地图来展示某一地区的情况,如GDP的增速、人口的变化等,于是就想想这个问题是否能用python来实现,经查阅资料发现,用python来画地图其实也并不难,做好数据和地图的关联就可以实现。

一、项目准备

使用python画地图,需要安装pyecharts库和tushare库,所以得先下载安装,安装方法也比较简单,语句为:

pip install pyecharts
pip install tushare

二、项目目标

在tushare里,有关于疫情的另类数据,本次就通过使用该数据来学习如何画地图,由于数据中包含有世界范围数据和国内的数据,因此本次画地图主要是利用上述数据画世界地图和中国地图。

三、项目过程

(一)数据获取

(1)世界数据

对于世界级数据,tushare给出的接口是ncov_global,具体地址和详细参数解释可以查看网站https://tushare.pro/document/2?doc_id=213

import tushare as ts
pro=ts.pro_api('*****************************************')#这里是要token的,不是全***
dtw=pro.ncov_global()
dtw

在这里插入图片描述
可以看到,拿的数据有10000条,世界上的国家个数也还不到200,有这么多数据的原因在于每个国家在多个日期都有发布更新数据,所以我们需要拿到最后的更新的每个国家的数据。通过查看数据列,发现有个publish_date,即发布日期,我们就以最后这一天的发布数据为准,获取各国的对应数据。这个数据也比较旧了,最后一个日期是2020年6月19日的,后续一直没有更新。

(2)中国数据

对于国内数据,tushare给出的接口是ncov_num,具体地址和详细参数解释可以查看网站https://tushare.pro/document/2?doc_id=202
对于中国的省级数据,首先根据接口定义中将level值设定为3,表示获取省级层面数据,日期范围可以先暂定为2020年3月1日到2020年3月22日。

import tushare as ts
pro=ts.pro_api('***********************************')
dtc=pro.ncov_num(start_date='20200301',end_date='20200322',level=3)
dtc

在这里插入图片描述

国内的数据则在2020年3月22日就停止更新了,因此需要获取在这个日期前的每个省的对应数据。

(二)数据整理

从获取到的数据可以发现,无论是在世界数据方面还是在中国数据方面,应该都存在有大量的冗余数据,我们所需要做的是保留最后一次更新的数据。

(1)世界数据

对于世界级数据,去除多余数据的思路比较清晰,直接提取publish_date为20200619那天的数据就好,于是拿到了197条数据。

dtw.loc[dtw.publish_date=='20200619']

在这里插入图片描述

然而,后续在画图时发现数据存在问题,经过检验后发现,这一天的数据里,还存在有多个中国地区的数据,所以需要将其再次删除,只保留国家层面的数据。

dtw.loc[dtw.publish_date=='20200619'][dtw.country=='中国']

在这里插入图片描述
在中国的数据里,很明显,province这一列是和country这一列不相同的,而所有国家层面数据在这两列上都相同。因此,相应的操作是:

dtw=dtw.loc[dtw.publish_date=='20200619']
dtw=dtw.loc[dtw.country==dtw.province]
dtw

在这里插入图片描述
最终,拿到了190条数据。

(2)中国数据

对于中国数据,我们可以再原数据的基础上删除那些重复的数据,仅保留最后一次出现的数据。

dtc=dtc.drop_duplicates(['area_name'],keep='last')
dtc

在这里插入图片描述
最后,我们拿到了29条数据。

(三)绘制地图

(1)基本思路

在有了数据后,绘制地图就简单多了。绘制地图需要的是pyecharts库中的map类,该方法的参数设置请参照库文档。
Map类首先有个实例化方法,主要是对地图的基本参数进行设置,比如地图大小。
之后是.add方法,主要是给地图添加数据关联,这里对于国家和数据的关联,是需要建立数据对的,一般通过zip方式将两个列表进行构建。
再是地图的相关设置,主要是对图例、标签等进行相关设置。
最后是.render方法,主要是生成对应地图的网页。
大概框架如下:

tu=(
	Map()
	.add()
	.render()
)

(2)生成数据对

从数据中可以看到,感染人数是confirmed_num,国家名是country_enname,地区名是area_name,分别将其取出,然后构建数据对。数据对格式是:[国家名,数据]

m0=list(dtw.confirmed_num)
n0=list(dtw.country_enname)
m1=list(dtc.confirmed_num)
n1=list(dtc.area_name)
z1=[list(i) for i in zip(n0,m0)]
z2=[list(i) for i in zip(n1,m1)]

(3)画世界地图

k = (
    Map(init_opts=opts.InitOpts(width="1440px",height='900px'))
    .add("新冠疫情感染人数",z1,"world",is_map_symbol_show=False)
    .set_global_opts(title_opts=opts.TitleOpts(title="地图绘制第一例"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="世界地图"),
        visualmap_opts=opts.VisualMapOpts(min_=1,max_=100000),
    )
    .render("first.html")
)

在这里插入图片描述

世界地图很快就出来了,但很奇怪的是,美国这个国家居然不是红色的,而且也没有数据,后面通过对比其国家名才发现,原来在数据中,美国的英文名称是United States of America,而在地图上,美国的名称是United States,所以二者对不上,造成美国没有被关联上。于是对数据进行再次修改。

dtw.loc[dtw.country=='美国','country_enname']='United States'

重新关联并生成地图:
在这里插入图片描述
这下美国就没有逃脱了。但要吐槽一下,这个地图的质量还是不高,有些国家名称的位置都是错误的,比如新西兰。

(4)画中国地图

画中国地图的时候也遇到了和美国一样的问题,发现在地图上,每个省的名称都只有两个字,而在做数据对的时候,是按省、市、自治区的全名来写的,所以要对数据进行重新配对。发现除了内蒙古和黑龙江外,其他的都是只有两个字符,于是把每个地区名重新做了设置。

dtc.index=range(0,len(dtc))#因删除了数据,需要重置索引
for i in range(len(dtc)):    
    if dtc.loc[i,'area_name'][:2]=='内蒙':
        dtc.loc[i,'area_name']='内蒙古'
    elif dtc.loc[i,'area_name'][:2]=='黑龙':
        dtc.loc[i,'area_name']='黑龙江'
    else:
        dtc.loc[i,'area_name']=dtc.iloc[i]['area_name'][:2]

调整代码画中国地图:

k = (
    Map(init_opts=opts.InitOpts(width="1440px",height='900px'))
    .add("新冠疫情感染人数",z2,"china",is_map_symbol_show=False)
    .set_global_opts(title_opts=opts.TitleOpts(title="地图绘制第二例"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="中国地图"),
        visualmap_opts=opts.VisualMapOpts(min_=1,max_=500),
    )
    .render("second.html")
)

在这里插入图片描述

四、尾声

地图是画完了,感觉用pyecharts画的地图还是很粗糙,希望以后能够更精确一点,更美观一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动WEB开发之响应式布局--响应式开发

响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。 响应式布局容器 响应式需要一个父级做为布局容器,来配合子级元素来实现变化效果。 原理就是在不同屏幕下,通过媒体查询来改变这个布局…

洞察市场需求,深耕大健康赛道,缤跃酒店打造一站式运动酒店品牌

近期,人民数据研究院发布《2022全民跑步运动健康报告》,报告中显示参与跑步人群的年龄跨度随着社会对跑步运动不断攀升的热情而增加。现代生活节奏加快、竞争压力大使得部分中青年通过运动寻求解压,2022年18-40岁的跑者开始成为中坚力量&…

一文搞懂测试左移和测试右移的 Why-How-What

1080306 6.35 KB 软件测试技术应当贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其核心目标是尽快尽早地发现软件产品中所存在的各种问题 bug—— 与用户需求、预先定义的不一致性。 然而,传统…

ElasticSearch——刷盘原理流程

ElasticSearch——刷盘原理流程刷盘原理流程名词和操作解释相关设置刷盘原理流程 整个过程会分成几步: 数据会同时写入buffer缓冲区和translog日志文件buffer缓冲区满了或者到时间了(默认1s),就会将其中的数据转换成新的segment并…

【JavaEE】Java 线程的几种状态

目录 一、线程状态的种类及含义 二、线程状态间的切换条件 (1)使用isAlive()判断线程的存活状态 (2)关于BLOCKED、WAITING、TIMED_WAITING状态之间的转换 1.TIMED_WAITING 2.WAITING 3.BLOCKED 4.jconsole.exe的使用方式…

当 chatGPT 被职场 PUA ,笑麻了!

大家最近是不是被 chatGPT 刷屏了?简单来说,chatGPT 是一个智能聊天引擎。 那 chatGPT 和小爱同学、 siri 有什么区别呢? 如果体验过的朋友,能感受到区别还是很大,chatGPT 的智能表现过于优秀,远远超过了这…

【C++】STL-string模拟实现

文章目录驼峰法命名面试题:写一个简洁版的stringstring成员变量构造函数析构函数拷贝构造函数获取C形式的字符串 c_str赋值重载 operator简易版代码:string的改造 ->支持增删查改接口总览string成员变量构造函数交换拷贝构造赋值重载operator析构函数返回元素个数…

Python图像识别实战(四):搭建卷积神经网络进行图像二分类(附源码和实现效果)

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章)。 从本期开始,我将做一个关于图像识别的…

大疆A3飞控使用|飞控配置

大疆A3飞控使用|飞控配置大疆A3飞控介绍总体特性飞行特性外围设备保护功能SDK拓展拓展功能A3 飞控使用配置连接飞机基本设置机架安装遥控器电调动力配置感度电池控制参数调试基础感度动力带宽高级感度灵敏度控制器性能参数大疆A3飞控介绍 全新A3系列飞控系统结合安全可靠和精准…

【虹科案例】用于超高磁场的虹科 digitizerNETBOX——高采样率和完全同步采样

应用背景 国际 MegaGauss 科学实验室是东京大学固态物理研究所 (ISSP) 的一部分。实验室的目的是研究固态材料(如半导体、磁性材料、金属、绝缘体、超导材料)在超高磁场下的物理特性,这些领域还包括研究新材料并控制其阶段和功能。实验室脉冲…

百度工程师带你体验引擎中的nodejs

作者 | 糖果candy 导读 如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。 Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那…

【Kotlin 协程】Flow 异步流 ③ ( 冷流 | 流被收集时运行 | 流的连续性 )

文章目录一、冷流 ( 流被收集时运行 )二、流的连续性一、冷流 ( 流被收集时运行 ) Flow 异步流 的 构建器函数 flow 函数 中的 代码 , 在 调用 Flow#collect 函数 时 , 也就是在 Flow 异步流 收集元素时 , 才会 执行 flow 构建器 中的代码 ; 这种机制的异步流 称为 冷流 ; 代…

移动WEB开发之响应式布局--Bootstrap栅格系统

栅格系统简介 栅格系统英文为“grid systems”,也有人翻译为“网格系统”,它是指将页面布局划分为等宽的列,然后通过列数 的定义来模块化页面布局。 Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(vi…

spring-statemachine状态机梳理

目录 一、基本回顾 1、为什么要用状态机 2、什么是状态机 3、状态机可归纳为4个要素 4、对应Spring StateMachine的核心步骤 5、简单例子 添加maven依赖 定义状态枚举和事件枚举 完成状态机的配置 简单测试一下 添加Listener 监听器,当状态变更时,触发方…

1. SpringMVC概述与入门

1. SpringMVC简介 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点 使用简单,开发便捷(相比于Servlet)灵活性强 2. 入门案例 2.1 实现步骤分析 1 创建web工程(Maven结构) 2 设置tomcat服务器,加…

Qt属性系统(Qt Property System)

Qt提供了巧妙的属性系统,它与某些编译器支持的属性系统相似。然而,作为平台和编译器无关的库,Qt不能够依赖于那些非标准的编译器特性,比如__property 或者 [property]。Qt的解决方案能够被任何Qt支持的平台下的标准C编译器支持。它…

Kafka工作流程简介

消息传递模式简介: 一个消息系统负责将数据从一个应用程序传递到另外一个应用程序中,应用程序只关注数据,无需关注数据在多个应用之间是如何传递的。 分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。 消息传递有…

MySQL面试常问问题(日志) —— 赶快收藏

目录 1.MySQL日志文件有哪些?分别介绍下作用? 2.binlog和redo log有什么区别? 3.一条更新语句怎么执行的了解吗? 4.那为什么要两阶段提交呢? 5.redo log怎么刷入磁盘的知道吗? 1.MySQL日志文件有哪些&…

Typora配合PicGo阿里云图床配置

写博客的时候,刚开始直接在各大平台上直接写,后来还是觉得不太方便,需要在各大平台之间来回切换。于是就改用Typora,但是有个问题就是图片的处理,只能放在本地。想要发布到各大平台,就需要图床。本文结合阿…

2022年安徽最新水利水电施工安全员模拟试题及答案

百分百题库提供水利水电施工安全员考试试题、水利水电施工安全员考试预测题、水利水电施工安全员考试真题、水利水电施工安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 15.围堰工程可以直接判定为生产安全重大事故隐…