平常的日子

昨天中午碰到了闵行的小舅和舅妈,他们年纪也大了,记得那时候表弟高考前,我在徐家汇坐沪闵线到他们家,去给表弟打气,二十来年了吧。好像记得 2002 年我在世贸中心上班的时候,表弟刚工作,和他在那里碰过头。

2002 年感觉距离现在很远了,那时候意气风发。有时候想,如果我当年就世故一些,或许会得到更多,只是如果我能够那么世故,可能也就不是我了。因为我的努力,其实还不算查了。懂世故,而不世故。说实话,高官厚禄本来就已经不是我的人生目标了。看着一些人争夺,看着一些人无奈。我也挺无奈的。

昨天中午接送女儿的时候,路上很堵,看着熟悉的、慢慢变化的风景,当然想起很多往事。曾经以为的海誓山盟、一生一世,实际上很难做到。目标不要订的太高才是关键。

我曾经分析了一下自己性格的弱点,绝大多数的原因还是和人比较,这十几年逐渐淡了很多,却是又验证了另外的事情,所谓情商高的人会孤独,当然我距离情商高还差的太远,却已然有这样的感受。

看庆余年,很久不看网络小说,真不错。作者 30 岁左右哪里来的如此丰富的人生阅历。其中提到选太子,兼备无情和有情。

当很多事情看得通透后,很多时候只能牺牲一些东西,包括自己,这种时候内心的孤独感的确非常难承受。

所以,还是看自己要什么了,你要的多,自然付出的多,所谓煎熬也多,要的少,就会好些。

和女儿在路上,聊聊路上的风景、聊聊人生往事、聊聊 switch 和动森。回忆什么时候开始不去学芭蕾舞,什么时候钢琴课也不上了,女儿记性不错,和我的记忆角度不同,和爷爷奶奶的视角当然也不一样,记得 2014 年那时候,我差不多周末 10 点多出门,要到晚上才回家,现在小姑娘的学业忙碌,相聚的时间就少了一些。

温暖的午后阳光,在很多年后再回忆起来,大约还是温暖的。

用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年,整个世界变得有点乱,心不能乱。

三月春

周末午睡,收到短消息,小区的足浴店开了,3月21日,春节后,终于营业了。从1月23日武汉封城,到最长的春节假期。全国人民都带着口罩,而很长一段时间,马路上是空空荡荡的,没有车,行人极少。

三月中,生日。记得的人越来越少,自己也没有那么在意了。年纪大了的缘故。前几年,倒是呼朋唤友,那个时候可能比较寂寞的缘故吧。内心也着实不够强大。

改变自己,谈何容易。说了十几年拿得起,放得下,有多少东西拿得起,又有多少可以放得下。这两年,真的是豁达一些了,当然做不到每件事,也没必要每件事。以前就是吃亏在每件事情都想所谓完美,结果遍体鳞伤。

世界变化的速度超过我们的感知,感觉我们还是弄潮儿,其实已经是沙滩上的前浪。有时候坚守的是我们的执着而已,比如我还是经常在这个blog更新。当作一个日记吧,也挺好玩。

经常反思一下,总归没啥坏事。以前在“创意纪”写了很多很多,偶然看到pageview可以到几十万,十多年前google adsense的一百美元广告支票还收到过几次。都是有趣的回忆。司空见惯,或者此刻我们觉得简单的事情,过几年,过十几年,过几十年,感受是大大的不同。

最近也是经常回忆起青少年时候的往事,唏嘘感叹,还是过好每一天最重要。

2020 春节-寒假

2020 年的春节假期已经不是春节了,而是学生时代的寒假了。本来在做出行计划的时候,非常犹豫和纠结,不舍得休假,后来就有点后悔了。只是,当我们还在纠结假期的时候,才发现这个大概是最简单的影响了。

经济肯定会有影响,不管线上线下。兄弟部门的航空交易,连续几周是负数,因为退票。有人开玩笑说携程要专做微商了。另外个兄弟部门是对接教育行业的,年前韦博英语的风险还没有消散,这一把或许更加致命,现金流不管什么行业都是最重要的。

还是希望之后的压抑性、报复性消费可以在疫情过去后起来,整体经济如果下行,对绝大多数行业都是会打击,而整体经济繁荣,对大家都是好事情,没学过经济学,这个道理也明白。

始终要居安思危,平时经常说要有现金储备种种,于个人可能现在还好。想起年前离职的一些同事,或许这次也受到了影响。希望冬天快点过去吧。

有时候幸运自己不是做老板的,喜欢的是 IT,所以还能混口饭吃,也不用操心太多事情。

2020 这个冬天有点冷

2003 年,刚到汽车网的时候,非典 SARS,当时的新闻信息之类没有那么发达,印象中口罩也没有成为紧俏物品,而 2003 年后,互联网新闻、淘宝、京东等线上业务都起来了,中国算是真正的进入了互联网 1.0,不需要再弄什么 72 小时生存者实验。

2020 年,一场意想不到的非冠,NCP,比起 2003 年 SARS 已经有过之了,几万人得病,几万人确诊,让我们感到无奈,武汉,没有想到用这样的方式被全世界知道。

大学毕业后,最长的一个假期,今天正月十五了。这个假期有 17 天,实在是始料未及。记得几个月前考虑春节出行的时候,还是非常纠结,不敢请假,原来是算好初七正式上班的。

还好我是个宅男,对于连续几天在家不出门,没啥太大问题,不过以前还是会去捏个脚,或者稍微走走,现在基本都没有了,走的最远是到 100 米外的小超市了。

