使用python处理生物信息数据(一)

趁疫情被封闭在家,学习一下python,之前尝试过看过perl的书,代码看得我一脸懵逼,python乍看上去和蔼可亲多了,再加上有个师兄鼓励和推荐学习python,找了这本书Managing Your Biological Data with Python先动起来吧,希望自己能坚持下去。


Managing Your Biological Data with Python
1. Anaconda安装和示例数据

在笔记本wins7上安装了anaconda,用的Spyder进行操作,
这本书是讲的python2,我从Library Genesis搜索下载的英文版,在github上Managing Your Biological Data with Python 3 将书中的示例代码转化为了python3,并提供了示例数据。

2. 一个简单示例,计算ATP的吉布斯自由能

计算ATP的吉布斯自由能,包含了一些基础操作:模块载入,简单的数学计算和查看模块中包含的函数功能和帮助。自己的理解:python模块载入import类似于R语言中library()载入所需的R包,然后可以工作。

#已知数据
ATP = 3.5
ADP = 1.8
Pi = 5.0
R = 0.00831
T = 298
deltaG0 = -30.5
#载入math模块
import math
#计算
print (deltaG0 + R * T * math.log(ADP * Pi / ATP))
-28.161154161098693
#查看math模块中的函数
dir(math)
Out[12]: 
['__doc__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'acos',
 'acosh',
 'asin',
 'asinh',
 'atan',
 'atan2',
 'atanh',
 'ceil',
 'copysign',
 'cos',
 'cosh',
 'degrees',
 'e',
 'erf',
 'erfc',
 'exp',
 'expm1',
 'fabs',
 'factorial',
 'floor',
 'fmod',
 'frexp',
 'fsum',
 'gamma',
 'gcd',
 'hypot',
 'inf',
 'isclose',
 'isfinite',
 'isinf',
 'isnan',
 'ldexp',
 'lgamma',
 'log',
 'log10',
 'log1p',
 'log2',
 'modf',
 'nan',
 'pi',
 'pow',
 'radians',
 'remainder',
 'sin',
 'sinh',
 'sqrt',
 'tan',
 'tanh',
 'tau',
 'trunc']

#查看math模块使用的帮助
 help(math)
Help on built-in module math:

NAME
    math

DESCRIPTION
    This module provides access to the mathematical functions
    defined by the C standard.

FUNCTIONS
    acos(x, /)
        Return the arc cosine (measured in radians) of x.
    
    acosh(x, /)
        Return the inverse hyperbolic cosine of x.
    
    asin(x, /)
        Return the arc sine (measured in radians) of x.
    
    asinh(x, /)
        Return the inverse hyperbolic sine of x.
    
    atan(x, /)
        Return the arc tangent (measured in radians) of x.
...........

#查看math模块中sqrt函数的帮助
help(math.sqrt)
Help on built-in function sqrt in module math:

sqrt(x, /)
    Return the square root of x.
3. 常用的数学计算符号以及math模块中的函数功能

数学计算符号

Operator Meaning
a + b addition
a – b subtraction
a * b multiplication
a/b division
a ** b power (ab)
a % b modulo: the remainder of the division a / b
a // b floor division, rounds down
a * (b + c) parentheses, b + c will be done before the multiplication

math模块中的函数功能

Function Meaning
log(x) natural logarithm of x (ln x)
log10(x) decadic logarithm of x (log x)
exp(x) natural exponent of x (ex)
sqrt(x) square root of x
sin(x), cos(x) sine and cosine of x (x given in radians)
asin(x), acos(x) arcsin and arccos of x (result in radians)

4. 简单示例,计算空间中两点的距离
#载入math模块
from math import *

#(x1, y1, z1)和(x2, y2, z2)两点的坐标
x1, y1, z1 = 0.1,  0.0, -0.7
x2, y2, z2 = 0.5, -1.0,  2.7

#计算每个维度上的距离
dx = x1 - x2
dy = y1 - y2
dz = z1 - z2

