05

Bioconductor的数据包library(org.Hs.eg.db)简介

 

这是发布在bioconductor平台上面的一个数据库文件,可以通过R里面下载安装并使用,非常方便。而且用的是数据库存储方式,所以搜索起来也是非常快速。

这个包里面有28个主流数据资料文件,这样我们可以用select函数根据我们自己的ID在这28个数据库里面随意转换自己想要的信息!!!

当然我本人是比较喜欢直接下载原文件,然后写脚本自己进行各种数据直接的转换。

首先我们加载这个数据包,可以看到这个数据包依赖于很多其它的包,如果是第一次安装。会耗时很长!

Bioconductor的数据包org.Hs.eg.db269

用这个函数,可以看到这个org.Hs.eg.db数据对象里面包含着各大主流数据库的数据,一般人都比较熟悉的entrez ID 和ensembl 数据库的ID。

keytypes(org.Hs.eg.db)

##  [1] "ENTREZID"     "PFAM"         "IPI"          "PROSITE"

##  [5] "ACCNUM"       "ALIAS"        "ENZYME"       "MAP"

##  [9] "PATH"         "PMID"         "REFSEQ"       "SYMBOL"

##  [13] "UNIGENE"      "ENSEMBL"      "ENSEMBLPROT"  "ENSEMBLTRANS"

##  [17] "GENENAME"     "UNIPROT"      "GO"           "EVIDENCE"

##  [21] "ONTOLOGY"     "GOALL"        "EVIDENCEALL"  "ONTOLOGYALL"

##  [25] "OMIM"         "UCSCKG"

然后,我们用select函数,就可以把任意公共数据库的数据进行一一对应了。

ensids <- c("ENSG00000130720", "ENSG00000103257", "ENSG00000156414",

"ENSG00000144644", "ENSG00000159307", "ENSG00000144485")

cols <- c("SYMBOL", "GENENAME")

select(org.Hs.eg.db, keys=ensids, columns=cols, keytype="ENSEMBL")

比如说,我们有几个ensembl的基因ID号。然后我们想找它所对应的gene名和缩略词简称,就通过select函数来搞定即可!

Bioconductor的数据包org.Hs.eg.db1158

select(org.Hs.eg.db, keys="BRCA1", columns=c("ENSEMBL","UNIGENE","ENTREZID","CHR","GO","GENENAME"), keytype="SYMBOL")

这样得到了这个BRCA1基因的大部分信息,只是它的GO条目太多了,看得有点乱。

Bioconductor的数据包org.Hs.eg.db1318

 

 

 

05

Bioconductor简介

主页:http://www.bioconductor.org/

文字介绍我懒得写了,具体大家参考

http://www.bioconductor.org/about/

http://blog.csdn.net/shmilyringpull/article/details/8542607

这是一个R语言进行生信分析的流程发布平台,每个包都解决生信的一个流程问题。到目前为止2015年5月5日10:57:29已经有了1024个包,所以大家可以看到生信分析是一个海量的任务了。每一个包都有着详尽的说明文档及脚本代码,还附带着数据,非常容易弄懂,接下来我会花一个月的时间好好学习这些包!

这1024个虽然还是R语言的包,但是它的安装方式与常规的R语言包已经有所区别了。

需要用一下代码来安装

source("http://bioconductor.org/biocLite.R")biocLite()

biocLite(c("GenomicFeatures", "AnnotationDbi"))

也是非常easy的。

现在这个平台上面有1024个包,241个实验数据,917个数据库文件!!!

We are pleased to announce Bioconductor 3.1,

consisting of 1024 software packages,

241 experiment data packages,

and 917 up-to-date annotation packages.

在MOOC上面有很多关于这个的公开课

http://bioconductor.org/help/course-materials/

 

这里面有很多生信方向的分析流程,包括了我之前提到了snp-calling,RNA-seq,CHIP-seq等等,当然最主要的还是芯片数据的处理。

Workflows »

Common Bioconductor workflows include:

这些流程基本上涉及到了现在生物信息学的主流方向,所以基本上掌握了这些包,就是一个合格的生物信息学人才啦!

更重要的是它有着917个数据库文件,里面的信息分门别类,几乎可以算作是生物信息学的百科全书啦!

主要的数据库包括以下。

 

Package Description
AnnotationHub Ensembl, Encode, dbSNP, UCSC data objects
biomaRt Ensembl and other annotations
PSICQUIC Protein interactions
uniprot.ws Protein annotations
KEGGREST KEGG pathways
SRAdb Sequencing experiments.
rtracklayer genome tracks.
GEOquery Array and other data
ArrayExpress Array and other data

 

 

 

 

 

 

 

 

 

 

 

 

 

05

RNA-seq完整学习手册!

需耗时两个月!里面网盘资料如果过期了,请直接联系我1227278128,或者我的群201161227,所有的资源都可以在 http://pan.baidu.com/s/1jIvwRD8 此处找到

搜索可以得到非常多的流程,我这里简单分享一些,我以前搜索到的文献。

 

RNA-seq完整学习手册141

北大也有讲RNA-seq的原理

链接:http://pan.baidu.com/s/1kTmWmv9 密码:6yaz

甚至,我还有个华大的培训课程!!!这可是5天的培训教程哦,好像当初还花了五千多块钱的资料!!!

链接:http://pan.baidu.com/s/1nt5OV5B 密码:gyul

RNA-seq完整学习手册294

优酷也有视频,可以自己搜索看看

RNA-seq完整学习手册312

然后还有几个pipeline,就是生信的分析流程,即使你啥都不会,按照pipeline来也不是问题啦

export PATH=/share/software/bin:$PATH

bowtie2-build ./data/GRCh37_chr21.fa  chr21

tophat -p 1 -G ./data/genes.gtf -o P460.thout chr21 ./data/P460_R1.fq  ./data/P460_R2.fq

tophat -p 1 -G ./data/genes.gtf -o C460.thout chr21 ./data/C460_R1.fq  ./data/C460_R2.fq

cufflinks -p 1 -o P460.clout P460.thout/accepted_hits.bam

cufflinks -p 1 -o C460.clout C460.thout/accepted_hits.bam

samtools  view  -h  P460.thout/accepted_hits.bam  >  P460.thout/accepted_hits.sam

samtools  view  -h  C460.thout/accepted_hits.bam  >  C460.thout/accepted_hits.sam

echo ./P460.clout/transcripts.gtf > assemblies.txt

echo ./C460.clout/transcripts.gtf >> assemblies.txt

cuffmerge -p 1 -g ./data/genes.gtf -s ./data/GRCh37_chr21.fa  assemblies.txt

cuffdiff -p 1 -u merged_asm/merged.gtf  -b ./data/GRCh37_chr21.fa  -L P460,C460 -o P460-C460.diffout P460.thout/accepted_hits.bam C460.thout/accepted_hits.bam

samtools  index  P460.thout/accepted_hits.bam

samtools  index  C460.thout/accepted_hits.bam

 

和另外一个

#!/bin/bash

# Approx 75-80m to complete as a script

cd ~/RNA-seq

ls -l data

 

tophat --help

 

head -n 20 data/2cells_1.fastq

 

time tophat --solexa-quals \

-g 2 \

--library-type fr-unstranded \

-j annotation/Danio_rerio.Zv9.66.spliceSites\

-o tophat/ZV9_2cells \

genome/ZV9 \

data/2cells_1.fastq data/2cells_2.fastq                  # 17m30s

 

time tophat --solexa-quals \

-g 2 \

--library-type fr-unstranded \

-j annotation/Danio_rerio.Zv9.66.spliceSites\

-o tophat/ZV9_6h \

genome/ZV9 \

data/6h_1.fastq data/6h_2.fastq                          # 17m30s

 

