继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

独家|一文了解Kaggle的开源数据集(附代码)

慕尼黑5497867
关注TA
已关注
手记 378
粉丝 23
获赞 77

独家|一文了解Kaggle的开源数据集(附代码)

作者:Vanessa Sochat

翻译:王雨桐

校对:冯羽

本文约5400字,建议阅读12分钟。

本文将从不同角度介绍Kaggle的开源数据集资源。

本文作者是斯坦福研究计算和斯坦福医学院的软件开发工程师。她是斯坦福Singularity的主要开发人员,是为斯坦福提供科研支持的带头人,也是Singularity Hub和Singularity Registry的首席开发者,这两者优化了基于容器的工作流部署和“科学即服务”能力。本文最初发表于其个人博客。

数据共享非常困难,但众所周知的是它在探索和回报上有很大潜力。一个典型的“共享操作”就像用移动硬盘传播信息,将压缩文件放在大学或云端服务器,或在一个安全的大学集群中存储大量数据(但会经常担心它被清除)。这是最理想的方法吗?这足够简单易行吗?为了回答以上问题,我们要考虑处理数据集需要经过的流程。如下所示:

独家|一文了解Kaggle的开源数据集(附代码)

事件的流程往往是循环的,因为数据的产生往往是一个流。从步骤1到步骤6,唯一让数据停止流动的理由是停止搜集数据。最理想的情况下,所有步骤可以自动实现。步骤1可能是核磁共振扫描图像的产生,步骤2可能是自动将初始形式转化为研究者所需形式,步骤3将其转移到私有的集群存储,步骤4被研究团队使用,随后步骤5和6(如果流程全部发生)是额外工作用来进一步处理数据并将其转移到共享地址。

通常情况下,我们在步骤4停止,因为此时足以满足实验要求、完成分析及论文撰写。讽刺的是,步骤5和6常常会有意外的收获。但是不言而喻的是,如果我分享数据集后,你抢先一步发表论文,我就会一无所获。数据类似于橙子,在放弃这个橙子之前要榨出它所有汁水,所以我当然不想这么做。但是有争议的是,如果分享数据集本身可以完成论文(或类似的成果)并且步骤4和5很简单,会有更多的数据共享。这就是我今天要讨论的主题,尽管没有可用的结论,我将告诉你分享Kaggle数据集非常简单。

变动数据

译者注:变动数据这个概念作者在其他文中提及,对变动数据的定义是未来一种理想的状态下,研究者可以专注于提出问题,软件工程师会为其提供数据。

我曾经讨论过变动数据的概念。总之,随着新数据的出现,我们可以更新对世界的理解以及一些有趣问题的答案。把知识比作静态的PDF并不恰当,因为它只代表一个时间点的状态。相反,变动数据体现我们为了证实或否认假设所积累的知识是变化的。为了将这种理想状态变为现实,我们要能轻易地满足其需求。现在,共享数据是刊物发表后的人工操作。许多期刊鼓励或要求这种行为,研究人员可以把某些时间点的数据集上传到各个平台。尽管这种做法聊胜于无,但我认为这不是了解世界最好的方式。相比于静态文章,我们应该能把一组数据输入到算法中,然后得到一个新的答案。我们希望在数据产生时自动完成数据共享,并可供所有想研究的人使用。现在看来这个目标可能过于崇高,但我们可以想象在这两个极端中间的情况。如何通过一个简单的流程来自动生成和共享数据集?可能如下所示:

独家|一文了解Kaggle的开源数据集(附代码)

步骤4到6同上(研究员完成分析),但不是一个组织独享数据,它可供数千人使用。变化在于我们在步骤3增加了持续集成这个助手,使处理和共享数据变得容易。我们往往认为持续集成(CI)用于测试或部署,但是它在数据共享中也是有价值的工具。基于这个想法的本质,我们将它命名为“持续数据”。一旦数据被处理并传输到研究组的存储中,它也可能经历持续数据的步骤,将其打包以便共享。

