用python pandas 分析新冠数据教程1

之前说到过,和同事们做了一个免费开源的新冠数据访问接口项目:COVID-19-Data-API。今天开始我们用 Python 、jupyter notebook、pandas等来进行数据分析的一个教程。

疫情过后,有人说剩下来的都是数字化的企业了,数据分析能力也已经是一项必备技能了,有太多的工具可以进行数据分析,前几年可能excel 还是很多人认为最有效的数据分析工具,现在可以选择面太广了,免费工具里面,Python+pandas 肯定还是最佳选择之一。准备一套完整的 Python 的入门教材+Python数据分析教程,并且用现在时髦的视频方式录制。所以先准备好教材。

下面的代码从接口处获得数据,经过简单的整理,输出。
具体来说,是获得意大利在2020年3月24日的疫情感染数据。

1 设置API的地址,调用token
2 设置headers、payload等需要调用的参数
3 通过 requests 的 get 方法来访问数据
4 通过 pandas 来简单处理数据
5 显示数据

# demo for infection/region
# input region, start_date, get data
# 接口:感染/国家地区

import requests
import pandas as pd

# API url
url = 'https://covid-19.adapay.tech/api/v1/'
# token, can call register function get the API token
token = '497115d0c2ff9586bf0fe03088cfdbe2'

# region or country
region='Italy'

# headers, need the API token
headers = {
    'token': token
}

# the params
payload = {
    'region': region,
    'start_date':'2020-03-24'
}

# call requets to load 
r = requests.get(url+'infection/region', params=payload, headers=headers)

data = r.json()

# use pandas to get the data
df = pd.DataFrame.from_dict(data['data']['region'][region])
print(df)
print('---')

通过requests 获得数据,然后pandas 整理。输出结果如下:

               2020-03-24
confirmed           69176
confirmed_add        5249
deaths               6820
deaths_add            743
recovered            8326
recovered_add         894

即便你对Python不太懂,或者一知半解,相信看到上面的代码也能够猜的七七八八,Python的可读性非常好。

要运行上面代码,最简单的方式是通过 jupyter-notebook,然后推荐下载安装 anaconda,最强的 Python 扩展程序,下载安装 anaconda 之后,直接运行 jupyter-notebook,就可以在notebook 里面的 cell 单元格中输入上面的代码。 已经有很多教程关于怎么使用 Python 下的 jupyter-notebook,可以先网上搜索一下,这里就不赘述了。

下面的例子读取一段时间范围内的数据,并对行列进行交换,便于分析和制图。基础代码延续之前的例子,所以要在上面运行的基础上继续。

# demo for infection/region
# input region, start_date, end_date, get data

# the params
payload = {
'region': region,
'start_date': '2020-03-24',
'end_date': '2020-03-31'
}

# call requets to load
r = requests.get(url+'infection/region', params=payload, headers=headers)

data = r.json()

# use pandas to get the data
df = pd.DataFrame.from_dict(data['data']['region'][region])
print(df)
print('---')

我们可以得到下面的结果:

               2020-03-24  2020-03-25  2020-03-26  2020-03-27  2020-03-28  \
confirmed_add        5249        5210        6203        5909        5974   
deaths_add            743         683         712         919         889   
recovered_add         894        1036         999         589        1434   
confirmed           69176       74386       80589       86498       92472   
deaths               6820        7503        8215        9134       10023   
recovered            8326        9362       10361       10950       12384   

               2020-03-29  2020-03-30  2020-03-31  
confirmed_add        5217        4050        4053  
deaths_add            756         812         837  
recovered_add         646        1590        1109  
confirmed           97689      101739      105792  
deaths              10779       11591       12428  
recovered           13030       14620       15729  

我们把日期和确证等交换一下行列,便于制图

# demo for infection/region
# input region, start_date, end_date, get data
# exchange the row and column by Pandas, the row index is date
# 交换数据的行和列

df = df.T
print(df)
print('---')

可以得到下面的结果:

            confirmed_add  deaths_add  recovered_add  confirmed  deaths  \
2020-03-24           5249         743            894      69176    6820   
2020-03-25           5210         683           1036      74386    7503   
2020-03-26           6203         712            999      80589    8215   
2020-03-27           5909         919            589      86498    9134   
2020-03-28           5974         889           1434      92472   10023   
2020-03-29           5217         756            646      97689   10779   
2020-03-30           4050         812           1590     101739   11591   
2020-03-31           4053         837           1109     105792   12428   

            recovered  
2020-03-24       8326  
2020-03-25       9362  
2020-03-26      10361  
2020-03-27      10950  
2020-03-28      12384  
2020-03-29      13030  
2020-03-30      14620  
2020-03-31      15729  

技术的温度-新冠疫情数据开源项目

1-2月份,这次新冠疫情来临的时候,看着每天跳跃的确诊和疑似人数,感到很无助。我们不是医生,捐钱捐物在当时也比较困难。我们这些只会开发项目、写写程序、弄弄云计算的技术直男能做些什么呢?


首先我们想到的是有什么可以帮到公司,当时公司复工在即,诸如保洁安保等很多外部服务公司的员工的健康情况要每天征集,正好团队有一个问卷系统,不管是微信还是钉钉,都能使用,每天所有填表人员的信息就自动汇总好了,疫情情况多变,增加修改问题也很方便。然后行政mm在组织复工后的订餐又碰到问题了,怎么让员工可以在公司指定的快餐供应商这里下单,然后第二天中午送到每层指定的地方,订餐么总还是要有一些仪式感,各类照片等等。正好之前团队在做一个手机在线商城项目,于是拿来修改一下,外卖菜单更新、员工下单和支付、统计数量等都不需要繁琐的人工统计工作。


