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

2023-01-05| 编辑: 佚名| 查看: 408 |原作者: 李平珏|来自: 衙媒网

今天给大家介绍的是独家|一文了解Kaggle的开源数据集(附代码),独家|一文了解Kaggle的开源数据集(附代码)的详细内容:作者:VanessaSochat翻译:王雨桐校对:冯羽本文约5400字,建议阅读12分钟。本文将从不同角度 ...

  今天给大家介绍的是独家 | 一文了解Kaggle的开源数据集(附代码),独家 | 一文了解Kaggle的开源数据集(附代码)的详细内容:

作者:Vanessa Sochat

翻译:王雨桐

校对:冯羽

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

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

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

附博客地址:/

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

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

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

附Kaggle数据集地址:/datasets

变动数据

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

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

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

小结:

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

KaggleAPI

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

附Kaggle API地址:https://github.com/Kaggle/kaggle-api

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

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

你的工具!

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

附案例链接:https://github.com/vsoch/kaggle

附Docker链接:/r/vanessa/kaggle/

构建容器

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

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

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

附Dinosaur Dataset地址:/datasets/

附Zenodo ML地址:

/datasets/2018/zenodo/#unmount-without-sudo

附脚本地址:

https://github.com/vsoch/zenodo-ml/blob/master/preprocess/2.organize_by_language.py

生成数据集

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

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

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

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

keywords是逗号分隔的关键词列表(没有空格!)

files是要上传数据文件的完整路径

title是赋予数据集的标题(有空格时需要加引号)

name 是数据集本身的名字(不能包含空格和特殊符号,最好加引号)

username是kaggle的用户名,或数据集所属的机构名称

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

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

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

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

可重复科学展望

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

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

我们需要数据工程师

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

我们需要协作平台

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

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

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

我们忘记了文档在哪里

我们忘记了文档是什么

用于论文的数据和脚本丢失和被遗忘

每1个空间看起来都不1样

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

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

尚存的挑战

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

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

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

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

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

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

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

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

机构的动力是什么?

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

总结

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

创建共享数据的简单工具/示例(本文)

创建共享学术数据集的激励(合作,开源出版物?)

支持1种学者分享文化,并做1些测试案例

寻找研究软件工程师帮助研究人员!

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

原文标题:

Open Source Datasets with Kaggle

原文链接:

/2018/06/21/open-source-datasets-with-kaggle/

译者简介

王雨桐,统计学在读,数据科学硕士预备,跑步不停,弹琴不止。梦想把数据可视化当作艺术,目前日常是摸着下巴看机器学习。

翻译组招募信息

工作内容:需要1颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

  以上就是“独家 | 一文了解Kaggle的开源数据集(附代码)”的论述。

免责声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们,一经查实,本站将立刻删除。

相关推荐