【每周一坑】蜥蜴流感与贝叶斯定理
春季是流感的高发季节。不要觉得只是小小的“感冒”,严重起来甚至也会危及生命,而且还没有特效药。因此,身体不适请及时到医院检查。
今天的问题就与流感诊断有关。此题取自《深入浅出数据分析》一书中的贝叶斯统计一章。
最近流行起一种奇怪的流感,称作蜥蜴流感,虽不致命,但需隔离治疗。关于这种流感,我们已经通过大量统计得知以下事实:
总人口中有1%的人患有蜥蜴流感
若某人已患蜥蜴流感,诊断结果为阳性的概率为90%
若某人未患蜥蜴流感,诊断结果为阳性的概率为9%
如果现在你的诊断结果为阳性,那么你实际患病的可能性有多大?
这个问题可以通过“贝叶斯定理”直接计算得出结果。
(书中这里的公式有个符号不对,已修正)
不过今天的题,我希望你们用程序模拟一场蜥蜴流感。比如有10万个人,按照上述3条规则去模拟,最后去统计下检测结果阳性中有多少人是真正的患者。
输出示例:
再用贝叶斯公式计算一下,看看是否符合你的模拟实验结果?
通过这个实验,想必也会让你对检测结果阳性和实际患病之间的关系有新的认识。
期待各位同学提交解答。
提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。
往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。
【解答】用代码给图片配上文字
上周的题目涉及到图像处理的库,我们给了参考的方向,今天来说下具体方法。
其实库的调用很简单,来看看 @GS 同学基于 PIL 库的实现:
from PIL import Image, ImageDraw, ImageFont
# 字体
setFont = ImageFont.truetype(r"happyfont2016.ttf", 50)
# 颜色
fillColor = "#ff0000"
# 读取图片
image = Image.open("yuantu.jpg")
# 创建绘图对象
draw = ImageDraw.Draw(image) width, height = image.size
# 在图上绘制文字
draw.text((40, height - 90), u'陈独秀你坐下!!', font=setFont, fill=fillColor)
# 保存图片
image.save("yuantu.jpg", 'jpeg')
【效果】
要注意的地方:
原本的 PIL 库已停止维护,所以新的库叫 Pillow,通过 pip install pillow 安装,但在使用时仍然是 import PIL
默认的字体不支持中文,因此需要提供字体文件并指定。py2 也不支持中文,需要额外使用 freetype 库。
除了 PIL 库,OpenCV 库的 putText 方法也可以实现类似功能,但缺少对中文的支持:
import cv2 font = cv2.FONT_HERSHEY_SIMPLEX im = cv2.imread('showme.jpg') img=cv2.putText(im, 'Talk is cheap. Show me the code.', (50, 620), font, 1.5, (0,0,0), 3) cv2.imwrite("showme_out.jpg", img)
期待在下一期中看到你的代码!