奥密克戎真正的威力藏在超额死亡里

我们聊聊国外数字,最近开始陆续的有2022年的超额死亡数据出来了,我们来看看这波奥密克戎真正的威力。

我找到的这个统计是按照nature的这篇文章的方法来计算的:

https://www.nature.com/articles/s41597-021-01019-1

所以下面默认这篇没问题,如果你对数字有疑问,请去怼这篇文章,最好建议nature撤稿,不要来再问我信源哪来的之类的车轱辘话了,朝这个方向杠的我帮你屏蔽我,省的让您看了心累。

现在开始

美国2020年和2021年两张图打底,两年时间多死了120万人

奥密克戎真正的威力藏在超额死亡里

奥密克戎真正的威力藏在超额死亡里

简单解释一下,,这是机翻的,不要问翻译问题。

“死亡,参考”这个就是选取的过去正常年份的正常值,但是这个每年的是变化的,因上面提到的那篇文章计算方式已经考虑了前面几年的趋势,比如2021年的死亡参考就比2020年的要多,因为根据美国2015年到2019年的趋势,死亡人口是逐年递增的,所以越往后,他的参考值也会递增。所以这个方向杠的,请去杠nature那篇文章。

“死亡,目标”指的就是实际死亡的人数,

死亡人数这一列就是超额死亡的人数,也就是今天比往年同期多死了多少,

注意:是死了多少!

大概就这几个需要解释到了,现在开始我们看看很多国家是啥情况。

世界抗疫典范,美利坚的前六周数据

奥密克戎真正的威力藏在超额死亡里

仅仅六周,超额死亡了111500人

我们之前统计过一个,那就是美国前三个月因为新冠死亡了154000人

这里有一个细节

美国统计的死亡最高峰是2月8号左右,也就是刚刚六周左右

奥密克戎真正的威力藏在超额死亡里

美国统计的死亡最高峰是2月8号左右,也就是刚刚六周左右

但是按照超额死亡图上看第三周是个死亡高峰

到第六周都开始走低了

这是怎么回事呢?

具体原因其实谁也不知道,但是我们可以通过一些事情来推测

正常情况,死亡高峰应该滞后感染高峰两周左右

那么美国感染高峰是什么时候呢?

相信大家还记得日增百万这件事儿吧,基本就是本轮疫情美国的感染最高峰,随便搜了一下就知道是3号出现的

奥密克戎真正的威力藏在超额死亡里

如果从3号开始往后两周,实际上刚好是三周左右出现死亡高峰,也就是超额死亡的节奏是对的。

而美国统计的新冠死亡高峰明显是太滞后了,差不多滞后了一个月。

所以我们不得不做个猜测,

这几周的超额死亡可能是另一个问题,那就是大规模的感染人数导致医疗资源过载,从而导致大量的人根本没来得及去医院就死了,于是并没有统计为新冠死亡。

总之,不管怎么比,超额死亡这个东西确实的反映了,因为疫情六周时间多死了11万人。

最后别杠超额死亡里有多少是死于新冠了

因为这玩意就是为了衡量大流行的影响。

奥密克戎真正的威力藏在超额死亡里

用我这种喜欢简单粗暴说问题的人的口吻来说,这就是因为新冠死的,管你是什么原因,没有新冠,没有奥密克戎,他们本来就不该死。

好了,简单分析完了,我们来看看世界主要国家在这场“轻微到不如流感的奥密克戎大流行”里的表现吧。

确实有做得比较好的,比如下面几个:

没有整个大英的,只有英格兰加威尔斯的

奥密克戎真正的威力藏在超额死亡里

德国5%

奥密克戎真正的威力藏在超额死亡里

瑞士超额5%

奥密克戎真正的威力藏在超额死亡里

比利时超额5%左右

奥密克戎真正的威力藏在超额死亡里

上面几个地区都非常不错,超额死亡率控制在5%上下,

 

下面是法国,15%超额死亡

奥密克戎真正的威力藏在超额死亡里

意大利12.75%

奥密克戎真正的威力藏在超额死亡里

西班牙14.39%

奥密克戎真正的威力藏在超额死亡里

经常被称为抗疫典范的丹麦9.6%

奥密克戎真正的威力藏在超额死亡里

