生信分析方向如何系统入门python3(2019持续更新)

原创: 大土豆力 [生信菜鸟团] 希望大家多多的支持 原文

hi,这里是手把手带你学Python3系列阶段性小结。

大概两个多月前,我开设了这个「老坑」,内容非常基础,如果一路过来,已能初步满足我的一些日常处理。

今天的推送对标技能树「生信分析人员如何系统入门python(2019更新版)」虽然不一定周全,但会尽可能地进行完善。

看完此篇,也算是敲进了大门。

写在前面

Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.

python是一种语法简单易学且强调可读性,一种面向对象、解释型高级编程语言,使用频率和场景日益增长。

在这个系列的第一期开坑时候我写到:

大多数告诉你 python 值得学习都是基于就业和收入,这样的确容易打动一些人去加入学习。但是我觉得,学习一种编程语言真的要义在于,如何使用 [思维] 或者 [逻辑] 使用代码实现一个有意义的事情,可能是减轻繁杂的重复工作,可能是利用编程解决一个实际问题。我觉得编程是一门艺术,所以,你不想进来看看么?

可能我现在正在经历阶段是,能够实现小需求,测试完成的时候也是有些许成就感的,但是过程不太容易。慢慢来,比较快。

这里就给出的了我两个多月来的学习阶段性小结,大概分为以下几步:

  • 理解常量与变量;

  • 掌握基本数据类型及操作;

  • 尝试三大结构;

  • 使用函数;

  • 小实战;

第一步:工欲善其事必先利其器

既然要学习 Python 语言,配套的软件工具必须要摸索到位,除了我在此次推送的 PyCharm外,也有@鲍师傅的 jupyter,新手还是推荐前者。偶尔用用终端界面的 python 也可以,但是别直接用IDLE啦,容易消磨热情。

pycharm主界面

关于版本,从2.X到3.7.4各色版本都能下载到,但是这里并不推荐 python2 了,因为已有消息称2020年1月1日将不再维护 python2 版本,且在前期的野蛮发展中,一些「规范的格式」也没有完全普及。

当然,如果你使用的是 PyCharm,将会直接送你三个开场buff:

  • 简单易学

  • 错误提示

  • 规范提示

安装方法可以详见早期的推文,这里要再啰嗦一句的是,如果使用 PyCharm 一定要开启 PEP 8规范,通过安装autopep8模块就可以智能修改,从一开始就能够写出「精致」的代码,就好比练字时临摹了大家的字帖一般。

三剑客 PyCharm安装测试

编程基础与规范代码

第二步:变量与常量

变量是针对常量来提出的,常量是指在程序中不会改变的量,而变量就可以用于储存不同的计算结果或者不同类型的数据。变量的特点就是可以修改与赋值。

这里需要注意的是:

  • 变量名只能出现字母、数字及下划线,且不能以数字开头;

  • 变量名不能与关键字重复(包括自定义的函数名)例如:

and as assert break class continue def del elif else except exec finally for from global if in import is lambda not or pass print raise return try while with yield

  • 变量名不能重复,即一个变量名只对应一个变量。

五种标准变量类型:

  • 数字

  • 字符串

  • 列表

  • 元祖

  • 字典

可以这样理解数据类型和字符串是基础变量,数字类型主要包含两种类型:整型(Int)和浮点型(float)组成,整型只能储存整数;浮点型能存储小数。有了这些数字就可以进行:

  • 数学计算

  • 位运算

也可以用作判断基因的位置信息,即序列的长短,比如:

判断基因的位置信息

字符串可以理解为一段文本,可以进行文本处理和判断。包括拼接、大小写修改等处理… 不同的类型的数据在必要时是可以转换的,数字也可以被认为是字符串。

正则表达式:

这里需要穿插一个很重要的「技能」(概念),就是正则表达式,具体的规则在之前的推送中提到:

常用的速查表如下:

基本功能

在python中有以下几种使用方式:

import re

# 两种匹配方式,re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。输出结果先判断成立然后输出:
pattern1 = re.match(r'pattern', string, flags=0)pattern2 = re.search(r'pattern' string, flags=0)
if pattern1:    
  print(pattern1.group())
else:    
  print("no match")

# 编译正则用于match()和search(),flags为可选参数比如忽略大小写、多行模式等
pattern3 = re.compile(r'pattern'[, flags])
m = pattern.search('str') 

# 替换,repl指替换后的内容,string指原文内容
re.sub(r'pattern', repl, string, count=0, flags=0)

# findall()也是一种匹配方式,但是优势在于能够将结果返回入一个列表,因此可以直接快速输出结果,以下为我常用的格式
pattern4 = re.findall(r'pattern',string)[0]

# 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
pattern5 = re.finditer(r'pattern', string, flags=0)

# split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下
pattern6 = re.split(r'pattern', string[, maxsplit=0, flags=0])

具体的使用方法可以翻看这篇内容:

手把手带你学 Python3 | python3 脚本小实战(代码放送)

列表、元祖和字典:

