CovidNow 网站是由4位大马人 Henry Lim, Calum Lim, Sheng Han Lim 及 Roshen Maghhan 义务和卫生部及数据开放社区合作的成果. 如要更了解开发团队,可以访问 https://covidnow.moh.gov.my/about/.

这个新的网站covidnow.moh.gov.my 用户界面及用户体验比起旧的covid-19.moh.gov.my/terkini-negeri 来说简直差好多。自从新的网站 CovidNow 推出后,卫生部也不会再更新旧的网站任何关于新冠肺炎在我国的数据。

到底什么是开放数据,为何开放数据是如此重要或来带什么益处?

开放数据是任何人都可以自由使用、发布或分发的数据。开放数据也应该容易获取及容易理解数据内容,造成很多的开放数据都是以csv或excel格式发布。
要准备发布手头上的数据成为开放数据前,政府或组织必须重新过滤或构建这些数据,以免一些保密的资料也被泄露出去。这也造成了开放数据在我国没有很好的被接纳,因为需要额外的资源来支撑这个开放数据。

那为什么还是要坚持支持这个开放数据呢?其实开放数据的好处是在于,凭借当前的技术与知识,我们可以透过数据科学来深入了解这些数据分析,让我们可以做最好的判断甚至是可以预测未来的情况。比如,如果以现在新冠肺炎感染力,我国的ICU将会在什么时候超额,又或者是以现在的疫苗接种率,我国几时才会达到所谓的群体免疫。
那当然,开放数据不仅仅可以用在医疗保健相关,它也可以应用于政府、经济、社会、组织、交通、以及其他的部门。有了这个开放数据,我们就可以通过这个数据提高我们的生活水平。

如何从 COVIDNOW 网站提取或导入数据到您的Google Sheets表格?

若要提取数据,如每日新病例或疫苗接种率,相对容易的您可以从CovidNow网站提取数据,当然也可以从Github提取数据。我们将在下面给与一些示例。

要从 Github 中提取数据呢,需要使用 Github URL 及 ImportHTML() 的公式在Google Sheets表格里。例如,如果提取马来西亚案例数据,可以使用以下公式:

=Importhtml("https://github.com/MoH-Malaysia/covid19-public/blob/main/epidemic/cases_malaysia.csv","table",1)

*您可能会遇到列数不足的错误,只需在右侧添加更多列即可。

另外一种比较简单的方法呢就是直接从CovidNow网站提取或导入数据,您可以使用 ImportXML() 公式或使用 Google App Script 中的 UrlFetchApp.fetch() 功能这两种方法。

如果用 ImportXML() 公式的话,您必须了解XPath查询表达式XPath查询表达式以及了解一些关于网站HTML元素。那您就可以检查CovidNow网站的HTML元素(快建:Google Chrome 按 Ctrl+Shift+I 以检查元素),然后利用 XPath查询表达式来索取您要的数据。
例如,如果您希望提取每日新增本地病例数据,可以加以下公式到Google Sheets表格的格子里:

=index(IMPORTXML("https://covidnow.moh.gov.my/","//div[@class='grid gap-0 sm:gap-2']/div/div/div/div[@class='chip bg-gray-300 px-2 font-semibold']"),1,1)

Index()公式的作用是可以把那些你不需要的行列数据忽略。 ImportXML() 公式的功能是提取网页中的数据。毕竟 CovidNow网页里含有许多数据,我们就必须用 XPath查询表达式来提取我们想要的数据而已。
//div[@class=’grid gap-0 sm:gap-2′]/div/div/div/div[@class=’chip bg-gray-300 px-2 font-semibold’] 这个 XPath查询表达式可以理解为,告诉Importxml公式查找具有grid gap-0 sm:gap-2的class属性的div标签,然后我们将通过输入 /div 来选择嵌套在其中的div标签。直达到具有 chip bg-gray-300 px-2 font-semibold 的class属性的div标签局势我们要的每日新增本地病例数据。

要用Google App Script 操作的话,必须到 Google Sheets里的 Tools > Script Editor。
至于利用Google App Script的方法呢,您就必须使用 UrlFetchApp.fetch() 函数。您可以通过以下的列子,抄到Script Editor里并更改成您想要的数据:

function getCOVIDNOW(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var res;
  
 var data = UrlFetchApp.fetch("https://covidnow.moh.gov.my/").getContentText();
    try {
    //Logger.log("data: "+data);
    var values = data.match(/<div class="number flex justify-center gap-1.5"><div tabindex="-1" class="relative"><span>[0-9, \n]+/)[0]; //get total local cases value only
    Logger.log("values: "+values);
    var num = values.indexOf("\n")+1; //check for newline
    Logger.log("num: "+num);
    res = values.substring(num,values.length); //remove all html
    res = res.match(/[0-9,]+/)[0]; //get numbers only
    Logger.log("res: "+res);
 
    } catch(e) {
      res ="invalid";
    }
 
    ss.getRange("C5").setValue(res); //set value at cell C5
}

之后,通过单击 “Insert”>“Drawing绘图” 插入一个按钮来运行这个Script function。 在 Google Drawing绘图中设计您的按钮,然后按保存。 单击绘图右上角的 3 个点,然后单击分配脚本(Assign a Script)。 输入Script的名称,这个列子的话是 getCOVIDNOW 。 (如果您之前已分配脚本并想要更改功能,请在单击按钮的同时按键盘上的 Ctrl。)

如果还有些不明白的话大家可以透过以下的Google Sheets表格例子来了解:

在此复制

我们希望此贴可以被分享并帮助更多人了解开放数据及如何把网站的数据导入 Google 表格。

跟踪我们:
电报: t.me/cre8tivenowcn
Buy Me A Coffee (按 Follow 将我们的更新直接免费发送到您的电邮!)
面子书: facebook.com/cre8tivenow.cn
Instagram: instagram.com/cre8tivenow.cn
电邮: sales@creativenow.my