也经常被称为抗议典范的芬兰 多死了15.4%

奥密克戎真正的威力藏在超额死亡里

大韩民国 15.23%

奥密克戎真正的威力藏在超额死亡里

韩国仅仅1月份就超额死亡15%,那么3月份感染高峰才到来的大韩民国到底未来会是个啥样子,其实现在谁都不知道,报出来的死亡人数真的对得上么?

最近被经常拿出来举例子证明是大号流感的新西兰是什么情况呢?

新西兰17%超额死亡!!!!!!

要知道,新西兰的高峰也是3月份才到来!这才统计到第10周

报出来新冠死亡那么低的新西兰,

到底因为什么神奇的原因让超额死亡到达了17%?

 

奥密克戎真正的威力藏在超额死亡里

这就完事了么?

永远不要低估奥密克戎和医疗挤兑的影响

我们来看看东欧国家,两个比较好的,立陶宛和拉脱维亚,10%超额死亡

奥密克戎真正的威力藏在超额死亡里

奥密克戎真正的威力藏在超额死亡里

第二梯队,爱沙尼亚15%,斯洛文尼亚17%

奥密克戎真正的威力藏在超额死亡里

奥密克戎真正的威力藏在超额死亡里

第三梯队,波兰超额22%,克罗地亚25%

奥密克戎真正的威力藏在超额死亡里

奥密克戎真正的威力藏在超额死亡里

欧洲的顶流,保加利亚 37.39%

奥密克戎真正的威力藏在超额死亡里

大家还记得美利坚多少么?

再帮大家回忆一下

31%

奥密克戎真正的威力藏在超额死亡里

如果把USA放在欧洲那就是个顶流的存在。

不过虽然他不在欧洲,但是有一个国家跟他源远流长,

那就是

以色列!

又一个被吹成抗议典范,同时接种率非常高的以色列

我们之前的视频里说了

接种率高并不是对抗疫情的最关键因素!

 

很多人不服,在这吹mRNA疫苗和辉瑞神药,仿佛mRNA疫苗是解救世界的关键

那么来看看以色列的情况吧!

奥密克戎真正的威力藏在超额死亡里

35%超额死亡!!!!

这就是拿来吹mRNA疫苗牛逼无比,同时接种率也奇高无比的以色列!

很多人提到美国死人多,就说美国接种率不高!

那么以色列呢!?

都在推进第四针了!听说第五针也在准备中了

牛逼无比的mRNA疫苗加接种率高真的能避免死亡么?

那么这35%的超额死亡是怎么刷出来的?

当然,美利坚这么拉胯,幸好还有别的国家给他垫了个底!

一图镇楼!

超额死亡51%的智利,当然,没有人关心智利了!

 

奥密克戎真正的威力藏在超额死亡里

别问为啥没有新加坡?

因为这文章配的网站没有新加坡的数据,我也没法子给你变出来。

但是拿来天天吹新冠死亡率超低的新西兰和以色列的例子不能够说明问题么?

请问他们的超额死亡是怎么刷出来的?

新冠已经不如流感了?

有了mRNA疫苗高接种率就可以躺平了?

有了辉瑞神药就能可以不怕新冠了?

问过以色列和新西兰没有统计在新冠死亡里的,

但多死了的那些人了吗?

转自:https://mp.weixin.qq.com/s/FrOf41mJnub5wWow7M5Yrg

万科2021年报点评:活下去的代价

声明:我从不推荐股票,所有文章都是只针对企业基本面。研究企业是长期持续的过程,谈不上择时,所谈个股的股价波动与本文无关。市场瞬息万变,所有的研究和分析都是有时效性的,请勿刻舟求剑。

一、净利润大幅下滑的原因

万科的年报出台,引起一片哗然。净利润的增速比之前所有悲观的数据还要悲观,原来有券商预测到归母净利润会跌到250亿,结果实际数据竟然是225亿,基本上超出了市场上所有人的预料。

房企的营收大都是两到三年前销售额的转化,2018年万科公开喊出了“活下去”,大幅放慢了发展速度。2019年万科的权益金额比2018年是下降的,今年能做到8%的营收增速已经不容易,相比之下招商蛇口的营收增速是23%,保利发展是17%,可以做到以量补价,净利润下降的幅度相对就小很多,而万科则无货可补。

