绘制2019-nCoV动态疫情地图

初学python,记录一下练习过程。

解题思路:

  • 简单爬取每日确诊人数数据,来源:2019-nCov新型肺炎疫情实时数据分析
  • 绘制每天的确诊人数分布地图,参考:Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图 by 天元浪子
  • 用画好的图片制作gif动画,展示疫情动态蔓延过程:matplotlib animated images

1. 数据抓取

  • 观察数据
    绘制2019-nCoV动态疫情地图_第1张图片
  • 下载自2020年1月31日至今的每天的疫情数据并存储
    def catchRealTimeData():
        url='http://www.graphvis.cn/graphvis/sari/data/'
        currentDate=datetime.date.today()
        startDate=datetime.date(2020,1,31)
        day=startDate
        ChinaDistributions={}
        while True:
            if day>currentDate:
                break
            else:
                urlstr=url+day.strftime('%Y%m%d')+'.json'
                data=requests.get(url=urlstr)
                data=data.json()
                ChinaDistribution={day.strftime('%Y%m%d'):data['caseList']}
                ChinaDistributions.update(ChinaDistribution)
                day=day+datetime.timedelta(days=1)
    
        filename="ChinaDistributions"+datetime.date.today().strftime('%Y%m%d')+".json"
        with open(filename,"w",encoding='utf-8') as file_obj:
            json.dump(ChinaDistributions,file_obj,ensure_ascii=False)
    

2. 绘制疫情分层设色图

  • 绘图的源码只在Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图 by 天元浪子的基础上修改了人数分级和颜色的设置;由于数据源不同,也稍微修改了数据格式。代码可以从github下载:
  • matplotlib颜色对照表:(原)python中matplotlib的颜色及线条控制
  • basemap环境配置:神农尝百草—Windows环境下为Python3.X安装basemap
人数 颜色 代码
>5000 在这里插入图片描述 #800000
1000-5000 在这里插入图片描述 #A52A2A
100-999 在这里插入图片描述 #CD5C5C
50-99 在这里插入图片描述 #FFA07A
10-49 在这里插入图片描述 #FFDAB9
<10 在这里插入图片描述 #ADFF2F

3. 制作动画gif

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import datetime
import matplotlib.image as imgplt

fig = plt.figure()
ims = []
currentDate=datetime.date.today()
startDate=datetime.date(2020,1,31)
day=startDate
while True:
    if day>currentDate:
        break
    else:
        date=day.strftime("%Y年%m月%d日")
        x = imgplt.imread(r"CoVSpreading/pics/"+date+"nCoV疫情地图.png")
        im=plt.imshow(x,animated=True)
        ims.append([im])
        day+=datetime.timedelta(days=1)
ani = animation.ArtistAnimation(fig, ims, interval=200, blit=True,repeat_delay=1000)
ani.save("CoVSpreading/2019nCoVSpreading.gif", writer='imagemagick', fps=30)
plt.show()

4. 结果展示

绘制2019-nCoV动态疫情地图_第2张图片

你可能感兴趣的:(小技巧)