利用PowerBI分析疫情数据
- 2020 年 2 月 21 日
- 笔记
“大疫”当前,大家每天醒来第一件事就是打开手机,看看本地又新增几个确诊,老家又新增多少疑似,亲朋好友那边又有哪些传言……与其在家闲出P,为何不借助平台数据,用PowerBI来小试一把牛刀呢。
01 数据来源
数据源自“丁香园”,已有人整理好,只需在Github上下载(如果无法访问该网址,请科学上网)下载地址:
https://github.com/BlankerL/DXY-COVID-19-Data/blob/master/csv/DXYArea.csv

02 数据导入
导入之前,先用excel把文件打开,看看都有哪些字段,涵盖了哪些省市

粗看之下还算清晰,最后一列“更新时间”有点问题。没关系,直接在EXCEL里把单元格式改成日期型即可

打开PBI,导入数据。下载文件是CSV,导入时注意别选EXCEL数据源

03 数据清洗
数据导入后,字段名改不改中文看各人习惯。就以我自己所在地江苏常州为例(毕竟自己城市每天的数据要相对熟一点),先把城市筛选出来。

04 重点来了!!!有两个难点:
1)从更新时间上看,丁香园会每天刷新多次数据。如何取得每天最后一条数据?
2)每条数据记录的不是新增人数,而是汇总人数。如何得到每天增量数据,而不是总量?

根据“更新时间”新建“更新日期”列,把年月日单独列出来。

新建表: “精简时间表”=
SUMMARIZE('DXYArea',
DXYArea[省],DXYArea[市],DXYArea[更新日期],
"总死亡",MAX(DXYArea[市死亡]),
"总治愈",MAX(DXYArea[市治愈]),
"总疑似",MAX(DXYArea[市疑似]),
"总确诊",MAX(DXYArea[市确诊]),
"更新时间",MAX(DXYArea[更新时间])
)
SUMMARIZE函数可以对表进行分组(“SUMMARIZECOLUMNS”函数也有同样功效)。对于上表中“省”“市”这样重复值较多的列可以直接合并,而对于数据列值,则通过MAX函数取最大值。若前后两次数据无变化,则根据MAX(“更新时间”)来取最后一次更新时间。

好,第一个问题解决,我们已得到了每天最后一条数据。
05 问题2
第二个问题,如何通过每天发布的汇总数,得到每日增量?
如果想在原表本身通过新建列来实现,公式的复杂程度一定小不了。那是不是可以跳出表框架,直接用度量值来实现呢?
总确诊 = SUM('精简时间表'[总确诊])
总确诊_昨日 = CALCULATE( [总确诊], DATEADD('精简时间表'[更新日期],-1,DAY))
今日确诊 = [总确诊]-[总确诊_昨日]
昨天确诊 = CALCULATE( [今日确诊], DATEADD('精简时间表'[更新日期],-1,DAY))
基础度量值有了,其他诸如疑似、治愈、现存确诊,周累计、月累计、环比同比等这些度量值,就自由发挥吧!
省内兄弟城市对比,外省同级城市对比也可以搞起来,尤其是江苏弟兄们,继续发扬散装内斗精神,保持风格

本文作者:东军