当初喊“活下去”,市场认为万科是审慎拿地,控制数量提升质量,但从如今的结算毛利率来看,万科并没体现当初“活下去”的收获。房地产开发及相关资产经营业务的毛利率同比下滑了7.63%,为21.74%,比同行业略好,但不足以弥补营业收入下降的幅度。

量缩率减,是净利润下跌了45%的主因。从结果来看,万科的“活下去”更多是体现在净负债率上,2021年的净负债率低到了29.7%,大大少于同行,用利润换来了安全,一得一失吧。

净利润大幅下滑的另外两个因素,一个是投资收益下降69亿元,另一个则是公司对部分项目、个别股权投资等进行减值,合计减少归属上市公司股东的净利润约26亿元。这两项是当前市场不景气状况下的客观反映,无可厚非。

从净利润下滑的结构上来看,报表整体净利润是从592亿下滑到380亿,下跌了35.8%,但少数股东损益只下滑了12.58%,而归母净利润的下滑幅度却高达45.75%。有人会表示怀疑,但因为投资收益和资产减值两项的下降金额较高,这个差额也是可以解释的,从万科过往少数股东损益和归母净利润的变化对比,以及参照保利、招商蛇口的公司的可比数据变化来看,性质也相差不多。

二、回购缺少力度

年报中关于回购的说法,引起了更多争议。公司拟出资20亿-25亿,对A股股票进行回购,回购价格不超过人民币18.27元/股,回购的股份将全部用于出售。公告前万科A的收盘价是18.98元,比预计在4月底可以进行的回购高出了0.71元。这种以后要用于出售的股票,给出这个目标价位,是托市还是砸盘呢?

公告是之前拟好的,18.98元的价格应该是在收盘前确定的,但3月29日的收盘价就有17.48元了,0.8元只是不到5%的空间,一个上市公司,应该不会考虑不到吧?万科目前的净资产是20.3元,现在这个回购说法,更像是为了安慰一直要求回购的小股东:确实是提出回购了啊!

三、现金大幅下降

年报里最出乎我意料的数字,是经营活动产生的现金流量净额同比下降了92.27%,只有41.13亿 。虽然前三个季度的数据也不好看,但房企四季度数据才是最重要的,去年4季度就大增了近200亿,2019年前三个季度只有17.34亿,而年报时就增长到456.87亿。同时,期末现金及现金等价物余额为1407.08亿,这是2016年以来最少的一次。

“活下去”是为了捡到更便宜的战利品,万科也确实捡到了一些,但与期末现金及现金等价物余额继续保持增长态势的招商蛇口、华润置地相比,还存在着国企背景与央企背景的差距。很多投资者对万科过去几个月拿地的速度并不满意,现在看起来,这不是态度问题,而是钱的问题。

四、分红体现诚意

年报中为数不多的亮点,是分红。“2021 年度拟合计派发现金股息人民币 11,276,621,873.75 元(含税),占公司 2021 年归属于母公司股东的净利润的比例为 50.06%,不送红股,不以公积金转增股本。如以 2021 年末公司总股份数 11,625,383,375 股计算,每 10 股派送人民币 9.70 元(含税)现金股息。”

这对小股东们是个安慰,如果从经营角度来看,现在满地战利品的时候,这112亿如果去并购和拿地,对股东的长期回报会更好。但考虑到万科股价持续低迷,大比例分红也是稳定市值的重要手段,可以理解。

整体来说,这份年报真实地体现了房企的现状,尤其是万科这样国有背景混合所有制企业的现状。从各项数据的呈现来看,还是比较客观的。2020年万科的权益金额相比2019年有10%左右的增长,毛利率也基本不会有更大的下降空间,如果今年后三个季度,房地产市场整体稳定回暖,万科2022年的年报数据应该会恢复增长态势。

就目前的情况来看,关键点还是在能否尽快恢复融资速度,多购置一些当前质量好、毛利润又高的好地,现在拿到一块地,收益会是去年同期的倍数。去年年底万科提过“春天里”,现在春天到了,拭目以待吧。

转自:https://mp.weixin.qq.com/s/scBNgA_ZHiOIMl-9xoq2Fw