技术是有温度的。在家办公的时候,虽比不上逆行者救死扶伤,原来自己的技术能力还是可以为防疫做些事情的。于是有一个想法冒了出来,数据处理分析能力也是我们强项啊,当时要查自己的航班火车是否有新冠确诊者比较麻烦,要自己每天输入。于是数据中心的小伙伴一边写了一个检查行程并自动推送信息的小程序,一边将各类行程信息在后台数据整理好。难能可贵的是这些并不是他们的本职工作,几个通宵,前后端联手,再经过几次迭代更新,能够方便到需要的朋友,就很满足。


最近大家知道,中国国内的疫情是控制住了,可是世界范围又开始爆发了,看到很多分析文章,我们数据分析团队的小朋友又坐不住了,因为我们发现并没有很好的疫情数据的接口。我们可以看到很多的数据播报,但是几乎没有什么自动获得的方式可以得到这些数据。大型新闻网站等有自己的接口,不对外开放,有一些公司提供接口,要收取费用。国内的很多爱好者们纷纷用爬虫等技术来获得数据,这样又不够准确。
美国约翰霍布金斯大学汇聚了全球各个疾控组织的数据,有静态的数据和官方提供的分析看板,不能直接访问数据源做更多的自主分析。我们的技术直男们又出手了,分成两个小组,一个小组将每天更新几次的静态数据自动汇总到数据库,一个小组开发接口,让任何有兴趣的研究者可以用任何编程语言来访问接口得到数据,开展自己的分析。白天工作非常忙碌,我们用了两周的晚上时间,终于基本完成。这个项目提供查询公开的全世界各个国家地区的新冠确诊、治愈、死亡等数字,有些国家地区可以挖掘到省份城市和州县,包括所有日期,并且最新的数据每天根据CDC更新而自动更新。这几天清明假期,大家更是不眠不休,终于完成了第一个版本。


复杂的数据清洗和整理,友好的数据接口包括支持自动联调,基于github的项目管理,高效的DevOps开发流水线,云计算的弹性能力,正是这些平时练就的本领,让这个新冠数据项目可以走到今天,相信这些数据对于需要的研究人员是有价值的。我们也会不断完善和改进。


技术让数字不再冰冷,程序员心中也是充满了热情。每个人的自律和努力,疫情一定早日退散!


COVID-19 Data API 地址: https://covid-19.adapay.tech

文档和自动联调地址: https://covid-19.adapay.tech/docs

访问API需要API Key,之后可以使用电子邮件自助申请,目前可以用:497115d0c2ff9586bf0fe03088cfdbe2

上面这个API Key可能会关闭,建议使用 register 接口来免费获得API Key。

有任何问题可以在这里留言,

电子邮件:国内 130730311@qq.com 国外 wingfish@gmail.com

清明

2020年的清明,比较特殊,扫墓的人少了很多。

在墓地碰到大叔和小叔,看到他们也都老了。记得我小时候,大叔还在安徽,他休假回上海,我在奶奶家,他会带我出去玩,然后游戏机的牌子0.15元一个,我很喜欢玩,可惜水平很不好,几分钟就挂了,记得大叔给我买了好几个牌子。那时候非常不好意思。清晰的记得那个游戏是青蛙过河。那时候大叔很帅,有点像秦汉。

大叔这一代人最为坎坷,下乡、下岗都碰到了。很不容易。

小叔在我小学时候每周三下午会来看我,陪我玩,整个小学期间。几十年过去,细节记得的不多了。小叔比我大的岁数等于我大于他女儿的岁数,也算有趣。小叔年轻时候很想刘德华,不过现在发胖了,开玩笑说像曾志伟了。

小叔年轻时代,上海很多人到日本打工留学,赚一票。小叔那个时候也学日语,不过我不知道为什么后来没有去。印象中当年去日本的很多上海人还是赚到钱的。小叔就心态比较好了,到现在打扮也很潮。因为小叔和我年纪最接近,所以思想上也比较容易理解。记得我很多个重要时刻,小叔其实都挺鼓励我。当然,当年,很多时候,他们的话我是听不进的。

很多事情,都要自己跌了跟斗,才懂的。

看着奶奶的照片,还是难忘小时候和奶奶在一起的时候,小叔是每周三来,奶奶很喜欢我,每周六下午小学不上课,她就来看我。一直记得有一天,不是周六,奶奶也来了,给我买了一个油墩子,然后就走了。我吃完之后,不知道为什么,就突然哭了。

至今记得当时自己的心情。

前几年每年年初一晚上都会和奶奶一起吃饭,一直担心她的身体,也看着她身体每况愈下,到后来几年已经完全不认识我了。

从中学开始,去奶奶这里的时间就少了。工作后,一年也就几次。

以为自己很忙,其实也就那样。

奶奶对我的教诲只记得两句了,好好吃饭,好好学习。

奶奶,我都做到了。您安心。

我的这十年,不如之前,跌宕起伏,经历甚多。身体也不是很好了。

追求的风花雪月,终究都是成云烟。

内心的充足才是自己需要的。

奶奶,我也基本做到了,虽然代价有点大,而且还是基本,并不够。人生自然就是有遗憾的,我也慢慢懂了。

谢谢奶奶,在我小学的时候,每周六来看我,真正感受到慈祥和温暖。

其实那时候大人的世界应该也是很复杂的,我不管,奶奶就是我的奶奶,我最爱的奶奶。

去年在扫墓的时候,正好同事消息我,很多事情其实不太高兴,很不高兴,当时我已经学会淡然,压住了怒火。才一年,变化太多了。好像自己也压得住火气了,看问题也通透一点点了。

2020年,整个世界变得有点乱,心不能乱。