samtools index tophat/ZV9_2cells/accepted_hits.bam

samtools index tophat/ZV9_6h/accepted_hits.bam

 

cufflinks --help

time cufflinks  -o cufflinks/ZV9_2cells_gff \

-G annotation/Danio_rerio.Zv9.66.gtf \

-b genome/Danio_rerio.Zv9.66.dna.fa \

-u \

--library-type fr-unstranded \

tophat/ZV9_2cells/accepted_hits.bam                  # 2m

 

 

time cufflinks  -o cufflinks/ZV9_6h_gff \

-G annotation/Danio_rerio.Zv9.66.gtf \

-b genome/Danio_rerio.Zv9.66.dna.fa \

-u \

--library-type fr-unstranded \

tophat/ZV9_6h/accepted_hits.bam                      # 2m

 

# guided assembly

time cufflinks  -o cufflinks/ZV9_2cells \

-g annotation/Danio_rerio.Zv9.66.gtf \

-b genome/Danio_rerio.Zv9.66.dna.fa \

-u \

--library-type fr-unstranded \

tophat/ZV9_2cells/accepted_hits.bam                  # 16m

 

 

time cufflinks  -o cufflinks/ZV9_6h \

-g annotation/Danio_rerio.Zv9.66.gtf \

-b genome/Danio_rerio.Zv9.66.dna.fa \

-u \

--library-type fr-unstranded \

tophat/ZV9_6h/accepted_hits.bam                      # 13m

 

 

time cuffdiff -o cuffdiff/ \

-L ZV9_2cells,ZV9_6h \

-T \

-b genome/Danio_rerio.Zv9.66.dna.fa \

-u \

--library-type fr-unstranded \

annotation/Danio_rerio.Zv9.66.gtf \

tophat/ZV9_2cells/accepted_hits.bam \

tophat/ZV9_6h/accepted_hits.bam                        # 7m

 

head -n 20 cuffdiff/gene_exp.diff

 

sort -t$'\t' -g -k 13 cuffdiff/gene_exp.diff \

> cuffdiff/gene_exp_qval.sorted.diff

 

head -n 20 cuffdiff/gene_exp_qval.sorted.diff

05

国外最出名的R语言大会-useR

这是2014年的会议报告以及ppt,但是好像很多ppt都是需要翻墙才能下载

http://user2014.stat.ucla.edu/#tutorials

Morning Tutorials Monday, 9:15

Room Presenter Title
Palisades Salon A+B Max Kuhn Applied Predictive Modeling in R
Palisades Salon C+F Winston Chang Interactive graphics with ggvis
Palisades Salon D+E Yihui Xie Dynamic Documents with R and knitr [Slides] [Examples]
Hermosa Romain Francois C++ and Rcpp11 for beginners [slides]
Venice Bob Muenchen Managing Data with R
Sproul-Landing building, 3rd floor Matt Dowle Introduction to data.table [Tutorial] [Talk]
Sproul-Landing building, 4th floor Virgilio Gomez Rubio Applied Spatial Data Analysis with R
Sproul-Landing building, 5th floor Martin Morgan Bioconductor

Afternoon Tutorials Monday, 14:00

Room Presenter Title
Palisades Salon A+B Hadley Wickham Data manipulation with dplyr
Palisades Salon C+F Garrett Grolemund Interactive data display with Shiny and R
Palisades Salon D+E Drew Schmidt Programming with Big Data in R
Hermosa S繪ren H繪jsgaard Graphical Models and Bayesian Networks with R
Venice John Nash Nonlinear parameter optimization and modeling in R [slides]
Sproul-Landing building, 3rd floor Dirk Eddelbuettel An Example-Driven Hands-on Introduction to Rcpp [slides]
Sproul-Landing building, 4th floor Ramnath Vaidyanathan Interactive Documents with R
Sproul-Landing building, 5th floor Thomas Petzoldt Simulating differential equation models in R

 

然后2015年的也要开始了,有兴趣的朋友可以June 30 - July 3, 2015
Aalborg, Denmark看看,有很多干货分享!

http://user2015.math.aau.dk/#BN

2015的内容如下

 

04

topGO简单使用

首先载入这个包

source("http://bioconductor.org/biocLite.R")

biocLite("topGO")

biocLite("ALL")

library(topGO)

library(ALL)

data(ALL)

data(geneList)

data(GOdatat)

这样就载入了很多变量, ls()查看如下

[1] "affyLib"      "ALL"          "geneList"     "topDiffGenes"

其中ALL这个数据我在另一篇日志里面重点介绍了一下。

然后我简单提一下"geneList"

head(geneList)

1095_s_at   1130_at   1196_at 1329_s_at 1340_s_at 1342_g_at

1.0000000 1.0000000 0.6223795 0.5412240 1.0000000 1.0000000

str(geneList) 是一个向量,有323个数字。

Named num [1:323] 1 1 0.622 0.541 1 ...

- attr(*, "names")= chr [1:323] "1095_s_at" "1130_at" "1196_at" "1329_s_at" ...

然后简单查询该包的安装地址和一些文件

system.file(package = "topGO")

[1] "C:/Program Files/R/R-3.1.1/library/topGO"

在这个目录下面可以找到文件"examples/geneid2go.map"

里面的内容格式如下,第一列是gene的ID号,一般是entrez ID ,第二列是该基因所对应的GO所有的条目,用逗号分隔。

068724 GO:0005488, GO:0003774, GO:0001539, GO:0006935, GO:0009288

119608 GO:0005634, GO:0030528, GO:0006355, GO:0045449, GO:0003677, GO:0007275

此处省略一万行。

readMappings(file = system.file("examples/geneid2go.map", package = "topGO"))

这个函数可以读取我们的文件,返回一个list。是gene到go的映射,每个基因都有一个或者多个go条目。

这个list可以用inverseList这个函数反转,变成每个go条目到基因的映射。

构建topGO这个大全,需要的数据包括:

  1. 基因identifier,可以附上某种分数以便后面施用某种统计处理,分数可以是t检验的p值或者与某个表型的correlation等;
  2. identifier和GO term间的map,如果是芯片数据的话BioC里有多种注释包,声明包的名称即可。至于我等蛋白界苦人,也能自己构建map,见下;
  3. GO的层级结构,由GO.db提供,目前这个包只支持GO.db提供的结构:GOslim就再说了。

topGOdata对象构建函数的参数包括:

  1. ontology,可指定要分析的GO term的类型,即BP、CC之类;
  2. description:topGOdata的描述,可选;
  3. allGenes:基因identifier的原始列表,和后面的geneSelectionFun联合作用,得出参与分析的基因,可以是numeric或factor。
  4. geneSelectionFun:基因选择函数,如果前面allGenes是numeric的话就必须得指明此参数;
  5. nodeSize:被认为富集的GO term辖下基因的最小数目(>=),默认为1。
  6. annotationFun:基因identifier map到GO term的函数。

代码如下

BPterms <- ls(GOBPTerm)

geneID2GO=readMappings(file = system.file("examples/geneid2go.map", package = "topGO"))

直接使用系统自带的data(GOdata)数据,自己构建太麻烦了!

其实就是这就对ALL这个数据集来进行分析!!!

GOdata包含实例topGOdata对象。它可以用来直接运行富集分析。

topGOdata对象构建好后,即可利用这个包里的各种方法和函数做分析。

numGenes(GOdata) 查看对象包含的基因的数目

[1] 318

> description(GOdata)

[1] "Simple topGOdata object"

genes(GOdata)可以得到该对象里面所有的318个基因

geneScore() 可以得到想318个基因的分数

函数sigGenes()返回一个character vector,为各显著变化基因identifier。函数numSigGenes()则用于查看显著变化基因的数目。

函数updateGenes()可以修改topGOdata对象里所包含的基因。

