當前位置:
首頁 > 知識 > 一文了解Kaggle的開源數據集

一文了解Kaggle的開源數據集

作者:Vanessa Sochat

翻譯:王雨桐

校對:馮羽

本文約5400字,建議閱讀12分鐘。

本文將從不同角度介紹Kaggle的開源數據集資源。

本文作者是斯坦福研究計算和斯坦福醫學院的軟體開發工程師。她是斯坦福Singularity的主要開發人員,是為斯坦福提供科研支持的帶頭人,也是Singularity Hub和Singularity Registry的首席開發者,這兩者優化了基於容器的工作流部署和「科學即服務」能力。本文最初發表於其個人博客。

附博客地址:https://vsoch.github.io/

數據共享非常困難,但眾所周知的是它在探索和回報上有很大潛力。一個典型的「共享操作」就像用移動硬碟傳播信息,將壓縮文件放在大學或雲端伺服器,或在一個安全的大學集群中存儲大量數據(但會經常擔心它被清除)。這是最理想的方法嗎?這足夠簡單易行嗎?為了回答以上問題,我們要考慮處理數據集需要經過的流程。如下所示:

事件的流程往往是循環的,因為數據的產生往往是一個流。從步驟1到步驟6,唯一讓數據停止流動的理由是停止搜集數據。最理想的情況下,所有步驟可以自動實現。步驟1可能是核磁共振掃描圖像的產生,步驟2可能是自動將初始形式轉化為研究者所需形式,步驟3將其轉移到私有的集群存儲,步驟4被研究團隊使用,隨後步驟5和6(如果流程全部發生)是額外工作用來進一步處理數據並將其轉移到共享地址。

通常情況下,我們在步驟4停止,因為此時足以滿足實驗要求、完成分析及論文撰寫。諷刺的是,步驟5和6常常會有意外的收穫。但是不言而喻的是,如果我分享數據集後,你搶先一步發表論文,我就會一無所獲。數據類似於橙子,在放棄這個橙子之前要榨出它所有汁水,所以我當然不想這麼做。但是有爭議的是,如果分享數據集本身可以完成論文(或類似的成果)並且步驟4和5很簡單,會有更多的數據共享。這就是我今天要討論的主題,儘管沒有可用的結論,我將告訴你分享Kaggle數據集非常簡單。

附Kaggle數據集地址:https://www.kaggle.com/datasets


變動數據

譯者註:變動數據這個概念作者在其他文中提及,對變動數據的定義是未來一種理想的狀態下,研究者可以專註於提出問題,軟體工程師會為其提供數據。

我曾經討論過變動數據的概念。總之,隨著新數據的出現,我們可以更新對世界的理解以及一些有趣問題的答案。把知識比作靜態的PDF並不恰當,因為它只代表一個時間點的狀態。相反,變動數據體現我們為了證實或否認假設所積累的知識是變化的。為了將這種理想狀態變為現實,我們要能輕易地滿足其需求。現在,共享數據是刊物發表後的人工操作。許多期刊鼓勵或要求這種行為,研究人員可以把某些時間點的數據集上傳到各個平台。儘管這種做法聊勝於無,但我認為這不是了解世界最好的方式。相比於靜態文章,我們應該能把一組數據輸入到演算法中,然後得到一個新的答案。我們希望在數據產生時自動完成數據共享,並可供所有想研究的人使用。現在看來這個目標可能過於崇高,但我們可以想像在這兩個極端中間的情況。如何通過一個簡單的流程來自動生成和共享數據集?可能如下所示:

步驟4到6同上(研究員完成分析),但不是一個組織獨享數據,它可供數千人使用。變化在於我們在步驟3增加了持續集成這個助手,使處理和共享數據變得容易。我們往往認為持續集成(CI)用於測試或部署,但是它在數據共享中也是有價值的工具。基於這個想法的本質,我們將它命名為「持續數據」。一旦數據被處理並傳輸到研究組的存儲中,它也可能經歷持續數據的步驟,將其打包以便共享。