小结:

我们需要在存储这一步中激发数据共享,并为研究者提供支持。机构要配备足够的数据工程师,并优先开发用于此任务的组织标准和工具。与此同时,小型研究计算小组可以帮助研究者完成目标。研究者应寻求帮助来分享他们的数据集。

Kaggle API

尽管更大的,机构层面的资源会更理想,但同时我们可以利用开源的免费资源,如Kaggle。对于初期的科学再现性,我认为Kaggle具备Github那样的潜力。如果共享数据集是简单而有趣的并且有潜在的回报,Kaggle可以对成规模的探索和协作产生影响。但我们必须从某个地方开始!我决定首先展示我可以使用Kaggle API来上传数据集。在网页接口中实现相当容易,而且通过命令行执行也很容易。简而言之,我们所需要的只是一个包含数据文件和元数据(json文件)的目录,我们可以将其指向API客户端。例如,这里是我上传的一个数据集:

独家|一文了解Kaggle的开源数据集(附代码)

datapackage.json用来描述上传的内容。

独家|一文了解Kaggle的开源数据集(附代码)

那么,向别人共享数据集以供使用和探索有多难呢?您可以下载证书来对服务进行身份验证。然后将文件(.tar.gz或.csv)放在文件夹中,创建json文件,并将工具指向它。这很简单,你能在没有任何额外帮助的情况下完成所有事情。将这样的脚本插入到一些持续集成中,以便在将数据集添加到存储时更新数据集,这是非常简单的。

你的工具!

我创建了一个Docker容器,它提供了一个简单的示例,用于与Kaggle API交互并生成数据集。我将介绍脚本的基本逻辑。Kaggle命令行客户端在很多任务上完成得很好,但是作为开发人员,我希望更多地控制元数据规范和文件清理创建等类似的事情。我也希望它能容器化,这样我就可以做一个与主机隔离的创建操作。

构建容器

以下在Docker Hub上提供,你也可以构建自己的容器:

独家|一文了解Kaggle的开源数据集(附代码)

我没有将创建脚本作为切入点,因为我希望交互成为一个交互式的“进入到容器中并理解发生了什么。”你可以进行如下操作。

独家|一文了解Kaggle的开源数据集(附代码)

请注意,我们将把Kaggle API提供的证书绑定到root用户的home目录当中,以便用户端发现到它们,并且我们将通过加 -v 后缀的方式指定目录与数据文件(我们上传的数据集)的关联:现在所讨论问题中的数据集是一个恐龙的Zenodo ML的数据集,具体来说,它是将numpy数组转化为实际png图片的数据样本。对于感兴趣的人,这里提供了用于重新组织和生成数据子集的脚本。这样做的初衷是因为我根本无法分享Kaggle上的恐龙数据集(太大了!)我的想法是共享一个可用的子集,感兴趣的人可以下载整个数据集。如果您感兴趣的话,完整的数据集如下。

生成数据集

脚本create_dataset.py位于进入的乐器学习目录中,该用法将接受您希望生成数据集的参数。我们可以在没有参数的情况下运行脚本以查看详细信息,

独家|一文了解Kaggle的开源数据集(附代码)

我在/tmp/data/ARCHIVE中有我的数据文件(.tar.gz files),所以首先我为它们准备了一个空格分隔的完整路径列表:

独家|一文了解Kaggle的开源数据集(附代码)

我想把它们上传到一个叫做 vanessa/code-images的新数据集。命令如下:

独家|一文了解Kaggle的开源数据集(附代码)

以上提到的参数解释如下:

keywords是逗号分隔的关键词列表 (没有空格!)files是要上传数据文件的完整路径title是赋予数据集的标题(有空格时需要加引号)name 是数据集本身的名字 (不能包含空格和特殊符号,最好加引号)username 是kaggle的用户名,或数据集所属的机构名称

