27

从GEO数据库下载矩阵数据-可以直接进行下游分析

bioconductor系列的包都是一样的安装方式:
source("http://bioconductor.org/biocLite.R")
    biocLite("GEOquery")

以前GEO数据库主要是microarray的芯片数据,后来有了RNA-seq,如果同时做多个样品的RNA-seq,表达量矩阵后来也可以上传到GEO数据库里面,只有看到文献里面有提到GEO数据库,都可以通过这个R包俩进行批量下载,其实就是网页版的一个API调用而已:

GEO数据库里面有四种数据

At the most basic level of organization of GEO, there are four basic entity types.
 The first three (Sample, Platform, and Series) are supplied by users;
the fourth, the dataset, is compiled and curated by GEO sta from the user-submitted data.
GEO accession number (GPLxxx). 
GEO accession number (GSMxxx)
GEO accession number (GSExxx). 
GEO DataSets (GDSxxx)
记住大小关系:一个GDS可以有多个GSM,一个GSM可以有多个GSE,至于GPL,一般不接触的
我们通常接触的都是GSE系列(一个GSE里面有多个GSM)的数据,而且这个包最重要的就是一个getGEO函数。
只要你通过文献确定了你的检索号,就可以通过这个函数来下载啦
检索号一般是A character string representing a GEO object for download and
          parsing.  (eg., 'GDS505','GSE2','GSM2','GPL96'

这个函数有很多参数,除非你需要下载的文件,那么就设置destdir到你喜欢的目录,如果只需要表达量数据就不用了。

 getGEO(GEO = NULL, filename = NULL, destdir = tempdir(), GSElimits=NULL,
     GSEMatrix=TRUE,AnnotGPL=FALSE)
例如:
gds <- getGEO("GDS10") 会返回一个对象,而且下载数据一般会在tmp目录下面,当然如果你需要保存这些文件,你可以自己制定下载目录及文件名。
gse2553 <- getGEO("GSE2553")
GDS2eSet函数可以把上面这个下载函数得到的对象(要确定是GDS而不是GSE)变成表达对象
pData和exprs函数都可以处理上面这个表达对象,从而分别得到样品描述矩阵和样品表达量矩阵
综合一起就是
g4100 <- GDS2eSet(getGEO("GDS4100"))
g4102 <- GDS2eSet(getGEO("GDS4102"))
e4102<-exprs(g4102)
e4100<-exprs(g4100)
这样的代码,这个e4100和e4102就都是一个数值矩阵啦,可以进行下游分析,但是如果是下载的GSM数据
就用下面这个代码,GSE26253_series_matrix.txt是通过GSEMatrix=TRUE这个参数特意下载到你的目录的
expr_dat=read.table("GSE26253_series_matrix.txt",comment.char="!",stringsAsFactors=F)
这样读取也是一个数值矩阵
具体大家可以看这个包的说明书
#Download GDS file, put it in the current directory, and load it:
gds858 <- getGEO('GDS858', destdir=".")
如果使用了GSEMatrix=TRUE这个参数,那么除了下载soft文件,还有表达量矩阵文件,可以直接用read.table读取那个文件。
#Or, open an existing GDS file (even if its compressed):
gds858 <- getGEO(filename='GDS858.soft.gz')
下面这个下载的是GSE对象,GDS对象还有大一点
GEOquery-下载结果gds对象
06

hpv病毒研究调研

最新文献 http://www.ncbi.nlm.nih.gov/pubmed/26086163 上面有提到了hpv的研究现状

As of May 30, 2015, 201 different HPV types had been completely sequenced and officially recognized and divided into five PV-genera: Alpha-, Beta-, Gamma-, Mu-, and Nupapillomavirus.

根据文献,我找到了hpv所有已知测序种类的参考基因组网站:

http://www.hpvcenter.se/html/refclones.html

到目前(2015年7月31日15:17:59)已经有了205种,我爬取它们的genebank ID号,然后用python程序批量下载了它们的序列,能下载的序列共179条,都是8K左右的碱基序列。

image001

根据genebank ID或者其它ID号批量下载核酸序列的脚本如下:

[python]</pre>
import sys

import time

import random

from Bio import Entrez

ids=[]

infile=sys.argv[1]

for line in open(infile,'r'):

line=line.strip()

ids.append(line)

for i in range(1,len(ids)):

#       t = random.randrange(0,5)

handle =

Entrez.efetch(db="nucleotide", id=ids[i],rettype="fasta",email="jmzeng1314@163.com")

#       time.sleep(t)

print handle.read()

[/python]

脚本使用很简单,保持输入文件是一行一个ID号即可。

同时,根据文献我们也能得到hbv病毒提取方法

当然,我是看不懂的。

image003

同样的拿到下载的178条序列我们可以做一个进化树,当然,这个文章已经做好了,我就不做了,进化树其实蛮简单的。

下载179条hpv序列,每条序列都是8KB左右

我还用了R脚本批量下载

library(ape)

a=read.table("hpv_all.ID") #输入文件是一行一个ID号即可

for (i in 1:nrow(a)){

tmp=read.GenBank(a[i,1],seq.names = a[1,1],as.character = T)

write.dna(tmp,"tmp.fa",format="fasta", append=T,colsep = "")

}

然后用muscle做比对,参照我之前的笔记

http://www.bio-info-trainee.com/?p=659
http://www.bio-info-trainee.com/?p=660
http://www.bio-info-trainee.com/?p=626

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

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

貌似时间有点长呀,最后还莫名其妙的挂掉了,可能是我的服务器配置有点低。

image005

进化树如下所示:

image006

 

30

用perl把含有简并碱基的引物序列还原成多条序列

这篇博客的程序是错的,请看我最新博客:http://www.bio-info-trainee.com/1528.html

简并碱基对应表格如下;

R:ag
Y:CT
M:AC
K:GT
S:gc
W:AT
H:atc
B:gtc
V:gac
D:GAT
N:ATgc
把这个文本拷贝到txt文件里面保存好,或者直接写入hash里面也行!

[perl]

open FH,"ATCG.txt";

while(<FH>){

chomp;

@F=split/:/;

$hash{$F[0]}=uc $F[1];#右边就是简并表格

}

open FH1,"primer.txt";

while(<FH1>){

next if />/;

chomp;

primer2multiple($_); #对每个含有简并碱基的引物都进行以下函数处理

}

sub primer2multiple{

$primer=$_[0];

$prod=1;

$primer_len=length $primer ;

foreach $i (0..$primer_len-1){

$char=substr($primer,$i,1);

if ($char !~/[ATCG]/){$prod*=length $hash{$char}}

}

$new="";

foreach $i (0..$primer_len-1){

$char=substr($primer,$i,1);

if ($char =~/[ATCG]/){$new.=$char x $prod}

else {$tmp=length $hash{$char};$new.=$hash{$char} x ($prod/$tmp)}

}

die "error!" if   $primer_len*$prod != length $new ;

foreach $i (0..$prod-1){

$tmp="";

for(my $j=$i;$j<(length($new));$j+=$prod){$tmp.=substr($new,$j,1)}

print "$tmp\n";

}

}

[/perl]

可以直接调用这个函数即可primer2multiple('ATGCVHGT');

就可以看到简并碱基被替换啦,就是那个V和H

 

ATGCGAGT
ATGCATGT
ATGCCCGT
ATGCGAGT
ATGCATGT
ATGCCCGT
ATGCGAGT
ATGCATGT
ATGCCCGT

30

perl用递归法得到允许多个错配的模式匹配

如果我要匹配一个字符串$a="ATTCCGGGAT";那么直接在shell里面grep它即可,写脚本也行$seq =~ /$a/;,但是如果我想查找这个字符串的模糊匹配,允许一个错配的情况,那么就非常多了!这时候简单的匹配已经不能达到目的,但是我们仍然可以用perl强大的正则匹配功能达到目的。

比如,它的匹配模式应该:

/.TTCCGGGAT/

/A.TCCGGGAT/

/AT.CCGGGAT/等等,可以把这些模式都综合起来就是下面这个

$b=(?^:(?:A(?:T(?:T(?:C(?:C(?:G(?:G(?:G(?:A.|.T)|.AT)|.GAT)|.GGAT)|.GGGAT)|.CGGGAT)|.CCGGGAT)|.TCCGGGAT)|.TTCCGGGAT))

所以我们就应该通过程序来生成这个字符串,然后用

$seq =~ /$b/;来替代$seq =~ /$a/;

而允许两个错配的格式就更复杂了:

(?^:(?:A(?:T(?:T(?:C(?:C(?:G(?:G(?:G..|.(?:A.|.T))|.(?:G(?:A.|.T)|.AT))|.(?:G(?:G(?:A.|.T)|.AT)|.GAT))|.(?:G(?:G(?:G(?:A.|.T)|.AT)|.GAT)|.GGAT))|.(?:C(?:G(?:G(?:G(?:A.|.T)|.AT)|.GAT)|.GGAT)|.GGGAT))|.(?:C(?:C(?:G(?:G(?:G(?:A.|.T)|.AT)|.GAT)|.GGAT)|.GGGAT)|.CGGGAT))|.(?:T(?:C(?:C(?:G(?:G(?:G(?:A.|.T)|.AT)|.GAT)|.GGAT)|.GGGAT)|.CGGGAT)|.CCGGGAT))|.(?:T(?:T(?:C(?:C(?:G(?:G(?:G(?:A.|.T)|.AT)|.GAT)|.GGAT)|.GGGAT)|.CGGGAT)|.CCGGGAT)|.TCCGGGAT)))

[perl]

$a="ATTCCGGGAT";
$one_match=fuzzy_pattern($a,1);
print "$one_match\n";

sub fuzzy_pattern {
my ($original_pattern, $mismatches_allowed) = @_;
$mismatches_allowed >= 0
or die "Number of mismatches must be greater than or equal to zero\n";
my $new_pattern = make_approximate($original_pattern, $mismatches_allowed);
return qr/$new_pattern/;
}
sub make_approximate {
my ($pattern, $mismatches_allowed) = @_;
if ($mismatches_allowed == 0) { return $pattern }
elsif (length($pattern) <= $mismatches_allowed)
{ $pattern =~ tr/ACTG/./; return $pattern }
else {
my ($first, $rest) = $pattern =~ /^(.)(.*)/;
my $after_match = make_approximate($rest, $mismatches_allowed);
if ($first =~ /[ACGT]/) {
my $after_miss = make_approximate($rest, $mismatches_allowed-1);
return "(?:$first$after_match|.$after_miss)";
}
else { return "$first$after_match" }
}
}

[/perl]

只需要控制$one_match=fuzzy_pattern($a,1);里面的参数即可控制自己想要的匹配情况。

然后把生成的匹配模式用了进行序列匹配$seq =~ /$one_mismatch/;

这个程序的重点就是解析需要生成的匹配字符串规则,然后用递归来生成这个匹配字符串。

这种匹配,在引物搜索特别有用。

24

perl多重循环生成全排列精简

我想输出ATCG四个字符,组成一个12个字符长度字符串的全排列。共4^12=16777216种排列,

AAAAAAAAAAAA

AAAAAAAAAAAT

AAAAAAAAAAAC

AAAAAAAAAAAG

AAAAAAAAAATA

`````````````````````````

按照正常的想法是通过多重循环来生成全排列,所以我写下了下面这样的代码,但是有个问题,它不支持多扩展性,如果100个全排列,那么得写一百次循环嵌套。

4

所以我求助了perl-china群里的高手,其中一个给了一个结合二进制的巧妙解决方案。

perl -le '{$a{"00"}="A";$a{"01"}="T";$a{"10"}="C";$a{"11"}="G";for(0..100){print join"",map{$a{$_}} unpack("a2"x12,sprintf("%024b\n",$_))}}'

AAAAAAAAAAAA

AAAAAAAAAAAT

AAAAAAAAAAAC

AAAAAAAAAAAG

AAAAAAAAAATA

AAAAAAAAAATT

AAAAAAAAAATC

AAAAAAAAAATG

AAAAAAAAAACA

AAAAAAAAAACT

AAAAAAAAAACC

AAAAAAAAAACG

AAAAAAAAAAGA

AAAAAAAAAAGT

AAAAAAAAAAGC

AAAAAAAAAAGG

AAAAAAAAATAA

AAAAAAAAATAT

这里我简单解释一下这个代码

perl -le '{$a=sprintf("%024b\n",1);print $a}'

000000000000000000000001

这个sprintf是根据024b的格式把我们的十进制数字转为二级制,但是补全为24位。

perl -le '{@a=unpack("a2"x12,sprintf("%024b\n",100));print join":", @a}'

00:00:00:00:00:00:00:00:01:10:01:00

unpack这个函数很简单,就是把二进制的数值拆分成字符串数组,两个数字组成一个字符串。

最后通过map把$a{"00"}="A";$a{"01"}="T";$a{"10"}="C";$a{"11"}="G";对应成hash值并且输出即可!

然后这个大神又提成了一个递归的办法来解决

[perl]

#!/usr/bin/perl

my $arr = [];

$arr->[$_] = 0 for (0..11);
my @b = ("A","C","G","T");

while(1){
print join "", map {$b[$_]} @$arr;
print "\n";
exit unless &count($arr,11);
}

sub count {
my $arr = shift;
my $x = shift;

return 0 if $x < 0;

if ($arr->[$x] < 3){
$arr->[$x]++;
return 1;
}

else{
$arr->[$x] = 0;
return &count($arr,$x - 1);
}
}

[/perl]

还有另外一个大神也提成了一个递归的算法解决,算法之道还是蛮有趣的

2

最后还补充一个也是计算机技巧的解决方案,也是群里的朋友提出来的。

[perl]

#!/usr/bin/perl -w

my @A = qw(A T G C);
my $N = 12;

foreach my $n (0..4**$N){
foreach my $index (0..$N){
print $A[$n%4];
$n = $n >>2;
}
print "\n";
}

[/perl]

这个是位运算,如果C语言基础学的好的同学很快就能看懂的。

 

21

生信工作者基础知识一

xshell破解码和editplus破解码,ultraISO注册码

强烈推荐xshell安装,及破解网上找的一个注册码:101210-450789-147200

强烈editplus或者notepad++,搜索注册码是

注册名:Free User

注册码:6AC8D-784D8-DDZ95-B8W3A-45TFA

强烈建议大家玩一玩双系统制作ubuntu12.4版本的安装U盘,下载ultraISO,注册码为:王涛7C81-1689-4046-626F

 

如何正确删除双系统的unix系统

肯定有很多人玩过了双系统就烦了,麻烦的是如何删除呢?

重点是需要修复MBR

1.进入win7,下载个软件MbrFix,放在C:\windows\system32文件夹中

2.点击开始》所有程序》附件》命令提示符

3.在命令提示符中输入MbrFix /drive 0 fixmbr /yes

image001

4.此时已经修复了MBR,重启电脑后会发现已经没有了linux启动选项,直接进入windows了

 

如何在window系统下查看当前电脑双系统中另一个系统的磁盘内容。

这个需求很常见,因为双系统linux是可以看window的内容,但是window却无法直接查看linux内容。

下载ext2fsd可以把双系统里面linux分区的ext硬盘里面的文件通过window平台读取出来,软件下载地址如下

http://sourceforge.net/projects/ext2fsd/files/latest/download

image002

21

R语言用hclust进行聚类分析

聚类的基础就是算出所有元素两两间的距离,我们首先做一些示例数据,如下:

x=runif(10)

y=runif(10)

S=cbind(x,y)                                 #得到2维的数组

rownames(S)=paste("Name",1:10,"")             #赋予名称,便于识别分类

out.dist=dist(S,method="euclidean")           #数值变距离

这个代码运行得到的S是一个矩阵,如下

> S

x         y

Name 1   0.41517985 0.4697017

Name 2   0.35653781 0.1132367

Name 3   0.52253349 0.3680286

Name 4   0.80558684 0.9834687

Name 5   0.04564145 0.8560690

Name 6   0.11044397 0.2988598

Name 7   0.34984447 0.8515141

Name 8   0.28097709 0.1260050

Name 9   0.81771888 0.5976135

Name 10 0.40700158 0.5236567

可以看出里面共有10个点,它们的X,Y坐标均已知,我们有6总方法可以求矩阵

image001

注释:在聚类中求两点的距离有:

1,绝对距离:manhattan

2,欧氏距离:euclidean 默认

3,闵科夫斯基距离:minkowski

4,切比雪夫距离:chebyshev

5,马氏距离:mahalanobis

6,蓝氏距离:canberra

用默认的算法求出距离如下

算出距离后就可以进行聚类啦!

out.hclust=hclust(out.dist,method="complete") #根据距离聚类

注释:聚类也有多种方法:

1,类平均法:average

2,重心法:centroid

3,中间距离法:median

4,最长距离法:complete 默认

5,最短距离法:single

6,离差平方和法:ward

7,密度估计法:density

接下来把聚类的结果图画出来

plclust(out.hclust)                           #对结果画图

image003

rect.hclust(out.hclust,k=3)                   #用矩形画出分为3类的区域

image005

out.id=cutree(out.hclust,k=3)                 #得到分为3类的数值

这里的out.id就是把每个点都分类了的分类数组,1,2,3.

 

21

用R语言批量做T检验

需要做T检验的的数据如下:其中加粗加黑的是case,其余的是control,需要进行检验的是

p_ma    p_mg    p_ag    p_mag 这四列数据,在case和control里面的差异,当然用肉眼很容易看出,control要比case高很多

 

individual m a g ma mg ag mag p_ma p_mg p_ag p_mag
HBV10-1 33146 3606 2208 308 111 97 39 0.79% 0.29% 0.25% 0.10%
HBV15-1 23580 10300 3140 1469 598 560 323 4.19% 1.71% 1.60% 0.92%
HBV3-1 107856 26445 15077 4773 2383 1869 1130 3.34% 1.67% 1.31% 0.79%
HBV4-1 32763 6448 4384 579 291 295 124 1.35% 0.68% 0.69% 0.29%
HBV6-1 122396 6108 7953 911 796 347 144 0.67% 0.59% 0.26% 0.11%
IGA-1 31337 22167 14195 3851 2752 4101 2028 6.50% 4.65% 6.92% 3.42%
IGA-10 6713 9088 12801 2275 2470 4284 1977 10.54% 11.44% 19.85% 9.16%
IGA-11 61574 23622 15076 5978 4319 3908 2618 6.71% 4.84% 4.38% 2.94%
IGA-12 38510 23353 20148 6941 6201 6510 4328 10.38% 9.27% 9.73% 6.47%
IgA-13 155379 81980 65315 26055 20085 17070 10043 10.38% 8.00% 6.80% 4.00%
IgA-14 345430 86462 71099 27541 21254 10923 6435 6.06% 4.67% 2.40% 1.42%
IgA-15 3864 3076 1942 378 207 389 145 4.66% 2.55% 4.80% 1.79%
IgA-16 3591 4106 2358 427 174 424 114 4.64% 1.89% 4.61% 1.24%
IgA-17 893 1442 799 68 28 78 18 2.27% 0.94% 2.61% 0.60%
IGA-2 23097 5083 5689 910 951 1173 549 2.89% 3.02% 3.72% 1.74%
IGA-3 14058 9364 8565 2130 1953 2931 1436 8.03% 7.36% 11.05% 5.41%
IGA-4 81571 36894 33664 11346 10131 9908 6851 8.86% 7.91% 7.74% 5.35%
IGA-5 27626 6492 4503 963 752 942 410 2.64% 2.06% 2.58% 1.12%
IGA-7 55348 5956 4028 833 476 468 207 1.30% 0.74% 0.73% 0.32%
IGA-8 31671 17097 10443 3894 2666 3514 2003 7.56% 5.17% 6.82% 3.89%

 

但是我们需要写程序对这些百分比在case和control里面进行T检验。

a=read.table("venn_dat.txt",header=T)

type=c(rep("control",5),rep("case",12),"control","control","case")

for (i in 9:12)

{

dat=as.numeric(unlist(lapply(a[i],function(x) strsplit(as.character(x),"%"))))

filename=paste(names(a)[i],".png",sep="")

png(file=filename, width = 320, height = 360)

b=t.test(dat~type)

txt=paste("p-value=",round(b$p.value[1],digits=4),sep="")

plot(as.factor(type),dat,ylab="percent(%)",main=names(a)[i],sub=txt,cex.axis=1.5,cex.sub=2,cex.main=2,cex.lab=1.5)

dev.off()

}

得到的图片如下:

image008

21

用R语言批量画韦恩图

需要画韦恩图的文件如下所示:

#CDR3_aa    count_all    count_IgM    count_IgA    count_IgG
CARGVDAGVDYW    243    25    196    22
CARHPRNYGNFDYW    174    171    3    0
CARENTMVRGVINPLDYW    166    8    75    83
CAREASDSISNWDDWYFDLW    129    15    114    0
CARDPDNSGAFDPW    118    1    117    0
CAKDLGGYW    98    3    4    91
CAREVADYDTYGWFLDLW    95    26    68    1
CVRNRGFFGLDIW    82    0    1    81
CARRSTNYHGWDYW    80    3    2    74

此处省略一万行。

简单解释一下数据,第一列是CDR3序列,我们需要对count_IgM    count_IgA    count_IgG这三列数据进行画韦恩图,数字大于0代表有,数字为0代表无。

这样我们根据序列就能得出每列数据所有的CDR3序列,即不为0的CDR3序列

每个个体都会输出一个统计文件,共20个文件需要画韦恩图

image005

对这个统计文件就可以进行画韦恩图。

画韦恩图的R代码如下:

library(VennDiagram)

files=list.files(path = ".", pattern = "type")

for (i in files){

a=read.table(i)

individual=strsplit(i,"\\.")[[1]][1]

image_name=paste(individual,".tiff",sep="")

IGM=which(a[,3]>0)

IGA=which(a[,4]>0)

IGG=which(a[,5]>0)

venn.diagram(list(IGM=IGM,IGA=IGA,IGG=IGG), fill=c("red","green","blue"), alpha=c(0.5,0.5,0.5), cex=2, cat.fontface=4, fontfamily=3, filename=image_name)

}

image007

但事实上,这个韦恩图很难表现出什么,因为我们的每个个体的count_IgM    count_IgA    count_IgG总数不一样。

19

Bioconductor系列之GenomicAlignments

Bioconductor系列包的安装方法都一样

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

这个包设计就是用来处理bam格式的比对结果的,具体功能非常多,其实还不如自己写脚本来做这些工作,更方便一点,实在没必要学别人的语法。大家有兴趣可以看GenomicAlignments的主页介绍,三个pdf文档来介绍。

http://www.bioconductor.org/packages/release/bioc/html/GenomicAlignments.html

我们首先读取示例pasillaBamSubset包带有的bam文件

library(pasillaBamSubset)

un1 <- untreated1_chr4()  # single-end reads

library(GenomicAlignments)

reads1 <- readGAlignments(un1)

查看reads1这个结果,可以看到把这个bam文件都读成了一个数据对象GAlignments object,

Bioconductor系列之GenomicAlignments632

readGAlignments这个函数就是读取我们bam文件的,生成的对象可以用多个函数来继续查看信息,比如它的列名都是函数

Seqnames(),strand(),cigar(),qwidth(),start(),end(),width(),njunc() 这些函数对这个GAlignments对象处理后会得到比对的各个情况的向量。

我们也可以读取这个GenomicAlignments包自带的bam文件,而不是pasillaBamSubset包带有的bam文件

> fls <- list.files(system.file("extdata", package="GenomicAlignments"),+                   recursive=TRUE, pattern="*bam$", full=TRUE)

> fls

[1] "C:/Program Files/R/R-3.1.2/library/GenomicAlignments/extdata/sm_treated1.bam"  [2] "C:/Program Files/R/R-3.1.2/library/GenomicAlignments/extdata/sm_untreated1.bam"

reads1 <- readGAlignments(fls[1])

比如我随意截图 cigar(reads1)的结果,就可以看出,大部分都是75M这样的比对情况,可以对这个向量进行统计完全匹配的情况,总共有6077总比对情况。

unique(cigar(reads1))

Bioconductor系列之GenomicAlignments1315

也可以用table格式来查看cigar,可以看到大部分都是M

head(cigarOpTable(cigar(reads1)))

Bioconductor系列之GenomicAlignments1385

接下来我们再读取PE测序数据的比对bam结果,看看分析方法有哪些。

Bioconductor系列之GenomicAlignments1422

U3.galp <- readGAlignmentPairs(untreated3_chr4(), use.names=TRUE, param=param0)head(U3.galp)

也可以分开查看左右两端测序数据的比对情况,跟上面的head是对应关系,上面的

[169,  205] -- [ 326,  362]在下面就被分成左右两个比对情况了。

> head(first(U3.galp))

GAlignments object with 6 alignments and 0 metadata columns:      seqnames strand       cigar    qwidth     start       end     width     njunc         <Rle>  <Rle> <character> <integer> <integer> <integer> <integer> <integer>  [1]     chr4      +         37M        37       169       205        37         0  [2]     chr4      +         37M        37       943       979        37         0  [3]     chr4      +         37M        37       944       980        37         0  [4]     chr4      +         37M        37       946       982        37         0  [5]     chr4      +         37M        37       966      1002        37         0  [6]     chr4      +         37M        37       966      1002        37         0  -------  seqinfo: 8 sequences from an unspecified genome

> head(last(U3.galp))

GAlignments object with 6 alignments and 0 metadata columns:      seqnames strand       cigar    qwidth     start       end     width     njunc         <Rle>  <Rle> <character> <integer> <integer> <integer> <integer> <integer>  [1]     chr4      -         37M        37       326       362        37         0  [2]     chr4      -         37M        37      1086      1122        37         0  [3]     chr4      -         37M        37      1119      1155        37         0  [4]     chr4      -         37M        37       986      1022        37         0  [5]     chr4      -         37M        37      1108      1144        37         0  [6]     chr4      -         37M        37      1114      1150        37         0  -------  seqinfo: 8 sequences from an unspecified genome

用isProperPair可以查看pe测序数据比对情况的,哪些没有配对比对成功

> table(isProperPair(U3.galp))FALSE  TRUE 29518 45828

还可以用Rsamtools包对我们的bam文件进行统计,看下面的代码中fls[1]和un1都是上面得到的bam文件全路径。

> library(Rsamtools)

> quickBamFlagSummary(fls[1], main.groups.only=TRUE)

group |    nb of |    nb of | mean / max                                   of |  records |   unique | records per                              records | in group |   QNAMEs | unique QNAMEAll records........................ A |     1800 |     1800 |    1 / 1  o template has single segment.... S |     1800 |     1800 |    1 / 1  o template has multiple segments. M |        0 |        0 |   NA / NA      - first segment.............. F |        0 |        0 |   NA / NA      - last segment............... L |        0 |        0 |   NA / NA      - other segment.............. O |        0 |        0 |   NA / NA Note that (S, M) is a partitioning of A, and (F, L, O) is a partitioning of M.Indentation reflects this.

> library(Rsamtools)

> quickBamFlagSummary(un1, main.groups.only=TRUE)

group |    nb of |    nb of | mean / max                                   of |  records |   unique | records per                              records | in group |   QNAMEs | unique QNAMEAll records........................ A |   204355 |   190770 | 1.07 / 10  o template has single segment.... S |   204355 |   190770 | 1.07 / 10  o template has multiple segments. M |        0 |        0 |   NA / NA      - first segment.............. F |        0 |        0 |   NA / NA      - last segment............... L |        0 |        0 |   NA / NA      - other segment.............. O |        0 |        0 |   NA / NA Note that (S, M) is a partitioning of A, and (F, L, O) is a partitioning of M.Indentation reflects this.

 

下面讲最后一个综合应用

biocLite("RNAseqData.HNRNPC.bam.chr14")

#这是一个665.5MB的RNA-seq测序数据的比对结果

library(RNAseqData.HNRNPC.bam.chr14)bamfiles <- RNAseqData.HNRNPC.bam.chr14_BAMFILESnames(bamfiles)  # the names of the runslibrary(Rsamtools)quickBamFlagSummary(bamfiles[1], main.groups.only=TRUE)flag1 <- scanBamFlag(isFirstMateRead=TRUE, isSecondMateRead=FALSE,                     isDuplicate=FALSE, isNotPassingQualityControls=FALSE)param1 <- ScanBamParam(flag=flag1, what="seq") #这里是设置readGAlignments的读取参数library(GenomicAlignments)gal1 <- readGAlignments(bamfiles[1], use.names=TRUE, param=param1)

mcols(gal1)$seqoqseq1 <- mcols(gal1)$seqis_on_minus <- as.logical(strand(gal1) == "-")oqseq1[is_on_minus] <- reverseComplement(oqseq1[is_on_minus])

这样就还原得到了原始测序数据啦!

19

Bioconductor系列之pasillaBamSubset

这个包主要有bam文件测试数据
> biocLite("pasillaBamSubset")
BioC_mirror: http://bioconductor.orgUsing Bioconductor version 3.0 (BiocInstaller 1.16.5), R version 3.1.2.
Installing package(s) 'pasillaBamSubset'
trying URL 'http://bioconductor.org/packages/3.0/data/experiment/bin/windows/contrib/3.1/pasillaBamSubset_0.3.1.zip'
Content type 'application/zip' length 31514402 bytes (30.1 Mb)
打开pasillaBamSubset包的安装地址就可以看到里面有几个bam文件
Several functions are available for reading BAM files into R:
而且加载包的同时也引入了几个读取bam文件的函数
readGAlignments()
readGAlignmentPairs()
readGAlignmentsList()
scanBam()
Bioconductor系列之pasillaBamSubset448
加载包就可以看到用两个函数得到包自带的数据文件的地址,主要是有很多人不一定把包安装在C盘,所以用函数来定位文件更加安全一点
> library(pasillaBamSubset)
> untreated1_chr4()
[1] "C:/Program Files/R/R-3.1.2/library/pasillaBamSubset/extdata/untreated1_chr4.bam"
> untreated3_chr4()
[1] "C:/Program Files/R/R-3.1.2/library/pasillaBamSubset/extdata/untreated3_chr4.bam"

接下来我们就看看如何读取这些bam文件的
library(pasillaBamSubset)
un1 <- untreated1_chr4() # single-end reads library(GenomicAlignments) reads1 <- readGAlignments(un1) cvg1 <- coverage(reads1) 查看reads1这个结果,可以看到把这个bam文件都读成了一个数据对象GAlignments object, Bioconductor系列之pasillaBamSubset1142
针对着个数据对象有很多操作,其中一个coverage操作是来自于GenomicFeatures
或者GenomicAlignments函数的,可以算出测序覆盖情况。
可以看到这个bam文件里面的比对情况大多几种在4号染色体里面
> cvg1$chr4
integer-Rle of length 1351857 with 122061 runs
Lengths: 891 27 5 12 13 45 5 12 13 ... 5 1 1 3 10
Values : 0 1 2 3 4 5 4 3 2 ... 12 11 10 6
> mean(cvg1$chr4)
[1] 11.33746
> max(cvg1$chr4)[1] 5627
可以看到平均测序深度是11.3X,最大测序深度是5627X

18

Bioconductor系列之biomaRt

biomaRt是一个超级网络资源库,里面的信息非常之多,就是网页版的biomaRt的R语言接口。谷歌搜索 the biomart user’s guide filetype:pdf 这个关键词,就看到关于这个包的详细介绍以及例子,我这里简单总结一下它的用法。

这个包一直在更新,函数总是变化,而且需要联网才能使用,基本上等于废物一个,希望大家不要使用它~

包的安装

Continue reading

18

Bioconductor系列之hgu95av2.db

这个包主要都是芯片数据处理方面的应用,本来我是懒得看的,但是我无意中浏览了一下readme,发现它挺适合被作为数据库的典范来学习。
source("http://bioconductor.org/biocLite.R")
biocLite("org.Hs.eg.db")
biocLite("hgu95av2.db")
还是老办法安装了hgu95av2.db之后用ls可以查看这个包里面有36个映射数据,都是把芯片探针ID号转为其它36种主流ID号的映射而已。
library(hgu95av2.db)
> ls("package:hgu95av2.db")
[1] "hgu95av2" "hgu95av2ACCNUM" "hgu95av2ALIAS2PROBE"
[4] "hgu95av2CHR" "hgu95av2CHRLENGTHS" "hgu95av2CHRLOC"
[7] "hgu95av2CHRLOCEND" "hgu95av2.db" "hgu95av2_dbconn"
[10] "hgu95av2_dbfile" "hgu95av2_dbInfo" "hgu95av2_dbschema"
[13] "hgu95av2ENSEMBL" "hgu95av2ENSEMBL2PROBE" "hgu95av2ENTREZID"
[16] "hgu95av2ENZYME" "hgu95av2ENZYME2PROBE" "hgu95av2GENENAME"
[19] "hgu95av2GO" "hgu95av2GO2ALLPROBES" "hgu95av2GO2PROBE"
[22] "hgu95av2MAP" "hgu95av2MAPCOUNTS" "hgu95av2OMIM"
[25] "hgu95av2ORGANISM" "hgu95av2ORGPKG" "hgu95av2PATH"
[28] "hgu95av2PATH2PROBE" "hgu95av2PFAM" "hgu95av2PMID"
[31] "hgu95av2PMID2PROBE" "hgu95av2PROSITE" "hgu95av2REFSEQ"
[34] "hgu95av2SYMBOL" "hgu95av2UNIGENE" "hgu95av2UNIPROT"
但是用这个包自带的函数capture.output(hgu95av2())可以看到这些映射并没有囊括我们标准的hg19版本的2.3万个基因,也就说这个芯片设计的探针只有1.1万个左右。但它根据已有的org.Hs.eg.db来构建了它自己芯片独有的数据包,这样就显得更加正式规范化了,这启发我们研发人员在做一些市场产品的同时也可以把自己的研究成果通主流数据库数据形式结合起来,更易让他人接受。
> capture.output(hgu95av2())
[1] "Quality control information for hgu95av2:"
[2] ""
[3] ""
[4] "This package has the following mappings:"
[5] ""
[6] "hgu95av2ACCNUM has 12625 mapped keys (of 12625 keys)"
[7] "hgu95av2ALIAS2PROBE has 33755 mapped keys (of 103735 keys)"
[8] "hgu95av2CHR has 11540 mapped keys (of 12625 keys)"
[9] "hgu95av2CHRLENGTHS has 93 mapped keys (of 93 keys)"
[10] "hgu95av2CHRLOC has 11474 mapped keys (of 12625 keys)"
[11] "hgu95av2CHRLOCEND has 11474 mapped keys (of 12625 keys)"
[12] "hgu95av2ENSEMBL has 11460 mapped keys (of 12625 keys)"
[13] "hgu95av2ENSEMBL2PROBE has 9814 mapped keys (of 28553 keys)"
[14] "hgu95av2ENTREZID has 11543 mapped keys (of 12625 keys)"
[15] "hgu95av2ENZYME has 2125 mapped keys (of 12625 keys)"
[16] "hgu95av2ENZYME2PROBE has 786 mapped keys (of 975 keys)"
[17] "hgu95av2GENENAME has 11543 mapped keys (of 12625 keys)"
[18] "hgu95av2GO has 11245 mapped keys (of 12625 keys)"
[19] "hgu95av2GO2ALLPROBES has 17214 mapped keys (of 18826 keys)"
[20] "hgu95av2GO2PROBE has 12920 mapped keys (of 14714 keys)"
[21] "hgu95av2MAP has 11519 mapped keys (of 12625 keys)"
[22] "hgu95av2OMIM has 10541 mapped keys (of 12625 keys)"
[23] "hgu95av2PATH has 5374 mapped keys (of 12625 keys)"
[24] "hgu95av2PATH2PROBE has 228 mapped keys (of 229 keys)"
[25] "hgu95av2PMID has 11529 mapped keys (of 12625 keys)"
[26] "hgu95av2PMID2PROBE has 372382 mapped keys (of 432400 keys)"
[27] "hgu95av2REFSEQ has 11506 mapped keys (of 12625 keys)"
[28] "hgu95av2SYMBOL has 11543 mapped keys (of 12625 keys)"
[29] "hgu95av2UNIGENE has 11533 mapped keys (of 12625 keys)"
[30] "hgu95av2UNIPROT has 11315 mapped keys (of 12625 keys)"
[31] ""
[32] ""
[33] "Additional Information about this package:"
[34] ""
[35] "DB schema: HUMANCHIP_DB"
[36] "DB schema version: 2.1"
[37] "Organism: Homo sapiens"
[38] "Date for NCBI data: 2014-Sep19"
[39] "Date for GO data: 20140913"
[40] "Date for KEGG data: 2011-Mar15"
[41] "Date for Golden Path data: 2010-Mar22"
[42] "Date for Ensembl data: 2014-Aug6"
这个hgu95av2.db所加载的36个包都是一种特殊的对象,但是可以把它当做list来操作,是一种类似于hash的对应表格,其中keys是独特的,但是value可以有多个。
既然是类似于list,那我就简单讲几个小技巧来操作这些数据对象。所有的操作都要用as.list()函数来把数据展现出来
> as.list(hgu95av2ENZYME[1])
$`1000_at`
[1] "2.7.11.24"
可以看到这样就提取出来了hgu95av2ENZYME的第一个元素,key是`1000_at`,它所映射的value是 "2.7.11.24"这个酶。
同理对list取元素的三个操作在这里都可以用
> as.list(hgu95av2ENZYME['1000_at'])
$`1000_at`
[1] "2.7.11.24"
> as.list(hgu95av2ENZYME$'1000_at')
[[1]]
[1] "2.7.11.24"
然而这只是list的操作,我们还有一个函数专门对这个对象来取元素,那就是get函数,取多个元素用mget,类似于as.list(hgu95av2ENZYME[1:10])
用函数mget(probes_id,hgu95av2ENZYME)就可以根据自己的probes_id这个向量来选取数据了,当然也要用as.list()来展示出来。
值得一提的是这里有个非常重要的函数是revmap,可以把我们的key和value调换位置。
因为我们的数据对象里面的对应关系不是一对一,而是一对多,例如一个基因往往有多个go通路信息,例如这个就有十几个
as.list(hgu95av2GO$'1000_at')
$`GO:0000165`
$`GO:0000165`$GOID
[1] "GO:0000165"

$`GO:0000165`$Evidence
[1] "TAS"

$`GO:0000165`$Ontology
[1] "BP"

$`GO:0000186`
$`GO:0000186`$GOID
[1] "GO:0000186"

$`GO:0000186`$Evidence
[1] "TAS"

$`GO:0000186`$Ontology
[1] "BP"
一层层的数据结构非常清晰,但是数据太多,所以它给了一个toTable函数来格式化,就是把一对多的list压缩成表格。
> toTable(hgu95av2GO[1])
probe_id go_id Evidence Ontology
1 1000_at GO:0000165 TAS BP
2 1000_at GO:0000186 TAS BP
3 1000_at GO:0000187 TAS BP
4 1000_at GO:0002224 TAS BP
5 1000_at GO:0002755 TAS BP
6 1000_at GO:0002756 TAS BP
7 1000_at GO:0006360 TAS BP
------------------------------------------------------------
81 1000_at GO:0004707 NAS MF
82 1000_at GO:0001784 IEA MF
83 1000_at GO:0005524 IEA MF
这样就非常方便的查看啦。
当然对这个数据对象还有很多实用的操作。length(),Llength(),Rlength(),keys(),Lkeys(),Rkeys()等等,还有count.mappedkeys(),mappedLkeys(),还有个比较特殊的isNA来判断是否有些keys探针没有对应任何信息。
而且以上这些函数不仅可以用来获取数据对象的信息,还可以修改这个数据对象。
Lkeys(hgu95av2CHR) 可以查看这个对象有12625个探针。
而> Rkeys(hgu95av2CHR)
[1] "19" "12" "8" "14" "3" "2" "17" "16" "9" "X" "6" "1" "7" "10" "11"
[16] "22" "5" "18" "15" "Y" "20" "21" "4" "13" "MT" "Un"
可以看到这些探针分布在不同的染色体上面,如果我这时候给
x=hgu95av2CHR
Rkeys(x) = c("1","2")
toTable(x)可以看到这时候x只剩下1946个探针了,就是1,2号染色体上面的基因了。
然后可以一个个看这些函数的用法,其实就是SQL的增删改查的基本操作而已。
> length(x)
[1] 12625
> Llength(x)
[1] 12625
> Rlength(x)
[1] 2
> head(keys(x))
[1] "1000_at" "1001_at" "1002_f_at" "1003_s_at" "1004_at" "1005_at"
> head(Lkeys(x))
[1] "1000_at" "1001_at" "1002_f_at" "1003_s_at" "1004_at" "1005_at"
> head(Rkeys(x))
[1] "1" "2"
> count
count.fields count.mappedLkeys countOverlaps counts<- count.links count.mappedRkeys countQueryHits countSubjectHits count.mappedkeys countMatches counts > count.mappedkeys(x)
[1] 1946
> count.mappedLkeys(x)
[1] 1946
> count.mappedRkeys(x)
[1] 2

17

perl操作pdf文档

大家看看就好,这个模块写的不怎么样,而且有高手已经写了一个pdftoolkit就是完全用这个模块实现了大部分pdf文档的操作

PDF::API2模块使用笔记

一:简单使用方法

use PDF::API2;

# Create a blank PDF file $pdf = PDF::API2->new();
# Open an existing PDF file $pdf = PDF::API2->open('some.pdf');
# Add a blank page $page = $pdf->page();
# Retrieve an existing page $page = $pdf->openpage($page_number);
# Set the page size $page->mediabox('Letter');
# Add a built-in font to the PDF $font = $pdf->corefont('Helvetica-Bold');
# Add an external TTF font to the PDF $font = $pdf->ttfont('/path/to/font.ttf');
 

# Add some text to the page

$text = $page->text();

$text->font($font, 20);

$text->translate(200, 700);

$text->text('Hello World!');

# Save the PDF $pdf->saveas('/path/to/new.pdf');

 

实例:

use PDF::API2;

$pdf=PDF::API2->new;

$pdf->mediabox('A4');

$ft=$pdf->cjkfont('Song');

$page = $pdf->page;

$gfx=$page->gfx;

$gfx->textlabel(50,750,$ft,20,"\x{Cool44}\x{4EA7}"); # 资产二字

$pdf->saveas('Song_Test.pdf');

 

二:主要对象及方法

1、pdf对象可以创造,可以打开,可以保存,可以更新,还有一堆参数可以设置

$pdf->preferences(%options)还可以设置一些浏览参数,不过本来pdf阅读器可以设置,没必要在这里花时间。

这个可以当做是个人创建pdf的保密信息,也许有一点用吧。

还可以可以设置页脚$pdf->pageLabel($index, $options

2、Page对象,可以新建,可以打开,可以保存(需要指定保存的位置)

$page = $pdf->page()

$page = $pdf->page($page_number)

$page = $pdf->openpage($page_number);

还可以更新旧的pdf,这样可以循环获取pdf页面不停的累积到一个新的pdf

$page = $pdf->import_page($source_pdf, $source_page_number, $target_page_number)

$pdf = PDF::API2->new();

$old = PDF::API2->open('our/old.pdf');   # Add page 2 from the old PDF as page 1 of the new PDF

$page = $pdf->import_page($old, 2);

$pdf->saveas('our/new.pdf');If $source_page_number is 0 or -1, it will return the last page in the document.

$count = $pdf->pages()Returns the number of pages in the document.

这样就可以写一个简单程序把我们的pdf文件合并

use PDF::API2;

my $new = PDF::API2->new;

foreach my $filename (@ARGV) {   my $pdf = PDF::API2->open($filename);   $new->importpage($pdf, $_) foreach 1 .. $pdf->pages;}$new->saveas('new.pdf'); $pdf->mediabox($name)

可以指定A4,A3,A5等等$pdf->mediabox($w, $h)可以指定宽度和高度$pdf->mediabox($llx, $lly, $urx, $ury)

3,还可以随意画点线面及表格,太复杂了就不看了

 

17

转-windows快捷键,让你的办公效率提升一个档次

  1. gpedit.msc-----组策略

2. sndrec32-------录音机

3. Nslookup-------IP地址侦测器

4. explorer-------打开资源管理器

5. logoff---------注销命令

6. tsshutdn-------60秒倒计时关机命令

7. lusrmgr.msc----本机用户和组

8. services.msc---本地服务设置

9. oobe/msoobe /a----检查XP是否激活

10. notepad--------打开记事本

11. cleanmgr-------垃圾整理

12. net start messenger----开始信使服务

13. compmgmt.msc---计算机管理

15. conf-----------启动netmeeting

16. dvdplay--------DVD播放器

17. charmap--------启动字符映射表

18. diskmgmt.msc---磁盘管理实用程序

 19. calc-----------启动计算器

20. dfrg.msc-------磁盘碎片整理程序

21. chkdsk.exe-----Chkdsk磁盘检查

22. devmgmt.msc--- 设备管理器

23. regsvr32 /u *.dll----停止dll文件运行

24. drwtsn32------ 系统医生

25. rononce -p ----15秒关机

26. dxdiag---------检查DirectX信息

27. regedt32-------注册表编辑器

28. Msconfig.exe---系统配置实用程序

29. rsop.msc-------组策略结果集

30. mem.exe--------显示内存使用情况

31. regedit.exe----注册表

32. winchat--------XP自带局域网聊天

33. progman--------程序管理器

34. winmsd---------系统信息

  43. write----------写字板

44. winmsd---------系统信息

46. winchat--------XP自带局域网聊天

48. Msconfig.exe---系统配置实用程序

49. mplayer2-------简易widnows media player

50. mspaint--------画图板

51. mstsc----------远程桌面连接

52. mplayer2-------媒体播放机

53. magnify--------放大镜实用程序

 54. mmc------------打开控制台

55. mobsync--------同步命令

56. dxdiag---------检查DirectX信息

57. drwtsn32------ 系统医生

58. devmgmt.msc--- 设备管理器

59. dfrg.msc-------磁盘碎片整理程序

60. diskmgmt.msc---磁盘管理实用程序

61. dcomcnfg-------打开系统组件服务

62. ddeshare-------打开DDE共享设置

65. net start messenger----开始信使服务

67. nslookup-------网络管理的工具向导

68. ntbackup-------系统备份和还原

69. narrator-------屏幕“讲述人”

70. ntmsmgr.msc----移动存储管理器

71. ntmsoprq.msc---移动存储管理员操作请求

72. netstat -an----(TC)命令检查接口

73. syncapp--------创建一个公文包

  74. sysedit--------系统配置编辑器

75. sigverif-------文件签名验证程序

76. sndrec32-------录音机

77. shrpubw--------创建共享文件夹

78. secpol.msc-----本地安全策略

 80. services.msc---本地服务设置

81. Sndvol32-------音量控制程序

82. sfc.exe--------系统文件检查器

83. sfc /scannow---windows文件保护

84. tsshutdn-------60秒倒计时关机命令

85. tourstart------xp简介(安装完成后出现的漫游xp程序)

86. taskmgr--------任务管理器

 87. eventvwr-------事件查看器

88. eudcedit-------造字程序

 92. progman--------程序管理器

94. rsop.msc-------组策略结果集

95. regedt32-------注册表编辑器

96. rononce -p ----15秒关机

99. cmd.exe--------CMD命令提示符

100. chkdsk.exe-----Chkdsk磁盘检查

101. certmgr.msc----证书管理实用程序

 102. calc-----------启动计算器

103. charmap--------启动字符映射表

104. cliconfg-------SQL SERVER 客户端网络实用程序

105. Clipbrd--------剪贴板查看器

106. conf-----------启动netmeeting

107. compmgmt.msc---计算机管理

108. cleanmgr-------垃圾整理

109. ciadv.msc------索引服务程序

110. osk------------打开屏幕键盘

 113. lusrmgr.msc----本机用户和组

114. logoff---------注销命令

115. fsmgmt.msc-----共享文件夹管理器

116. utilman--------辅助工具管理器

117. iexpress-------木马捆绑工具

 打开服务管理器的是services.msc

如果要用cmd直接启用已知服务名的服务如下:

net start [服务名] 启动一个服务

net stop [服务名] 停用一个服务

 

17

读书笔记-核酸&蛋白序列分析

核酸序列分析:
一.DNA基本序列分析:bioedit、DNAman、DNAstar
a)    组成成分分析
b)    序列转换分析
c)    酶切位点分析(REBSASE,NEBCutter2)
二.DNA序列特征分析
a)    开放阅读框分析
b)    启动子和转录因子结合位点(数据库EPD,TRANSFAC,DBTSS,TRRD)(软件Promoter Scan,TfBlast,TESS)
c)    CpG岛识别(在线工具:EMBOSS,CpG Island searcher,CpG cluster)
三.重复序列分析
a)    常用数据库(RepBase,RepeatMasker,LINE-1,STR)
四.基因识别,
a)    同源序列比对
b)    组成统计学特征预测(UTR,EXON,INTRON,)
c)    GENESCAN,GRAIL,geneMarkS,Glimmer
五.mRNA可变剪切分析
a)    常用数据库(ASTD,ASD,ASAP)
b)    在线工具(ASPicDB,ESEfinder,RESCUE-ESE)
六.miRNA与靶基因预测
a)    预测方法(同源片段搜索,比较基因组学预测,序列结构特征打分,靶标预测,机器学习)
b)    数据库资源(miRNA,miRBase,TarBase,miRGen,MIRSCAN,MiPred,miRFinder,miRanda,Targetscan,PicTar)

蛋白序列分析
一.蛋白基本序列分析
a)    氨基酸组成(ExPASy)
b)    电荷性质,疏水性(ProtScale)
c)    理化性质(ProtParam)
二.序列特征信息
a)    跨膜区预测(TMpred)
b)    信号肽分析(signalP)
c)    卷曲螺旋分析(COILS)
三.功能信息分析
a)    PROSITE蛋白质功能数据库
b)    结构域和功能位点分析InterProScan
c)    基于蛋白同源性的功能分析(blastp等)
四.蛋白质结构分析
a)    二级结构预测-(Chou-Fasman,GOR,PHD,NNSSP以及多元预测方法)
b)    三级结构预测-(同源建模。重头预测)

17

用DESeq进行差异分析的源代码

要保证当前文件夹下面有了742KO1.count等4个文件,就是用htseq对比对的bam文件进行处理后的输出文件

library(DESeq)
#加载数据
K1=read.table("742KO1.count",row.names=1)
K2=read.table("743KO2.count",row.names=1)
W1=read.table("740WT1.count",row.names=1)
W2=read.table("741WT2.count",row.names=1)
#列名
data=cbind(K1,K2,W1,W2)
#如果是htseq的结果,则删除data最后四行
n=nrow(data)
data=data

[c language="(-n+4:-n),"][/c]

#如果是bedtools的结果,取出统计个数列和行名
kk1=cbind(K1$V5)
rownames(kk1)=rownames(K1)
K1=kk1

#差异分析
colnames(data)=c("K1","K2","W1","W2")
type=rep(c("K","W"),c(2,2))
de=newCountDataSet(data,type)
de=estimateSizeFactors(de)
de=estimateDispersions(de)
res=nbinomTest(de,"K","W")

#res就是我们的表达量检验结果

到这里,理论上差异基因的分析已经结束啦!后面只是关于R的bioconductor包的一些简单结合使用而已

library(org.Mm.eg.db)

tmp=select(org.Mm.eg.db, keys=res$id, columns=c("ENTREZID","SYMBOL"), keytype="ENSEMBL")

#合并res和tmp
res=merge(tmp,res,by.x="ENSEMBL",by.y="id",all=TRUE)

#go
tmp=select(org.Mm.eg.db, keys=res$ENSEMBL, columns="GO", keytype="ENSEMBL")
ensembl_go=unlist(tapply(tmp[,2],as.factor(tmp[,1]),function(x) paste(x,collapse ="|"),simplify =F))

#为res加入go注释,
res$go=ensembl_go[res$ENSEMBL]#为res加入一列go

#写入all——data
all_res=res
write.csv(res,file="all_data.csv",row.names =F)

uniq=na.omit(res)#删除无效基因
sort_uniq=uniq[order(uniq$padj),]#按照矫正p值排序

#写入排序后的all_data
write.csv(res,file="all_data.csv",row.names =F)

#标记上下调基因
sort_uniq$up_down=ifelse(sort_uniq$baseMeanA>sort_uniq$baseMeanB,"up","down")
#交换上下调基因列位置
final_res=sort_uniq[,c(12,1:11)]
#写出最后数据
write.csv(final_res,file="final_annotation_gene_bedtools_sort_uniq.csv",row.names =F)

#然后挑选出padj值小于0.05的数据来做富集
tmp=select(org.Mm.eg.db, keys=sort_uniq[sort_uniq$padj<0.05,1], columns="ENTREZID", keytype="ENSEMBL")
diff_ENTREZID=tmp$ENTREZID
require(DOSE)
require(clusterProfiler)
diff_ENTREZID=na.omit(diff_ENTREZID)
ego <- enrichGO(gene=diff_ENTREZID,organism="mouse",ont="CC",pvalueCutoff=0.05,readable=TRUE)
ekk <- enrichKEGG(gene=diff_ENTREZID,organism="mouse",pvalueCutoff=0.05,readable=TRUE)
write.csv(summary(ekk),"KEGG-enrich.csv",row.names =F)
write.csv(summary(ego),"GO-enrich.csv",row.names =F)

 

17

转载-VCF格式详解

CHROM(chromosome):染色体

POS - position:参考基因组variant碱基位置,如果是INDEL(插入缺失),位置是INDEL的第一个碱基位置

ID - identifier: variant的ID。比如在dbSNP中有该SNP的id,则会在此行给出;若没有,则用’.'表示其为一个novel variant。

REF - reference base(s):参考碱基,染色体上面的碱基,必须是ATCGN中的一个,N表示不确定碱基

ALT - alternate base(s):与参考序列比较发生突变的碱基

QUAL - quality: Phred格式(Phred_scaled)的质量值,表 示在该位点存在variant的可能性;该值越高,则variant的可能性越大;计算方法:Phred值 = -10 * log (1-p) p为variant存在的概率; 通过计算公式可以看出值为10的表示错误概率为0.1,该位点为variant的概率为90%。

FILTER - _filter status: 使用上一个QUAL值来进行过滤的话,是不够的。GATK能使用其它的方法来进行过滤,过滤结果中通过则该值为”PASS”;若variant不可靠,则该项不为”PASS”或”.”。

INFO - additional information:  这一行是variant的详细信息,具体如下:

DP-read depth:样本在这个位置的reads覆盖度。是一些reads被过滤掉后的覆盖度。          DP4:高质量测序碱基,位于REF或者ALT前后

MQ:表示覆盖序列质量的均方值RMS Mapping Quality

FQphred值关于所有样本相似的可能性

AF1 AF(Allele Frequency) 表示Allele的频率,AF1为第一个ALT allele 发生频率的可能性评估

AC1AC表示Allele(等位基因)的数目,AC1为对第一个ALT allele count的最大可能性评估

AN:AN(Allele Number) 表示Allele的总数目

IS插入缺失或部分插入缺失的reads允许的最大数量

ACAC(Allele Count) 表示该Allele的数目

G3ML 评估基因型出现的频率

HWE:chi^2基于HWE的测试p值和G3

CLR在受到或者不受限制的情况下基因型出现可能性log值

UGT:最可能不受限制的三种基因型结构

CGT:最可能受限制三种基因型的结构

PV4四种P值得误差,分别是(strand、baseQ、mapQ、tail distance bias)

INDEL:表示该位置的变异是插入缺失

PC2非参考等位基因的phred(变异的可能性)值在两个分组中大小不同

PCHI2后加权chi^2,根据p值来测试两组样本之间的联系

QCHI2:Phred scaled PCHI2.

PR置换产生的一个较小的PCHI2

QBD:Quality by Depth,测序深度对质量的影响

RPB序列的误差位置(Read Position Bias)

MDV:样本中高质量非参考序列的最大数目

VDB:Variant Distance Bias,RNA序列中过滤人工拼接序列的变异误差范围

GT样品的基因型(genotype)。两个数字中间用’/'分 开,这两个数字表示双倍体的sample的基因型。0 表示样品中有ref的allele; 1 表示样品中variant的allele; 2表示有第二个variant的allele。因此: 0/0 表示sample中该位点为纯合的,和ref一致; 0/1 表示sample中该位点为杂合的,有ref和variant两个基因型; 1/1 表示sample中该位点为纯合的,和variant一致。

GQ基因型的质量值(Genotype Quality)。Phred格式(Phred_scaled)的质量值,表示在该位点该基因型存在的可能性;该值越高,则Genotype的可能性越 大;计算方法:Phred值 = -10 * log (1-p) p为基因型存在的概率。

GL三种基因型(RR RA AA)出现的可能性,R表示参考碱基,A表示变异碱基

DV高质量的非参考碱基

SPphred的p值误差线

PL:指定的三种基因型的质量值(provieds the likelihoods of the given genotypes)。这三种指定的基因型为(0/0,0/1,1/1),这三种基因型的概率总和为1。和之前不一致,该值越大,表明为该种基因型的可能 性越小。 Phred值 = -10 * log (p) p为基因型存在的概率。

FORMAT BC1-1-base.sorted.bam这两行合起来提供了’ BC1-1-base′这个sample的基因型的信息。’ BC1-1-base′代表这该名称的样品,是由BAM文件中的@RG下的 SM 标签决定的。