小結:

我們需要在存儲這一步中激發數據共享,並為研究者提供支持。機構要配備足夠的數據工程師,並優先開發用於此任務的組織標準和工具。與此同時,小型研究計算小組可以幫助研究者完成目標。研究者應尋求幫助來分享他們的數據集。


Kaggle API

儘管更大的,機構層面的資源會更理想,但同時我們可以利用開源的免費資源,如Kaggle。對於初期的科學再現性,我認為Kaggle具備Github那樣的潛力。如果共享數據集是簡單而有趣的並且有潛在的回報,Kaggle可以對成規模的探索和協作產生影響。但我們必須從某個地方開始!我決定首先展示我可以使用Kaggle API來上傳數據集。在網頁介面中實現相當容易,而且通過命令行執行也很容易。簡而言之,我們所需要的只是一個包含數據文件和元數據(json文件)的目錄,我們可以將其指向API客戶端。例如,這裡是我上傳的一個數據集:

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

datapackage.json用來描述上傳的內容。

那麼,向別人共享數據集以供使用和探索有多難呢?您可以下載證書來對服務進行身份驗證。然後將文件(.tar.gz或.csv)放在文件夾中,創建json文件,並將工具指向它。這很簡單,你能在沒有任何額外幫助的情況下完成所有事情。將這樣的腳本插入到一些持續集成中,以便在將數據集添加到存儲時更新數據集,這是非常簡單的。


你的工具!

我創建了一個Docker容器,它提供了一個簡單的示例,用於與Kaggle API交互並生成數據集。我將介紹腳本的基本邏輯。Kaggle命令行客戶端在很多任務上完成得很好,但是作為開發人員,我希望更多地控制元數據規範和文件清理創建等類似的事情。我也希望它能容器化,這樣我就可以做一個與主機隔離的創建操作。

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

附Docker鏈接:https://hub.docker.com/r/vanessa/kaggle/


構建容器

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

我沒有將創建腳本作為切入點,因為我希望交互成為一個互動式的「進入到容器中並理解發生了什麼。」你可以進行如下操作。

請注意,我們將把Kaggle API提供的證書綁定到root用戶的home目錄當中,以便用戶端發現到它們,並且我們將通過加 -v 後綴的方式指定目錄與數據文件(我們上傳的數據集)的關聯:現在所討論問題中的數據集是一個恐龍的Zenodo ML的數據集,具體來說,它是將numpy數組轉化為實際png圖片的數據樣本。對於感興趣的人,這裡提供了用於重新組織和生成數據子集的腳本。這樣做的初衷是因為我根本無法分享Kaggle上的恐龍數據集(太大了!)我的想法是共享一個可用的子集,感興趣的人可以下載整個數據集。如果您感興趣的話,完整的數據集如下。(https://www.kaggle.com/stanfordcompute/code-images)

附Dinosaur Dataset地址:https://vsoch.github.io/datasets/

附Zenodo ML地址:

https://vsoch.github.io/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),所以首先我為它們準備了一個空格分隔的完整路徑列表:

我想把它們上傳到一個叫做 vanessa/code-images的新數據集。命令如下:

以上提到的參數解釋如下:

keywords是逗號分隔的關鍵詞列表 (沒有空格!)

files是要上傳數據文件的完整路徑

title是賦予數據集的標題(有空格時需要加引號)

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

username是kaggle的用戶名,或數據集所屬的機構名稱

這將會生成一個數據包的臨時目錄

你可以把你的文件加入其中,例如以下是我在臨時文件夾里填充的內容:

回想起來,我也不需要在這裡複製文件,但我這樣做是因為我不喜歡對原始數據進行任何操作(以防意外)。這樣的話,工具將顯示元數據文件(上面已經顯示的一個),然後開始上傳。這可能需要一些時間,完成後它會顯示一個URL!

非常重要!有一種後處理的情況,這可能需要更多的時間(考慮到上傳的規模大小,它確實花了我這麼多時間)。直到第二天早上,數據集才存到URL中,所以你要有足夠的耐心。在它完成操作以前,你只能得到404。你可以去跑步,或者當天到此為止。由於數據集需要額外的元數據和描述/助手,因此建議在可用時訪問URL,並添加圖像、描述、示例等。上傳(默認使用我的工具)是私有的,這樣用戶可以在公開之前檢查內容。這是體力勞動嗎?對於第一次上傳,答案是肯定的,但是數據集的後續版本不一定需要它。同時,工具也在快速增長和變化,你應該期待更好的變化!


可重複科學展望

機構需要格外重視數據,並幫助研究者承擔管理數據的重任。研究人員應該能獲得支持來管理數據,然後使其具備可編程的訪問性。這必須超越傳統圖書館提供的「檔案」,深入研究API、通知、部署或分析觸發器。雖然我們沒有這樣的系統,但它始於簡單的解決方案,可以輕鬆創建和共享數據集。我希望計算髮生位置(我們的研究計算集群)和數據存儲位置(並通過上傳或API自動共享)之間建立密切的關係。如下所示:

通知可以包括以下任何範圍1)提醒另一個新數據的研究者,2)觸發一個CI作業從存儲重新上傳到一個共享位置,或者3)觸發某個容器新版本的構建和部署,其依賴於某些數據。