PONG – 100行代码写一个弹球游戏

 

今天跟大家讲一讲:如何做游戏

游戏的主题是弹球游戏《PONG》,它是史上第一款街机游戏。因此选它作为我这个游戏开发系列的第一期主题。

游戏引擎用的是 Python 的一个游戏库:pgzero。它是对 pygame 的一个封装,让你不需要写多余的套路代码,只要配置游戏的内容逻辑即可。

我们这个游戏用它来写,一共只需要100行代码。

首先需要安装 python 环境。这一步没搞定的同学,可以参考我们 python 入门教程:python666.cn,上面有详细图文介绍。

然后需要安装 pgzero 库,可以命令行下通过 pip 命令安装:

pip install pgzero

安装完,运行一句

pgzrun.go()

我们的游戏世界之门就已经打开了。

PONG - 100行代码写一个弹球游戏

现在上面还是混沌初开,一片漆黑。

设定一个矩形的左上角坐标和长宽,在游戏的绘制函数 draw 中用指定颜色填充,我们就得到了一个矩形。

pad_1 = Rect((20, 20), (10, 100))
def draw():    screen.clear()    screen.draw.filled_rect(pad_1, 'white')

适当调整一下,就得到了一块游戏中用来挡球的板。

PONG - 100行代码写一个弹球游戏

在游戏的更新函数中增加判断,当键盘上的“上”、“下”按键被按下时,修改挡板的y坐标,就可以在游戏中控制挡板的移动了。

PAD_SPEED = 10
def update(dt):    if keyboard.up:        pad_1.y -= PAD_SPEED    elif keyboard.down:        pad_1.y += PAD_SPEED

这样就已经完成 PONG 游戏中的玩家操控角色:一块可上下移动的挡板。而现在我们用到的代码仅仅10行。

 

有的小伙伴可能注意到了,这里有两个函数,一个叫 draw,它是负责游戏中的画面绘制,另一个叫 update,它负责游戏中的逻辑更新。

 

我们经常听到说游戏运行时速度是每秒30帧、60帧之类,或者叫做 FPS(Frames Per Second)。draw 和 update 就是在游戏的“一帧”画面中所要做的事情。你的计算机或者游戏主机的性能越高,每一帧所花费的计算时间就越少,游戏帧数就可以更高,游戏体验也就更流畅。

创建一个叫做 Ball 的类型,属性值包括位置和速度。然后,在绘图函数中以小球的位置为圆心画一个圆,在更新函数中按照匀速直线运动位移公式,也就是 位移=速度x时间,计算出小球下一帧的位置。如此就实现了一个会运动的小球。

class Ball():    def __init__(self):        self.pos = [300200]        self.speed = [1, 1]            def update(self, dt):        for i in range(2):            self.pos[i] += self.speed[i] * dt
ball = Ball()
def draw():    screen.clear()    screen.draw.filled_rect(pad_1, 'white')    screen.draw.filled_circle(ball.pos, BALL_RADIUS, 'white')  

再设置一下边界条件,让小球到达屏幕边缘时可以改变对应的速度方向,碰到上下边缘就将y速度分量乘以-1,超出左右边缘则位置重新设置回屏幕中心。

class Ball():    ...      
    def update(self, dt):        for i in range(2):            self.pos[i] += self.speed[i]
        if self.pos[1] < 0 or self.pos[1] > HEIGHT:            self.speed[1] *= -1        if self.pos[0] < 0 or self.pos[0] > WIDTH:            self.reset()

有了板,有了球,接下来就是让他们之间产生关联。

在更新函数中做一个碰撞检测:如果板子的矩形与球的圆心产生了交集,就让球反弹回去。

def update(dt):    ...        ball.update(dt)
    if pad_1.collidepoint(ball.pos) and ball.speed[0] < 0:        ball.speed[0] *= -1

到这一步,游戏的核心物理规则就已经定义完毕。

按照同样的方法,在屏幕的右侧创建第二块板,通过另外的按键进行控制。然后,当小球超出左右边界时,分别给对面一方得分。

class Ball():    ...      
    def dead(self, side):        scores[side] += 1        self.reset()

