年底啦聋涨,又該交年終總結(jié)了宝恶。對于碼農(nóng)來說惜纸,當(dāng)然是關(guān)注今年新推出了哪些開源庫疟暖,還有就是新近又有什么又流行又好用的好東西啦。
前兩年蜜葱,我們在博客貼出了Python社區(qū)里流行的好作品∧プ埽現(xiàn)在,為2017年做個(gè)總結(jié)笼沥。
這次的榜單充滿了濃濃的機(jī)器學(xué)習(xí)風(fēng)蚪燕,請非機(jī)器學(xué)習(xí)庫的大神見諒娶牌,不過,這次我們確實(shí)有點(diǎn)兒偏心:)馆纳。為了公平起見诗良,請大家在評論區(qū)為本文沒有提及的優(yōu)秀軟件搖旗吶喊吧。
廢話少說鲁驶,干貨來了鉴裹!
1、Pipenv
第一名非它莫屬钥弯,這是年初才發(fā)布一款工具径荔,但它已經(jīng)開始影響每個(gè)Python開發(fā)者的工作流了,現(xiàn)在連Python.org都官方推薦Pipenv作為支持庫的管理工具脆霎!
Pipenv最開始不過是大神Kenneth Reitz周末搞的項(xiàng)目总处,本意是將npm或yarn這些包管理器的優(yōu)勢引入Python。以后再也不用virtualenv睛蛛、virtualenvwrapper管理requirements.txt文件鹦马,更別提根據(jù)支持庫的版本來確保復(fù)用性了(點(diǎn)擊此處了解更多)。有了Pipenv忆肾,就不需要用命令行來增加荸频、刪除或更新支持庫了,一個(gè)Pipfile文件就能搞定所有的支持庫客冈。這個(gè)工具會(huì)生成Pipfile.lock文件旭从,確保編譯的庫都是最終版,還能避免因?yàn)槁┑粢恍┻呥吔墙堑闹С謳於鴮?dǎo)致的bug场仲。
當(dāng)然和悦,Pipenv還有其他不少好功能,它的文檔也很贊燎窘。趕緊去了解一下摹闽,用它來支持你的Python項(xiàng)目吧蹄咖,我們已經(jīng)在Tryolabs用上啦:)
2褐健、PyTorch
要說今年深度學(xué)習(xí)社區(qū)里面哪個(gè)庫實(shí)現(xiàn)了大爆發(fā),那必須是PyTorch澜汤,這個(gè)深度學(xué)習(xí)框架是Facebook今年才推出的蚜迅。
PyTorch是基于流行一時(shí)的Torch框架構(gòu)建和改進(jìn)的,與Lua相比俊抵,它基于Python谁不。近年來,越來越多的人開始用Python開展數(shù)據(jù)科學(xué)工作徽诲,PyTorch讓深度學(xué)習(xí)更平易近人了刹帕。
值得注意的是吵血,采用了全新動(dòng)態(tài)計(jì)算圖范式的PyTorch已經(jīng)成為很多研究者的專用框架。使用TensorFlow偷溺、CNTK和MXNet等框架寫代碼時(shí)蹋辅,必須先定義計(jì)算圖,這個(gè)計(jì)算圖指定了代碼運(yùn)行的所有操作挫掏,隨后在框架中進(jìn)行編譯與優(yōu)化侦另,使它能進(jìn)行GPU并行處理,運(yùn)算速度更快尉共,這種范式被稱為靜態(tài)計(jì)算圖褒傅。它的好處在于可以利用各種優(yōu)化,而且袄友,因?yàn)闃?gòu)建與執(zhí)行是分開進(jìn)行的殿托,此圖一旦被構(gòu)建即可在不同設(shè)備上運(yùn)行。然而杠河,對于諸如自然語言處理等任務(wù)碌尔,其工作量是可變的,將圖片應(yīng)用于算法前券敌,可以將圖片調(diào)整為固定尺寸唾戚,但是無法將不同長度的句子進(jìn)行類似的處理。PyTorch和動(dòng)態(tài)圖的優(yōu)勢在于可在代碼中使用標(biāo)準(zhǔn)Python控制指令待诅,在執(zhí)行指令時(shí)定義動(dòng)態(tài)圖叹坦,這就給了你更多自由,對于多任務(wù)卑雁,這點(diǎn)至關(guān)重要募书。
和其他現(xiàn)代深度學(xué)習(xí)框架一樣,PyTorch還可以進(jìn)行梯度計(jì)算测蹲,它的運(yùn)行速度極快莹捡,還能擴(kuò)展,既然如此扣甲,還不趕緊試試篮赢?
3、Caffe2
聽上去有些不可思議琉挖,但Facebook今年確實(shí)還發(fā)布了另一款重磅深度學(xué)習(xí)框架启泣。
多年前,Caffe框架就已被廣泛應(yīng)用示辈,并以無可比擬的性能和通過實(shí)戰(zhàn)檢測的代碼庫著稱寥茫。然而,深度學(xué)習(xí)的最新趨勢使得這個(gè)框架在某些方向陷入了停滯矾麻。Caffe2試圖將Caffe引入現(xiàn)代世界纱耻。
它支持分布式訓(xùn)練及部署芭梯,包括多種移動(dòng)平臺(tái)、最新的CPU與CUDA適配的硬件弄喘。PyTorch更適合研究粥帚,Caffe2則適用于Facebook那種大規(guī)模部署。
還可以了解一下ONNX(微軟與Facebook共同推出的開源項(xiàng)目限次,全稱為Open Neural Network Exchange”) 近期的努力芒涡。用PyTorch構(gòu)建和訓(xùn)練模型,再用Caffe2進(jìn)行部署卖漫,是不是挺棒费尽?
4、Pendulum
去年羊始,Arrow榮登本榜旱幼,這個(gè)庫可以讓Python更簡單地處理datetimes。今年突委,輪到Pendulum了柏卤。
Pendulum的一大優(yōu)勢是內(nèi)嵌式取代Python的datetime類,可以輕易地將它整合進(jìn)已有代碼匀油,并且只在需要的時(shí)候才進(jìn)行調(diào)用缘缚。作者精心調(diào)校了時(shí)區(qū),確保時(shí)區(qū)準(zhǔn)確敌蚜,讓每個(gè)實(shí)例都對能區(qū)分時(shí)區(qū)桥滨,默認(rèn)使用UTC。還有就是提供了擴(kuò)展的timedelta弛车,使datetime計(jì)算更加容易齐媒。
與其他庫不同,它提供了可預(yù)測行為的API纷跛,這樣就可以知道后面會(huì)發(fā)生什么喻括。如果正開發(fā)使用datetimes的復(fù)雜項(xiàng)目,這個(gè)庫能讓你更輕松贫奠!想要了解更多唬血,請查閱文檔。
5叮阅、Dash
從事數(shù)據(jù)科學(xué)工作刁品,少不了使用Pandas泣特、scikit-learn這些Python生態(tài)系統(tǒng)中的利器浩姥,還有就是控制工作流的Jupyter Notebooks,毋庸置疑状您,大家都愛用這些工具勒叠。但是兜挨,要想將工作成果分享給不會(huì)用這些工具的人,那該怎么辦眯分?怎么才能構(gòu)建一個(gè)人人都能夠輕松上手的界面拌汇,操控?cái)?shù)據(jù)和可視化?以前弊决,為實(shí)現(xiàn)這一目的噪舀,需要一個(gè)精通Javascript的專職前端團(tuán)隊(duì)來搭建GUI,以后就用不著啦飘诗。
今年發(fā)布的Dash是在純Python環(huán)境中構(gòu)建數(shù)據(jù)可視化Web APP的開源庫与倡。該庫基于Flask、Plotly.js和React構(gòu)建昆稿,提供抽象層纺座,無需學(xué)習(xí)上述框架即可快速上手開發(fā)。它在瀏覽器中進(jìn)行渲染和響應(yīng)溉潭,因此還適用移動(dòng)端净响。
如果你想知道Dash都能實(shí)現(xiàn)什么效果,這個(gè)樣例庫可以讓你大飽眼福喳瓣。
6馋贤、PyFlux
很多Python庫都適用于數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí),但當(dāng)數(shù)據(jù)點(diǎn)是隨著時(shí)間進(jìn)化的矩陣時(shí)畏陕,比如股價(jià)或從設(shè)備獲取的測量數(shù)據(jù)等掸掸,這就是另一回事兒了。
PyFlux是專門處理時(shí)間序列的Python開源庫蹭秋。時(shí)間序列是統(tǒng)計(jì)學(xué)與計(jì)量經(jīng)濟(jì)學(xué)的子域扰付,其目標(biāo)是描述時(shí)間序列行為(主要是關(guān)于潛在成分或利息特征),并且預(yù)測未來它們?nèi)绾窝莼?/p>
PyFlux允許通過概率方式進(jìn)行時(shí)間序列建模仁讨,并且實(shí)現(xiàn)了幾個(gè)像GARCH這樣的現(xiàn)代時(shí)間序列模型羽莺。是個(gè)不錯(cuò)的好東西。
7洞豁、Fire
做項(xiàng)目的時(shí)候經(jīng)常需要制作命令行界面(Command Line Interface~CLI)盐固。除了傳統(tǒng)的argparse,Python還有類似click或docopt等工具丈挟。谷歌今年發(fā)布的Fire刁卜,使用另一個(gè)視角來解決同樣的問題。
Fire是一個(gè)為任意Python項(xiàng)目自動(dòng)生成命令行界面的開源庫曙咽。請注意蛔趴,重點(diǎn)是自動(dòng)構(gòu)建命令行界面,基本上不用再寫代碼或文檔說明啦例朱。只要調(diào)用一個(gè)Fire方法孝情,把它傳輸給需要生成命令行界面的內(nèi)容即可鱼蝉,比如,函數(shù)箫荡、對象魁亦、類、字典羔挡,就算沒有參數(shù)都可以洁奈,這樣Fire就會(huì)為所有代碼生成一個(gè)命令行界面(CLI)。
請仔細(xì)閱讀此指南绞灼,通過例子理解它如何運(yùn)作睬魂。密切關(guān)注這個(gè)庫,它絕對能給你節(jié)省不少時(shí)間镀赌。
8氯哮、imbalance-learn
理想狀態(tài)下,我們有均衡的數(shù)據(jù)集可以用來訓(xùn)練模型商佛,一切都很如意喉钢。可惜良姆,真實(shí)世界不是這樣的肠虽,現(xiàn)實(shí)任務(wù)更多是非均衡數(shù)據(jù)。比如玛追,在預(yù)測偽造信用卡交易時(shí)税课,預(yù)期超過99.9%的絕大多數(shù)交易是合法的。如果只是訓(xùn)練樸素機(jī)器學(xué)習(xí)算法會(huì)讓你很糟心痊剖,因此需要格外關(guān)注這類數(shù)據(jù)集韩玩。
好在這個(gè)問題已經(jīng)解決了,還有各種不同的技術(shù)解決方案陆馁。Imbalanced-learn 這個(gè)Python包提供了多種技術(shù)解決方案找颓,可以讓開發(fā)工作變得更輕松。它與scikit-learn兼容叮贩,并且是scikit-learn-contrib項(xiàng)目的一部分击狮。有用!
9益老、FlashText
一般來說彪蓬,查找或替換文本可以使用正則表達(dá)式。正則表達(dá)式能妥妥的完成這項(xiàng)任務(wù)捺萌。但是档冬,需要查找?guī)浊€(gè)術(shù)語時(shí),正則表達(dá)式就慢死了。
FlashText能夠更好地解決這個(gè)問題捣郊。在作者最初的基準(zhǔn)測試中,它大幅提高了整個(gè)操作運(yùn)行時(shí)間慈参,從5天縮減到5分鐘呛牲。
FlashText的美妙之處在于不論查找多少術(shù)語,其運(yùn)行時(shí)間都是一樣的驮配,而正則表達(dá)式的運(yùn)行時(shí)間則會(huì)隨著術(shù)語數(shù)量的增加而線性增加娘扩。
FlashText證明了算法和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的重要性,由此可知壮锻,即便是簡單的問題琐旁,更好的算法也可以比更強(qiáng)的CPU有效。
10猜绣、Luminoth
聲明:本庫是由Tryolab研發(fā)中心開發(fā)的灰殴。
當(dāng)今世界圖片滿天飛,一些APP急需理解這些圖片的內(nèi)容掰邢。多虧深度學(xué)習(xí)技術(shù)的發(fā)展牺陶,圖像處理技術(shù)也取得了長足的進(jìn)步。
Luminoth是基于TensorFlow和Sonnet構(gòu)建的計(jì)算機(jī)視覺處理工具箱辣之。目前掰伸,它通過快速R-CNN模型支持對象檢測。
Luminoth不僅實(shí)現(xiàn)了這個(gè)特定模型怀估,它還是基于模塊化構(gòu)建的狮鸭,可以擴(kuò)展。因此多搀,自定義現(xiàn)有組件或結(jié)合新的模型來解決復(fù)雜問題是可行的歧蕉,好好復(fù)用這些代碼吧。在構(gòu)建深度學(xué)習(xí)模型時(shí)康铭,它提供了必要的開發(fā)工具:轉(zhuǎn)換圖像數(shù)據(jù)為適用的格式廊谓,以供數(shù)據(jù)管道(TensorFlow的tfrecords)處理,進(jìn)行數(shù)據(jù)增強(qiáng)麻削,在一個(gè)或多個(gè)GPU上進(jìn)行訓(xùn)練(在處理大型數(shù)據(jù)集時(shí)蒸痹,必須使用分布式訓(xùn)練),運(yùn)行評估指標(biāo)呛哟,輕松地在TensorFlow中實(shí)現(xiàn)可視化叠荠,通過簡單的API或?yàn)g覽器界面部署訓(xùn)練模型,供人操作扫责。
還有榛鼎,Luminoth可以很簡單地整合谷歌云機(jī)器學(xué)習(xí)引擎,就算你沒有強(qiáng)大的GPU,也可以和在本機(jī)一樣者娱,輕松一個(gè)指令就能在云端進(jìn)行模型訓(xùn)練抡笼。
如果你對此感興趣,可以閱讀發(fā)布博文或觀看我們在ODSC上的訪談視頻來了解更多信詳情黄鳍。
更多優(yōu)秀庫:這些也不錯(cuò)
PyVips
可能你從沒聽說過libvips這個(gè)庫推姻,這么說吧,它是個(gè)像Pillow或ImageMagick這樣的圖像處理庫框沟,并且支持很多圖片格式藏古。然而,和其他庫相比忍燥,libvips更快拧晕,占用內(nèi)存更少。比如說梅垄,基準(zhǔn)測試顯示它比ImageMagick快3倍厂捞,占用內(nèi)存僅為1/15。有關(guān)libvips的優(yōu)勢队丝,請點(diǎn)此查閱蔫敲。
PyVips是近期發(fā)布的Python版libvips,兼容Python2.7和3.6炭玫,還有PyPy奈嘿。使用pip安裝,內(nèi)嵌式兼容綁定的老版本吞加,無需修改代碼裙犹。
如果在APP中進(jìn)行圖像處理,那一定要關(guān)注它衔憨。
Requestium
聲明:本庫為Tryolabs發(fā)布叶圃。
有時(shí),你可能會(huì)在網(wǎng)上實(shí)現(xiàn)一些自動(dòng)化操作践图。比如抓取網(wǎng)站掺冠,進(jìn)行應(yīng)用測試,或在網(wǎng)上填表码党,但又不想使用API德崭,這時(shí)自動(dòng)化就變得很必要。Python提供了非常優(yōu)秀的Requests庫可以輔助進(jìn)行這些操作揖盘∶汲可惜,很多網(wǎng)站采用基于JavaScript的重客戶端兽狭,這就意味著Requests獲取的HTML代碼中根本就沒有用來自動(dòng)化操作的表單憾股,更別提自動(dòng)填表了鹿蜀!它取回的基本上都是React或Vue這些現(xiàn)代前端庫在瀏覽器中生成的空DIV這類的代碼。
雖然可以通過反向工程處理JavaScript生成的代碼服球,但這需要花幾個(gè)小時(shí)來編譯茴恰。處理這些丑陋的JS代碼,謝謝斩熊,還是算了吧往枣。還有一個(gè)方法就是使用Selenium庫,允許以程序化的方式和瀏覽器進(jìn)行交互座享,并運(yùn)行JavaScript代碼婉商。用了這個(gè)庫就沒什么問題了似忧,但它比占用資源極少的Requests慢太多了渣叛。
如果能以Requests為主,只在需要Selenium的時(shí)候才無縫調(diào)用盯捌,這樣不是更好淳衙?看看Requestium吧,它以內(nèi)嵌方式取代Requests饺著,而且干的不錯(cuò)箫攀。它整合了Parsel,用它編寫的頁面查詢元素選擇器代碼特別清晰幼衰,它還為諸如點(diǎn)擊元素和在DOM中渲染內(nèi)容這些通用操作提供了幫助靴跛。又一個(gè)網(wǎng)頁自動(dòng)化省時(shí)利器!
skorch
喜歡scikit-learn的API渡嚣,但又得用PyTorch干活兒梢睛?別擔(dān)心,skorch這個(gè)打包器為PyTorch提供了像sklearn一樣的界面识椰。只要你熟悉這些庫绝葡,一定會(huì)覺得它的句法直白易懂。有了skorch腹鹉,就可以將一些代碼抽象化藏畅,從而把精力集中在真正重要的事上,比如干點(diǎn)兒數(shù)據(jù)科學(xué)的事兒功咒。
結(jié)論
今年愉阎!如果你認(rèn)為還有別的庫也可以上榜,趕緊在去評論區(qū)里發(fā)表意見吧力奋,這世界變化太快诫硕,我們也有些跟不上潮流啦。最后刊侯,再次感謝社區(qū)中每個(gè)人所做的貢獻(xiàn)章办!
最后,別忘了訂閱我們的簡報(bào),不要錯(cuò)過我們的機(jī)器學(xué)習(xí)內(nèi)容哦藕届。