我們需要數據工程師

一個機構需要分配資源和人員,僅僅用於為研究者提供數據。而不是新的PI需要每次都從頭開始,完成實驗室收集,整理,然後處理數據。收集數據的機器應該收集它,並按規定格式將其發送到指定位置。

我們需要協作平台

我相信未來研究者可以合作研究。他們利用其他研究者提供的數據源,在協作平台上完成某種類型的出版物。感覺就像一種「如果你建造平台,研究者會參與」的場景,有趣的問題是:「由誰來建造它?」

現在,我們的計算集群就像狂野的西部!

當然,我們有當地執法部分來防止不受歡迎的牛仔誤入野生沙漠(文件和目錄許可),但主要是由不同的小組決定如何組織他們的文件。因此我們看到如下:

我們忘記了文檔在哪裡

我們忘記了文檔是什麼

用於論文的數據和腳本丟失和被遺忘

每一個空間看起來都不一樣

我們目前所面臨的問題-我們有一些新的數據集要處理,但是沒有足夠空間,所以我們用電子郵件發送我們的研究計算來問為什麼(我能有更多空間嗎?)然後發送電子郵件到我們的實驗室請求「清理這些文件!」 然後再刪除一些我們曾認為非常重要的數據,但是它不再重要了,因為「磁碟空間不足。」

想像一個可能的場景,研究者不用完全負責管理數據、關注數據和相關元數據。他們可以專註於科學。數據工程師會為他們提供幫助,同時有異常多的細節和正常人無法關注到的元數據。不做這件事的成本是不可避免的浪費時間,丟失和發現事物,不能複製工作,或者從容易地得到數據指向(複雜地)使用數據。


尚存的挑戰

我們仍然需要考慮一些潛在的挑戰:

和學術出版的聯繫是什麼?

我持續關注Kaggle是因為還沒有找到一個類似的成熟平台來處理數據集。我對Kaggle的感覺是「讓我們享受過程,學習並利用機器學習」或「讓我們通過競賽爭奪獎勵。」我遇到過研究生想用他的業餘時間嘗試參加比賽來贏得一些東西,或者學習和娛樂,但並不是為了深入研究。正如我所理解的,Kaggle沒有適合學術研究人員的氛圍。但當我想到這些時,「競爭」和「協作」並沒有太大的差異,兩者都是很多人同時工作來解決類似問題。這兩個情況都有挑戰的目標,和可以評估的度量標準來評價一個解決方案的優劣。有趣的是,Kaggle像Github一樣,是一個相對無偏見的平台,我們可以選擇以不同的方式使用它。學術研究人員可以選擇「競爭」,這實際上包括研究人員一起回答一個科學問題。需要完善補充的是一些附加的規則和工具,以便為參與者和數據提供者提供發表的途徑並獲得應有的獎勵。

