成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

用進度條助您特征工程一臂之力

darry / 1607人閱讀

摘要:在此探討的是級別以下的數(shù)據(jù)之上的分析,有基于的分布式任務(wù)精度條,主要環(huán)境是下基于包的分析和特征工程任務(wù)。當(dāng)然,首先我們得載入模塊,在中使用帶的基于顯示的進度條前,請務(wù)必檢查是否安裝模塊。

在具體的分析或者特征工程之中,經(jīng)常會遇到處理時間很久的問題,當(dāng)然必要的優(yōu)化是必須的。但是顯然,數(shù)據(jù)量上升,計算量過大后,處理時間是必須的此。時,如果有個可以幫助您查看任務(wù)進度的進度條,必定可以提高你抓住處理時間去做(磨)別(洋)事(工)。當(dāng)然逐行打印是不錯的選擇,但在Jupyter notebook/JupyterLab中,這種實踐最大的問題是,打印過多,影響整個notebook的美觀程度。

在此探討的是5GB級別以下的數(shù)據(jù)(之上的Spark分析,有基于Zipplin的分布式任務(wù)精度條),主要環(huán)境是Jupyter下基于pandas包的分析和特征工程任務(wù)。

一個極為簡單的例子

tqdm是基于Python的精度條模塊,里面提供了簡單的代碼行進度條和基于ipywidgets的notebook內(nèi)的進度條。由于現(xiàn)在tqdm相關(guān)模塊還在開發(fā)階段,可能會用到一些私有對象,之后正式版中可能具體API會有所變化。

當(dāng)然,首先我們得載入模塊,在notebook中使用tqdm帶的基于Js顯示的進度條前,請務(wù)必檢查是否安裝ipywidgets模塊。

from tqdm import tqdm_notebook, _tqdm_notebook
_tqdm_notebook.tqdm_notebook.pandas()

其中第一行載入的兩個方法的作用分別是:

tqdm_notebook:用來包裝任何可以iterable的對象,在使用其元素進行運算結(jié)束后統(tǒng)計時間。

_tqdm_notebook:其中含有模塊可以處理pandas的對象。

第二行則是重載pandas里面的對象,提供可以展示精度條的方法。

下面我們可以嘗試直接使用tqdm_notebook包裹iterable對象來展示進度條,效果如下:

a = list(range(1, 10000))
b = range(1, 10000)
_ = [(lambda x: x+1)(i) for i in tqdm_notebook(a)]
_ = [(lambda x: x+1)(i) for i in tqdm_notebook(b)]

當(dāng)然如果僅僅是使用range也可以使用tqdm自帶的tnrange

from tqdm._tqdm_notebook import tnrange
_ = [(lambda x: x+1)(i) for i in tnrange(1, 10000)]

效果如下:

命名和深度

在一些場合,可能寫需要多個層級的迭代,此時,我們可以通過命名每個層級的迭代器來實現(xiàn)這個個效果。使用desc參數(shù)即可:

for i in tnrange(1, 10, desc="i Loop"):
    for j in tnrange(1, 10000, desc="j Loop"):
        i+j

當(dāng)然,如果遇到Loop過多時,可能會依舊出現(xiàn)打印過多的困擾。此時leave參數(shù)是一個不錯的推薦。

for i in tqdm_notebook(range(100), desc="i-Loop"):
    for j in tqdm_notebook(range(10000), desc="j-Loop", leave=False):
        i+j

多進程的擴展

當(dāng)然,在具體計算中,多進程往往是經(jīng)常會需要的一類擴展(由于Python只能基于一個運算核心進行計算的限制),這時候線程的運算也是經(jīng)常需要考量的方式。

在使用過程中,第一個需要注意的問題是,tqdm每次是在從iterable對象中取值時,進行更新,而如果在map之前的list中做進度條的包裹,是在未使用map的函數(shù)之前統(tǒng)計。所以在進度條完成時,可能還會有一段時間后才真的執(zhí)行結(jié)束。

from multiprocessing import Pool
def f(x):
    return x**32
p = Pool(5)
_ = [i for i in p.imap(f, tnrange(1000))]

而一個更好的處理是在使用后標(biāo)記時間,使用multiprocessing.Pool.imap作為迭代對象,但這個問題是tqdm無法識別具體數(shù)量,此時,指定tqdm的迭代次數(shù)total即可。

_ = [i+1 for i in tqdm_notebook(p.imap(f, range(1000)))]

_ = [i for i in tqdm_notebook(p.imap(f, range(3, 1000)), total=997)]

pandas中使用

pandas中的使用,也是非常簡單,在重載命令執(zhí)行后,Serires、DataFrameGroupBy對象都會擁有progress_apply方法,用法和apply一致,直接可以調(diào)取進度條。

實戰(zhàn):復(fù)雜場景中的使用

最后,我們結(jié)合一下之前的多線程和pandas操作,處理更大規(guī)模的數(shù)據(jù)?;舅悸肥?,將DataFrame拆成若干組分,最后通過pandas.concat合并起結(jié)果。

def parallelize_dataframe(df, func, n_jobs=3, split_num=10):
    ## 拆分數(shù)據(jù)表
    df_split = np.array_split(df, split_num)
    pool = Pool(n_jobs)
    df_list = []
    
    ## map操作
    for df_element in tqdm_notebook(pool.imap(func, df_split), total=10000):
        df_list.append(df_element)
       
    ## reduce操作
    df = pd.concat(df_list)
    
    ## 關(guān)閉進程
    pool.close()
    pool.join()
    return df

以上實現(xiàn)了基本的基于tqdm顯示處理進度的操作。使用方法如下:

def apply_add_1(df):
    return df.apply(lambda row: row["sepal_length"]+1, axis=1)
_ = parallelize_dataframe(iris_df, apply_add_1)

結(jié)語

查看了一下進度條,這次預(yù)處理我還要花一小時,可以先去沖杯咖啡了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/42246.html

相關(guān)文章

  • 年薪50w+的軟件測試工程師是怎么煉成的?

    摘要:它讓傳統(tǒng)的測試工程師從簡單,重復(fù),低效可替代性強的手工測試,變成了有技術(shù)難度和門檻的測試開發(fā)工作,也讓我們有更多的機會拿到更高的薪資。 隨著互聯(lián)網(wǎng)行業(yè)的迅速發(fā)展,軟件測試工程師的地位越來越高,公司招聘時的薪資也越來越高,那么市場上為什么還有大量的軟件測試工程師薪資只有5-6k呢?因為他們有一...

    laznrbfe 評論0 收藏0
  • 20170822 前端開發(fā)日報

    摘要:如果沒有學(xué)習(xí)過計算機科學(xué)的程序員,當(dāng)我們在處理一些問題時,比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無疑是一個很好的選擇。 幾種 JavaScript 動畫庫推薦 JavaScript 庫對設(shè)計師和開發(fā)人員來說,都是非常有用的工具。它們可以為你的網(wǎng)站添加一些超級強大的功能,給用戶帶來更好的體驗。 2017年8月前端開發(fā)者超實用干貨大合集 在過去的幾年當(dāng)中,網(wǎng)絡(luò)上所流傳的各種設(shè)計和開發(fā)資源,在素質(zhì)...

    raoyi 評論0 收藏0
  • 20170822 前端開發(fā)日報

    摘要:如果沒有學(xué)習(xí)過計算機科學(xué)的程序員,當(dāng)我們在處理一些問題時,比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無疑是一個很好的選擇。 幾種 JavaScript 動畫庫推薦 JavaScript 庫對設(shè)計師和開發(fā)人員來說,都是非常有用的工具。它們可以為你的網(wǎng)站添加一些超級強大的功能,給用戶帶來更好的體驗。 2017年8月前端開發(fā)者超實用干貨大合集 在過去的幾年當(dāng)中,網(wǎng)絡(luò)上所流傳的各種設(shè)計和開發(fā)資源,在素質(zhì)...

    olle 評論0 收藏0

發(fā)表評論

0條評論

darry

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<