利用python進行資料分析(六)

2021-10-07 22:49:51 字數 4101 閱讀 5388

第3章 函式

3.2.4 匿名函式

匿名函式是一種通過單個語句生成函式的方式,其結果本身就是是返回值,不需要def定 和return返回,呼叫更加方便。匿名函式使用lambda關鍵字定義,表達「我們宣告乙個匿名函式的意思」。

其通用的格式為:

《名稱》

=lambda

《引數1..

. 引數n> : 《表示式》

看如下例子:

>>

>

def short_function(x)

:return x *

2>>

> short_function(5)

10

使用匿名函式則可以簡化**,可以寫成:

>>

>equiv =

lambda x : x *

2>>

>equiv(5)

10

同時,匿名函式可以定義多個引數:

>>

>function2 =

lambda x, y, z : x + y + z

>>

>function2(1,

2,3)

6

匿名函式在資料分析中非常方便,因為在很多案例中資料變形函式都可以作為其他函式的引數,最常用的是將匿名函式作為sort函式的key,是資料排序更加符合我們的要求:

我們按字串長短對列表中的字串進行排序:

>>

>strings =

['ds'

,'ekja'

,'poweak'

,'dadio**'

,'pzqidade'

,'osssssqknjd'

]>>

>strings.sort(key =

lambda x :

len(x)

)>>

>strings

['ds'

,'ekja'

,'poweak'

,'dadio**'

,'pzqidade'

,'osssssqknjd'

]

我們還可以按照字母的數量進行排序:

>>

>strings =

['abbbb'

,'abc'

,'aaaaaaa'

,'jkiu'

,'poikpo'

,'ossdqqknjd'

]>>

>strings.sort(key =

lambda x :

len(

set(

list

(x))))

>>

>strings

['aaaaaaa'

,'abbbb'

,'abc'

,'jkiu'

,'poikpo'

,'ossdqqknjd'

]

通過將匿名函式傳遞給key,我們可以做出更多的排序方式。

3.2.5 柯里化:部分引數應用

柯里化石電腦科學的術語,是以一位數學家的名字命名的,所以這個名字並沒有明確的含義。它表示通過部分引數應用的方式從已有的函式中衍生出新的函式,看例子很容易理解。

有乙個簡單的將兩個數字相加的函式:

>>

>

def add_numbers(x, y):.

..return x + y

通過這個函式衍生出乙個只有乙個變數的新函式,add_five,給引數加上5:

add_five =

lambda y : add_numbers(

5, y)

這種情況下,第二個引數對於函式add_numbers就是柯里化了,相當於我們定義了乙個新函式,而新函式呼叫了已存在的函式。

python中內建的functools模組可以使用pratial函式簡化這種處理:

>>

>

from functools import partial

>>

>add_six = partial(add_numbers,6)

>>

>add_six(7)

13

3.2.6 迭代器與生成器

迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。我們使用的字串、列表與元組都是可迭代物件。

在 python 中,使用了yield的函式被稱為生成器(generator)。跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。而且在實際呼叫生成器時,只是生成了乙個可迭代物件,只有真正請求生成器中的元素時,它才會執行**。

我們通過例子來直觀感受:

首先定義乙個生成列表的普通函式:

>>

>

def c_list(n)

:>>

>

return

list

(range

(n))

#該函式可以直接使用

>>

>c_list(10)

[0,1

,2,3

,4,5

,6,7

,8,9

]

如果使用yiled生成乙個生成器函式:

>>

>

def d_list(n)

:>>

>

yield

list

(range

(n))

#直接呼叫,返回的是乙個生成器,**沒有立即執行

>>

>d_list(10)

>

#列印生成器中的內容

>>

>

for x in d_list(10)

:print

(x)[0,

1,2,

3,4,

5,6,

7,8,

9]

注意到這裡直接返回了乙個列表,而我們知道如果對列表進行遍歷的話,返回的應該是每個元素的值,這也說明了生成器並不是乙個簡單的可迭代列表形式。

因為生成器只有在具體訪問的時候才會返回具體的值,所以生成器相對於迭代器的一大優點便是其占用空間小。

與列表推導式相對相應的是生成器表示式,只需要將列表解析式的中括號換成()即可。

gen =

( x **

2for x in

range

(100

))

總的來數,生成器表示式是對記憶體空間的優化。他們不需要像方括號的列表解析一樣,一次構造出整個結果列表。他們執行起來比列表解析式可能稍慢一些,因此他們對於非常大的結果集合運算是最優的選擇。列表解析式最快,生成器表示式最省空間。

微生物基因組

上一節分享了關於尋找基因的內容,本節分享幾個微生物基因組資源,一些可用於基因注釋:

1, 蛋白直系同源簇(cog):全基因組蛋白的種類分類,每個cog由起源同一保守域單個蛋白質或並繫同源蛋白群組成。

2,高質量自動和人工注釋的微生物蛋白質組(hamap):可對微生物基因組測序產生的蛋白質序列進行自動注釋。

3,京都基因和基因組百科全書(kegg):可根據相互作用的分子或者基因組成資訊途徑。

4,微生物基因組資料庫(mbgd):從不同方面為比較基因組學提供方便,如識別直系同源序列,收集並分析同源序列和蛋白膜體分析。

5,國立生物工程資訊中心(ncbi)。

6,鮑森轉運蛋白頁(paulsen tranxporter page):比較基因組間膜轉運系統。

7,rast。也是注釋基因組的。

利用python進行資料分析

目錄 10 minutes to pandas 翻譯 pandas中loc iloc ix的區別 pandas dropna函式 pandas中dataframe的stack unstack 和pivot 方法的對比 pandas中關於set index和reset index的用法 python匿...

利用python進行資料分析

利用python進行資料分析,需要了解一些基本的方法,比如掌握回歸分析的方法,通過線性回歸和邏輯回歸,其實你就可以對大多數的資料進行回歸分析,並得出相對精確地結論。這部分需要掌握的知識點如下 回歸分析 線性回歸 邏輯回歸 基本的分類演算法 決策樹 隨機森林 樸素貝葉斯 基本的聚類演算法 k mean...

《利用Python進行資料分析》筆記

之前的筆記一直記在我的印象筆記上,今天突然想到 不如直接記在部落格上,印象筆記只記錄生活上的事,這樣也分工明確一些。同時也能和大家分享,也許可以幫助到別人。由於這個學習筆記系列主要還是用於個人學習總結用,所以會比較凌亂,望大家理解!2017 9 23 p151 pd.dropna thresh 其中...