99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀八大工具,透析Python數(shù)據(jù)生態(tài)圈最新趨勢(shì)!
八大工具,透析Python數(shù)據(jù)生態(tài)圈最新趨勢(shì)!
2015-08-31
收藏

文 | 劉旭坤

來(lái)自數(shù)盟


我們前一陣子參加了在舊金山舉辦的Dato數(shù)據(jù)科學(xué)峰會(huì)。來(lái)自業(yè)界和學(xué)界的千余名數(shù)據(jù)科學(xué)研究人員在大會(huì)上對(duì)數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和預(yù)測(cè)應(yīng)用方面的最新發(fā)展進(jìn)行了交流和探討。


以下是大會(huì)中討論的數(shù)據(jù)科學(xué)家在未來(lái)可能使用的八個(gè)Python工具。


SFrame和SGraph


峰會(huì)上的一個(gè)重磅消息是Dato將在BSD協(xié)議下開源SFrame和SGraph。SFrame(Scaleable Data Frame)是一個(gè)為大數(shù)據(jù)處理優(yōu)化內(nèi)存和性能的數(shù)據(jù)框(DataFrame)結(jié)構(gòu)。SGraph是一個(gè)類似的概念,但代表的不是數(shù)據(jù)框而是圖。這兩個(gè)數(shù)據(jù)結(jié)構(gòu)的好處是即便數(shù)據(jù)量太大難以全部加載到內(nèi)存中,數(shù)據(jù)科學(xué)家依然可以進(jìn)行分析。


這一消息無(wú)論對(duì)Dato還是對(duì)Python社區(qū)來(lái)說(shuō)都是一個(gè)分水嶺。它顯示了Dato對(duì)支持開源Python數(shù)據(jù)生態(tài)圈的誠(chéng)意。在此之前有一種認(rèn)識(shí)就是Dato提供的免費(fèi)版本只是將數(shù)據(jù)科學(xué)家捆綁在自家的平臺(tái)最終還是得收費(fèi),因?yàn)镈ato確實(shí)有自己的商業(yè)產(chǎn)品。但從這次開源我們看到Dato并不打算耍這種小把戲。我們也希望其他開發(fā)者(沒錯(cuò),Pandas說(shuō)的就是你)能夠拋開收費(fèi)的顧慮來(lái)使用SFrame和SGraph以便打破內(nèi)存的限制。


Bokeh


Bokeh是一個(gè)不需服務(wù)器就可以在瀏覽器中實(shí)現(xiàn)互動(dòng)可視化的Python庫(kù)。它可以處理非常大的數(shù)據(jù)集而且速度很快也能嵌入在網(wǎng)頁(yè)當(dāng)中。想要快速方便地創(chuàng)建互動(dòng)圖表和數(shù)據(jù)應(yīng)用的話這個(gè)庫(kù)非常有用。


Bokeh對(duì)處理大型數(shù)據(jù)集時(shí)的性能問(wèn)題著墨頗多。還有另外一點(diǎn)就是開發(fā)這些互動(dòng)圖表只需要Python一種語(yǔ)言即可。


Dask


Dask是一款主要針對(duì)單機(jī)的Python調(diào)度工具。它能幫助你將數(shù)據(jù)分成塊并負(fù)責(zé)并行處理的調(diào)度工作。Dask是用純Python寫成的,它自己也使用了一些開源的Python庫(kù)。


Dask有兩種用法:普通用戶主要使用Dask提供的集合類型,用法就和NumPy跟Pandas的差不多,但Dask內(nèi)部會(huì)生成任務(wù)圖。Dask開發(fā)人員則可以直接與Dask任務(wù)圖打交道因?yàn)镈ask任務(wù)圖并不依賴于它提供的集合類型。


現(xiàn)在Python生態(tài)圈中有很多庫(kù)看起來(lái)功能都差不多比如說(shuō)Blaze、Dask和Numba,但其實(shí)應(yīng)該用在數(shù)據(jù)處理的不同層面上,做一個(gè)類比的話Blaze就相當(dāng)于數(shù)據(jù)庫(kù)中的查詢優(yōu)化器,而Dask則相當(dāng)于執(zhí)行查詢的引擎。