想要看全部基因都对应上了哪些GO term,可用函数usedGO()得到一个character

 

基因集富集分析(gene set enrichment analysis)

首先看看GSEA的三种方式:

  1. 基于count,即仅要求输入一组基因,此种方式最为流行,可用Fisher's exact test、Hypegeometric  test和binomial test进行检验;
  2. 基于基因的score或rank,可用Kolmogorov-Smirnov like tests(即05年那篇PNAS的GSEA文章所用方法),Gentleman's Category、t-test等方法;
  3. 基于基因的表达,可从expression matrix直接分析,如Goeman's globaltest,以及GlobalAncova。

topGO提供两种分析方法,一种自由度更高但上手不易,本菜鸟还是跟着第二种走吧,较为用户友好但集成度较高。简单来说,就是用runTest()这个函数,要求三个主要的argument,一个是之前构建好的topGOdata类实例,第二个参数algorithm用于指定生成GO graph的方法,而参数statistic用于指定所用的检验方法,比如:

> resultFis <- runTest(GOdata, algorithm = "classic", statistic = "fisher")

> resultWeight <- runTest(GOdata, algorithm = "weight", statistic = "fisher")

> resultKS <- runTest(GOdata, algorithm = "classic", statistic = "ks")

> resultKS.elim <- runTest(GOdata, algorithm = "elim", statistic = "ks.elim")

runTest这一锤子买卖敲定后就能开始解读和展示结果了,得到的结果是topGOresult类的一个实例,其组成很简单,为对象的基本信息,以及各基因的分数(p值或者其他统计参数

 

 

我这里随便挑一个富集结果来看看

resultFis <- runTest(GOdata, algorithm = "classic", statistic = "fisher")

 

-- Classic Algorithm --

 

the algorithm is scoring 590 nontrivial nodes

parameters:

test statistic:  fisher

 

resultWeight <- runTest(GOdata, algorithm = "weight", statistic = "fisher")

 

-- Weight Algorithm --

 

The algorithm is scoring 590 nontrivial nodes

parameters:

test statistic:  fisher : ratio

然后我们对这两种富集方式来画图

pvalFis=score(resultFis) 得到矫正的P值

pvalWeight <- score(resultWeight , whichGO = names(pvalFis))

返回resultFis和resultWeight共有的基因在resultWeight中的分数。有了这两组分数,可以做一些比较,比如关联分析:

cor(pvalFis, pvalWeight)

[1] 0.370151

library(lattice)

xyplot(pvalWeight ~ pvalFis) 画了一个散点图

 

04

R语言里面的一个数据集ALL(Acute Lymphoblastic Leukemia)简介

这个数据内容太多了,我感觉自己也理解的不是很清楚!

非常多的R的bioconductor包都是拿这个数据集来举例子的,所以我简单的介绍一下这个数据集。

这个数据集是对ALL这个病的研究数据,共涉及到了128个ALL病人,其中95个是B细胞的ALL,剩余33个是T细胞的ALL。

是一个芯片数据,同时还包含有其它的病人信息。

大家首先要在R里面安装这个数据集

source("http://bioconductor.org/biocLite.R")

biocLite("ALL")

library(ALL)

data(ALL)

data(geneList)

在R里面输入str(ALL)可以看到这个数据的具体信息,但是非常多!

ALL

ExpressionSet (storageMode: lockedEnvironment)

assayData: 12625 features, 128 samples 

element names: exprs

protocolData: none

phenoData

sampleNames: 01005 01010 ... LAL4 (128 total)

varLabels: cod diagnosis ... date last seen (21 total)

varMetadata: labelDescription

featureData: none

experimentData: use 'experimentData(object)'

 pubMedIds: 14684422 16243790 

Annotation: hgu95av2

我们首先它的BT变量记录的是什么

R语言里面的一个数据集ALL750

可以看出它记录的是数据病人的分组信息。

bcell = grep("^B", as.character(ALL$BT))通过这句话可以挑选出B细胞病人

然后我们看看它的ALL$mol.biol变量记录是是什么

R语言里面的一个数据集ALL857

可以看到它记录的是这些病人的几种突变情况(molecular biology testing)

types = c("NEG", "BCR/ABL")

moltyp = which(as.character(ALL$mol.biol) %in% types)

用这个命令就能挑选出我们想研究的两组突变的病人。

然后我们还可以把刚才的两个标准用来从ALL数据集里面取想要的子集

ALL_bcrneg = ALL[, intersect(bcell, moltyp)]

 

 

同理我们可以查看这个数据集的非常多的变量信息。

包括sex,age,cod,diagnosis,等等,这个'data.frame':共有128 obs. of  21 variables:

R语言里面的一个数据集ALL1190

 

我们除了可以查看这个ALL数据集自带的变量,还可以通过一些方法来访问它的其它信息。

Exprs这个方法可以查看它的表达数据,可以看到有128个变量,12625行的探针数据。

str(exprs(ALL))

num [1:12625, 1:128] 7.6 5.05 3.9 5.9 5.93 ...

- attr(*, "dimnames")=List of 2

..$ : chr [1:12625] "1000_at" "1001_at" "1002_f_at" "1003_s_at" ...

..$ : chr [1:128] "01005" "01010" "03002" "04006" ...

 

还有很多很多函数都可以操作这个数据集,这样可以得到非常多的信息!我就不一一列举了

对这个数据的一系列操作可以画热图,见下面的教程!!!

http://www2.warwick.ac.uk/fac/sci/moac/people/students/peter_cock/r/heatmap/

 

03

生物信息入门视频推荐-新一代测序数据分析

  1. 新一代测序数据分析-在优酷里面可以搜索到,一下是配套视频的讲义及下载地址!
  2. Lecture Notes
  3. Lectures will appear below as they are presented. Homeworks are specified in each handout.
  4. Lecture 1 - slideshandouts. course information, homework and project information, introduction to computing, setting up you computer, basic unix command line usage, organizing your projects, homework 1.
  5. Lecture 2 - slideshandouts, The GFF formatsequence ontologies, basic Unix commands: wc, grep, cut, sort, redirecting input and output streams, piping commands, processing a tabular file with UNIX tools, homework 2
  6. Lecture 3 - slideshandouts. programming languages, download and install an proper editor, introduction to the AWK programming language, tabular file processing, filtering by feature types, Awk onliners explained, another collections of AWK oneliners, homework 3.
  7. Lecture 4 - slideshandouts, sequencing technologies, sequence representations, the FASTA format, processing FASTA files at the command line, homework 4.
  8. Lecture 5 - slideshandouts, string matching, edit distances, regular expressions, local and global alignments, homework 5.
  9. Lecture 6 - slideshandouts, introduction to using blast, legacy blast and blast+, preparing blast databases, performing a blastn query, formatting blast output, homework 6.
  10. Lecture 7 - slideshandouts, using blast, formatting databases, using the blastdbcmd, extract sequences, batch operations, formatting blast queries, homework 7.
  11. Lecture 8 - slideshandouts, blast score and E-values, search strategies, usage examples for blastn, blastp, blastx, tblastn, and tblastx, homework 8.
  12. Lecture 9 - slideshandouts, quality encodings, phred scales, the FASTQ format, homework 9.
  13. Lecture 10 - slideshandouts, file compression, gzip, zip, bz2, file archives, tarbombs, plotting fastq qualities homework 10.
  14. Lecture 11 - slideshandouts installing tools, quality control, adapter trimming, error corrections
  15. Lecture 12 - slideshandouts paired end sequencing, quality control for paired end sequencing, the bioawk language
  16. Lecture 13 - slideshandouts paired end sequencing, read stiching, automating tasks with shell scripts
  17. Lecture 14 - slideshandouts short read alignments, bwa, bowtie and other tools.
  18. Lecture 15 - slideshandouts the sequence alignment map SAM format
  19. Lecture 16 - slideshandouts the SAM/BAM format, sorting and indexing BAM files, using the samtools program
  20. Lecture 17 - slideshandouts aligning paired end reads, comparing and evaluating aligners, simulating sequencing reads with the wgsim tool
  21. Lecture 18 - slideshandouts read duplication, visualizing alignments with IGV and IGB
  22. Lecture 19, guest lecture by Nicholas Stoler - slides, the variant call format (VCF), calling variants with samtools mpileup
  23. Lecture 20,- slideshandouts origins of genome variations, more on SNP calling, successes and failures
  24. Lecture 21,- slideshandouts interval representation, BED and GFF formats, representing data
  25. Lecture 22,- slideshandouts interval operations: complement, extension, flanking, Using the BedTools package
  26. Lecture 23,- slideshandouts interval operations: intersect, window, selecting closest features
  27. Lecture 24,- slideshandouts an introduction to genome assembly, using the velvet assembler, evaluating genome assemblies with QUAST
  28. Lecture 25,- slideshandoutsmeta.tar.gz (25MB) an introduction to metagenomics, software packages mothur, QIIME and MetaSim, online tools RDP, MG-RAST
  29. Lecture 26,- slideshandoutslec26.tar.gz (25MB) an introduction to Chip-Seq technology, peak calling concepts, preprocessing and peak calling methods (part 1)
  30. Lecture 27,- slideshandouts, Chip-Seq peak calling sofware, preprocessing and peak calling methods (part 2)
  31. Lecture 28,- slideshandoutslec28.tar.gz basic RNA-Seq data analysis concepts, split read mapping
  32. Lecture 29, slideshandoutslec29.tar.gz RNA-Seq (part 2)
  33. Lecture 30, slideshandouts, bioinformatics beyond the command line: using R for data analysis
  34. Final Project 30, final-project, data for final project pony.tar.gz (17Mb) BMB 597D: Final project, 50% of the final grade, due 5pm Saturday Dec 14th, 2013
01

脚本作业-解读NCBI的ftp里面关于人的一些基因信息

为了感谢大家对我博客的关注,我在这里发布一个作业,适合菜鸟做的。里面有十几个类似的问题,大家可以下载数据自行处理,如果是问这些问题,我优先回答!

NCBI的ftp里面关于人的一些基因信息

我在NCBI的ftp服务器里面下载了这些数据,时间是2015年,大多是hg19系列的,文件名如下:

CDS.fa 这个是ensembl中人的CDS碱基序列文件,hg38

entrez2go.gene 这个是有go注释的基因情况,有一万八的基因都有go注释

entrez2name.gene 这个是NCBI的entrez ID号对应着基因名的文件

entrez2pubmed.gene 这个是NCBI的entrez ID号对应着该基因发表过的文章的ID号

entrez2refseq2ensembl.gene 这个是NCBI的entrez ID号对应着基因名的refseq的ID号和ensembl数据库的ID号

human_gene_info这个是基因的详细信息,包括基因的起始终止点坐标等等

Protein.fa 这个是ensembl中人的蛋白的氨基酸序列文件,有十万多个蛋白hg38

ref2ensembl.txt  这个是基因名的refseq的ID号和ensembl数据库的ID号

自行去NCBI的ftp服务器里面下载这些数据。

然后好好熟悉这些数据信息,回答一下几个问题:

人总的基因有多少个,它们分别分布在哪些染色体上面,基因的转录本分布情况如何,基因的长度分布如何,基因的外显子个数如何。

CD分子的基因有多少个,它们分别分布在哪些染色体上面,基因的转录本分布情况如何,基因的长度分布如何,基因的外显子个数如何。它们有没有氨基酸偏好性??

MHC系列基因信息?CCL系列基因信息如何?CXCL系列信息如何?或者你感兴趣的基因家族信息?

现在研究最热门的基因是什么?发表文章最多的前十个基因是什么?

基因长度情况如何?最长的基因多长?最短的基因多少bp,可靠吗?

蛋白质长度情况如何?

每条染色体的基因分别情况?基因在染色体那个地方分别最多?

请用图形展示你的结论!!!

 

如果你能回答以上问题,证明你的脚本水平不错了。

如果找不到我,看旁边的公告,加入生信菜鸟群,我就在里面!!!

01

CHIP-seq第三讲之使用MACS软件寻找peaks

在使用Bowtie比对于完Chip-Seq的结果后,就需要用到MACS或者ERANGE来找出峰所在的位置了。但是由于ERANGE的设置比较复杂,所以最为流行的还是MACS。

一.首先安装MACS软件

MACS有两个版本,分别是MACS14和MACS2。MACS2在很多方面都对MACS14做了重大改进,但目前还在测试阶段。我们依然以MACS14为例进行说明。

MACS软件的下载地址在wget https://codeload.github.com/taoliu/MACS/zip/master

这是一个python软件,有152M,已经算是很大了!所以需要按照安装python的方法来安装它!但是,好像这个是最新版的,我们还是用1.4版本吧

wget http://github.com/downloads/taoliu/MACS/MACS-1.4.2-1.tar.gz

其实它的readme已经把这个软件的各种安装使用方法讲的很清楚了。

https://github.com/taoliu/MACS/blob/master/README.rst

MACS软件的具体原理,大家去看文献,或者参考这篇文章

http://www.plob.org/2014/05/08/7227.html

很简单的一个python命令即可安装该软件python setup.py install --user

CHIP-seq第三讲之使用MACS软件寻找peaks752

二.然后准备该软件所需要的数据

是我们在前两篇文章中提到的数据

CHIP-seq第三讲之使用MACS软件寻找peaks786

三.接着运行MACS的命令

/home/jmzeng/.local/bin/macs14 -t Xu_WT_rep2_BAF155.fastq.trimmed.single.bam \

> -c Xu_WT_rep2_Input.fastq.trimmed.single.bam \

> -f BAM -g hs --bw 300 -w -S -n Xu_WT_rep2

CHIP-seq第三讲之使用MACS软件寻找peaks974

四.最后解读一下结果

CHIP-seq第三讲之使用MACS软件寻找peaks987

56K Apr 30 21:54 Xu_WT_rep2_model.r

5.5K Apr 30 22:21 Xu_WT_rep2_negative_peaks.xls

783K Apr 30 22:21 Xu_WT_rep2_peaks.bed

865K Apr 30 22:21 Xu_WT_rep2_peaks.xls

766K Apr 30 22:21 Xu_WT_rep2_summits.bed

唉,反正这也不是我的课题,懒得解释这些结果啦,等后来有机会再慢慢玩吧

 

 

参考 http://www.plob.org/2014/05/08/7227.html

附录:我们现在来了解如何设置参数。

参考自 http://www.plob.org/2014/01/26/7118.html

-t TFILE, –treatment=TFILE 输入文件名

-c CFILE, –control=CFILE 输入阴对文件名

-n NAME, –name=NAME 输入出文件名前缀

-f FORMAT, –format=FORMAT 输入文件格式,默认值为AUTO,可选的值为”BEG”,”ELAND”,”ELANDMULTI”,”ELANDMULTIPER”,”ELANDEXPORT”,”SAM”,”BAM”,”BOWTIE”等。

-g GSIZE, –gsize=GSIZE 比对模板大小。格式可以是:1.0e+9,或者1000000000,也可以缩写:’hs’ for 人类 (2.7e9), ‘mm’ for 大鼠(1.87e9), ‘ce’ for 线虫 (9e7) and ‘dm’ for 果蝇 (1.2e8), 默认值:hs

-s TSIZE, –tsize=TSIZE 设置为短序列的长度,默认值为25

-p PVALE, –pvalue=PVALUE 非峰可能性截取值,默认值为1e-5,这个值不能大太,超过0.9的话,可能无法输出正确的结果

-m MFOLD, –mfold=MFOLD 峰值高度相对于本底的比值,默认值为10,30。也就是说,最低值不能少于10,但比值超过30也不认为它是正常的一个峰。一般而言,低值设置为10是一个很好的区分点。如果这个值还是无法得到满意的结果,那么可以设置得更低,但最好还是使用–nomodel参数,使–nomodel设置为True,然后再传递–shiftsize及–bw参数给MACS。–shiftsize默认值为100,而–bw的默认值为300。

–diag 生成完整报表,会包括是否为真峰的可能性,但会严重拖累运算速度。

 

30

人的CD分子基因信息简介!

CD分子吧,它是Clusters of Differentiation的简写,是指一组分化抗原的家族,目前该家族已经有CD1——CD350甚至更多的成员.他们分布于T细胞等免疫细胞表面,参与免疫细胞各种表达,其中有整合素、受体、配体等蛋白分子,在免疫应答反应中参与识别、粘附和信号转导等功能.

我这里简单讲讲如何整理它们的基因信息,首先从NCBI里面下载的人的gene_info文件,然后通过脚本来查找CD分子信息。

perl -alne '{if (/\tCD\d+/ or /CD\d+\|/ ) {print}}' human_gene_info >CD.info

cut -f 2-5 CD.info >CD.table

再根据CD分子的排序把我们的信息重新排序

perl -alne '{/CD(\d+\w)/;$hash{$1}=$_}END{print $hash{$_} foreach sort {$a <=> $b}keys %hash}' CD.table >CD.table.sort

然后我发现了一个很有趣的问题,它们都是负义链上面的基因!

 

entrez ID gene symbol 正负链
911 CD1C - BDCA1|CD1|CD1A|R7
913 CD1E - CD1A|R2
909 CD1A - CD1|FCB6|HTA1|R4|T6
912 CD1D - CD1A|R3
910 CD1B - CD1|CD1A|R1
9266 CYTH2 - ARNO|CTS18|CTS18.1|PSCD2|PSCD2L|SEC7L|Sec7p-L|Sec7p-like
30011 SH3KBP1 - CD2BP3|CIN85|GIG10|HSB-1|HSB1|MIG18
23607 CD2AP - CMS
89886 SLAMF9 - CD2F-10|CD2F10|CD84-H1|CD84H1|SF2001
10849 CD3EAP - ASE-1|ASE1|CAST|PAF49
445347 TARP - CD3G|TCRG|TCRGC1|TCRGC2
915 CD3D - CD3-DELTA|IMD19|T3D
920 CD4 - CD4mut
922 CD5L - AIM|API6|PRO229|SP-ALPHA|Spalpha
925 CD8A - CD8|Leu2|MAL|p32
927 CD8BP - CD8B2
54675 CRLS1 - C20orf155|CLS|CLS1|GCD10|dJ967N21.6
3681 ITGAD - ADB2|CD11D
3683 ITGAL - CD11A|LFA-1|LFA1A
3684 ITGAM - CD11B|CR3A|MAC-1|MAC1A|MO1A|SLEB6
3687 ITGAX - CD11C|SLEB6
290 ANPEP - APN|CD13|GP150|LAP1|P150|PEPN
115708 TRMT61A - C14orf172|GCD14|Gcd14p|TRM61|hTRM61
2526 FUT4 - CD15|ELFT|FCT3A|FUC-TIV|FUTIV|LeX|SSEA-1
2215 FCGR3B - CD16|CD16b|FCG3|FCGR3|FCR-10|FCRIII|FCRIIIb
4055 LTBR - CD18|D12S370|LT-BETA-R|TNF-R-III|TNFCR|TNFR-RP|TNFR2-RP|TNFR3|TNFRSF3
930 CD19 - B4|CVID3

 

 

 

 

 

 

 

30

自学CHIP-seq第二讲之过滤数据并比对

这个是有着非常成熟的流程了,我就不细讲了!

我们随机挑选两个文件来跑一下CHIP-seq的流程吧,其中一个是.部分进行免疫共沉淀前的DNA(input DNA)作为空白对照。

5.5G Apr 30 10:31 Xu_WT_rep2_BAF155.fastq

18G Feb 13 20:37 Xu_WT_rep2_Input.fastq

首先进行质量控制,过滤低质量的reads

这里我选取的是DynamicTrim.pl 和

脚本如下

for id in *fastq

do

echo $id

perl DynamicTrim.pl $id

done

接下来

for id in *.trimmed

do

echo $id

perl LengthSort.pl $id

Done

这样就得到了过滤后的reads,可以进行比对啦!

图片1

当然,中间文件可以删掉啦,不然太占空间了,我还只是取了两个数据,要是把这个文章的八个数据都跑完就太纠结了。

然后用bowtie比对

#samtools faidx hg19.fa

#Bowtie2-build hg19.fa hg19

for i in *single

do

bowtie2 -x /home/jmzeng/ref-database/hg19 -U $i -S  $i.sam

samtools view -bS $i.sam> $i.bam

done

输出的bam文件就需要用MASC这个软件来找peak了

30

自学CHIP-seq第一讲之文献解读

我这里选择的CHIP-seq文章题目是

CARM1 Methylates Chromatin Remodeling Factor BAF155 to Enhance Tumor Progression and Metastasis

文章链接http://www.sciencedirect.com/science/article/pii/S1535610813005369

这是2013年的文章,算是蛮新的了,主要探究了CARM1这个基因

然后我简单搜索了一些这个基因的信息

9606 10498 CARM1

- PRMT4

MIM:603934|HGNC:HGNC:23393|

Ensembl:ENSG00000142453|HPRD:09158|Vega:OTTHUMG00000180699

19 19p13.2 coactivator-associated arginine methyltransferase 1

protein-coding CARM1 coactivator-associated arginine methyltransferase histone-arginine methyltransferase CARM1|protein arginine N-methyltransferase 4 20150308

该基因是多种肿瘤相关的转录因子的共激活剂(激活蛋白;转录辅助激活蛋白;转录共同活化子)。

文章作者做了以下四件事

Knockout of CARM1 Using ZFN in Breast Cancer Cells

Identification of BAF155 as a Novel CARM1 Substrate

Methylation of BAF155 Promotes Tumor Growth and Metastasis

Methylated BAF155 Gains Unique Chromatin Association

 

所以就有两种细胞,一种是野生型WT,一种是突变的MUT细胞

然后它们分别做了两个重复,一种是input一种是BAF155免疫测序。

CHIP-seq一定是有一个input对照文件,和一个真正的免疫共沉淀的测序文件。

这样就有八个测序文件。

我们随机挑选两个文件来跑一下CHIP-seq的流程吧,其中一个是.部分进行免疫共沉淀前的DNA(input DNA)作为空白对照。

5.5G Apr 30 10:31 Xu_WT_rep2_BAF155.fastq

18G Feb 13 20:37 Xu_WT_rep2_Input.fastq

然后我随便在网上找了一个生信分析流程

  1. 标准信息分析
    a)   对测序数据进行base calling、raw data 数据整理及数据质量评估;
    b)   去接头污染,去低质量reads和产量情况统计
    c)   Bisulfite 测序序列与参考基因组序列的比对
    d)   深度和覆盖度分析
    e)   C 碱基的甲基化水平
    f)   全基因组甲基化水平分布趋势
  2. g)  全基因组DNA甲基化图谱
  3. h)  差异性甲基化区域(DMR)分析

 

参考

http://www.plob.org/2012/09/29/3760.html

http://www.plob.org/2012/01/09/1605.html

http://www.plob.org/2012/01/08/1538.html

 

30

阿里巴巴免费的服务器体验好差!

不知道为什么最近进入自己的网页后台总是很慢,发个日志也慢,很是郁闷!

本来以为是免费的空间快用完了,所以慢,结果一查,根本就没有用多,其实我很想投诉一下阿里巴巴!

想想该搞个国外服务器了,然后把网站搬家!

QQ截图20150430150101

30

Figtree的把进化树文件可视化

下载软件

http://tree.bio.ed.ac.uk/software/figtree/

我们这里就在window平台下使用,所以直接下载zip包即可,解压即可使用

准备数据

我这里就简单的用muscle生成了一个树文件来看看结果TRAV.fa 是一百多个类似的基因

muscle -in TRAV.fa -out tmp

muscle -maketree -in tmp  -out TRAV.tree

这个树文件TRAV.tree是Newick format,可以直接被figtree识别从而画图

软件使用

很简单,下载,点击即可使用,然后导入树文件,就可以直接出图啦!

Figtree的把进化树文件可视化368

30

Muscle进行多序列比对

软件的主页是

http://www.drive5.com/muscle/

进入主页,简单看看软件介绍,这个软件还是蛮牛的,一个人在家里自己写出来的,当然,对于普通人来说,这个软件跟clustalW没什么区别,反正都是多序列比对啦!

我们下载适合我们平台的版本即可!

Muscle进行多序列比对193

准备数据,我这里选择的是几个短小的蛋白

Muscle进行多序列比对215

 

这里有两种比对方式,都是很简单的命令

一种是先比对,再生成树文件(树的格式是Newick format, )

muscle -in mouse_J.pro -out mouse_J.pro.a

muscle -maketree -in mouse_J.pro.a -out mouse_J.phy (这里有两种构建树的方式)

另外一种是比对成aln格式的数据,然后用其它软件(phyml或者phylip)来生出树文件

muscle -in mouse_J.pro   -clwout seqs.aln

可以看到比对的效果还是蛮好的,是aln格式的比对文件,这个格式非常常用

Muscle进行多序列比对505

或者输出phy格式的比对文件,

muscle -in mouse_J.pro  -physout seqs.phy

Muscle进行多序列比对685

可以被phyml等软件识别,然后来构建进化树,见  http://www.bio-info-trainee.com/?p=626

21

美国Minnesota大学的生信全套课件分享

刚才在知乎什么看到了一篇分享pacbio的数据特征,顺便看到了Minnesota大学的关于生物信息的教程的ppt合集,所以就想打包下载。

https://www.msi.umn.edu/tutorial-materials

这个网页里面有64篇pdf格式的ppt,还有几个压缩包,本来是准备写爬虫来爬去的,但是后来想了想有点麻烦,而且还不一定会看,反正也是玩玩
就用linux的命令行简单实现了这个爬虫功能。
curl https://www.msi.umn.edu/tutorial-materials >tmp.txt
perl -alne '{/(https.*?pdf)/;print $1 if $1}' tmp.txt >pdf.address
perl -alne '{/(https.*?txt)/;print $1 if $1}' tmp.txt
perl -alne '{/(https.*?zip)/;print $1 if $1}' tmp.txt >zip.address
wget -i pdf.address
wget -i pdf.zip
这样就可以啦!
教程ppt列表如下,大家有兴趣的可以自行下载浏览。

2009-04-22-mrm-presentation_0.pdf               Matlab_viz_image_UMR.pdf
Analyzing ChIP at the command line.pdf          MaxQuant_Introduction_112409.pdf
Analyzing ChIP using Galaxy.pdf                 Maxquant-step-by-step_rs091124.pdf
Badalamenti_PacBio_tutorial_12-10-2014.pdf      MSI Applications Catalog Oct 21 MB slides.pdf
basics_chip_seq.pdf                             MSIIntro2013Jun18.pdf
Best_Practices_GATK_Variant_Detection_v1_0.pdf  MSIIntroBMEN5311.pdf
blast2go.pdf                                    MSI_Workshop_for_Introduction_to_Structure_based_Drug_Design.pdf
ClinProTools_0.pdf                              MTLB_GPUs.pdf
CUDA_Programming.pdf                            OpenMP.tutorial_1.pdf
cuda_tutorial_performance.pdf                   Open_Source_Proteomics_1.pdf
FLUENT_2009April21_final.pdf                    OptimizingWithGA.pdf
FLUENT_tutorial_2008aug14fin.pdf                Orbi_Data_Analysis_092811.pdf
galaxy_101_V4_ljm_0.pdf                         Partek Training Handout_miRNA and mRNA Data Analysis.pdf
GPU_tools.pdf                                   PerformanceTuning_itasca_11_27_12_0.pdf
gpututorial-msi.pdf                             PETSc_Tutorial.pdf
Hands_On_Tutorial_Using_ProTIP.pdf              Phi_Intro.pdf
Introduction to MSI Systems.pdf                 Protein_Grouping_FDR_Analysis_and_Database_Pratik_March2012_Draft.pdf
Introduction_to_PEAKS_0.pdf                     Proteomics_MSI_072309_Print.pdf
Introduction_to_SBDD.pdf                        pymol_v5.pdf
IntroMPI2011july19c.pdf                         QC_illumina_galaxy_V1_ljm.pdf
IntroMPI2012_July25-part1.pdf                   Quality Control of Illumina Data at the Command Line.pdf
IntroMSI2014.pdf                                remotevisualization.pdf
IntroNWChem.pdf                                 RISS_Hsapiens_variant_Detection_v3.0-small.pdf
IntroOpenMP_2011jun28b.pdf                      RNA_seq_Lecture2_2014_v2.pdf
Intro_to_GAMESS.pdf                             RNA-Seq mod1v6.pdf
IntroToGaussian09.pdf                           R_Spring2012_ver2.pdf
introtomolpro.pdf                               SchrodingerTutorial2011.pdf
Intro_to_MSI_Physicists.pdf                     Sybyl.pdf
intro-to-perl.pdf                               Tutorial-Hsap-v15.pdf
Matlab_11_29_UMR.pdf                            Tutorial-Stuber-v12-1.pdf
Matlab_PCT.pdf                                  unix2013.6.18.pdf
MATLAB_Tuning.pdf                               WRKSP_2_19.pdf

Total wall clock time: 40m 22s
Downloaded: 64 files, 249M in 40m 2s (106 KB/s)

我都已经下载好了,打包压缩到群里面啦!

21

HGNC数据库简介

人类基因命名委员会(HUGO Gene Nomenclature Committee);人类基因组命名委员会!

其实有了NCBI的entrez ID,然后还有refseq里面的ID,还有ensembl的ID,还有基因本身的功能英文缩略简称,已经很麻烦了,又来了一个HGNC,唉,头疼!

The HGNC approves both a short-form abbreviation known as a gene symbol, and also a longer and more descriptive name.

可以下载整个数据,用脚本慢慢研究研究

wget ftp://ftp.ebi.ac.uk/pub/databases/genenames/new/tsv/hgnc_complete_set.txt

 

还是看看BRCA1这个基因,里面的信息挺多的,主要看HGNC:1100,就是这个数据库对它这个基因的编号

HGNC:1100

BRCA1  这个是基因名,需要得到该组织的认可!!!!

breast cancer 1, early onset protein-coding gene gene with protein product Approved

17q21.31 17q21.31

"RNF53|BRCC1|PPP1R53|FANCS" "BRCA1/BRCA2-containing complex, subunit 1|protein phosphatase 1, regulatory subunit 53|Fanconi anemia, complementation group S" "Ring finger proteins|Protein phosphatase 1 regulatory subunits" "58|694"

1991-02-20T00:00:00Z

2015-04-18T00:00:00Z

672     这里是entrez ID

ENSG00000012048  这里是ensembl的ID,

OTTHUMG00000157426 uc002ict.3 U14680 NM_007294

"CCDS11453|CCDS11454|CCDS11455|CCDS11456|CCDS11459|CCDS11455|CCDS11456|CCDS11459|CCDS11454" P38398 1676470 MGI:104537 RGD:2218

"Breast Cancer|http://research.nhgri.nih.gov/bic/|BRCA1 database at LOVD-China|http://genomed.org/LOVD/BC/home.php?select_db=BRCA1|LOVD - Leiden Open Variation Database|http://chromium.liacs.nl/LOVD2/cancer/home.php?select_db=BRCA1|LOVD - Leiden Open Variation Database|http://proteomics.bio21.unimelb.edu.au/lovd/genes/BRCA1|LRG_292|http://www.lrg-sequence.org/LRG/LRG_292"

BRCA1 113705 119068

 

数据结构大概就是这个样子的了!

这几个数据库的内容都是互相链接的!

 

然后我们看看HGNC数据库的一些统计信息

http://www.genenames.org/cgi-bin/statistics

总共有40392个基因信息

其中18990个是能编码蛋白产物的基因,它们大多有GO注释

其中5927个是non-coding RNA,是现在的研究热门。

还有12546个是假基因,挺复杂的

最后还有1188个免疫相关基因,位置基因,病毒基因等等

 

最后,送给大家一个彩蛋!还有十一个物种也是有一个命名委员会的!

类似于 Mouse Gene Nomenclature Committee (MGNC).  Please see the following links:

 

参考文献;

Gray KA, Yates B, Seal RL, Wright MW, Bruford EA. genenames.org: the HGNC resources in 2015. Nucleic Acids Res. 2015 Jan;43(Database issue):D1079-85. doi: 10.1093/nar/gku1071. PMID:25361968

18

Bowtie算法第六讲-tally法对bwt索引进行搜索

因为要讲搜索,所以我选择了一个长一点的字符串来演示多种情况的搜索

perl rotation_one_by_one.pl atgtgtcgtagctcgtnncgt

程序运行的结果如下

$ATGTGTCGTAGCTCGTNNCGT 21

AGCTCGTNNCGT$ATGTGTCGT 9

ATGTGTCGTAGCTCGTNNCGT$ 0

CGT$ATGTGTCGTAGCTCGTNN 18

CGTAGCTCGTNNCGT$ATGTGT 6

CGTNNCGT$ATGTGTCGTAGCT 13

CTCGTNNCGT$ATGTGTCGTAG 11

GCTCGTNNCGT$ATGTGTCGTA 10

GT$ATGTGTCGTAGCTCGTNNC 19

GTAGCTCGTNNCGT$ATGTGTC 7

GTCGTAGCTCGTNNCGT$ATGT 4

GTGTCGTAGCTCGTNNCGT$AT 2

GTNNCGT$ATGTGTCGTAGCTC 14

NCGT$ATGTGTCGTAGCTCGTN 17

NNCGT$ATGTGTCGTAGCTCGT 16

T$ATGTGTCGTAGCTCGTNNCG 20

TAGCTCGTNNCGT$ATGTGTCG 8

TCGTAGCTCGTNNCGT$ATGTG 5

TCGTNNCGT$ATGTGTCGTAGC 12

TGTCGTAGCTCGTNNCGT$ATG 3

TGTGTCGTAGCTCGTNNCGT$A 1

TNNCGT$ATGTGTCGTAGCTCG 15

它的BWT及索引是

T 21

T 9

$ 0

N 18

T 6

T 13

G 11

A 10

C 19

C 7

T 4

T 2

C 14

N 17

T 16

G 20

G 8

G 5

C 12

G 3

A 1

G 15

然后得到它的tally文件如下

图片1

接下来用我们的perl程序在里面找字符串

第一次我测试 GTGTCG 这个字符串,程序可以很清楚的看到它的查找过程。

perl search_char.pl    GTGTCG   tm.tally

your last char is G

start is 7 ; and end is 13

now it is number 5 and the char is C

start is 3 ; and end is 6

now it is number 4 and the char is T

start is 17 ; and end is 19

now it is number 3 and the char is G

start is 10 ; and end is 11

now it is number 2 and the char is T

start is 19 ; and end is 20

now it is number 1 and the char is G

start is 11 ; and end is 12

It is just one perfect match !

The index is 2

第二次我测试一个多重匹配的字符串GT,在原字符串出现了五次的

perl search_char.pl  GT  tm.tally

your last char is T

start is 15 ; and end is 22

now it is number 1 and the char is G

start is 8 ; and end is 13

we find more than one perfect match!!!

8 13

One of the index is 11

One of the index is 10

One of the index is 19

One of the index is 7

One of the index is 4

One of the index is 2

One of the index is 14

惨了,这个是很严重的bug,不知道为什么,对于多个匹配总是会多出那么一点点的结果。

去转换矩阵里面查看,可知,前面两个结果11和10是错误的。

CTCGTNNCGT$ATGTGTCGTAG 11

GCTCGTNNCGT$ATGTGTCGTA 10

GT$ATGTGTCGTAGCTCGTNNC 19

GTAGCTCGTNNCGT$ATGTGTC 7

GTCGTAGCTCGTNNCGT$ATGT 4

GTGTCGTAGCTCGTNNCGT$AT 2

GTNNCGT$ATGTGTCGTAGCTC 14

最后我们测试未知字符串的查找。

perl search_char.pl ACATGTGT tm.tally

your last char is T

start is 15 ; and end is 22

now it is number 7 and the char is G

start is 8 ; and end is 13

now it is number 6 and the char is T

start is 19 ; and end is 21

now it is number 5 and the char is G

start is 11 ; and end is 12

now it is number 4 and the char is T

start is 20 ; and end is 21

now it is number 3 and the char is A

start is 2 ; and end is 3

now it is number 2 and the char is C

start is 3 ; and end is 3

we can just find the last 6 char ,and it is ATGTGT

原始字符串是ATGTGTCGTAGCTCGTNNCGT,所以查找的挺对的!!!

 

[perl]

$a=$ARGV[0];

$a=uc $a;

open FH,"<$ARGV[1]";

while(<FH>){

chomp;

@F=split;

$hash_count_atcg{$F[0]}++;

$hash{$.}=$_;

# the first line is $ and the last char and the last index !

}

$all_a=$hash_count_atcg{'A'};

$all_c=$hash_count_atcg{'C'};

$all_g=$hash_count_atcg{'G'};

$all_n=$hash_count_atcg{'N'};

$all_t=$hash_count_atcg{'T'};

#print "$all_a\t$all_c\t$all_g\t$all_t\n";

$len_a=length $a;

$end_a=$len_a-1;

#print "your query is $a\n";

#print "and the length of your query is $len_a \n";

$after=substr($a,$end_a,1);

#we fill search your query from the last char !

if ($after eq 'A') {

$start=2;

$end=$all_a+1;

}

elsif ($after eq 'C') {

$start=$all_a+1;

$end=$all_a+$all_c+1;

}

elsif ($after eq 'G') {

$start=$all_a+$all_c+1;

$end=$all_a+$all_c+$all_g+1;

}

elsif ($after eq 'T'){

$start=$all_a+$all_c+$all_g+$all_n+1;

$end=$all_a+$all_c+$all_g+$all_t+$all_n+1;

}

else {die "error !!! we just need A T C G !!!\n"}

print "your last char is $after\n ";

print "start is $start ; and end is $end \n";

