八個(gè) Python 數(shù)據(jù)生態(tài)圈的前沿項(xiàng)目
Galvanize 最近在舊金山參加了 Dato 數(shù)據(jù)科學(xué)峰會(huì),這次會(huì)議聚集了千余名來(lái)自業(yè)界和學(xué)術(shù)界的數(shù)據(jù)科學(xué)研究人員,他們交流并探討關(guān)于數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)應(yīng)用和預(yù)測(cè)模型的最新進(jìn)展。
以下是我導(dǎo)師認(rèn)為數(shù)據(jù)科學(xué)家將在未來(lái)數(shù)月乃至數(shù)年里使用的八個(gè) Python 工具。
1. SFrame and SGraph
Dato 數(shù)據(jù)科學(xué)峰會(huì)中重磅消息之一是 Dato 將在 BSD 協(xié)議下開源SFrame 和 SGraph。SFrame (short for Scaleable Data Frame) 提供可以優(yōu)化內(nèi)存效率的柱狀數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)框式的界面。SGraph 具有相同的特性但是它主要用于提高畫圖效率。這兩種數(shù)據(jù)結(jié)構(gòu)最大的優(yōu)點(diǎn)之一在于它們使得數(shù)據(jù)科學(xué)家可以做基于外存的數(shù)據(jù)分析,而不需要把數(shù)據(jù)導(dǎo)入內(nèi)存中。
這一消息傳達(dá)出 Dato 公司支持 Python 數(shù)據(jù)生態(tài)圈發(fā)展的誠(chéng)意,這是 Dato 和 Python 數(shù)據(jù)社區(qū)發(fā)展的一個(gè)轉(zhuǎn)折點(diǎn)。自從 Dato 公司推出企業(yè)版軟件后,數(shù)據(jù)社區(qū)用戶通常都有類似的誤解,他們認(rèn)為 Dato 公司會(huì)利用免費(fèi)版本綁定用戶,用戶最終還是得付費(fèi)。通過(guò)將程序庫(kù)轉(zhuǎn)化為開源工具,我們看出這種小把戲并不是 Dato 公司的目標(biāo)。如今這兩個(gè)程序庫(kù)已經(jīng)變成開源工具,我們希望看到其他開發(fā)者(Pandas, 說(shuō)的就是你)能夠充分利用 SFrame 和 SGraph 從而解決內(nèi)存限制的問(wèn)題。
2. Bokeh
Bokeh 是一個(gè)不需要服務(wù)器就可以在網(wǎng)頁(yè)瀏覽器中實(shí)現(xiàn)交互式可視化的 Python 程序庫(kù)。Bokeh 可以處理非常大的數(shù)據(jù)集甚至是大數(shù)據(jù)流(比如實(shí)時(shí)光譜圖),同時(shí)它還具有運(yùn)算速度快、可嵌入和可視化新穎的特點(diǎn)。它對(duì)于想要快速便捷地創(chuàng)建交互式圖表和數(shù)據(jù)應(yīng)用的人來(lái)說(shuō)非常有用。
Bokeh 真正表現(xiàn)出色的地方是大數(shù)據(jù)的可視化過(guò)程。與這些數(shù)據(jù)打交道的人應(yīng)該感謝 Bokeh 致力于提升自身的性能。目前大多數(shù)的交互式工具都需要利用 Javascript 來(lái)實(shí)現(xiàn),但是 Bokeh 僅利用 Python 一種語(yǔ)言即可實(shí)現(xiàn)。
3. Dask
Dask是一款基于外存的Python 調(diào)度工具。它通過(guò)將數(shù)據(jù)集分塊處理并根據(jù)所擁有的核數(shù)分配計(jì)算量,這有助于進(jìn)行大數(shù)據(jù)并行計(jì)算。Dask 是利用 Python 語(yǔ)言編寫的,同時(shí)也利用一些開源程序庫(kù),它主要針對(duì)單機(jī)的并行計(jì)算進(jìn)程。
Dask主要有兩種用法。普通用戶將主要利用 Dask 提供的集合類型,它的用法類似于 NumPy 和 Pandas 這樣的常規(guī)程序庫(kù),但它內(nèi)部包含了畫圖功能。另一方面, Dask 開發(fā)者可以直接制作圖表。Dask 圖表利用 Python 字典、元組和函數(shù)來(lái)編碼算法,而且它不依賴于 Dask 所提供的集合類型。
目前 Python 生態(tài)圈中的許多程序庫(kù)功能相近。但是Blaze, Dask 和 Numba 這些程序庫(kù)共同作用于數(shù)據(jù)處理過(guò)程的不同層面上。類似的,你可以把 Blaze 看成關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢優(yōu)化器,而把 Dask 看成執(zhí)行查詢的引擎。關(guān)于這一點(diǎn),Blaze 優(yōu)化了查詢或者控制命令的符號(hào)表達(dá)式,而 Dask可以根據(jù)你的硬件情況來(lái)優(yōu)化執(zhí)行過(guò)程。
4. Ibis
如果你是一個(gè)數(shù)據(jù)科學(xué)家,可能你每天都會(huì)使用 Python 。雖然 Python 在很多方面都很優(yōu)秀,但是它也存在自身的局限。其中最大的一個(gè)問(wèn)題在于 Python 不能很好地適應(yīng)數(shù)據(jù)集大小的變化。它對(duì)于小數(shù)據(jù)集很有效,但是對(duì)于更大的數(shù)據(jù)而言,則需要利用抽樣的方法來(lái)解決數(shù)據(jù)集的規(guī)模問(wèn)題,這會(huì)影響到最終的研究結(jié)果。
Ibis 是 Cloudera 實(shí)驗(yàn)室的新項(xiàng)目,它試圖為具有 Python 工作經(jīng)驗(yàn)的數(shù)據(jù)科學(xué)家和工程師們提供一個(gè)適用于任何數(shù)據(jù)規(guī)模的數(shù)據(jù)分析框架。這反映出單機(jī)版的 Python 在功能和可用性上并沒有妥協(xié),可以在處理大數(shù)據(jù)時(shí)提供相同的交互體驗(yàn)和全保真度分析。
Ibis 允許使用 100% 的端到端用戶工作流,也整合了現(xiàn)有的 Python 數(shù)據(jù)生態(tài)圈(Pandas, Scikit-learn, NumPy 等)。Ibis 目前還是預(yù)覽版,未來(lái)它將加入更多的功能,比如整合高級(jí)分析工具、機(jī)器學(xué)習(xí)方法和其他高性能的計(jì)算工具。
5. Splash
抓取網(wǎng)頁(yè)數(shù)據(jù)時(shí)經(jīng)常碰到一個(gè)問(wèn)題,許多網(wǎng)站使用大量的 JavaScript 代碼。網(wǎng)頁(yè)抓取工具很難執(zhí)行 JavaScript 代碼,所以你往往只能得到原始 HTML 數(shù)據(jù)。由 Scrapy 鼻祖 ScrapingHub 所創(chuàng)建的 Splash 是一種 JavaScript 渲染服務(wù),它通過(guò) Python 的 Twisted 和 QT 來(lái)實(shí)現(xiàn)。這是一個(gè)帶有能夠并行處理多個(gè)網(wǎng)頁(yè)的輕量級(jí)網(wǎng)頁(yè)瀏覽器,它可以執(zhí)行自定義 JavaScript 代碼并利用關(guān)閉圖片或廣告屏蔽的功能來(lái)提升渲染速度。
6. Petuum
Petuum 是一個(gè)分布式機(jī)器學(xué)習(xí)框架,它試圖為大規(guī)模機(jī)器學(xué)習(xí)問(wèn)題提供一個(gè)通用算法和系統(tǒng)接口。它提供了解決大規(guī)模機(jī)器學(xué)習(xí)數(shù)據(jù)集和參數(shù)太大問(wèn)題的分布式編程工具。Petuum 專門為機(jī)器學(xué)習(xí)設(shè)計(jì),這意味著它可以利用數(shù)據(jù)的各種統(tǒng)計(jì)性質(zhì)來(lái)優(yōu)化性能。
Petuum 具有多項(xiàng)核心功能:Bösen 是一個(gè)為數(shù)據(jù)并行機(jī)器學(xué)習(xí)算法設(shè)計(jì)的關(guān)鍵值存儲(chǔ)倉(cāng)庫(kù)。它利用 SSP (Stale Synchronous Parallel )一致性模型,該模型允許在不犧牲算法正確性的情況下使用異步功能。另外一個(gè)功能是 Strads,它是一個(gè)為模型并行機(jī)器學(xué)習(xí)算法而設(shè)計(jì)的調(diào)度工具。它執(zhí)行了關(guān)于機(jī)器學(xué)習(xí)更新操作的小粒度調(diào)度,而且優(yōu)先計(jì)算的部分程序需要避免可能損害性能的不安全并行操作。
7. Flink
Apache Flink 是可擴(kuò)展的批處理和流處理的數(shù)據(jù)處理平臺(tái)。Flink 的核心組件是一個(gè)提供數(shù)據(jù)分布、通信和容錯(cuò)功能的流數(shù)據(jù)處理引擎。它和 Apache Spark 非常相似,因?yàn)樗鼈兊闹饕康闹痪褪翘娲?Hadoop 的 MapReduce 功能。
雖然 Spark 和 Flink 的 API 非常相似,但是兩者處理數(shù)據(jù)的方式存在不同之處。當(dāng) Spark 處理流式數(shù)據(jù)時(shí),它實(shí)際上利用單位時(shí)間內(nèi)的數(shù)據(jù)片集合進(jìn)行小批量處理。這可以視為流處理的近似過(guò)程。通常情況下它表現(xiàn)良好,但是在對(duì)延遲要求較高的情況下會(huì)引發(fā)一些問(wèn)題。另一方面,F(xiàn)link 是一個(gè)可以實(shí)現(xiàn)批量處理的流處理框架。換句話說(shuō),除了做簡(jiǎn)單的工作(批量處理)和對(duì)較難的工作(流程處理)以外,F(xiàn)link 既可以解決較難的工作,也可以處理簡(jiǎn)單的任務(wù)。
8. Pyxley
基于網(wǎng)頁(yè)的儀表板(dashboards)是分享數(shù)據(jù)科學(xué)發(fā)現(xiàn)的最直觀方法之一。 Shiny 包給使用 R 語(yǔ)言的數(shù)據(jù)科學(xué)家提供了一個(gè)不必通過(guò)編寫Javascript, HTML 和 CSS就可以構(gòu)建交互式網(wǎng)頁(yè)應(yīng)用程序的框架,但是在 Python 中卻沒有類似的功能。 Pyxley 就相當(dāng)于 Python 版的 shiny ,它簡(jiǎn)化了網(wǎng)頁(yè)應(yīng)用程序開發(fā)的過(guò)程并可以通過(guò) Flask, PyReact 和 Pandas來(lái)加入自定義的 Javascript 代碼。