这样,一个最最简单的,双人版弹球游戏就完成了。

当然,如果你找不到另一个人陪你一起玩,也可以让自己的左手跟右手玩。

或者,给一侧板增加一点自动追踪的代码:让板的位置随着球的位置移动。这也算是一个游戏AI了。

def auto_move_pad(dt):    if ball.pos[0] > WIDTH / 2 and ball.speed[0] > 0:        if pad_2.y + pad_2.height * 0.25 > ball.pos[1]:            pad_2.y -= PAD_SPEED * dt            if pad_2.top < 0:                pad_2.top = 0        elif pad_2.y + pad_2.height * 0.75 < ball.pos[1]:            pad_2.y += PAD_SPEED * dt            if pad_2.bottom > HEIGHT:                pad_2.bottom = HEIGHT

至此,一个具备完整核心玩法的弹球游戏 PONG 已经完成了。加上空格也不到100行代码。特别适合编程新手刚刚接触游戏开发的小伙伴进行练习。

不过,我还给游戏增加了一点点细节,感兴趣的小伙伴可点击文章开头的视频进行观看。喜欢的话欢迎点赞和转发!

PONG - 100行代码写一个弹球游戏

之后我还会来尝试更多的游戏类型,更多的玩法。争取完成最初立下的FLAG:实现100个游戏如果你想看某类游戏或者某个游戏的实现,或者对某个实现细节有疑问,也可以留言中告诉我,我会优先考虑。

代码已经开源,获取请在公众号“Crossin的编程教室”后台回复关键词:pong



转自:https://mp.weixin.qq.com/s/64iupQIhUf0n45p0qlJ9xw

比正则快 M 倍以上!Python 替换字符串的新姿势

比正则快 M 倍以上!Python 替换字符串的新姿势

FlashText 算法是由 Vikash Singh 于2017年发表的大规模关键词替换算法,这个算法的时间复杂度仅由文本长度(N)决定,算法时间复杂度为O(N)。

 

而对于正则表达式的替换,算法时间复杂度还需要考虑被替换的关键词数量(M),因此时间复杂度为O(MxN)。

简而言之,基于FlashText算法的字符串替换比正则表达式替换快M倍以上,这个M是需要替换的关键词数量,关键词越多,FlashText算法的优势就越明显

下面就给大家介绍如何在 Python 中基于 flashtext 模块使用 FlashText 算法进行字符串查找和替换,如果觉得对你的项目团队很有帮助,请记得转发一下哦。

1.准备

pip install flashtext
2.基本使用

提取关键词

一个最基本的提取关键词的例子如下:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 处理目标句子并提取相应关键词
keywords_found = keyword_processor.extract_keywords('I love Big Apple and Bay Area.')
# 4. 结果
print(keywords_found)
# ['New York', 'Bay Area']

其中 add_keyword 的第一个参数代表需要被查找的关键词,第二个参数是给这个关键词一个别名,如果找到了则以别名显示。

替换关键词

如果你想要替换关键词,只需要调用处理器的 replace_keywords 函数:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('New Delhi', 'NCR region')
# 3. 替换关键词
new_sentence = keyword_processor.replace_keywords('I love Big Apple and new delhi.')
# 4. 结果
print(new_sentence)
# 'I love New York and NCR region.'

关键词大小写敏感

如果你需要精确提取,识别大小写字母,那么你可以在处理器初始化的时候设定 sensitive 参数:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器, 注意设置大小写敏感(case_sensitive)为TRUE
keyword_processor = KeywordProcessor(case_sensitive=True)
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 处理目标句子并提取相应关键词
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.')
# 4. 结果
print(keywords_found)
# ['Bay Area']

标记关键词位置

如果你需要获取关键词在句子中的位置,在 extract_keywords 的时候添加 span_info=True 参数即可:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 处理目标句子并提取相应关键词, 并标记关键词的起始、终止位置
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.', span_info=True)
# 4. 结果
print(keywords_found)
# [('New York', 7, 16), ('Bay Area', 21, 29)]

获取目前所有的关键词

如果你需要获取当前已经添加的所有关键词,只需要调用处理器的 get_all_keywords 函数:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('j2ee', 'Java')
keyword_processor.add_keyword('colour', 'color')
# 3. 获取所有关键词
keyword_processor.get_all_keywords()
# output: {'colour': 'color', 'j2ee': 'Java'}