#每个维度上距离的平方和
dsquare = pow(dx, 2) + pow(dy, 2) + pow(dz, 2)

#开平方
distance = sqrt(dsquare)
#打印结果
print (distance)
3.566510900025402

5. 简单示例,insulin中不同氨基酸出现的频率
#insulin的部分氨基酸序列
insulin = "GIVEQCCTSICSLYQLENYCNFVNQHLCGSHLVEALYLVCGERGFFYTPKT"

#for循环统计20种氨基酸在insulin序列中出现的次数
for amino_acid in "ACDEFGHIKLMNPQRSTVWY":
    number = insulin.count(amino_acid)
    print (amino_acid, number)
    
A 1
C 6
D 0
E 4
F 3
G 4
H 2
I 2
K 1
L 6
M 0
N 3
P 1
Q 3
R 1
S 3
T 3
V 4
W 0
Y 4

#模仿自测
#自己的一段氨基酸序列
in_my = "SJJAKDJAKNCNZMNCNAIUEQIJDAKLMCZNBADIOEQ8RIIOOKALQZ"
for aa in "ACDEFGHIKLMNPQRSTVWY":
    number = in_my.count(aa)
    print(aa, number)
    
A 6
C 3
D 3
E 2
F 0
G 0
H 0
I 5
K 4
L 2
M 2
N 5
P 0
Q 3
R 1
S 1
T 0
V 0
W 0
Y 0

6. 字符串的简单操作

6.1 字符串索引

#索引
'Protein'[0]
Out[34]: 'P'

'Protein'[1]
Out[35]: 'r'

'Protein'[2]
Out[36]: 'o'

'Protein'[-1]

Out[37]: 'n'

'Protein'[-2]
Out[38]: 'i'

6.2 字符串切片

'Protein'[0:3]
Out[39]: 'Pro'

'Protein'[1:]
Out[40]: 'rotein'

'Protein'[1:-1]
Out[41]: 'rotei'

6.3 字符串算法

#两个字符串连接到一起
'Protein' + ' ' + 'degradation'
Out[42]: 'Protein degradation'

'Protein' + ' ' + 'w'
Out[46]: 'Protein w'

'Protein' + ' ' + 'f'
Out[47]: 'Protein f'

#字符串成倍增加
'Protein' * 5
Out[48]: 'ProteinProteinProteinProteinProtein'
'Protein '  * 5
Out[50]: 'Protein Protein Protein Protein Protein '
'*' * 20
Out[51]: '********************'

6.4 统计字符串长度
使用len()函数统计字符串长度

len('Protein')
Out[52]: 7
len('insulin')
Out[53]: 7

6.5 统计字符串中某个字符的数量

'protein'.count('r')
Out[54]: 1

'insulin'.count('r')
Out[55]: 0

'insulin'.count('i')
Out[56]: 2

7. 简单示例,创建一个随机序列
#使用random模块创建随机序列
import random

alphabet = "ATCG"

sequence = ""

for i in range(10):
    index = random.randint(0,3)
    sequence = sequence + alphabet[index]
    

print(sequence)
GCACAAACCG

8. 简单示例,寻找一段序列的序列motifs
seq = "PRQTEINSEQWENCE"
#seq序列含有15字符,for循环寻找11次,以5个字符长为滑窗。
for i in range(len(seq)-4):
    print(seq[i:i+5])
PRQTE
RQTEI
QTEIN
TEINS
EINSE
INSEQ
NSEQW
SEQWE
EQWEN
QWENC
WENCE

#以3个字符长为滑窗寻找序列motifs,如果是DNA序列,这样的处理可以用来将DNA序列转化为氨基酸序列。
for i in range(len(seq)-2):
    print(seq[i:i+3])
    
PRQ
RQT
QTE
TEI
EIN
INS
NSE
SEQ
EQW
QWE
WEN
ENC
NCE

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容