当前位置: 移动技术网 > IT编程>脚本编程>Python > 利用python进行数据分析(六)

利用python进行数据分析(六)

2020年07月11日  | 移动技术网IT编程  | 我要评论

第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', 'dadioqj', 'pzqidade', 'osssssqknjd']
>>>strings.sort(key = lambda x : len(x))
>>>strings
['ds', 'ekja', 'poweak', 'dadioqj', '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)
<generator object d_list at 0x00000194DAB03E58>
#打印生成器中的内容
>>>for x in d_list(10):
       print(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

注意到这里直接返回了一个列表,而我们知道如果对列表进行遍历的话,返回的应该是每个元素的值,这也说明了生成器并不是一个简单的可迭代列表形式。

因为生成器只有在具体访问的时候才会返回具体的值,所以生成器相对于迭代器的一大优点便是其占用空间小。

与列表推导式相对相应的是生成器表达式,只需要将列表解析式的中括号[]换成()即可。

gen = ( x ** 2 for x in range(100))

总的来数,生成器表达式是对内存空间的优化。他们不需要像方括号的列表解析一样,一次构造出整个结果列表。他们运行起来比列表解析式可能稍慢一些,因此他们对于非常大的结果集合运算是最优的选择。列表解析式最快,生成器表达式最省空间。

微生物基因组

上一节分享了关于寻找基因的内容,本节分享几个微生物基因组资源,一些可用于基因注释:
1, 蛋白直系同源簇(COG):全基因组蛋白的种类分类,每个COG由起源同一保守域单个蛋白质或并系同源蛋白群组成。
2,高质量自动和人工注释的微生物蛋白质组(HAMAP):可对微生物基因组测序产生的蛋白质序列进行自动注释。https://hamap.expasy.org/
3,京都基因和基因组百科全书(KEGG):可根据相互作用的分子或者基因组成信息途径。
4,微生物基因组数据库(MBGD):从不同方面为比较基因组学提供方便,如识别直系同源序列,收集并分析同源序列和蛋白膜体分析。http://mbgd.genome.ad.jp/
5,国立生物工程信息中心(NCBI)。
6,鲍森转运蛋白页(Paulsen Tranxporter Page):比较基因组间膜转运系统。http://www.membranetransport.org/transportDB2/
7,RAST。也是注释基因组的。

本文地址:https://blog.csdn.net/liuninghua521/article/details/107237644

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网