发布于 发表评论

什么是开放数据及好处? | 教你如何COVIDNOW 数据导入 Google 表格

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

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

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

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

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

有了这个开放数据,我们就可以通过这个数据提高我们的生活水平。

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

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

要从 Github 提取数据,请使用公式 ImportHTML() 和 Github URL,然后选择表 1。例如,提取马来西亚案例数据时,请使用以下公式:
=Importhtml(“//github.com/MoH-Malaysia/covid19-public/blob/main/epidemic/cases_malaysia.csv”,”table”,1)
*您可能会遇到列数不足的错误,只需在右侧添加更多列即可。

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

对于 ImportXML() 公式,您需要了解如何使用 XPath 查询并检查 HTML 元素 CovidNow 网站(按 Ctrl+Shift+I 使用 Google Chrome 检查元素)。
例如,如果您希望提取每日新增本地病例数据,可以加以下公式到Google Sheets表格的格子里: =index(IMPORTXML(“//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() 公式的功能是提取网页中的数据。

这个 XPath查询表达式可以理解为 div[@class='网格间隙-0 sm:间隙-2′] 寻找 <div> 具有 grid gap-0 sm:gap-2 类属性的标签。然后我们将选择 <div> 通过输入 /div 嵌套在其中的标签。最后,我们将选择 <div> 具有 chip bg-gray-300 px-2 font-semibold 类属性的标签。
毕竟 CovidNow网页里含有许多数据,我们就必须用 XPath查询表达式来提取我们想要的数据而已。

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

函数 getCOVIDNOW(){var ss = SpreadsheetApp.getActiveSpreadsheet(); var res; var data = UrlFetchApp.fetch(&quot;//covidnow.moh.gov.my/&quot;).getContentText(); 尝试{//Logger.log(&quot;data: &quot;+data); var values = data.match(/<div class="number flex justify-center gap-1.5"><div tabindex="-1" class="relative"><span>[0-9, \n]+/)[0]; //仅获取本地案例总数值 Logger.log(&quot;values: &quot;+values); var num = values.indexOf(&quot;\n&quot;)+1; //检查换行符 Logger.log(&quot;num: &quot;+num); res = values.substring(num,values.length); //删除所有 html res = res.match(/[0-9,]+/)[0]; //仅获取数字 Logger.log(&quot;res: &quot;+res); } catch(e) { res =&quot;invalid&quot;; } ss.getRange(&quot;C5&quot;).setValue(res); //设置单元格 C5 的值 }

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

如果还有些不明白的话大家可以透过以下的Google Sheets表格例子来了解: CovidNow 如上所述,可以通过各种方式访问网站。

在此复制您可以在工具 > 脚本编辑器中编辑或查看脚本。

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

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

留言