非典原来已经是这么早的事情了,我记得非典时候很多有趣的事情,包括 blog,也是在那个时候开始。那时候还没有什么无线网,我同学给了我一个 CDPD 的网卡,可以通过笔记本上网,在当时属于非常先进了,笔记本的 pc 卡槽旁边插进去,露出一段小天线。差不多有 20k 左右的速度吧,比电话线 modem 强一点点。 从那个时候开始研究和喜欢 blog,现在互联网上还可以搜索到当时写的内容。而创意纪和明日会也差不多那个时候开始弄起来。断断续续,算是坚持到现在。

我始终相信坚持是能够有所成绩的,看到自己 2016 年12 月开始写的 Python 教程,感叹。虽然我现在理解,能量守恒,我在坚持这些学习和实践的时候,自然也会有很多损失和弱点,那就这样吧。你不喜欢别人,别人也未必喜欢你。时间流逝,并不多,我们还是为了自己喜欢的事情多花点精力,才值得。我现在的体会,别的么就敷衍一下,中庸一些就可以了。

2020 将至

看电视里说,上海地铁通行25年了,哦,我大学毕业也25年了。

1995年时候,很多寝室里的同学在离开上海之前区坐了一下地铁,感受一下高科技。

之前,每年总有几个时候,会算,今年是工作的第几年,一年前我在做什么,两年前我在做什么,三年前我在做什么,回想起过去的日子,来告诫自己珍惜。

却不知不觉中,已经过去25年了。

有时候感觉累了,不知道是身体关系,还是毕竟年龄的约束,很多新玩意也不太会玩了。自然规律自然还是要遵循的。

2019年,又是发生了很多事情,人生么,总归沉浸其中的时候,自得其乐,回忆时候,当时的激动、高兴、伤心种种,不过都是小事情。真的小事情。

看自己十几年前的blog,所谓放下,所谓舍得。现在我都懒得拿起了,爱搁在哪里搁在哪里。

今年下半年,太忙碌了,太累了,有的事情还是太刻意了。新年将至,梦想要坚持,兴趣要坚持,开心要坚持,人生要坚持。

自己要坚强

上周,终于拿到了出版社寄来的书,自己也在京东上买了一些,自我感觉比较好,要送的人好像比较多。

这本书写得也很辛苦,差不多从 2018 年 3 月开始,中间陆陆续续,一直在写,还有很复杂的组稿工作。差不多 2018 年年底完成了稿子,出版社很认真负责,中间来来回回的校对工作又花了将近一年。

凡是过往,皆是序章。我根本不在乎有些人的看法想法,我就这么扎扎实实的在我喜欢的领域内研究、分享、写作。对于新技术,我觉得已经形成了方法论,所以对于新技术的学习和实践速度就非常快,当然也是因为这样让某些人不高兴,想想这也是正常。越来越觉得社会的复杂性,以前理解这些问题都太简单了。

2018-2019 上云的这段经历,这本书作为纪念,赚了。

最近很爱听一些中国的 rapper,不管是法老、ICE、福克斯,或者是吴亦凡,都让我大开眼界,原来还有这么多努力的人,虽然有时候互相 diss 来 diss 去,但是将中国的 rap 水平提升了很多,几乎所有的 rapper 说的最多的还是努力。

2020 年还有 20 多天就来临了,我喜欢新的挑战,挑选最值得研究的方向,发挥自己的强项。世界上有那么多领域需要探索,多么有趣。自己要坚强,喜欢你的人总是喜欢你,我们做那么多本来也不是为了被喜欢,那样太 low 了。这里立一个 flag,不在乎那些 bling 的 pass,终究会回到舞台。就是 diss 这些 hater,又怎么样呢。

2013年十月的某天

年纪大了就开始回忆,想起2013年10月,差不多是人生最迷茫的时刻了。

我们总是觉得眼前有很多过不去的坎,实际上人生一直在被挑战,就看你是什么心态。有时候觉得如果到了某个level、某个位置、过了某个时间点就好了,其实哪有那么简单。

读大学的时候,觉得读书太无聊了,快点工作,然后结婚生子,肯定就很开心。后来才发现,自己太天真了。

2002年,升职,销售总监,当时意气风发,结果也就9个月,黯然收场。

2013年10月,在古美路的街头,12号地铁还在修,看着宽阔的马路,但是显着杂乱。那一刻,是完全不知道未来会发生什么的。

很难有人相信,这几年经历了什么。之前亏欠太多,花费了太多,无论是心力,还是精力。将生活、工作都慢慢带入正规。然而,身体还是受到一定的影响。

在街头的时候,自己评估了能力,发现写作和编程还是自己最强的能力,其他都不值一提,所以聚焦于此,猛攻之。这几年,出版了两本书,算是自己勤奋的成果,当时自然也不会想到引起了某些同事的巨大惊慌,而我的情商还有很多不足,于是职业生涯也是多多挫折。好在如今的我,还是认为自己能力有限,必须发挥优势。我可以学习python、人工智能、云计算等,还可以继续学习啊,python这两年发展的越来越快,还有继续提升,IT领域的有趣技术层出不穷,不怕没东西研究。和情商高的小人共事,本身是一种磨练。这世界上的每个人都不是好人坏人那么简单的。既然是为了一些自己抱负和理想,也就像这几年所经历的一样,继续放弃,继续淡定。

上周出版社说样书马上寄到,高兴之余,想起六年前的那个下午,那刻,我迷茫无助的思想。吃亏是福,多寿多福!