批量添加关键词

批量添加关键词有两种方法,一种是通过词典,一种是通过数组:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. (第一种)通过字典批量添加关键词
keyword_dict = {
    "java": ["java_2e", "java programing"],
    "product management": ["PM", "product manager"]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 2. (第二种)通过数组批量添加关键词
keyword_processor.add_keywords_from_list(["java", "python"])
# 3. 第一种的提取效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')
# output ['product management', 'java']

单一或批量删除关键词

删除关键词也非常简单,和添加类似:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 通过字典批量添加关键词
keyword_dict = {
    "java": ["java_2e", "java programing"],
    "product management": ["PM", "product manager"]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 3. 提取效果如下
print(keyword_processor.extract_keywords('I am a product manager for a java_2e platform'))
# ['product management', 'java']
# 4. 单个删除关键词
keyword_processor.remove_keyword('java_2e')
# 5. 批量删除关键词,也是可以通过词典或者数组的形式
keyword_processor.remove_keywords_from_dict({"product management": ["PM"]})
keyword_processor.remove_keywords_from_list(["java programing"])
# 6. 删除了java programing关键词后的效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')
# ['product management']
3.高级使用

支持额外信息

前面提到在添加关键词的时候第二个参数为其别名,其实你不仅可以指示别名,还可以将额外信息放到第二个参数中:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
kp = KeywordProcessor()
# 2. 添加关键词并附带额外信息
kp.add_keyword('Taj Mahal', ('Monument', 'Taj Mahal'))
kp.add_keyword('Delhi', ('Location', 'Delhi'))
# 3. 效果如下
kp.extract_keywords('Taj Mahal is in Delhi.')
# [('Monument', 'Taj Mahal'), ('Location', 'Delhi')]

这样,在提取关键词的时候,你还能拿到其他一些你想要在得到此关键词时输出的信息。

支持特殊单词边界

Flashtext 检测的单词边界一般局限于 w [A-Za-z0-9_] 外的任意字符,但是如果你想添加某些特殊字符作为单词的一部分也是可以实现的:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple')
# 3. 正常效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# ['Big Apple']
# 4. 将 '/' 作为单词一部分
keyword_processor.add_non_word_boundary('/')
# 5. 优化后的效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# []
4.结尾

个人认为这个模块已经满足我们的基本使用了,如果你有一些该模块提供的功能之外的使用需求,可以给 flashtext 贡献代码:
https://github.com/vi3k6i5/flashtext

附 FlashText 与正则相比 查询关键词 所花费的时间之比:

比正则快 M 倍以上!Python 替换字符串的新姿势

附 FlashText 与正则相比 替换关键词 所花费的时间之比:

比正则快 M 倍以上!Python 替换字符串的新姿势

– EOF –

转自:https://mp.weixin.qq.com/s/dawYdtbetE5IQ-Wq3cqakA

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展
因为变量很多,信息的准确性和全面度也不够,所以做疫情预测是极难而且极不讨好的事情。但是我们今天还是想一起来聊聊,一共五个问题,每个都很硬核。最后特别声明下,一家之言,仅供参考。

作为全球最大贸易口岸城市乃至经济中心城市,上海这一波疫情的进展牵动人心。那么,目前上海的疫情究竟处于一个什么样的阶段?后期大概率会如何进展? 

要回答这个问题,我们先简单科普一下传染病流行的一般规律。

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展

如上图,传染病流行一般可分为五个阶段,新冠亦如是。

一般来说,第一步总归先是有感染,这种感染是隐性的,不被察觉的;随后进入潜伏期,开始在人群当中扩散;再往后出现爆发流行,大量的病人被筛查出来,病例呈现指数级上升;当传染源和传染途径被控制住以后,新增病例进入一个平台期,每天有不少病人,但是病人的绝对数量相对保持平稳;再到后面就是消散和终止。

当然,上面这张图只描述了一个波峰的情况。在真实世界中,无论是一百多年前的西班牙流感,抑或是当下的新冠肺炎,都是多个波峰,一波接一波,绵延无绝期。

综合今天各方信源,封控之后浦东新区核酸普筛的初步结果进一步表明了疫情的复杂和严峻程度。3月26日,上海整体新出现病例的地点高达463个,各个区新出现病例的地点均比较多。

而当我们把视线转回浦西,以长宁为代表的原来新增感染数量相对较少的区,3月28日筛出来的数字出现了倍增,新增地址也极其分散。这进一步证实了“本市疫情呈现区域聚集和全市散发并存两个特点,存在面上爆发的潜在风险”(28日新闻发布会,吴凡通报)的基本判断。

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展

上图,28日长宁区新增点位;下图,26各市辖区新发现感染点地图,不同颜色代表不同区

综上,我们的判断是上海疫情目前应该还处于早期阶段,介于快速扩散期和爆发流行期之间。控制不好的话,接下来每天的新增数量会呈现更大规模的爆发,然后才能转入平台期。

换句话说,新增感染数目前仍未“登顶”。

至于后期如何进展,这将很大程度上取决于政府的管控措施以及广大市民的自律和配合程度。

截至目前,魔都已经“祭出”有新冠疫情以来最大力度的管控措施。

正如本公号在27日的推文中所说,首批封控面积4000平方公里左右,占上海市域面积超过60%;涉及人口超过800万(加上流动人口大约在900万),占比超过三分之一。

传染病流行的一般规律告诉我们,强有力的干预(管控)措施会降低感染量。那目前上海的措施预期会对疫情进展产生哪些效果或者说影响呢?

先说结论:已经并且将会大幅度压低这一波的感染总量。

众所周知,控制传染源、切断传播途径、保护易感人群,这是预防传染病中最为重要的三种措施。通过封城这种非常态的极端手段,限制人员流动,可以同时达成上述三重效果。我们在此前的推文中已经多次讲过,因为奥密克戎BA.2变体的高传播性和隐匿性,大量的断链和失链导致我们没有办法继续精准防控,目前唯一的选项就是封控(不管是半城还是全城,道理都一样),通过让城市(或者说部分区域)完全静止下来这样一个办法,一方面彻底切断传染链条,另一方面通过核酸筛查让那些隐藏的病例得到充分暴露。要达到这样的效果,核心要义有二,一是核酸检测要全覆盖,确保无漏网之“人”;二是严控人员流动,一旦“禁足”不彻底,前面那些筛查就白做了。

 

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展

按照27日的通告,有司计划是在4+4天之内完成这项工作。

我们还可以从更宏观的视角看一下干预(管控)措施是如何影响疫情进展的。讲到这里可参见新冠疫情以来欧美的防疫措施,他们经常一会儿松一会儿紧的调整防控措施,其本质上就是根据当下的情况用不同的干预力度去压曲线,最理想的状态就是把感染峰值压在医疗容量之内,避免医疗挤兑。当然,他们经常没做到。

 

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展

讲回到上海,如果没有强力干预,这一波疫情的基本走向就会呈现第一个问题中所说的五个时期(阶段)。而强有力干预的结果,就是把这个曲线压低,同时往后推,因为干预一般会拉长每一波的时长。

干预得越强,会越有效的降低峰值,但是降低不了时长。因为封控(阻断人群接触)降低不了疾病本身的发展进程,包括潜伏期,但治疗会。

也因为疾病的进展是个体行为,每一个个体的疾病进展决定了这一波的流行周期,所以对每个个体进行治疗可以缩短流行周期。

27日封控通告一出来,当时就有很多人议论4天的封控会不会短了点。等到这两天新增数字更加吓人,担心的人自然更多了。那么接下来我们聊第三个问题,4天是不是真的不够?万一不够,后续会有产生哪些影响?

老实说,我们也是有担心的。

原因很简单:

四天之内,我们能否把黄浦江东边(或西边)区域内所有人群一个不漏全部筛查完?答案肯定是yes,因为专家组一定极其严肃认真负责任的评估过;但是,筛个一两次或者两三次就万事大吉了吗?上千万人的体量啊,就算我们有这样的一个力量,有这样一个核酸的检测能力,短短4天之内,也完全有可能出现有的人刚刚被感染还没有筛查出来就被解封的情况,因为奥密克戎潜伏期的离散度一定会造成有一部分人的潜伏期会超过四天。

所以,4天的封控顶多只能把那些一个阳性都没有的小区,那些看起来完全安全(其实也是可能存在“潜伏者”的)的小区给“解放”出来;而那些查出来有病例的有阳性感染者的小区(重点区域),谁敢不继续封控?

所以结论是:浦东几乎没有可能在4天后全部放开,这次筛查出来的重点区域只能选择继续封控,从当下的“半城封控状态回到之前的“网格化封控状态;反之,如果4天后浦东所有地区真的同时解封,那就肯定清不了零,而且后面继续清零的难度和代价将变得更大。

我们相信这个问题专家组一定是预见到的,而且我们坚信专家组一定是有对策和预案的。因为他们掌握的信息更全面更准确,他们的水平也肯定比我们这些民间人士高太多。

第四个问题,感染数量快速增长,接下来会击穿医疗容量吗?

先说事实。截至目前,我们尚未查到上海此轮疫情的重症率数据。

我们总体保持乐观。

首先,国外、包括国内其他城市的既有数据已经充分证实了奥密克戎BA.2变体的低致病性。

其次,上海的医疗容量是有相当深度的。

对于医疗容量这个概念,现在普遍存在一种错误的理解。其实医疗容量有两层概念,一种是不影响正常的医疗秩序的情况下,是不是有足够的人员和床位去支撑核酸的检查和病人的管理。如果是这个定义,那我们在一定意义上讲已经被“击穿”了,因为疫情,我们几乎所有医院的正常医疗秩序都受到不同程度的影响。

但是第二层概念,当医疗机构都以抗疫为一段时间内的主要职能,除了保留急诊、放化疗和血透等特殊的没有办法停下来的那些医疗工作,其它的门诊住院医疗工作基本都暂停的话,我们的人员储备是足够的,我们的医疗容量就会得到多倍数的放大。虽然一直存在“除了新冠其它都不是病”的追问,但眼下的现实就是在集中优势资源打歼灭战。所以,大家都可以看到,这次苏浙派来支援的2000名医疗同行,基本都是具有丰富经验的做核酸检查的人员;而不是主要负责医治的医生。

而且,魔都近期一直在做的重要工作之一就是迅速扩大医疗容量,这一点大家都看到报道了,我们不展开讲。

当然,是否会击穿医疗容量也会取决于具体的策略。譬如,无症状、包括轻症患者已经不再送往公卫和定点医院,不再占用医疗资源。反观以前,如果把这么庞大的无症状和轻症患者都送到医院去,再多的病床也不够。

还有最后一点,就是通过积极的治疗来缩短病人的治疗期,比如大幅度推广合适的药物,这样也能节省医疗资源。

大家都注意到,3月24日凌晨,国家传染病医学中心主任张文宏在新浪微博中讲了一句上海“绝不走抗疫回头路”。而昨天,3月28日,大V胡锡进发文称每一轮抗疫都必须同时是探索。那么上海下一步怎么样才能继续坚持科学精准防控,不走回头路?

直白点说,不走回头路基本也就两个选择:要么继续摸索降低清零成本,要么改变抗疫路线(这个选项已经自动排除)。

从感情上讲,真的不希望上海和其它城市一样,因为我们都知道这样一定不是最终的出路。而经此一役,相信所有人都清晰地看明白了一个基本的事实:我们现有的疾控体系不可能一直防住奥密克戎这样传播性极强而隐匿性又极高的超级病毒。常在河边走,哪有不湿鞋。

这个问题实在太难,恐怕只能留给魔都政府和决策精英来回答了。

讲到最后,来几个tips吧:

1、疫情不会很快结束,最艰难的时刻可能还未到来,盲目乐观会让你的生活更加被动;但大家也要主动屏蔽一些负面信息尤其是谣言的对情绪和心态的影响;

2、请记得时时刻刻做好个人防护;如果你属于“老弱病残”一类,更加要当心;

3、没打疫苗的赶紧找机会去打,你怎么知道你就不是那个倒霉的5%?

当下魔都疫情五问 | 新增数字怎么看,接下来可能如何发展

·END·
 转自:https://mp.weixin.qq.com/s/o6HOMxOVXxCEML59N96JSg