最近要做一个中国地图,以前用pyecharts,最近接触了geopandas 觉得很强大,改用geopandas作图。比如我制作一个疫情分布地图,效果应该是这样的。最终效果。

首先导入需要用的库:

import pandas as pd
import matplotlib.pyplot as plt
import requests
import geopandas as gpd
plt.rcParams['font.family'] = 'SimHei'

然后使用爬虫把疫情数据怕取下来,我使用的是 手机端的网易数据接口,地址是,

实时更新|新冠肺炎疫情动态地图https://wp.m.163.com/163/page/news/virus_report/index.html用浏览器打开是这样的。

打开检查工具,找到XHR,看请求的内容。

第一个地址就是,

可以看一下它的相应,

是json数据,没有问题,还是选择用curl工具生成,直接生成的代码是这样的。

headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Origin': 'https://wp.m.163.com','Connection': 'keep-alive','Referer': 'https://wp.m.163.com/','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-site','TE': 'trailers',
}params = (('t', '326609897543'),
)response = requests.get('https://c.m.163.com/ug/api/wuhan/app/data/list-total', headers=headers, params=params)

然后就是数据提取。

使用这个网站,解析一下json数据。

这个网站对json的解析比较鲁棒。

可以看到,我们需要省:每个省的确诊数。

接下来,代码提取。


rj = response.json()
rj.keys()rjdata = rj['data']
data.keys()
areaTree = data['areaTree']
areaTree.keys()
chinaData = areaTree[2]
chinaData.keys()
children = chinaData['children']
len(children)#用一个试试
c1 = children[0]
c1.keys()
c1['name']prov = [c['name'] for c in children]print(prov)c1['total']['confirm']confirm = [c['total']['confirm'] for c in children]
print(confirm)

做成一个dataframe,以便后面使用


china_prov = pd.DataFrame({"prov":prov,"confirm":confirm
})
china_prov

geopandas使用

接下来,使用geopandas,看了一个大神的博客,写得很详细了。

这里是网址:

(数据科学学习手札74)基于geopandas的空间数据分析——数据结构篇 - 费弗里 - 博客园
https://www.cnblogs.com/feffery/p/11898190.html

这位高人,介绍很系统了。分成好几篇博客,看完对geo的理解更深刻一些。

这里我直接读取中国地图的数据,

china = gpd.read_file("region_map/MLgis/feifuli3_geometry/china_provinces/china_provinces.shp")fig, ax = plt.subplots(figsize=(12, 8))
ax = china.geometry.plot(ax = ax )

这个地图做出来,是不太常见的投影方式或者坐标系,因此不好看,所以把投影方式改成:

albers_proj = '+proj=aea +lat_1=25 +lat_2=47 +lon_0=105'fig, ax = plt.subplots(figsize=(12, 8))
ax = china.geometry.to_crs(albers_proj).plot(ax=ax)fig, ax = plt.subplots(figsize=(12, 8))
ax = china.geometry.to_crs(albers_proj).plot(ax=ax,facecolor = 'grey',edgecolor = 'whit

这样基本就得到了中国地图。

其中 shp文件,我从网上下载的。如有必要可以上传。

另外 各地区的疫情数据为了防止边,转成json格式的。贴上无所谓:

china_prov
china_prov.to_json()china_prov2 = pd.read_json('{"prov":{"0":"\\u6e56\\u5317","1":"\\u53f0\\u6e7e","2":"\\u9999\\u6e2f","3":"\\u5e7f\\u4e1c","4":"\\u4e0a\\u6d77","5":"\\u9ed1\\u9f99\\u6c5f","6":"\\u6c5f\\u82cf","7":"\\u6cb3\\u5357","8":"\\u6d59\\u6c5f","9":"\\u4e91\\u5357","10":"\\u6cb3\\u5317","11":"\\u798f\\u5efa","12":"\\u56db\\u5ddd","13":"\\u6e56\\u5357","14":"\\u5317\\u4eac","15":"\\u5b89\\u5fbd","16":"\\u65b0\\u7586","17":"\\u6c5f\\u897f","18":"\\u5c71\\u4e1c","19":"\\u9655\\u897f","20":"\\u91cd\\u5e86","21":"\\u5409\\u6797","22":"\\u5929\\u6d25","23":"\\u8fbd\\u5b81","24":"\\u5185\\u8499\\u53e4","25":"\\u5e7f\\u897f","26":"\\u5c71\\u897f","27":"\\u7518\\u8083","28":"\\u6d77\\u5357","29":"\\u8d35\\u5dde","30":"\\u5b81\\u590f","31":"\\u6fb3\\u95e8","32":"\\u9752\\u6d77","33":"\\u897f\\u85cf"},"confirm":{"0":68298,"1":16223,"2":12217,"3":3177,"4":2603,"5":1702,"6":1599,"7":1540,"8":1448,"9":1424,"10":1317,"11":1282,"12":1208,"13":1182,"14":1124,"15":1008,"16":980,"17":937,"18":933,"19":671,"20":603,"21":574,"22":487,"23":455,"24":419,"25":298,"26":260,"27":199,"28":190,"29":147,"30":77,"31":71,"32":18,"33":1}}')
china_prov2

然后接下来就是合并数据了。

使用geopandas读入的china 是一个geoDataFrame格式的。

但是可以当做普通数据表对待,直接合并就可以。

合并之前注意到,china 的 NAME 是各省名字,和我们原有的疫情数据的prov 不一样。

所以要先处理成统一昂的数据。

china['prov_name'] = china['NAME'].str.replace('省', '')
china['prov_name'] = china['prov_name'].str.replace('市', '')
china['prov_name'] = china['prov_name'].str.replace('自治区', '')
china['prov_name'] = china['prov_name'].str.replace(r'壮族|回族|维吾尔', '')
china['prov_name']

生成一个“prov_name”,和疫情数据中“prov”对应。这样合并。

data_with_geometry = pd.merge(left = china_prov,right = china,left_on='prov',right_on = 'prov_name',how = 'left')

合并之后,还要改变投影方式,

data_with_geometry = gpd.GeoDataFrame(data_with_geometry, crs = 'EPSG:4326')

接下来就可以作图了。

fig, ax =plt.subplots(figsize=(12, 8))
ax = data_with_geometry.to_crs(albers_proj).plot(ax=ax,column = 'confirm',cmap = 'Reds',missing_kwds = {"color":"lightgrey","edgecolor":"black","hatch":"///"})

只不过这样的作图方式,湖北省颜色唯一最深的,其他地区都一样,没有层次。

所以设置一下scheme。

fig, ax = plt.subplots(figsize=(12, 8))
ax = data_with_geometry.to_crs(albers_proj).plot(ax=ax,column = 'confirm',cmap = 'Reds',legend = True,scheme = 'NaturalBreaks',k = 5 ,legend_kwds = {"loc":"lower left","title":'确诊数量分级',"shadow":True})

这样就ok了。

这个过程关键就是合并地图数据和分析数据。geopandas就是强,直接和。非常方便。

使用geopandas 制作中国疫情地图相关推荐

  1. pyecharts官方文档_中国疫情地图pyecharts

    共助医患渡江南, 同为华人望平安. 战有常山似鼠窜, 疫有谣传使心寒. 这次咱们不说疫情,咱们来说说怎么画一个中国疫情图. 这里用到了pyecharts,这个库里包含了非常多的图 https://py ...

  2. Echarts.js+jquery.js+china.js实现中国疫情地图

    目录 一.程序代码 二.源码下载 一.程序源码 <!DOCTYPE html> <html lang="en"><head><meta c ...

  3. 疫情数据分析平台(五):中国疫情地图绘制

    中国疫情地图相比世界疫情地图承载更多功能,因此其技术实现的难度也更高,相比世界地图echarts的绘制,中国疫情地图包含大量同步异步函数的使用,同时包含下钻(点击省份进入各省地图)和返回(回到中国地图 ...

  4. 用echarts实现中国疫情地图

    效果图: 首先第一步进行安装echarts npm install echarts --save 然后在main.js中进行导入和添加到vue的原型上. main.js中的代码如下: import V ...

  5. 利用Python实现新冠疫情数据可视化(获取疫情历史数据,制作南丁格尔玫瑰图、疫情地图、动态疫情组合图、词云)

    文章目录 前言 1.获取疫情历史数据 2.制作南丁格尔玫瑰图 2.1 全球各国确诊人数玫瑰图 2.2 全国各省市零新增天数玫瑰图 3.制作疫情地图 3.1全国各省市目前确诊总人数疫情地图 3.2全球各 ...

  6. ArcMap制作疫情地图

    实验目的 利用ArcMap和ArcCatalog制作安阳市疫情地图 实验环境 ArcMap,ArcCatalog,安阳市.png 实验内容 1.目录树定位至安阳市.png,属性面板查看空间参考,此时v ...

  7. 利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图

    1.本章利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图: 2.主要内容为绘制出中国各省疫情数据,疫情数据从四个维度进行可视化展示:累积确诊人数.现存确诊人数.治愈人数 ...

  8. python 绘制新冠肺炎疫情地图

    参考链接: (1)实时更新|新冠肺炎疫情地图 https://news.sina.cn/zt_d/yiqing0121 (2)实时的可视化疫情地图 https://blog.csdn.net/weix ...

  9. python爬取新冠状病毒实时数据,绘制各省份疫情地图

    想法: 偶然接触爬虫之后,想要试试爬取新冠状病毒的数据,但本人是编程小白,只能从网上寻找代码进行学习,在看过博主Hakuna_Matata_001的代码之后,可以说是将其默写出来了,然后加入了自己的一 ...

最新文章

  1. 使用WinPcap和libpcap类库读写pcap文件(002)PCAP文件格式
  2. 肝了3版才满意:分布式系统之CAP理论,我们对它的理解和误解
  3. jQuery+css模拟下拉框模糊搜索的实现
  4. 决策树--从原理到实现
  5. Java黑皮书课后题第10章:**10.9(Course类)如下改写Course类
  6. QtWebkit中浏览器插件的设计-1
  7. BeanUtils.copyProperties(对象A,对象B)
  8. [蛋蛋四格漫画]蛋蛋式按摩……(中日台词对照)
  9. 嵌入式C语言自我修养 08:变参函数的格式检查
  10. 【JAVA 第三章 流程控制语句】课后习题 判断用户输入的数是否为质数
  11. JAVA中两个char类型相加_1、JAVA中的几种基本类型,各占用多少字节?
  12. SQL2005创建快照
  13. cad画圆如何确定圆心_CAD如何利用对象捕捉追踪功能来确定小圆圆心以及矩形的角点位置...
  14. 基于阿里云的基础架构设施保障(一)IAAS云计算
  15. 什么是企业OA管理系统?企业公司oa管理系统软件价格攻略
  16. GeoTrans2.4.1 用户手册 之 入门
  17. python爬取b站搜索结果播放地址_Golang 爬虫快速入门 | 获取B站全站的视频数据
  18. 杭州生活小指南-公园卡-寺庙年卡
  19. 汇承金融科技:开创多渠道资产与资金撮合融资服务模式
  20. 今天安利几个App给你

热门文章

  1. php xingnengfenxi_PHP 性能分析与实验:性能的微观分析
  2. 一起学nRF51xx 19 -  移植SDK普通接口例程
  3. STM32 进阶教程 9 - 芯片维一码(UID)读取
  4. STM32 SPI NSS 引脚为不能拉高问题
  5. 从零开始的AI·决策树原来这么好理解(附实例代码)
  6. Zabbix基础概念
  7. asp.net MVC发布iis无法加载css,js和图片
  8. phpstorm8 license key
  9. 基于8086CPU微处理器的汇编学习之PUSH、POP指令
  10. JAVA 对象引用,以及对象赋值