元素按顺序排列时就能组成更多信息的数据类型:列表元祖。其中的元素可以包含字符、字符串、数字、子类表(元祖)。列表使用 list = []表示;元祖使用 tuple = (obj,),具体使用和参数可以详见这两篇推送:

列表的使用指南

元组拆包是个啥?

要注意的是,python中索引是从 0 开始计数的;切片和拆包都是快速处理文本好用的方法。

看似两者相差不大,但还是有不同应用场景的。list和tuple最大的差别就在于 Immutable上,这就带了更多安全性及性能优化,列表是相同类型的项目列表:文件,名称,对象,元组是不同类型对象的分组。

字典就好比「新华字典」,定义字典时,元素以关键对的形式 x:y呈现,即一个元素需要包含关键字键(key)和值(value)两部分。键在字典中是唯一不变的,而对应的值可以是任意数据类型,同时允许相同的值存在。在生物信息操作中,字典最经典的应用应是对fa文件的处理,可以以ID为键,序列为值,或是对调也具有相应的场景,可以看字典的推送:

字典与FASTA文件序列抽提

第三步函数的基本操作

为什么要使用函数

基本使用方法:

图片来源于cnblog:痴海

函数,即实现一个特定功能的代码段。是python中的重要技能(工具)。

函数离我们并不远,早期我们已熟练使用了一些内置函数:例如input print等;

函数可以包括:

根据使用范围可以将函数分为两类:

  • 主函数

    我们会使用这样来表示,它和代码一样,全局都是使用;

    01 if _name_ = '_main_':02     
            print('This is main.')
    
  • 子函数

    除了内置函数外,这里就是发挥你洪荒之力的地方啦;

    03 def Plus(a,b):04     
             print(a+b)
    

另外,还能从实现不同的功能角度来区分,比如 匿名函数 以及高阶函数 详见实例说明:

函数入门

在此有一个概念需要提及:

全局变量和局部变量

即整个程序都可以使用的变量,用 global g 表示。与局部变量对应,可以由下图关系理解。

来看一个例子:

01 a = 1
02
03 def function():
04     global a
05     a += 1
06     global b
07     print (a)
08 function()
09 print (a)
10 print (b)

外部变量可以被改变,内部变量也可以在外部使用。

自定义函数

为什么要写函数之前的介绍道:

  • 首先是好看,代码更清楚;

  • 第二是代码容易拆分,容易debug及分工;

  • 第三是有序,避免代码重复(DRY),同时可以厘清思路。

写自定义函数的时候要注意:

  • 函数名也是变量,要遵守定义变量的规则;

  • 参数使用注意
    形参可以预先给定一个默认值。如果调用不给实参,那么参数将使用默认值;如果给定值,那么默认的参数会被替换。

  • 返回return,一个完整的函数的都会有 return,返还值可为基本数据类型,同时可以返还一个表达式,如果没有,返回 None

  • 合理利用内置函数(下图)

内置函数

第四部三大结构

python语言中有三大结构:循序、分支和循环。循序就是从上往下进行,分支和循环结构中最重要的就是条件判断。首先我们要熟悉python3中的判断依据——布尔运算

python3中将布尔运算的Ture (T)False (F)作为定义词使用,并把0、空字符串和None看成False,其他情况为Ture。

和其他的逻辑运算一样,python3也包含与或非运算,只是表示有些许不同,在python中,与运算使用and 连接,或运算使用or连接,非运算使用not Ture

还有一个要注意的是None。None是一个一个特殊空值,并不是0,因为0是有意义的。

如何判断

python中有两种循环语句,while语句和for语句,但是并没有do… while循环。简单来说whlie语句进行判断,如果TRUE,进入循环,FALSE则退出;而for循环是首要给定循环范围,每一次循环会用一个变量存储本次循环的值,当超出范围,循环结束。

while循环
for循环

用作判断的操作符使用,这里引用@ zoe 在技能树上的总结图,Python 的数值运算、逻辑运算、判断表达式的思维导图如下:

image

第五步更多的应用场景

虽然说,生物信息学的处理都与序列打交道,但是偶尔用用数据抓取,可以快速获得很多相关信息。比如8月的2019国自然信息收集,NCBI的摘要和标题的收录。

2019国自然信息获得

这还远远没有结束,在往期的介绍中,依旧存在多个概念和使用没有介绍和归整,例如 biopython, 它能够帮助你快速解析特定文件格式(例如 json),获取对应位置的信息,官方文档链接如下:http://biopython.org/DIST/docs/tutorial/Tutorial.html

推荐几个数据处理和可视化模块(包):NumPy、Pandas、matplotlib、seaborn、pyecharts

现行的一些以python编写的流程中已经支持调用直接作图:

image

还有一个比较重要的概念,可能需要一到两次推送去描述,学习好了会及时更新的,就是python的类与对象

Python 有一条哲学理念是:一切皆对象。由此可见对象在 Python 中的重要性。

现阶段还还处于一个依样画葫芦的阶段,有几个小的案例的也可以查看往期推送。

参考资料:

https://www.runoob.com/python/python-reg-expressions.html

https://docs.python.org/3/library/functions.html

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

推荐阅读更多精彩内容