前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python制作疫情动态图

用python制作疫情动态图

作者头像
星星在线
发布2020-05-22 15:04:52
1.5K0
发布2020-05-22 15:04:52
举报
文章被收录于专栏:python爬虫实战之路

前言

之前发了一个国外疫情发展视频,有朋友问怎么制作的,今天就写一下制作过程,非常简单,如果你学会了,以后只要获取了数据就可以制作各种类似的动图。

获取数据

疫情数据目前在网上已经有很多网站都在通报,比如丁香园、百度、今日头条等,但是这些数据都有一个缺陷就是仅展示当天的数据,如果我们想要获取一段时间的数据,那么就得长时间爬取,并存储数据,而且之前的数据还获取不到。这个时候我就想到了世界上最大的同性交友-GitHub。

这里的数据来源于丁香园,而且爬取的比较早。之前作者是提供了获取所有数据的API,但是可能随着数据量的增大,网站压力太大,因此取消了获取全部数据的接口,但是数据上传到另一个项目中,我们只要下载就可以直接使用。

数据内容如下:

因为数据每个小时会获取并同步一次,所以这个里面同一天会有很多数据,而且部分地区并不是每天都有数据,可能存在某些天是没有数据的,我们必须对数据进行清洗处理,才能正常使用。

数据清洗

代码语言:javascript
复制
import time
from datetime import date, timedelta, datetime
import pandas as pd
from collections import defaultdict

df = pd.read_json('data/DXYArea-TimeSeries.json')
df.head()

数据读取以后,存在以下几个问题:

  1. 时间数据是统计的时间戳,需要转换为时间对象
  2. 每日有多次条数据记录,我们只需要记录一次就行了
  3. 数据是按照省份统计的,我们需要按国家进行统计
  • 转换时间戳为时间对象
代码语言:javascript
复制
df['updateTime'] = df['updateTime'].apply(lambda item: time.strftime('%Y-%m-%d', time.localtime(item // 1000)))
df.head()
  • 按照省份和时间去重,保证每个地区每天只有一条记录
代码语言:javascript
复制
df.drop_duplicates(subset=['provinceShortName', 'updateTime'])
  • 按国家统计 将一个国家的所有省份每天的数据加起来
代码语言:javascript
复制
# 按省份分组
for province_name, items in self.df.groupby(by=['provinceName']):
    ......
    # 然后再按时间分组
    for update_time, item in items.groupby(by=['updateTime']):
        ....

数据清洗完以后,保存到csv文件中,格式如下:

制作动图

动态图的制作,我们在GitHub上找到一个开源的项目,根据配置修改对应的项,打开网页加载我们生成的csv文件

然后通过GIF或者录屏软件,再配上音乐,就能制作出网上看到的那些全世界百年内的国民GDP、公路里程、铁路里程等等动图了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python爬虫实战之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 获取数据
  • 数据清洗
  • 制作动图
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档