如果你是一名數(shù)據(jù)科學(xué)家的話你可能每天都會(huì)用到Python。Python是非常不錯(cuò),但也不是完全沒有問(wèn)題。它最大的問(wèn)題是處理大型數(shù)據(jù)集的時(shí)候會(huì)有點(diǎn)力不從心。這時(shí)候你可能會(huì)采用采樣的方法來(lái)解決數(shù)據(jù)集的規(guī)模問(wèn)題,但僅僅采樣肯定會(huì)多多少少影響到你的研究結(jié)果。


Ibis


Ibis是Cloudera Labs推出的一個(gè)新項(xiàng)目,目前還是預(yù)覽版。它試圖解決的就是數(shù)據(jù)集規(guī)模的問(wèn)題,但對(duì)用戶提供的確是單機(jī)上Python的體驗(yàn),而且能夠與現(xiàn)有的Python數(shù)據(jù)生態(tài)圈(Pandas、Scikit-learn、Numpy)進(jìn)行集成。未來(lái)它還計(jì)劃加入與機(jī)器學(xué)習(xí)和高級(jí)分析集成的功能。


Splash


抓取網(wǎng)頁(yè)數(shù)據(jù)的時(shí)候通常會(huì)碰到大量的JavaScript,而網(wǎng)頁(yè)抓取工具又不能很好地執(zhí)行JavaScript,所以最后很可能只拿到了原始的Html數(shù)據(jù)。Splash是由網(wǎng)頁(yè)數(shù)據(jù)抓取的鼻祖ScrapingHub所推出的JavaScript渲染服務(wù)。它由Python寫成,使用了Twisted和Qt。你可以把它當(dāng)成是一個(gè)輕量級(jí)的瀏覽器,但它可以并行處理多個(gè)網(wǎng)頁(yè)并執(zhí)行JavaScript,它也可以關(guān)閉圖片以便提高渲染速度。


Petuum


Petuum是專為解決大規(guī)模機(jī)器學(xué)習(xí)問(wèn)題而開發(fā)的一款分布式機(jī)器學(xué)習(xí)框架。它提供了解決大規(guī)模機(jī)器學(xué)習(xí)中數(shù)據(jù)集太大和參數(shù)太大問(wèn)題的分布式編程工具,而且可以利用數(shù)據(jù)的各種統(tǒng)計(jì)學(xué)特性來(lái)進(jìn)行性能優(yōu)化。


Petuum提供了兩個(gè)主要的平臺(tái):B?sen,一個(gè)為數(shù)據(jù)并行機(jī)器學(xué)習(xí)算法設(shè)計(jì)的鍵值倉(cāng)庫(kù);Strads,一個(gè)為模型并行機(jī)器學(xué)習(xí)算法而設(shè)計(jì)的調(diào)度工具。數(shù)據(jù)并行和模型并行在現(xiàn)代機(jī)器學(xué)習(xí)算法中都有出現(xiàn),所以Petuum就針對(duì)這兩種方法提供了兩種平臺(tái)。


Flink


Flink是一個(gè)開源的批處理和流處理數(shù)據(jù)平臺(tái)。Flink的核心是一個(gè)提供了數(shù)據(jù)分發(fā)、通信和容錯(cuò)功能的流數(shù)據(jù)處理引擎。它設(shè)計(jì)的主要目標(biāo)之一是替代Hadoop的MapReduce功能,這就造成它和Aphache Spark非常相像。


雖然API很像,但兩者處理數(shù)據(jù)的方式有著很大差別。Spark處理數(shù)據(jù)流時(shí)其實(shí)進(jìn)行的是批處理,所以其實(shí)只是流處理的一個(gè)近似。平常是沒有問(wèn)題的,但如果對(duì)延遲的要求高的話Spark就會(huì)比較慢或者出錯(cuò)。Flink則是一個(gè)可以進(jìn)行批處理的流處理框架。


Pyxley


在網(wǎng)頁(yè)上顯示一個(gè)數(shù)據(jù)展板是與人分享數(shù)據(jù)科學(xué)發(fā)現(xiàn)的最直觀方法。對(duì)R語(yǔ)言來(lái)說(shuō)有Shiny來(lái)簡(jiǎn)化數(shù)據(jù)科學(xué)家開發(fā)網(wǎng)頁(yè)的工作,而Pyxley就相當(dāng)于Python版的Shiny。使用Pyxley不光不用寫HTML、CSS,你還可以加入自己的JavaScript來(lái)進(jìn)行定制。



數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }