生物信息Python从入门到精通

编者注:本文来自生信编程直播课程讲师投稿,点击阅读原文可以跳转到大神的博客,欢迎点击! 以下为文章全文:

Python开发的方向太多了,有机器学习,数据挖掘,网络开发,爬虫等等。其实在生信领域,Python还显现不出绝对的优势,生信的大部分软件流程都是用shell或Perl写的,而且已经足够好用了。我选Python是因为我想顺便学点数据挖掘和机器学习的东西,而且Python这些年越来越火,发展势头远超其他脚本语言,所以学它肯定是没错的。

一、入门标准

入门比较难定义,什么程度才算入门呢?

  1. 掌握基本的语法,熟练使用python的内置类型、内置函数和数据结构。
  2. 了解一些基本的模块的使用,能够实现一些简单的需求。

后面有一个实例,如果你能简单的做完,那我敢肯定你已经入门了。

二、基本知识点

1.基本语法

缩进:Python是通过代码缩进来决定代码层次逻辑的,一般约定使用4个空格

版本问题:主要包括2.x系列的和3.x系列的,两者语法不同且不兼容,有的模块只能在指定版本下安装。建议使用3.x Python,碰到特殊问题再去使用指定版本

文件编码声明:python会去环境变量里寻找python解释器。如果代码里有中文,则要以utf-8编码

#!/usr/bin/env python#-*- coding: utf-8 –*-

变量定义:使用前要先定义

dir():列出一个数据类型或对象的所有方法,非常好用,同help()

文件操作:f = open(),f.close();with open() as f: ,os.path.exists(),os.path.isfile(),os.path.abspath()

目录操作:os.mkdir(),os.rmdir(),os.listdir(),os.chdir()

开发环境选择

  • Sublime Text 对Python支持挺好,轻量级生化武器(推荐)
  • Eclipse+Pydev比较厚重,大型开发比较适合
  • Vim/Atom
  • PyCharm
  • IPython
  • WingIDE

2.处理数据

2.1 基本数据类型:布尔;整型;浮点型;字符串

# 字符串的内置函数,都比较有用'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'

2.2 基本数据结构:列表、元组、字典、集合。

数据结构就是一种容器,用于在内存中存放我们的数据。

列表:任意元素组成的顺序序列,以位置为索引。

# 列表的内置函数'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'

元组:相当于不可变的列表,防止错误修改,节省内存开销。元组解包

# 元组的内置函数'count', 'index'

字典:键值对,没有顺序,键必须是常量。

# 字典内置函数'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'

集合:没有顺序,元素之间没有重复,相当于舍弃了值的字典。集合操作(&,|,-,^,<,<=,>,>=)

# 集合内置函数'add', 'clear', 'copy', 'discard', 'pop', 'remove', 'update''isdisjoint','issuperset','issubset','symmetric_difference','difference','union', 'intersection', 'symmetric_difference_update','intersection_update','difference_update',

2.3 控制语句

条件:if…else…

循环:for,while,break,continue

2.4 模块使用

Python有着非常友好的模块安装方法,一个pip install命令几乎可以安装绝大多数的模块。建议使用模块前多看相关API文档。

最常用的模块有:sys,os,re,csv,gzip,fileinput,random,collections,time;百度上有很多很好的模块使用入门教程。

  • 正则表达式 re
  • 有序字典 collections.OrderedDict()
  • 调用系统命令 subprocess.call()

三、入门实例

题目:从大量FASTA文件中提取指定序列,并对提取到的序列做某些处理(如求反向互补序列)

描述:假设你有很多测序数据,分别存储在不同文件夹的不同文件里,现在给你一些序列名,要求你从众多数据中提取出特定的序列。

PS:这里本来应该有大量实例,而且大神还亲自录制了好些视频,可以在我们论坛(http://www.biotrainee.com/forum-90-1.html)找到每个实例的详细描述以及代码和解题思路

思路:遍历每一个文件夹;遍历每一个文件;读取文件,判断序列,输出序列(处理),关闭文件;处理数据,添加一个函数即可。

四、精通标准

当然这只是个噱头,精通的道路是无止境的,下面只是罗列了一些常见的高级特性。

  • 切片,推导式,生成器,异常处理
  • 高级模块:threading(多线程),ctypes(调用C程序优化性能),logging(日志)
  • 专业模块:pysam - 处理基因组数据(fasta/fastq/bam/vcf)的Python模块
  • Biopython:Python的计算分子生物学和生物信息学工具包
  • 编写自己的package:解决某个特定需求,上传到 PyPI,然后你就成为大神了
  • 编程规范:写出规范化的代码 Google Python coding style
  • 函数式编程:即使代码量暴增也不会影响代码的可读性,调试和Debug也会变得非常简单。
  • 面向对象编程:最高级的编程方法,对函数进行分类和封装,让开发“更快更好更强...”

五、最后

Python只是一门编程语言,一种实现工具,我们可以用很多种语言来替换它,我们之所以选择Python,是因为我们喜欢它给我们带来的便捷。如果你想深入某个领域,其实真正重要的是技术背后的算法。

六、推荐资源

  • Python教程 - 廖雪峰的官方网站 http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
  • python初级教程:入门详解 http://www.crifan.com/files/doc/docbook/python_beginner_tutorial/release/html/python_beginner_tutorial.html
  • Python 面向对象(初级篇) http://m.blog.csdn.net/article/details?id=50760467
  • Python | Codecademy https://www.codecademy.com/zh/learn/python
  • Google Python编码风格 http://www.yeolar.com/note/2013/01/10/python-style-guide/
  • Python正则表达式指南 http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
  • 《Python学习手册》
  • 《Python编程金典》
  • 《Bioinformatics Programming Using Python》
编辑:思考问题的熊

原文发布于微信公众号 - 生信技能树(biotrainee)

原文发表时间:2017-02-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

自定义HScript Expression Functions

当我需要使用Expression Functions来写表达式的时候,比如stamp函数,我试图想通过一种通用的理念站在编程的角度来表述如何使用它,而不是依靠惯...

2135
来自专栏Python入门

你还在为Python中文乱码而感到烦恼?今天老司机给你讲讲!

有没有遇到过这样的问题,读取文件被提示“UnicodeDecodeError”、爬取网页得到一堆乱码,其实这些都是编码惹的祸,如果不能真正理解编码的问题所在,就...

983
来自专栏Crossin的编程教室

【每周一坑】生成词云

来看本周的题目。 使用 wordcloud 生成词云图 ? 在 Python 中有许多有趣的库可供学习, wordcloud 必须得算一个,本周我们的题目就是,...

34611
来自专栏TungHsu

这或许是对小白最友好的python入门了吧——20,定义函数简单应用

理论上来说,你可以定义任何函数,也可以让这些函数做任何事,今天,我们就来看几个小例子。 假设你是一名淘宝卖家,你要给你的顾客发快递,你有一套模板,只需要填入相关...

2865
来自专栏儿童编程

《我们捉鱼吧》——Scratch神奇的“侦测”功能总结

导读:本文通过案例《鼠标捉鱼》、《大鱼吃小鱼》、《小猫捉鱼》总结了Scratch的侦测功能。

832
来自专栏我分享我快乐

分享-类似谷歌浏览器图标的绘制方法

前言:学生们在学习ps软件的过程中非常的认真与努力,所以对于软件的使用可以说已经很熟练了,可是为什么当我们给学生安排一些原创设计需求的时候,学生却有种无从下手的...

29812
来自专栏web前端教室

有空看看jQuery源码吧,看不懂也会有收获

jQuery是一个对新人很亲切的JS库,它的源码风格都比较接近自然语言,可以一边对照手册,一边查看jQuery源码。第一次看必然很吃力,不过没关系,这就是学习的...

1666
来自专栏蜉蝣禅修之道

fs学习笔记(一)

1776
来自专栏程序员互动联盟

【答疑解惑第二十三讲】C语言main函数那点事

疑惑一 C语言函数的参数问题 在C语言中main函数大家见到的基本有两种:一种是带参数的如int main(char * argc,char *argv[])...

2543
来自专栏后端技术探索

业务id转密文短链的一种实现思路

买家通过电商app下单后,会受到一条短信,短信内容中包括改订单详情页面的h5地址连接,因为是出现在短信中,所以对连接有要求:1.尽量短;2.安全性考虑,订单在数...

673

扫描关注云+社区