这将会生成一个数据包的临时目录

独家|一文了解Kaggle的开源数据集(附代码)

你可以把你的文件加入其中,例如以下是我在临时文件夹里填充的内容:

独家|一文了解Kaggle的开源数据集(附代码)

回想起来,我也不需要在这里复制文件,但我这样做是因为我不喜欢对原始数据进行任何操作(以防意外)。这样的话,工具将显示元数据文件(上面已经显示的一个),然后开始上传。这可能需要一些时间,完成后它会显示一个URL!

独家|一文了解Kaggle的开源数据集(附代码)

非常重要!有一种后处理的情况,这可能需要更多的时间(考虑到上传的规模大小,它确实花了我这么多时间)。直到第二天早上,数据集才存到URL中,所以你要有足够的耐心。在它完成操作以前,你只能得到404。你可以去跑步,或者当天到此为止。由于数据集需要额外的元数据和描述/助手,因此建议在可用时访问URL,并添加图像、描述、示例等。上传(默认使用我的工具)是私有的,这样用户可以在公开之前检查内容。这是体力劳动吗?对于第一次上传,答案是肯定的,但是数据集的后续版本不一定需要它。同时,工具也在快速增长和变化,你应该期待更好的变化!

可重复科学展望

机构需要格外重视数据,并帮助研究者承担管理数据的重任。研究人员应该能获得支持来管理数据,然后使其具备可编程的访问性。这必须超越传统图书馆提供的“档案”,深入研究API、通知、部署或分析触发器。虽然我们没有这样的系统,但它始于简单的解决方案,可以轻松创建和共享数据集。我希望计算发生位置(我们的研究计算集群)和数据存储位置(并通过上传或API自动共享)之间建立密切的关系。如下所示:

独家|一文了解Kaggle的开源数据集(附代码)

通知可以包括以下任何范围1)提醒另一个新数据的研究者,2)触发一个CI作业从存储重新上传到一个共享位置,或者3)触发某个容器新版本的构建和部署,其依赖于某些数据。

我们需要数据工程师

一个机构需要分配资源和人员,仅仅用于为研究者提供数据。而不是新的PI需要每次都从头开始,完成实验室收集,整理,然后处理数据。收集数据的机器应该收集它,并按规定格式将其发送到指定位置。

我们需要协作平台

我相信未来研究者可以合作研究。他们利用其他研究者提供的数据源,在协作平台上完成某种类型的出版物。感觉就像一种“如果你建造平台,研究者会参与”的场景,有趣的问题是:“由谁来建造它?”

现在,我们的计算集群就像狂野的西部!

当然,我们有当地执法部分来防止不受欢迎的牛仔误入野生沙漠(文件和目录许可),但主要是由不同的小组决定如何组织他们的文件。因此我们看到如下:

我们忘记了文档在哪里我们忘记了文档是什么用于论文的数据和脚本丢失和被遗忘每一个空间看起来都不一样

我们目前所面临的问题-我们有一些新的数据集要处理,但是没有足够空间,所以我们用电子邮件发送我们的研究计算来问为什么(我能有更多空间吗?)然后发送电子邮件到我们的实验室请求“清理这些文件!” 然后再删除一些我们曾认为非常重要的数据,但是它不再重要了,因为“磁盘空间不足。”

独家|一文了解Kaggle的开源数据集(附代码)

想象一个可能的场景,研究者不用完全负责管理数据、关注数据和相关元数据。他们可以专注于科学。数据工程师会为他们提供帮助,同时有异常多的细节和正常人无法关注到的元数据。不做这件事的成本是不可避免的浪费时间,丢失和发现事物,不能复制工作,或者从容易地得到数据指向(复杂地)使用数据。

尚存的挑战

我们仍然需要考虑一些潜在的挑战:

和学术出版的联系是什么?

