v1.3
利用疫情期间家里蹲的时间玩了下Tableau Public,希望能帮助到有需要的人。
工具
Tableau Public 2019.1.0 (20191.19.0123.1906) 64 位 (非商用版本是免费的)
Download Link: 国内连接速度可能较慢,可以百度下载资源
Open Dataset
API Link: 用 utf-8 decode
引用自: 新型冠状病毒全国疫情接口Api by Cc琎(这是我在国内网站找到最详细的肺炎疫情api,感谢大佬! 链接有时会失效 )
目录
处理open dataset
- 处理全国肺炎疫情数据
虽然Tableau Public支持json格式文件,但是直接转换的话数据非常混乱,所以我们需要把调用的json文件保存为.xlsx用MS excel进行转换和清理。
数据处理后导入TP:
- 手动输入银川市疫情追踪数据
疫情追踪的数据全部来自宁夏新闻网公众号,Link: 需要微信客户端打开
处理后的dataset:
制作worksheet(工作表)
确诊病例预测
- 首先将日期从string转换为date,并且设置成维度(dimension),将其他attributes设置为度量(measure)。
- 选择图表类型
第一个表展示的是从一月23日到2月3日全国确诊病患人数的变化,对于这种需要探究continous data(连续数据)随时间变化趋势的scenario一般采用折线图。 - 选择预测模型
紧接着到了TP我个人认为最powerful的功能之一,它可以帮你根据你的样本容量等factors自动帮你从八个Exponential smoothing methods里选择最合适的数据预测模型,不用纠结数据过拟合或者欠拟合等问题,对不是DS出身的童鞋(比如我)简直是福音。TP选用的是简单指数平滑(simple exponential smoothing, SES)。
已使用指数平滑法计算所有预测。
模型 | 质量指标 | 平滑系数
级别 趋势 季节 | RMSE MAE MASE MAPE AIC | Alpha Beta Gamma
累加 累加 无 1,388 1,255 0.76 53.8% 169 0.500 0.500 0.000
- 选择置信区间(预测区间)
一般而言,置信水平越高,生成的区间越宽,预测的可信度就越高。因为采集到的数据只有半个月,我们的样本数相对而言很小,所以如果用很高的置信水平,预测区间会变得非常宽失去效果,所以我采用了90%的置信水平。
- 添加趋势线
趋势线模型的选择是较为复杂的一步,首先不能用简单的线性回归,疫情感染不可能呈现正比例函数的趋势。接着如果按照纯理论分析,病毒的传播应该最符合指数模型,也就是几何级数增长模型,但是因为现实各种因素影响,实际曲线有极大可能不符合指数模型。所以我使用8阶多项式的模型以求达到R2的最大值。事实上也证明了我的推断,选择多项式时R2是0.997713,而指数模型为0.937001。 - 成图
基于23日到5日这13天的数据生成的数据预测曲线
TP Gallery
死亡率&治愈率 趋势分析
这里的死亡率与治愈率其实是不严谨的,因为死亡率是指因病死亡的个体占一定单位人口的比率,比如每十万人中因得艾滋病死亡的比率。更加确切的表述应当是病死率,即一定时间内因病死亡占患病人数的百分比。但是因为新型肺炎病毒对于现在的我们来说过于未知,官方并没有公布病程等信息,现在就暂且采用死亡/治愈和治愈/确诊来代表死亡率和治愈率。
- 选择图表类型
这里比较理想的选择是双折线或者折线与柱状图组合。因为要加预测区间,用两种类型的图标相对而言要更直观一些,所以选择了后者。 - 创建计算字段
//死亡率
[死亡]/[治愈]
//治愈率
[治愈]/[确诊]
为了更加直观,最好将比率改成百分比
- 选择预测模型&区间
预测模型SES, 置信区间同样是90%。 - 将所做的三张表放进仪表板(dashboard)里
TP Gallery
银川市病例追踪
- 处理数据
因为这部分没有public api或者open dataset,需要手动输入制作表格,我制作的excel表格如下图,用日期作为pk,经纬度需要用[百度拾取坐标系统,百度出来的误差太大,已舍弃]高德拾取系统进行获取,相比之下Google map实在好用太多。。 - data transformation and setup
首先将日期从string变成date,这里需要注意的是TP并不能直接读取从百度地图抓取的坐标,所以第一步在数据处理的时候需要把经纬度拆分,然后分别将经纬度转换为地理角色(geographical role),然后再拉进地图里。 - 地图
TP默认的地图信息量很少,即使在地图选项中开启了街道与高速公路选项,银川市的街道还是不能正确显示。庆幸的是TP支持从mapbox wms服务直接导入地图(这部分需要在MAPBOX官网注册账号然后获取自己customized的map style分享链接,这里不再赘述),更新地图后,街道位置信息变得更加直观。
随着样本的增多,也可以将date拖进页面(page)里,用来显示每天的病例追踪信息,如下图。
TP Gallery: 银川病例追踪
全国疫情地图仪表板的制作【v1.1更新】
成图
确诊,疑似与死亡每日新增变化量折线图
- 处理数据
TP有内嵌的difference函数,直接勾选即可 - 因为自变量相同,可以将三个折线图放进一个表里,如图
利用疑似与确诊病例求和来观测疫情拐点
根据中国工程院院士闻玉梅在新闻发布会上的描述,疑似感染数下降、发病数下降是拐点出现的标志。1 所以我们这里把疑似病例与确诊病例求和,然后将这一新的变量求对数(这里推荐一篇文章),取对数有两点原因:
- 首先,在不影响原数据数据相关性的前提下,压缩了变量范围,使数据变化的趋势更加直观。
- 接着,是为了减缓数据的整个值域中的在不同区间的差异带来的影响。在疫情初期和疫情爆发期相同的增量的差异敏感程度有很大不同,初期的100个增量与爆发期1000个增量的敏感度有可能是一致的。打个比方,同样是20块钱,加在电影票价上相较于涨在你想买的iphone上对你的决策的影响要大很多。
- 创建计算字段
//Name the measure - D+S
[疑似] + [确诊]
//Name the measure - ds对数
LN([D+S])
- 疑似与确诊求和的折线图可以直接plot出来,对数图表需要对和进行求对数再求差值。
- 成图
可以看出,虽然疫情进入了爆发期,每天的增量较初期已经不能同日而语,但是疫情变化趋势是日渐平稳的,说明整体疫情暂时还是处于可控,可预测的范围内。当对数差异愈趋近于0时说明疫情拐点即将到来。
更新日志
v1.0原稿
v1.1
- 利用mapbox更新地图信息与style
- 以城市名做区分,实现疫情严重程度的可视化
- 使用仪表板将不同的worksheet拼接到一起
v1.2
- 将不同worksheet拼接到dashboard里
- 新做了确诊,疑似和死亡difference的图表
- 新做了确诊+疑似的折线图(观测拐点)