python--生物学编程

文章介绍了Python中常用的工具函数,如map、lambda、zip、reduce、filter、sorted等,并展示了它们在解决生物学问题上的应用,包括计算DNA序列的CG含量、序列长度、截取碱基及ASCII码、处理FASTQ文件和统计序列统计学特性。
摘要由CSDN通过智能技术生成

目录

一、常用工具函数集合 

1.map函数

 2.lambda去制作匿名函数

3.zip()用法(一个拆开粘合的小工具)

4.reduce()实现简单递归

5.打包解包的星星   * 

 6.filter()过滤器

7.sorted()排序小能手 

二、解决实际的生物学问题 

1.计算序列中的CG含量orACTG的各自的数量以及占比

2.计算序列长度

 3.截取序列的前10个碱基以及ASCII码

 4.如何将一整行的fastq文件开始用python处理

5.计算序列的平均值、标准偏差、中位数、最大值、最小值

一、常用工具函数集合 

1.map函数

map(function, iterable, ...)

将列表里的元素一个一个去执行fun(),非常方便nice


 2.lambda去制作匿名函数

def sq(x):
    return x*x

map(sq,[y for y in range(10)])
map(lambda x: x*x,[y for y in range(10)])

 def与lambda都可以实现函数的功能,而且lambda更简洁而且 不用去想名字 /(ㄒoㄒ)/~~


3.zip()用法(一个拆开粘合的小工具)

sequences = ["ACGGACT", "GGACTTA", "GTACGGT"]
list(map(lambda pos: "".join(pos),  zip(*sequences)))

 输出结果:['AGG', 'CGT', 'GAA', 'GCC', 'ATG', 'CTG', 'TAT'] 


4.reduce()实现简单递归

reduce的工作过程是 :在迭代序列的过程中,首先把 前两个元素(只能两个)传给 函数,函数加工后,然后把 得到的结果和第三个元素 作为两个参数传给函数参数, 函数加工后得到的结果又和第四个元素 作为两个参数传给函数参数,依次类推。

# 定义函数
def f(x,y):
    return x*y
# 定义序列,含1~10的元素
items = range(1,11)
# 使用reduce方法
result = reduce(f,items)
print(result)

应用:将序列片段拼接

reduce(lambda a, b: a + b, sequences)

5.打包解包的星星   * 


 6.filter()过滤器

list(filter(lambda s: gc_perc(s) < 0.5, sequences))

上例是筛选出CG含量小于0.5的序列 


7.sorted()排序小能手 

sorted(sequences, key=gc_perc)
['GGACTTA', 'ACGGACT', 'GTACGGT']

默认是由小到大,若想倒序排列↓

sorted(sequences, key=gc_perc,reverse=True)

也可以用list.sort()              勿忘括号 


 int

__abs__,__add__,__and__,__bool__,__ceil__,__class__,__delattr__,__dir__,__divmod__,__doc__,__eq__,__float__,__floor__,__floordiv__,__format__,__ge__,__getattribute__,__getnewargs__,__gt__,__hash__,__index__,__init__,__init_subclass__,__int__,__invert__,__le__,__lshift__,__lt__,__mod__,__mul__,__ne__,__neg__,__new__,__or__,__pos__,__pow__,__radd__,__rand__,__rdivmod__,__reduce__,__reduce_ex__,__repr__,__rfloordiv__,__rlshift__,__rmod__,__rmul__,__ror__,__round__,__rpow__,__rrshift__,__rshift__,__rsub__,__rtruediv__,__rxor__,__setattr__,__sizeof__,__str__,__sub__,__subclasshook__,__truediv__,__trunc__,__xor__

str

__add__,__class__,__contains__,__delattr__,__dir__,__doc__,__eq__,__format__,__ge__,__getattribute__,__getitem__,__getnewargs__,__gt__,__hash__,__init__,__init_subclass__,__iter__,__le__,__len__,__lt__,__mod__,__mul__,__ne__,__new__,__reduce__,__reduce_ex__,__repr__,__rmod__,__rmul__,__setattr__,__sizeof__,__str__,__subclasshook__,capitalize,casefold,center,count,encode,endswith,expandtabs,find,format,format_map,index,isalnum,isalpha,isascii,isdecimal,isdigit,isidentifier,islower,isnumeric,isprintable,isspace,istitle,isupper,join,ljust,lower,lstrip,maketrans,partition,removeprefix,removesuffix,replace,rfind,rindex,rjust,rpartition,rsplit,rstrip,split,splitlines,startswith,strip,swapcase,title,translate,upper,zfill