如果我們想鼓勵數據共享,從而推動探索,我們需要解決這個缺失的激勵因素。研究生或研究人員可應當能通過像Kaggle這樣的平台來進一步發展自己的事業。這應該很容易並且很有趣。如果一場比賽根本不是一場競賽,而實際上是一次合作。一個研究生會和他的PI說:「嘿,我發現這個kaggle數據集在解決類似的問題,我可以嘗試一下這種方法?「PI會肯定他的想法,因為它和學生獨立解決問題是一樣的,但有一些數據需要預處理,還有一些問題要討論。研究生將進入其內核入口,以優化一些度量,並努力自動總結成某種類似論文出版物。評論將在一直伴隨這些步驟的推進,因為工作將是完全開放的。所有那些貢獻的人,從創建初始數據集到提交討論解決方案,都將被得到獎勵,因為他們已經參與了出版。如果進展順利,問題本身也會被概念性地組織起來,所以我們可以開始映射假設的空間。

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

方法就像容器一樣。目前在大多數論文中,他們沒有實質性的重複工作。很難從一個文本中得到一個完整的方法論本體和它們與函數的鏈接(是的,我實際上是從一個研究生院項目開始的,並且早就放棄了它,以支持我的委員會認為有意義的項目。」但是假如我們有代碼,這些方法可以自動導出(甚至可能與文檔源鏈接)。未來可能當代碼與出版物非常接近時,我們將大幅削減了我們花費在方法部分上的時間。或者因為在容器中提供了方法部分而可以複製工作。

如何處理數據中的敏感信息?

不言而喻,我們要注意去除數據中的敏感信息。想起來這是一件可怕的事情,尤其是在這個時代,似乎不再有隱私之類的東西了。任何數據共享初始化過程或管道必須採取隱私和(如果必要的話)協議去識別。

機構的動力是什麼?

這是一個更難的問題。一個機構如何才能僅僅為了數據,將資金投入到人力和資源中?據我所知,一直以來人們都會組成委員會並談論事情。也許這是需要做的事情,但是很難坐在矽谷,並看著公司跳過閑聊,直接把事情辦好。也許剛開始這樣並不完美,但萬事開頭難,後面進展會更順利。


總結

這就是我現在的想法!我們還沒有一個完美的解決方案,但我們有辦法分享我們的數據以供其他人探索。我希望Kaggle上的團隊能夠在激勵研究人員方面起帶頭作用,這將使學術界的軟體工程師很容易地幫助研究者分享他們的數據。以下是我要採取的步驟:

創建共享數據的簡單工具/示例(本文)

創建共享學術數據集的激勵(合作,開源出版物?)

支持一種學者分享文化,並做一些測試案例

尋找研究軟體工程師幫助研究人員!

然後出爐啦!我們有開源、協作共享數據集和出版物。說到最後一點,如果你是掌握著有價值的數據集的研究者(即使是雜亂的),並且你想要幫助分享它,請伸出手讓我幫助你。如果你有一些想法或思考如何能做一個以上的示例,我希望你能提供幫助。

原文標題:

Open Source Datasets with Kaggle

http://blog.kaggle.com/2018/06/21/open-source-datasets-with-kaggle/

譯者簡介

王雨桐,統計學在讀,數據科學碩士預備,跑步不停,彈琴不止。夢想把數據可視化當作藝術,目前日常是摸著下巴看機器學習。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 數據派THU 的精彩文章:

教你用Keras和CNN建立模型識別神奇寶貝!
10大稱霸Kaggle的深度學習技巧

TAG:數據派THU |