日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas中size方法_如何使用pdpipe与Pandas构建管道?

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas中size方法_如何使用pdpipe与Pandas构建管道? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者 | Tirthajyoti Sarkar譯者 | 清兒爸編輯 | 夕顏來源 | AI科技大本營(ID: rgznai100)【導讀】Pandas 是 Python 生態系統中的一個了不起的庫,用于數據分析和機器學習。它在 Excel/CSV 文件和 SQL 表所在的數據世界與 Scikit-learn 或 TensorFlow 施展魔力的建模世界之間架起了完美的橋梁。數據科學流通常是一系列的步驟:數據集必須經過清理、縮放和驗證,之后才能被強大的機器學習算法使用。當然,這些任務可以通過 Pandas 等包提供的許多單步函數或方法來完成,但更為優雅的方式是使用管道。在幾乎所有的情況下,通過自動執行重復性任務,管道可以減少出錯的機會,并能夠節省時間。在數據科學領域中,具有管道特性的軟件包有 R 語言的 dplyr 和 Python 生態系統中的 Scikit-learn。要了解它們在機器學習工作流中的應用,你可以讀這篇很棒的文章:https://www.kdnuggets.com/2017/12/managing-machine-learning-workflows-scikit-learn-pipelines-part-1.htmlPandas 還提供了 `.pipe` 方法,可用于類似的用戶定義函數。但是,在本文中,我們將討論的是非常棒的小庫,叫 pdpipe,它專門解決了 Pandas DataFrame 的管道問題。

使用 Pandas 的流水線

Jupyter Notebook 的示例可以在我的 Github 倉庫中找到:https://github.com/tirthajyoti/Machine-Learning-with-Python/blob/master/Pandas%20and%20Numpy/pdpipe-example.ipynb。讓我們看看如果使用這個庫來構建有用的管道。

數據集

為了演示,我將使用美國房價的數據集,可從 Kaggle 下載:https://www.kaggle.com/vedavyasv/usa-housing我們可以在 Pandas 中加載數據集,并顯示其匯總的統計信息,如下所示:但是,數據集中還有一個“Address”字段,其中包含了文本數據。

添加大小限定符列

在這個演示中,我們在數據集中添加了一個列來限定房屋的大小,代碼如下所示:經過此步驟之后,數據集如下所示:

最簡單的管道:一次操作

我們從最簡單的管道開始,它只包含一次操作(不必擔心,我們很快就會增加復雜性的)。讓我們假設機器學習團隊和領域專家說他們認為我們可以安全地忽略用于建模的數據 `Avg. Area House Age` 。因此,我們將從數據集中刪除這一列。對于這個任務,我們使用 pdpipe 中的 `ColDrop` 來創建一個管道對象 `drop_age`,并將 DataFrame 傳遞給這個管道。import pdpipe as pdpdrop_age = pdp.ColDrop(‘Avg. Area House Age’)df2 = drop_age(df)正如預期的那樣,生成的 DataFrame 如下所示:

只需添加管道鏈級

只有當我們能夠進行多個階段時,管道才是有用和實用的。在 pdpipe 中有多種方法可以實現這一點。但是,最簡單、最直觀的方法是使用 + 運算符。這就像手工連接管道一樣!比方說,除了刪除 `age` 列之外,我們還希望對 `House size` 的列進行獨熱編碼,以便可以輕松地在數據集上運行分類或回歸算法。pipeline = pdp.ColDrop(‘Avg. Area House Age’)pipeline+= pdp.OneHotEncode(‘House_size’)df3 = pipeline(df)因此,我們首先使用 `ColDrop` 方法創建了一個管道對象來刪除 `Avg. Area House Age` 列。此后,我們只需使用常用的 Python 的 `+=` 語法將 `OneHotEncode` 方法添加到這個管道對象中即可。生成的 DataFrame 如下所示。請注意,附加的指示列 `House_size_Medium` 和 `House_size_Small` 是由獨熱編碼創建的。

根據行值刪除某些行

接下來,我們可能希望根據行值來刪除它們。具體來說,我們可能希望刪除房價低于 25 萬的所有數據。我們有 `ApplybyCol` 的方法來講刪除用戶蒂尼的函數應用到 DataFrame,還有一個方法 `ValDrop` 根據特定值來刪除某些行。我們可以輕松地將這些方法鏈接到管道,以便能夠有選擇地刪除行(我們仍在向現有的管道對象中添加內容,該對象已經完成了列刪除和獨熱編碼的其他工作)。def price_tag(x): if x>250000: return 'keep' else: return 'drop'pipeline+=pdp.ApplyByCols('Price',price_tag,'Price_tag',drop=False)pipeline+=pdp.ValDrop(['drop'],'Price_tag')pipeline+= pdp.ColDrop('Price_tag')第一個方法是通過應用用戶定義的函數 `price_tag()`,根據 `Price` 列中的值來對行進行標記。第二種方法是,在 ?`Price_tag` 中查找字符串 `drop`,并刪除那些匹配的行。最后,第三個方法就是刪除 `Price_tag` 標簽列,清理 DataFrame。畢竟,這個 `Price_tag`列只是臨時需要的,用于標記特定的行,在達到目的后就應該將其刪除。所有這些都是通過簡單地鏈接同一管道上的各個階段來完成的!現在,我們可以回顧一下,看看我們的管道從一開始對 DataFrame 都做了什么工作:
  • 刪除特定的列。
  • 獨熱編碼,用于建模的分類數據列。
  • 根據用戶定義函數對數據進行標記。
  • 根據標記刪除行。
  • 刪除臨時標記列。
所有這些,使用的是以下五行代碼:pipeline = pdp.ColDrop('Avg. Area House Age')pipeline+= pdp.OneHotEncode('House_size')pipeline+=pdp.ApplyByCols('Price',price_tag,'Price_tag',drop=False)pipeline+=pdp.ValDrop(['drop'],'Price_tag')pipeline+= pdp.ColDrop('Price_tag')df5 = pipeline(df)

最近版本更新:直接刪除行!

我與包作者 Shay Palachy 進行了精彩的討論,他告訴我,該包的最新版本可以用 lambda 函數,僅用一行代碼即可完成行的刪除(滿足給定的條件),如下所示:pdp.RowDrop({‘Price’: lambda x: x <= 250000})?

Scikit-learn 與 NLTK

還有許多更有用、更直觀的 DataFrame 操作方法可用于 DataFrame 操作。但是,我們只是想說明,即使是 Scikit-learn 和 NLTK 包中的一些操作,也包含在 pdpipe 中,用于創建非常出色的管道。

Scikit-learn 的縮放估算器

建立機器學習模型最常見的任務之一是數據的縮放。Scikit-learn 提供了集中不同類型的縮放,例如,最小最大縮放,或者基于標準化的縮放(其中,數據集的平均值被減去,然后除以標準差)。我們可以在管道中直接鏈接這些縮放操作。下面的代碼段演示了這種用法:pipeline_scale = pdp.Scale('StandardScaler',exclude_columns=['House_size_Medium','House_size_Small'])df6 = pipeline_scale(df5)本文中,我們應用了 Scikit-learn 包中的 `StandardScaler` 估算器來轉換數據以進行聚類或神經網絡擬合。我們可以選擇性地排除那些無需縮放的列,就像我們在本文中對指示列 `House_size_Medium` 和 `House_size_Small` 所做的那樣。瞧!我們得到了縮放后的 DataFrame:NLTK 的詞法分析器我們注意到,DataFrame 中的 Address 字段現在幾乎毫無用處。但是,如果我們可以從這些字符串中提取郵政編碼或州名,它們可能對某種形式的可視化或機器學習任務有用。為此,我們可以使用 Word Tokenizer(單詞標記器)來實現這一目的。NTLK 是一個流行而強大的 Python 庫,用于文本挖掘和自然語言處理,并提供了一系列的標記器方法。在本文示例中,我們客戶使用一個這樣的標記器來拆分 Address 字段中的文本,并從中提取州名。我們注意到,州名就是地址字符串中的倒數第二個單詞。因此,下面的鏈式管道就可以幫我們完成這項工作:def extract_state(token): return str(token[-2])pipeline_tokenize=pdp.TokenizeWords('Address')pipeline_state = pdp.ApplyByCols('Address',extract_state,result_columns='State')pipeline_state_extract = pipeline_tokenize + pipeline_statedf7 = pipeline_state_extract(df6生成的 DataFrame 如下所示:

總結

如果我們對本文這個演示中顯示的所有操作進行總結,則如下所示:所有這些操作都可以在類似類型的數據集上頻繁使用,并在數據集準備好進入下一級建模之前,能有一組簡單的順序代碼塊作為預處理操作來執行,將是非常棒的。流水線是實現統一的順序代碼塊集的關鍵。Pandas 是機器學習和數據科學團隊中用于這類數據預處理任務的最廣泛使用的 Python 庫,而 pdpipe 則提供了一種簡單而強大的方法,可以使用 Pandas 類型操作構建管道,可以直接應用于 Pandas DataFrame 對象。你可以自己探索這個庫,為你的特定數據科學任務構建更強大的管道。原文鏈接:https://towardsdatascience.com/https-medium-com-tirthajyoti-build-pipelines-with-pandas-using-pdpipe-cade6128cd31

【END】

熱 文?推 薦??你搶的不是春節紅包而是云?疫情肆虐下,程序員們都在哪里??云計算的 2020:云原生崛起,重新定義軟件?疫情嚴重,潛伏期也有傳染性?科技公司在行動?區塊鏈 10 年低谷與榮光用開發者的方式共克時艱!

總結

以上是生活随笔為你收集整理的pandas中size方法_如何使用pdpipe与Pandas构建管道?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。