獨家 | 淺談Python/Pandas中管道的用法

作者:Gregor Scheithauer博士 翻譯:王闖(Chuck)
校對:歐陽錦
本文約2000字,建議閱讀5分鐘
本文介紹了如何在Python/Pandas中運用管道的概念,以使代碼更高效易讀。

簡介
什么是管道?
使數(shù)據(jù)處理的順序結(jié)構(gòu)化為從左到右(而不是從內(nèi)到外);
避免嵌套函數(shù)的調(diào)用;
最大限度地減少對局部變量和函數(shù)定義的需求;
可以輕松地在數(shù)據(jù)處理序列中的任何位置添加步驟。
foo_foo_1 <- hop(foo_foo, through = forest)foo_foo_2 <- scoop(foo_foo_1, up = field_mice)foo_foo_3 <- bop(foo_foo_2, on = head)
foo_foo %>%hop(through = forest) %>%scoop(up = field_mice) %>%bop(on = head)
bop(scoop(hop(foo_foo, through = forest),up = field_mice ),on = head)
foo_foo_1 = hop(foo_foo, through = forest)foo_foo_2 = scoop(foo_foo_1, up = field_mice)foo_foo_3 = bop(foo_foo_2, on = head)
foo_foo.hop(through = forest).scoop(up = field_mice).bop(on = head)(foo_foo .hop(through = forest).scoop(up = field_mice).bop(on = head))
https://r4ds.had.co.nz/pipes.html?q=pipe#pipes
Python中的無縫管道(即方法鏈)
讀取數(shù)據(jù)集并導(dǎo)入相關(guān)包
# import libsimport pandas as pd# read datamelb = pd.read_csv("../01-data/melb_data.csv")# Have a quick look at the data(melb .head())

圖片來自作者
篩選,分組并生成新變量
(melb.query("Distance < 2") # query equals filter in Pandas.filter(["Type", "Price"]) # select the columns Type and Price.groupby("Type") .agg("mean").reset_index().set_axis(["Type", "averagePrice"], axis = 1, inplace = False))

圖片來自作者
(melb.query("Distance < 2 & Rooms > 2").filter(["Type", "Price"]).groupby("Type").agg(["mean", "count"]).reset_index().set_axis(["Type", "averagePrice", "numberOfHouses"],axis = 1, inplace = False) .assign(averagePriceRounded = lambda x: x["averagePrice"].round(1)))

圖片來自作者
排序
(melb .query('Regionname.str.startswith("South")', engine = 'python').filter(["Type", "Regionname","Distance"]).groupby(["Regionname", "Type"]).agg(["mean"]).reset_index() .set_axis(["Regionname", "Type", "averageDistance"], axis = 1, inplace = False).sort_values(by = ['averageDistance'], ascending = False))

圖片來自作者
為不同區(qū)域的平均距離繪制條形圖
(melb#.query('Regionname.str.startswith("South")', engine = 'python').filter(["Regionname", "Distance"]).groupby(["Regionname"]).agg(["mean"]).reset_index().set_axis(["Regionname", "averageDistance"],axis = 1, inplace = False).set_index("Regionname").sort_values(by = ['averageDistance'], ascending = False).plot(kind = "bar"))

圖片來自作者
使用直方圖繪制價格分布
(melb.Price # getting one specific variable.hist())

圖片來自作者
結(jié)語
參考資料
Melbourne Housing Snapshot | Kaggle:https://www.kaggle.com/dansbecker/melbourne-housing-snapshot
Tidyverse:https://www.tidyverse.org/
The Flawless Pipes of Tidyverse. Exploratory data analysis made easy | by Soner Y?ld?r?m | Mar, 2021 | Towards Data Science:ttps://towardsdatascience.com/the-flawless-pipes-of-tidyverse-bb2ab3c5399f
Welcome | R for Data Science (had.co.nz):https://r4ds.had.co.nz/
18 Pipes | R for Data Science (had.co.nz):https://r4ds.had.co.nz/pipes.html?q=pipe#pipes
Data visualization in Python like in R’s ggplot2 | by Dr. Gregor Scheithauer | Medium:https://gscheithauer.medium.com/data-visualization-in-python-like-in-rs-ggplot2-bc62f8debbf5
譯者簡介
王闖(Chuck),臺灣清華大學(xué)資訊工程碩士。曾任奧浦諾管理咨詢公司數(shù)據(jù)分析主管,現(xiàn)任尼爾森市場研究公司數(shù)據(jù)科學(xué)經(jīng)理。很榮幸有機(jī)會通過數(shù)據(jù)派THU微信公眾平臺和各位老師、同學(xué)以及同行前輩們交流學(xué)習(xí)。
翻譯組招募信息
工作內(nèi)容:需要一顆細(xì)致的心,將選取好的外文文章翻譯成流暢的中文。如果你是數(shù)據(jù)科學(xué)/統(tǒng)計學(xué)/計算機(jī)類的留學(xué)生,或在海外從事相關(guān)工作,或?qū)ψ约和庹Z水平有信心的朋友歡迎加入翻譯小組。
你能得到:定期的翻譯培訓(xùn)提高志愿者的翻譯水平,提高對于數(shù)據(jù)科學(xué)前沿的認(rèn)知,海外的朋友可以和國內(nèi)技術(shù)應(yīng)用發(fā)展保持聯(lián)系,THU數(shù)據(jù)派產(chǎn)學(xué)研的背景為志愿者帶來好的發(fā)展機(jī)遇。
其他福利:來自于名企的數(shù)據(jù)科學(xué)工作者,北大清華以及海外等名校學(xué)生他們都將成為你在翻譯小組的伙伴。
點擊文末“閱讀原文”加入數(shù)據(jù)派團(tuán)隊~
轉(zhuǎn)載須知
如需轉(zhuǎn)載,請在開篇顯著位置注明作者和出處(轉(zhuǎn)自:數(shù)據(jù)派ID:DatapiTHU),并在文章結(jié)尾放置數(shù)據(jù)派醒目二維碼。有原創(chuàng)標(biāo)識文章,請發(fā)送【文章名稱-待授權(quán)公眾號名稱及ID】至聯(lián)系郵箱,申請白名單授權(quán)并按要求編輯。
發(fā)布后請將鏈接反饋至聯(lián)系郵箱(見下方)。未經(jīng)許可的轉(zhuǎn)載以及改編者,我們將依法追究其法律責(zé)任。
點擊“閱讀原文”擁抱組織