foreach (reverse (1..$end_a)){

$after=substr($a,$_,1);

$before=substr($a,$_-1,1);

($start,$end)=&find_level($after,$before,$start,$end);

print "now it is number $_ and the char is $before \n ";

print "start is $start ; and end is $end \n";

if ($_  > 1 && $start == $end) {

$find_char=substr($a,$_);

$find_len=length $find_char;

print "we can just find the last $find_len char ,and it is $find_char \n";

#return "miss";

last;

}

if ($_ == 1) {

if (($end-$start)==1) {

print "It is just one perfect match ! \n";

my @F_start=split/\s+/,$hash{$end};

print "The index is $F_start[1]\n";

#return $F_start[1];

last;

}

else {

print "we find more than one perfect match!!!\n";

print "$start\t$end\n";

foreach  (($start-1)..$end) {

my @F_start=split/\s+/,$hash{$_};

print "One of the index is $F_start[1]\n";

}

#return "multiple";

last;

}

}

}

sub find_level{

my($after,$before,$start,$end)=@_;

my @F_start=split/\s+/,$hash{$start};

my @F_end=split/\s+/,$hash{$end};

if ($before eq 'A') {

return ($F_start[2]+1,$F_end[2]+1);

}

elsif ($before eq 'C') {

return ($all_a+$F_start[3]+1,$all_a+$F_end[3]+1);

}

elsif ($before eq 'G') {

return ($all_a+$all_c+1+$F_start[4],$all_a+$all_c+1+$F_end[4]);

}

elsif ($before eq 'T') {

return ($all_a+$all_c+$all_g+$all_n+1+$F_start[5],$all_a+$all_c+$all_g+1+$all_n+$F_end[5]);

}

else {die "error !!! we just need A T C G !!!\n"}

}

[/perl]

 

原始字符串是atgtgtcgtagctcgtnncgt

 

18

Bowtie算法第五讲-index2tally

前面讲到了如何用笨方法进行字符串搜索,也讲了如何构建bwt索引,和把bwt索引还原成字符串!

原始字符串是ATGCGTANNGTC

排序过程是下面的

$ATGCGTANNGTC 12

ANNGTC$ATGCGT 6

ATGCGTANNGTC$ 0

C$ATGCGTANNGT 11

CGTANNGTC$ATG 3

GCGTANNGTC$AT 2

GTANNGTC$ATGC 4

GTC$ATGCGTANN 9

NGTC$ATGCGTAN 8

NNGTC$ATGCGTA 7

TANNGTC$ATGCG 5

TC$ATGCGTANNG 10

TGCGTANNGTC$A 1

现在讲讲如何根据bwt索引构建tally,并且用tally搜索方法来搜索字符串!

首先是bwt索引转换为tally

C 12

T 6

$ 0

T 11

G 3

T 2

C 4

N 9

N 8

A 7

G 5

G 10

A 1

这个其实非常简单的,tally就是增加四列计数的列即可

[perl]

$hash_count{'A'}=0;

$hash_count{'C'}=0;

$hash_count{'G'}=0;

$hash_count{'T'}=0;

open FH ,"<$ARGV[0]";

while(<FH>){

        chomp;

@F=split;

$last=$F[0]; # 读取上面的tally文件,分列,判断第一列,并计数

        $hash_count{$last}++;

   print  "$_\t$hash_count{'A'}\t$hash_count{'C'}\t$hash_count{'G'}\t$hash_count{'T'}\n";

}

[/perl]

输出的tally如下

C 12 0 1 0 0

T 6 0 1 0 1

$ 0 0 1 0 1

T 11 0 1 0 2

G 3 0 1 1 2

T 2 0 1 1 3

C 4 0 2 1 3

N 9 0 2 1 3

N 8 0 2 1 3

A 7 1 2 1 3

G 5 1 2 2 3

G 10 1 2 3 3

A 1 2 2 3 3

接下来就是针对这个tally的查询函数了

 

18

Bowtie 算法第四讲

由于之前就简单的看了看bowtie作者的ppt,没有完全吃透就开始敲代码了,写了十几个程序最后我自己都搞不清楚进展到哪一步了,所以我现在整理一下,从新开始!!!

 

首先,bowtie的作用就是在一个大字符串里面搜索一个小字符串!那么本身就有一个非常笨的复杂方法来搜索,比如,大字符串长度为100万,小字符串为10,那么就依次取出大字符串的10个字符来跟小字符串比较即可,这样的算法是非常不经济的,我简单用perl代码实现一下。

[perl]

#首先读取大字符串的fasta文件

open FH ,"<$ARGV[0]";

$i=0;

while (<FH>) {

next if /^>/;

chomp;

$a.=(uc);

}

#print "$a\n";

#然后接受我们的小的查询字符串

$query=uc $ARGV[1];

$len=length $a;

$len_query=length $query;

$a=$a.'$'.$a;

#然后依次循环取大字符串来精确比较!

foreach (0..$len-1){

if (substr($a,$_,$len_query) eq $query){

print "$_\n";

#last;

}

}

[/perl]

 

这样在时间复杂度非常恐怖,尤其是对人的30亿碱基。

 

正是因为这样的查询效率非常低,所以我们才需要用bwt算法来构建索引,然后根据tally来进行查询

其中构建索引有三种方式,我首先讲最效率最低的那种索引构造算法,就是依次取字符串进行旋转,然后排序即可。

[perl]

$a=uc $ARGV[0];

$len=length $a;

$a=$a.'$'.$a;

foreach (0..$len){

$hash{substr($a,$_,$len+1)}=$_;

}

#print "$_\t$hash{$_}\n" foreach sort keys %hash;

print  substr($_,-1),"\t$hash{$_}\n" foreach sort keys %hash;

[/perl]

这个算法从时间复杂度来讲是非常经济的,对小字符串都是瞬间搞定!!!

perl rotation_one_by_one.pl atgcgtanngtc 这个字符串的BWT矩阵索引如下!

C 12

T 6

$ 0

T 11

G 3

T 2

C 4

N 9

N 8

A 7

G 5

G 10

A 1

但同样的,它也有一个无法避免的弊端,就是内存消耗太恐怖。对于30亿的人类碱基来说,这样旋转会生成30亿乘以30亿的大矩阵,一般的服务器根本hold不住的。

 

最后我讲一下,这个BWT矩阵索引如何还原成原字符串,这个没有算法的差别,因为就是很简单的原理。

[perl]

#first read the tally !!!

#首先读取上面输出的BWT矩阵索引文件。

open FH,"<$ARGV[0]";

$hash_count{'A'}=0;

$hash_count{'C'}=0;

$hash_count{'G'}=0;

$hash_count{'T'}=0;

while(<FH>){

        chomp;

        @F=split;

        $hash_count{$F[0]}++;

        $hash{$.}="$F[0]\t$F[1]\t$hash_count{$F[0]}";

#print "$hash{$.}\n";

}

$all_a=$hash_count{'A'};        

$all_c=$hash_count{'C'};        

$all_g=$hash_count{'G'};        

$all_t=$hash_count{'T'};

$all_n=$hash_count{'N'};

#start from the first char !

$raw='';

&restore(1);

sub restore{

my($num)=@_;

my @F=split/\t/,$hash{$num};

$raw.=$F[0];

   my $before=$F[0];

     if ($before eq 'A') { 

$new=$F[2]+1;

        }

        elsif ($before eq 'C') {

               $new=1+$all_a+$F[2];

        }

        elsif ($before eq 'G') {

               $new=1+$all_a+$all_c+$F[2];

        }

elsif ($before eq 'N') {

                $new =1+$all_a+$all_c+$all_g+$F[2];

        }

        elsif ($before eq 'T') {

                $new=1+$all_a+$all_c+$all_g+$all_n+$F[2];

        }

        elsif ($before eq '$') {

chop $raw;

                $raw = reverse $raw;

print "$raw\n";

exit;

        }

else {die "error !!! we just need A T C N G !!!\n"}

#print "$F[0]\t$new\n";

&restore($new);

}

[/perl]