我持续关注Kaggle是因为还没有找到一个类似的成熟平台来处理数据集。我对Kaggle的感觉是“让我们享受过程,学习并利用机器学习”或“让我们通过竞赛争夺奖励。”我遇到过研究生想用他的业余时间尝试参加比赛来赢得一些东西,或者学习和娱乐,但并不是为了深入研究。正如我所理解的,Kaggle没有适合学术研究人员的氛围。但当我想到这些时,“竞争”和“协作”并没有太大的差异,两者都是很多人同时工作来解决类似问题。这两个情况都有挑战的目标,和可以评估的度量标准来评价一个解决方案的优劣。有趣的是,Kaggle像Github一样,是一个相对无偏见的平台,我们可以选择以不同的方式使用它。学术研究人员可以选择“竞争”,这实际上包括研究人员一起回答一个科学问题。需要完善补充的是一些附加的规则和工具,以便为参与者和数据提供者提供发表的途径并获得应有的奖励。

如果我们想鼓励数据共享,从而推动探索,我们需要解决这个缺失的激励因素。研究生或研究人员可应当能通过像Kaggle这样的平台来进一步发展自己的事业。这应该很容易并且很有趣。如果一场比赛根本不是一场竞赛,而实际上是一次合作。一个研究生会和他的PI说:“嘿,我发现这个kaggle数据集在解决类似的问题,我可以尝试一下这种方法?“PI会肯定他的想法,因为它和学生独立解决问题是一样的,但有一些数据需要预处理,还有一些问题要讨论。研究生将进入其内核入口,以优化一些度量,并努力自动总结成某种类似论文出版物。评论将在一直伴随这些步骤的推进,因为工作将是完全开放的。所有那些贡献的人,从创建初始数据集到提交讨论解决方案,都将被得到奖励,因为他们已经参与了出版。如果进展顺利,问题本身也会被概念性地组织起来,所以我们可以开始映射假设的空间。

我们如何能掌握所有方法?

方法就像容器一样。目前在大多数论文中,他们没有实质性的重复工作。很难从一个文本中得到一个完整的方法论本体和它们与函数的链接(是的,我实际上是从一个研究生院项目开始的,并且早就放弃了它,以支持我的委员会认为有意义的项目。”但是假如我们有代码,这些方法可以自动导出(甚至可能与文档源链接)。未来可能当代码与出版物非常接近时,我们将大幅削减了我们花费在方法部分上的时间。或者因为在容器中提供了方法部分而可以复制工作。

如何处理数据中的敏感信息?

不言而喻,我们要注意去除数据中的敏感信息。想起来这是一件可怕的事情,尤其是在这个时代,似乎不再有隐私之类的东西了。任何数据共享初始化过程或管道必须采取隐私和(如果必要的话)协议去识别。

机构的动力是什么?

这是一个更难的问题。一个机构如何才能仅仅为了数据,将资金投入到人力和资源中?据我所知,一直以来人们都会组成委员会并谈论事情。也许这是需要做的事情,但是很难坐在硅谷,并看着公司跳过闲聊,直接把事情办好。也许刚开始这样并不完美,但万事开头难,后面进展会更顺利。

总结

这就是我现在的想法!我们还没有一个完美的解决方案,但我们有办法分享我们的数据以供其他人探索。我希望Kaggle上的团队能够在激励研究人员方面起带头作用,这将使学术界的软件工程师很容易地帮助研究者分享他们的数据。以下是我要采取的步骤:

创建共享数据的简单工具/示例(本文)创建共享学术数据集的激励(合作,开源出版物?)支持一种学者分享文化,并做一些测试案例寻找研究软件工程师帮助研究人员!

然后出炉啦!我们有开源、协作共享数据集和出版物。说到最后一点,如果你是掌握着有价值的数据集的研究者(即使是杂乱的),并且你想要帮助分享它,请伸出手让我帮助你。如果你有一些想法或思考如何能做一个以上的示例,我希望你能提供帮助。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP