小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

業(yè)界 | 用Python做數(shù)據(jù)科學(xué)時(shí)容易忘記的八個(gè)要點(diǎn)!

 Greatguy瑞 2018-07-23

大數(shù)據(jù)文摘出品

編譯:雪清、陳同學(xué)、Alieen


如果你發(fā)覺自己在編程時(shí)一次又一次地查找相同的問題、概念或是語法,你不是一個(gè)人!


雖然我們?cè)赟tackOverflow或其他網(wǎng)站上查找答案是很正常的事情,但這樣做確實(shí)比較花時(shí)間,也讓人懷疑你是否完全理解了這門編程語言。


我們現(xiàn)在生活的世界里,似乎有著無限的免費(fèi)資源,而你只需要一次搜索即可獲得。然而,這既是這個(gè)時(shí)代的幸事,也是一種詛咒。如果沒能有效利用資源,而是對(duì)它們過度依賴,你就會(huì)養(yǎng)成不良的習(xí)慣,長(zhǎng)期處于不利境地。



當(dāng)我谷歌一個(gè)問題,發(fā)現(xiàn)有人提了同樣問題,但下面只有一個(gè)回答,而且2003年以后就再也沒有新的答案的時(shí)候,我真是和那個(gè)提問者同病相憐!弱小,可憐又無助!



“你是誰!你在哪兒!最后你發(fā)現(xiàn)了啥!”


就個(gè)人而言,我發(fā)現(xiàn)自己也是多次從類似的技術(shù)問答中找代碼(見上文插圖漫畫);而不是花時(shí)間學(xué)習(xí)和鞏固概念,以便下次可以自己把代碼寫出來。


網(wǎng)上搜索答案是一種懶惰的行為,雖然在短期內(nèi)它可能是最簡(jiǎn)便的途徑,但它終究不利于你的成長(zhǎng),并且會(huì)降低工作效率和對(duì)語法的熟知能力(咳咳,面試的時(shí)候這些知識(shí)很重要)。


目標(biāo)


最近,我一直在Udemy學(xué)習(xí)名為Python for Data Science and Machine Learning的數(shù)據(jù)科學(xué)在線課程。在該系列課程的早期課件中,我想起了用Python做數(shù)據(jù)分析時(shí)一直被我忽略的一些概念和語法。


為了一勞永逸地鞏固我對(duì)這些概念的理解,并為大家免去一些StackOverflow的搜索,我在文章中整理了自己在使用Python,NumPy和Pandas時(shí)總是忘記的東西。


我為每個(gè)要點(diǎn)提供了簡(jiǎn)短的描述和示例。為了給讀者帶來福利,我還添加了視頻和其他資源的鏈接,以便大家更深入地了解各個(gè)概念。


單行List Comprehension


每次需要定義某種列表時(shí)都要寫for循環(huán)是很乏味的,好在Python有一種內(nèi)置的方法可以用一行代碼解決這個(gè)問題。該語法可能有點(diǎn)難以理解,但是一旦熟悉了這種技巧,你就會(huì)經(jīng)常使用它。


 * Line 8是對(duì)for loop的單行簡(jiǎn)化


請(qǐng)參閱上圖和下文的示例,比較一下在創(chuàng)建列表時(shí),你通常使用的for循環(huán)樣板和以單行代碼創(chuàng)建這二者之間的差別。


x = [1,2,3,4]
out = []
for item in x:
   out.append(item**2)
print(out)

[1, 4, 9, 16]

# vs.

x = [1,2,3,4]
out = [item**2 for item in x]
print(out)

[1, 4, 9, 16]


Lambda 函數(shù)


編程的過程中經(jīng)常為了實(shí)現(xiàn)最后的功能,創(chuàng)建一個(gè)又一個(gè)階段性的函數(shù),這些函數(shù)往往就只用一兩次。這個(gè)過程很煩人。這時(shí)候Lambda函數(shù)來搭救你了!


Lambda函數(shù)用于在Python中創(chuàng)建小型的,一次性的和匿名的函數(shù)對(duì)象?;旧希鼈兛梢宰屇恪霸诓粍?chuàng)建新函數(shù)的情況下”創(chuàng)建一個(gè)函數(shù)。


lambda函數(shù)的基本語法如下:

lambda arguments: expression


所以,只要給它一個(gè)表達(dá)式,lambda函數(shù)可以執(zhí)行所有常規(guī)函數(shù)可執(zhí)行的操作。請(qǐng)看下面的簡(jiǎn)單示例和后文中的視頻,以更好地感受lambda函數(shù)強(qiáng)大的功能。


double = lambda x: x * 2
print(double(5))

10


Map和Filter


一旦掌握了lambda函數(shù),并學(xué)會(huì)將它們與map和filter函數(shù)配合使用,你將擁有一個(gè)強(qiáng)大的工具。


具體來說,map函數(shù)接受一個(gè)列表并通過對(duì)每個(gè)元素執(zhí)行某種操作來將其轉(zhuǎn)換為新列表。在下面的示例中,它遍歷每個(gè)元素并將其乘以2的結(jié)果映射到新列表。請(qǐng)注意,這里的list函數(shù)只是將輸出轉(zhuǎn)換為列表類型。


# Map
seq = [1, 2, 3, 4, 5]
result = list(map(lambda var: var*2, seq))
print(result)

[2, 4, 6, 8, 10]


filter函數(shù)需要的輸入是列表和規(guī)則,非常類似于map,但它通過將每個(gè)元素與布爾過濾規(guī)則進(jìn)行比較來返回原始列表的子集。


# Filter
seq = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x > 2, seq))
print(result)

[3, 4, 5]



Arange和Linspace


要?jiǎng)?chuàng)建快速簡(jiǎn)單的NumPy數(shù)組,可以查看arange和linspace函數(shù)。它們都有特定的用途,但在這里我們看中的是它們都輸出Numpy數(shù)組(而非其使用范圍),這通常更容易用于數(shù)據(jù)科學(xué)。


Arange在給定的范圍內(nèi)返回間隔均勻的值。除了起始值和終止值,你還可以根據(jù)需要定義步長(zhǎng)或數(shù)據(jù)類型。請(qǐng)注意,終止值是一個(gè)“截止”值,因此它不會(huì)被包含在數(shù)組輸出中。


# np.arange(start, stop, step)
np.arange(3, 7, 2)

array([3, 5])


Linspace與Arange非常相似,但略有不同。Linspace是在指定的范圍內(nèi)返回指定個(gè)數(shù)的間隔均勻的數(shù)字。所以給定一個(gè)起始值和終止值,并指定返回值的個(gè)數(shù),linspace將根據(jù)你指定的個(gè)數(shù)在NumPy數(shù)組中劃好等分。這對(duì)于數(shù)據(jù)可視化和在定義圖表坐標(biāo)軸時(shí)特別有用。


# np.linspace(start, stop, num)
np.linspace(2.0, 3.0, num=5)

array([ 2.0,  2.25,  2.5,  2.75, 3.0])


Axis的真正意義


在Pandas中刪除列或在NumPy矩陣中對(duì)值進(jìn)行求和時(shí),可能會(huì)遇到這問題。即使沒有,那么你也肯定會(huì)在將來的某個(gè)時(shí)候碰到。我們現(xiàn)在來看看刪除列的示例:


df.drop('Row A', axis=0)
df.drop('Column A', axis=1)


在我知道自己為什么要這樣定義坐標(biāo)軸之前,我不知道我寫了多少次這行代碼。你可以從上面看出,如果要處理列,就將axis設(shè)為1,如果要處理行,則將其設(shè)為0。


但為什么會(huì)這樣呢?我記得我最喜歡的解釋是這個(gè):