list

__add__,__class__,__class_getitem__,__contains__,__delattr__,__delitem__,__dir__,__doc__,__eq__,__format__,__ge__,__getattribute__,__getitem__,__gt__,__hash__,__iadd__,__imul__,__init__,__init_subclass__,__iter__,__le__,__len__,__lt__,__mul__,__ne__,__new__,__reduce__,__reduce_ex__,__repr__,__reversed__,__rmul__,__setattr__,__setitem__,__sizeof__,__str__,__subclasshook__,append,clear,copy,count,extend,index,insert,pop,remove,reverse,sort

timeit 我滴计时器


二、解决实际的生物学问题 

1.计算序列中的CG含量orACTG的各自的数量以及占比

CG含量函数如下👇

def gc_perc(s):
    s = s.upper()
    assert all(ch in {'A', 'C', 'G', 'T'} for ch in s), "DNA sequence should include only A, C, G, T"
    gc_count = s.count('G') + s.count('C')
    return gc_count / len(s)

 若想算A的含量或个数(随便改改就好了捏)👇

#A的含量
def a_perc(s):
    s = s.upper()
    assert all(ch in {'A', 'C', 'G', 'T'} for ch in s), "DNA sequence should include only A, C, G, T"
    a_count = s.count('A') 
    return a_count / len(s)
a_perc("ACCGATTACA")

#A的个数
def a_perc(s):
    s = s.upper()
    assert all(ch in {'A', 'C', 'G', 'T'} for ch in s), "DNA sequence should include only A, C, G, T"
    a_count = s.count('A') 
    return a_count
a_perc("ACCGATTACA")


#AGCT所有的含量捏
def all_perc(s):
    s = s.upper()
    assert all(ch in {'A', 'C', 'G', 'T'} for ch in s), "DNA sequence should include only A, C, G, T"
    a_count = s.count('A') 
    g_count = s.count('G') 
    c_count = s.count('C') 
    t_count = s.count('T') 
    return [a_count, g_count, c_count, t_count]
all_perc("ACCGATTACA")

还可以加上map一起用捏~( ̄▽ ̄)~* 

sequences = ["ACGGACT", "GGACTTA", "GTACGGT"]
map(gc_perc, sequences)

2.计算序列长度

list(map(lambda s: len(s), sequences))

 3.截取序列的前10个碱基以及ASCII码

import sys

fo = open("sample.fastq", "r")

line_num=0
for line in (fo):
        line_num+=1
        if line_num % 4 ==1 :
                print(line.strip())
        elif line_num % 4 == 2:
                print(line.strip()[0:10])
        elif line_num % 4 == 3:
                print(line.strip())
        elif line_num % 4 == 0:
                print(line.strip()[0:10])

 4.如何将一整行的fastq文件开始用python处理

#将行转化成一个list
f = open("sample.fastq", "r")
ls=[]
line_num=0
for line in f:
        line_num+=1
        if line_num==4:  
            ls.append(line.replace('\n',''))   
#试验一下print(ls)
#将list分割
sample= []
for i in ls:   
    for j in i:  # 每个元素分割成多个元素
        sample.append(j)
#试验一下print(sample)
#acs码转化
asca=[]
for i in sample:
     asca.append(ord(i))
#试验一下print(asca)

反正学会open()、以及for line in file是关键

5.计算序列的平均值、标准偏差、中位数、最大值、最小值

#计算平均值
numofjianji=0
zongzhiliang=0
for i in asca:
     zongzhiliang+=i
     numofjianji+=1
print('平均值为:')
print(zongzhiliang//numofjianji)
#计算标准偏差
import math
yigeshu=0
for i in asca:
     yigeshu+=(i-(zongzhiliang//numofjianji))*(i-(zongzhiliang//numofjianji))
yigeshu=yigeshu//(numofjianji-1)
print('标准偏差为:')
print(math.sqrt(yigeshu))
#计算中位数
asca.sort()
if numofjianji%2==0:
    print('中位数为:')
    print((asca[numofjianji//2]+asca[numofjianji//2+1])//2)
else:
     print('中位数为:')
     print(asca[(numofjianji+1)//2])
#计算最大值
print('最大值为:')
print(asca[numofjianji-1])
#计算最小值
print('最小值为:')
print(asca[0])

4和5是一整套的,只有弄对了4,5就简单的编程 = =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值