df.shape
(# of Rows, # of Columns)


從Pandas的dataframe調(diào)用shape屬性時(shí)會(huì)返回一個(gè)元組,其中第一個(gè)值表示行數(shù),第二個(gè)值表示列數(shù)。如果你想想在Python中是如何建立索引的,即行為0,列為1,會(huì)發(fā)現(xiàn)這與我們定義坐標(biāo)軸值的方式非常相似。很有趣吧!



Concat, Merge, 和Join


如果你熟悉SQL,那么這些概念對(duì)你來說可能會(huì)更容易。無論如何,這些功能基本上就是以特定方式組合dataframe的方法??赡芎茈y評(píng)判在什么時(shí)候使用哪個(gè)最好,所以讓我們都回顧一下。


Concat允許用戶在其下方或旁邊附加一個(gè)或多個(gè)dataframe(取決于你如何定義軸)。


Merge可以基于特定的、共有的主鍵(Primary Key)組合多個(gè)dataframe。


Join,就像merge一樣,可以組合兩個(gè)dataframe。但是,它根據(jù)它們的索引進(jìn)行組合,而不是某些特定的主鍵。


大家可以查看很有幫助的Pandas文檔,了解語法和具體示例和你可能會(huì)遇到的特殊情況。


Pandas Apply


apply類似于map函數(shù),不過它是用于Pandas DataFrames的,或者更具體地說是用于Series的。如果你不熟悉也沒關(guān)系,Series在很大程度上與NumPy中的陣列(array)非常相似。


Apply會(huì)根據(jù)你指定的內(nèi)容向列或行中的每個(gè)元素發(fā)送一個(gè)函數(shù)。你可以想象這是多么有用,特別是在對(duì)整個(gè)DataFrame的列處理格式或運(yùn)算數(shù)值的時(shí)候,可以省去循環(huán)。



透視表


最后要說到的是透視表。如果你熟悉Microsoft Excel,那么你可能已經(jīng)聽說過數(shù)據(jù)透視表。Pandas內(nèi)置的pivot_table函數(shù)將電子表格樣式的數(shù)據(jù)透視表創(chuàng)建為DataFrame。請(qǐng)注意,透視表中的維度存儲(chǔ)在MultiIndex對(duì)象中,用來聲明DataFrame的index和columns。


結(jié)語


我的這些Python編程小貼士就到此為止啦。我希望我介紹的這些在使用Python做數(shù)據(jù)科學(xué)時(shí)經(jīng)常遇到的重要但又有點(diǎn)棘手的方法、函數(shù)和概念能給你帶來幫助。


而我自己在整理這些內(nèi)容并試圖用簡(jiǎn)單的術(shù)語來闡述它們的過程中也受益良多。


相關(guān)報(bào)道:

https:///python-for-data-science-8-concepts-you-may-have-forgotten-i-did-825966908393



優(yōu)惠倒計(jì)時(shí)2天

數(shù)據(jù)科學(xué)實(shí)訓(xùn)營(yíng)第6期

優(yōu)秀助教推薦|姜姜


作為一枚對(duì)數(shù)據(jù)分析的理解僅限于Excel的小白,曾經(jīng)一直認(rèn)為通過寫代碼來分析數(shù)據(jù)是件無比高大上的事??墒牵跀?shù)據(jù)科學(xué)實(shí)訓(xùn)營(yíng)居然就實(shí)現(xiàn)了!


手把手的教學(xué)方式,助教和同學(xué)們熱烈的交流討論,讓我慢慢地覺得一行行代碼如此親切。而當(dāng)把自己頭腦中的構(gòu)思通過代碼實(shí)現(xiàn),看到結(jié)果的那一刻,真是無比激動(dòng)!


經(jīng)過Kaggle、天池的案例的歷練,對(duì)這些數(shù)據(jù)比賽也開始興趣盎然,有沒有小伙伴有興趣一起去玩一玩的?


作為第6期的北美地區(qū)助教,寄語各位學(xué)員:前方高能,請(qǐng)準(zhǔn)備好足夠的時(shí)間,如果你能按時(shí)提交作業(yè),結(jié)業(yè)時(shí)一定脫胎換骨。



【今日機(jī)器學(xué)習(xí)概念】

Have a Great Definition

志愿者介紹

回復(fù)志愿者”加入我們

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多