美文网首页
*代码笔记

*代码笔记

作者: 曲凉不见 | 来源:发表于2019-12-31 16:52 被阅读0次

    一、服务器用户端

    NT/NR库:
    ftp://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/

    makeblastdb -in nt -parse_seqids -hash_index -dbtype nucl -logfile nt_logfile
    makeblastdb -in nr -parse_seqids -hash_index -dbtype prot -logfile nr_logfile
    

    二、Unix/Linux命令

    查看硬盘分区及使用情况
    df -lh
    

    1. vi下:

    当前行行首:0(数字0)
    当前行行尾:$
    文件尾:G
    当前屏首行:H
    当前屏末行:L
    显示行号:":set number"
    

    2. 四则运算

    echo "xxx" | bc -l #双引号里面写运算
    

    3. echo命令

    echo打出tab
    echo -e "A\tB\tC" #echo完了自带换行符
    
    wget下载限制
    wget -c --limit-rate=3M [http://hdahdoad/file](http://hdahdoad/file) #断了能接上,且最大速度不超过3M
    

    4. awk命令

    输出多列:
    cat file | awk -F "\t" '{print $1,$2,$3}' OFS="\t"
    
    删除重复行:
    awk '{if(!seen[$0]++){print $0;}}' file
    
    删除最后一列:
    awk '{print $NF}' file #$NR是最后一行
    
    删除第一行:
    awk '{$1=" ";print $0}' file
    
    求和/求均值:
    awk '{sum+=$1}END{print "sum=",sum}' file
    awk '{if($1>=5)sum+=$1}END{print sum}' file
    awk '{ sum += $7; } END { print "sum = " sum; print "average = " sum/NR }'
    
    这是什么:
    awk '{a[NR]=length($0)}END{for(i in a) if(i%4==2 && a[i]!=a[i+2])print i"\t"a[i]"\t"a[i+2]}'
    
    CSV转TXT
    awk 'BEGIN{FS=",";OFS="\t"}{$1=$1}1' file
    
    FASTQ文件,每个reads输出序列行
    awk '{if(NR%4==2)print $0}' test.fastq #NR是行,length($0)是长度
    
    计算第二列之和
    awk '{sum+=$2;count+=1}END{print "SUM:"sum"\nAVG:"sum/count"\nCOUNT:"count}' file
    
    去掉fasta中多余的换行符
    awk '!/^>/{printf "%s",$0;n="\n"}/^>/{print n $0;n=" "}END{printf "%s",n}' file #小写s
    
    awk与正则表达式的结合
    取第三列以chr21开头的reads打印出来,用\~表示匹配,\~!等同\!~
    awk '{if($3~/^chr21/)print $0}' sample.all.1.sam | less -S
    
    /REG/为正则表达式,可以将$0中满足条件的记录送到action处理。
    awk '/REG/{action}'
    
    以Permission denied结尾的行输出
    awk '{if($0~/Permission denied$/)print $0}' file
    
    awk中使用if、elsif和else
    awk -F '\t' '{if($5=="-")print $1,$2,$3,$4,$6,$6,$7,$8,$9;else print $1,$2,$3,$4,$5,$6,$7,$8,$9}' OFS="\t" NC_000962.ptt > NC_000962_re.ptt
    
    统计出现次数
    awk '{a[$3]++} END{for(i in a){print i,a[i] | "sort -r -n -k 2"}}' file
    这是统计文件第三列的信息,重复出现的次数,输出第三列,以及次数,次数在结果的第二列,因此对结果的第二列进行排序输出
    

    5. tr命令(替换)

    去掉大写C:
    tr -d "C" file
    
    A换成B:
    tr -s "A" "B" file
    

    6. sed命令

    替换(去掉)分号:
    sed -i 's/;//g' file #-i是不会生成新的文件,而是生成是文件直接代替file
    
    取出文件中的第n行
    sed -n '5,10p' file > output  #取出5-10行,不改变源文件
    
    去掉含有某些字符的行
    sed -i '/string/d' file
    
    删除第n行
    sed 'nd' file
    
    从第三行开始,每隔一行删一行
    sed 3~2d file
    
    删除第4-8行
    sed 4,8d file > output (前面加-i 就直接修改文件本身了)
    
    删除最后一行
    sed '$'d file
    
    匹配行删除
    sed /string/d file
    
    删除从匹配行到末尾
    sed '/string/,$d' file
    
    删除从匹配行到之后两行
    sed '/string/,+2d' file
    
    删除空行
    sed '/^$/d' file
    
    在文件中增加一行
    sed -i 'echo\"2\";/a\echo \"5\";' file #在echo "2";下面增加一行是echo "5";
    
    替换大小写
    sed 's/[A-Z]/\l&/g' file > file_cout #变小写
    sed 's/[a-z]/\L&/g' file > file_cout #变大写
    
    在第一行前面插入一行
    sed -i '1iaaa\tbbb\tccc\tddd' file #在file的第一行增加aaa\tbbb\tccc\tddd
    

    7. sort命令

    按第x列排列(从小到大):
    sort -k -x -n file
    

    8. grep命令

    精确抓取:
    grep "\<AAA\>" file #只写一半就是半边精确匹配的抓取
    
    范围抓取:
    grep "AAA[12]" file #抓AAA1或AAA2
    
    grep同时抓取多个关键词
    grep -E "AA|BB|CC" file
    

    9. find命令

    find /path/../ -type f -name "*.pl"
    

    10. touch命令

    touch创建文件或修改文件时间
    
    选项
    -a 只更新访问时间,不改变修改时间
    -c 不创建不存在的文件
    -m 只更新修改时间,不改变访问时间
    -r file 使用文件file的时间更新文件的时间
    -t 将时间修改为参数指定的日期,如:07081556代表7月8号15点56分
    
    Example:
    touch -t 201601291200.00 reads.split.050.2.fastq
    

    11. du/df命令

    查看当前目录下所有文件和文件夹大小(不单独列出单个文件大小)
    du -h
    
    查看目标文件夹大小
    du -sh /path/ 
    

    12. 从github下载软件安装包

    假设一个软件的github网页为:https://github.com/xavierdidelot/ClonalFrameML

    git clone [https://github.com/xavierdidelot/ClonalFrameML](https://github.com/xavierdidelot/ClonalFrameML)
    

    or

    git clone [https://github.com/xavierdidelot/ClonalFrameML.git](https://github.com/xavierdidelot/ClonalFrameML.git)
    

    13. nohup

    输出log文件到指定文件中
    nohup sh xxx.sh >> log &
    

    14. md5sum

    输出MD5
    md5sum file
    
    检测MD5
    md5sum -c md5.check.txt
    

    md5.check.txt:
    12345 file1
    56789 file2
    中间是两个空格隔开

    15. wget

    断点续传
    wget -c ftp://xxx.fq.gz
    
    下载文件夹
    wget -c -r -np -nH ftp://xxx
    -r : 遍历所有子目录
    -np : 不到上一层子目录去
    -nH : 不要将文件保存到主机名文件夹
    -R index.html : 不下载 index.html 文件
    

    三、Shell命令

    高亮grep结果,在~/.bashrc里加一行

    Alias grep='GREP_COLOR="1;33;40" LANG=C grep--color=auto'
    source ~/.bashrc
    

    循环
    file.txt里面是文件名,把这些文件的第二列都拿出来放在zzz里

    for filename in $(cat file.txt)
    do
      samtools view 1-mapping/$filename | cut -f2 >>zzz
    done
    

    四、Python

    1. 安装python模块

    安装到root下

    python -m pip install SomePackage
    

    安装到用户自己目录下

    python -m pip install SomePackage --user
    

    检查某模块的版本

    >>> import pkg_resources
    >>> pkg_resources.get_distribution("SomePackage").version
    

    安装本地模块

    pip install ./downloads/SomePackage-1.0.4.tar.gz
    

    或卸载

    pip uninstall package-name
    

    五、Perl语言

    1. Last, next, break

    Perl中last, next, break的用法:
    Next是跳到下一次循环i+1,last是跳出循环。

    2.去掉字符左右的空白

    s/(^s+|s+$)//g
    

    3.去掉哈希中的一个键值对

    delete $hash{$key}
    

    4.操作数组

    4.1 从数组右端操作:

    取值:pop
    增值:push @array, $a;
    

    4.2 从数组左端操作

    取值:shift
    增值:unshift
    

    4.3 foreach遍历array中的值

    foreach $rock(@rocks){
     $rock="\t$rock";
     $rock="$rock\n";
    }
    

    4.4 数组排序:sort不会改变array本身,所以需要保存。

    @sorted=sort(@rocks);
    @back=reverse sort @rocks;
    @rocks=sort @rocks; #重新存回也可以
    

    4.5 数字排序会变成ASCII码来,1开头的会在3开头的前面,解决方法:

    @num=sort {$a<=>$b} @array; #从小到大
    @num=sort {$b<=>$a} @array; #从大到小
    

    4.6 数组值赋给哈希值

    $hash{$key}=[@array];
    print "@{$hash{$key}}\n";
    

    4.7 数组去重

    my %count;
    my @new_array = grep { ++$count{ $_ } < 2; } @array;
    

    5.数组与字符串的转换

    用tab键隔开的字符串
    $chr=join("\t",@array)
    
    这样就是直接变成array
    @array=split /\t/
    

    6. 数组去重

    my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
    my %saw;
    @saw{ @array } = ( );
    my @uniq_array = sort keys %saw;
    

    7. 按照键/值的顺序输出哈希

    7.1. 按照key 排序
    7.1.1 按照数字排序

    foreach my $item (sort {$a<=>$b} keys %hash){
     print "$item == > $hash{$item}","/n";
    }
    

    7.1.2 按照ASCII排序

    foreach my $item (sort {$a cmp $b} keys %hash){
     print "$item == > $hash{$item}","/n";
    }
    

    7.2.按照value排序
    7.2.1 按照数值排序(大到小,小到大只需要将a 和b 位置调换即可)

    foreach my $key ( sort { $hash{$a} <=> $hash{$b} } keys %hash ) {
     my $value = $hash{$key};
     #do something with ($key, $value)
    }
    

    7.2.2 按照ACSII排序

    foreach my $key ( sort { $hash{$a} cmp $hash{$b} } keys %hash ) {
     my $value = $hash{$key};
     # do something with ($key, $value)
    }
    

    8. Substr获取字符串

    offset代表起始字符的位置,length代表引用的字符串长度,如果省略length则代表从起始值到字符串的最后一个字符长度。而offset如果是负值的话,就会从字符串右边开始指定字符。

    substr($string,offset,length)
    $s=substr("perl5",2,2);        这时$s="rl"
    $s=substr("perl5",2);          这时$s="rl5"
    $s=substr("perl5",-2,2);       这时$s="l5"
    

    9. Splice去除数组中的值

    splice(@array,skipped,length,@newarray)
    skipped指,在去掉某个值之前跳过几个值
    length指,去掉几个值
    

    10. 正则表达式计算一段字符中,匹配到短字符的次数

    计算字符串 $var 中出现的A字符,用到了正则匹配"s///g"
    my $var = 'TCTCATGTGAAAAACTATATCAATAATATAAAAACA';
    my $count = ($var =~ s/A/A/g);
    print $count;
    

    11. 正则表达式计算一段字符中,获取匹配指定字符的部分,返回其位置

    while ($sequence=~m/(N+)/g) {# 匹配一个N或以上的字符
        my $len=length($1);# 返回这段匹配的长度
        my $end=pos($sequence);#用 pos函数返回该匹配的终止位置
        my $start=$end-$len+1;# 计算出起始位置
        print OUT "$key\tN\t$start\t$end\t$len\n";# 输出结果
    }
    

    12. 一个字符串,替换字符,写成函数

    sub write_string {
        my ($sequence,$ref_seq,$start,$end)=@_;
        my $len_before=$start-1;
        my $string_before=substr($sequence,0,$len_before);
    
        my $offset=$start-1;
        my $len_middle=$end-$start+1;
        my $string_mid=substr($ref_seq,$offset,$len_middle);
    
        my $offset_after=$end;
        my $len_after=length($sequence)-$end;
        my $string_after=substr($sequence,$offset_after,$len_after);
    
        my $new_string=join("",$string_before,$string_mid,$string_after);
        return $new_string;
    }
    !使用的时候
    my $new_string=write_string($sequence,$ref_sequence,$start,$end);
    

    六、R语言

    1. R更新

    install.packages("installr")
    library(installr)
    然后在工具栏选择更新R
    

    改变工作目录:

    setwd("\path\...")
    

    查看数据类型

    mode(x)
    

    2. apply函数家族

    http://blog.fens.me/r-apply/
    apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环、分组、过滤、类型控制等操作。

    3. R筛选值

    只保留第二列值大于0的行
    data=read.table("6-RankSum_11492_1_methy_5k.txt")
    data=data[data[,2]>0,]
    
    

    4. apply函数

    apply函数本身就是解决数据循环处理的问题,为了面向不同的数据类型,不同的返回值,apply函数组成了一个函数族,包括了8个功能类似的函数。这其中有些函数很相似,有些也不是太一样的。

    apply函数是最常用的代替for循环的函数。apply函数可以对矩阵、数据框、数组(二维、多维),按行或列进行循环计算,对子元素进行迭代,并把子元素以参数传递的形式给自定义的FUN函数中,并以返回计算结果。

    apply(X, MARGIN, FUN, ...)
    X:数组、矩阵、数据框
    MARGIN: 按行计算或按按列计算,1表示按行,2表示按列
    FUN: 自定义的调用函数
    …: 更多参数,可选
    
    比如,对一个矩阵的每一行求和,下面就要用到apply做循环了。
    > x<-matrix(1:12,ncol=3)
    > apply(x,1,sum)
    [1] 15 18 21 24
    
    下面计算一个稍微复杂点的例子,按行循环,让数据框的x1列加1,并计算出x1,x2列的均值。
    # 生成data.frame
    > x <- cbind(x1 = 3, x2 = c(4:1, 2:5)); x
     x1 x2
    [1,] 3 4
    [2,] 3 3
    [3,] 3 2
    [4,] 3 1
    [5,] 3 2
    [6,] 3 3
    [7,] 3 4
    [8,] 3 5
    
    > data.frame(x1=x[,1]+1,x2=rowMeans(x))
     x1 x2
    1 4 3.5
    2 4 3.0
    3 4 2.5
    4 4 2.0
    5 4 2.5
    6 4 3.0
    7 4 3.5
    8 4 4.0
    

    4. ggplot

    col=sample是连续值,col=factor(sample)是不连续值

    4.1 RColorBrewer(??RColorBrewer)

    library(RColorBrewer)
    mypalette<-rev(brewer.pal(9,"Greens"))#allowed maximum for palette Greens is 9
    pheatmap(data.rev,col=mypalette,cluster_col=F,cluster_row=F)
    

    Creates nice looking color palettes especially for thematic maps

    brewer.pal(n, name)
    display.brewer.pal(n, name)
    
    n Number of different colors in the palette, minimum 3, maximum depending on palette
    name A palette name from the lists below
    type One of the string "div", "qual", "seq", or "all"
    select A list of names of existing palettes
    exact.n If TRUE, only display palettes with a color number given by n
    colorblindFriendly if TRUE, display only colorblind friendly palettes

    一般用法可以是:

    library(RColorBrewer)
    myPalette <- colorRampPalette(rev(brewer.pal(11, "RdBu")))
    p=ggplot(sample,aes(x = X2, y = X1, fill = value))
    p=p + geom_tile()
    p=p + scale_fill_gradientn(colours = myPalette(100))
    

    4.2 Facet(分面)
    虽然我们前面说过ggplot2分面最终的效果是一页多图,但跟通常所说的在 “一个页面中绘制多个图形”还是有区别的。ggplot2分面体现的是数据分组,同一页面中的多个小图是完全相同的类型。真正意义的“一页多图”在 ggplot2中需要通过其他方法实现。ggplot2的分面有两种方式,分别使用facet_wrap或facet_grid 函数。

    facet_grid(.~sample)     横着排
    facet_grid(sample~.)     竖着排
    

    缠绕分面 facet_wrap
    facet_warp 即“缠绕分面”,对数据分类只能应用一个标准,不同组数据获得的小形按从左到右从上到下的“缠绕”顺序进行排列:

    facet_wrap(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, as.table = TRUE, drop = TRUE)
    
    facets 分面参数如 ~cut,表示用 cut 变量进行数据分类
    nrow 绘制图形的行数
    ncol 绘制图形的列数,一般nrow/ncol只设定一个即可
    scales 坐标刻度的范围,可以设定四种类型。fixed 表示所有小图均使用统一坐标范围;free表示每个小图按照各自数据范围自由调整坐标刻度范围;free_x为自由调整x轴刻度范围;free_y为自由调整y轴刻度范围。
    shrinks 也和坐标轴刻度有关,如果为TRUE(默认值)则按统计后的数据调整刻度范围,否则按统计前的数据设定坐标。
    as.table 和小图排列顺序有关的选项。如果为TRUE(默认)则按表格方式排列,即最大值(指分组level值)排在表格最后即右下角,否则排在左上角。
    drop 是否丢弃没有数据的分组,如果为TRUE(默认),则空数据组不绘图。

    格网分面 facet_grid
    格网分面可以应用多个标准对数据进行分组。
    color~cut 对数据的分组和小图排列有决定作用,波浪号前为小图分行标准,后面为分列标准。facet_grid 的完整用法为:

    facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, drop = TRUE)
    

    和facet_wrap比较,除不用设置ncol和nrow外(facets公式已经包含)外还有几个参数不同:

    Margins 这不是设定图形边界的参数。它是指用于分面的包含每个变量元素所有数据的数据组
    space 这个参数要配合scales使用,如果为fixed(默认),所有小图的大小都一样,如果为

    free/free_x/free_y,小图的大小将按照坐标轴的跨度比例进行设置。
    labeller|这是设定小图标签的,facet_grid的函数说明档讲得比较明白,参考之。或许会在后面介绍。

    4.3 一个画布中画多个ggplot图

    library(easyGgplot2)
    ggplot2.multiplot(p1,p2,p3,p4, cols=2)
    

    5. R中获取一个data的大小

    dim(data) #行列, ncol(data) #列, nrow(data) #行
    

    Melt和cast
    melt是使矩阵变少一维
    cast是melt的反转,例如

    miRNA Gene Estimate
    hsa-miRNA-1 AA -0.91
    hsa-miRNA-2 BB -0.99
    hsa-miRNA-1 AA -0.97
    hsa-miRNA-2 BB -0.95

    acast(data,Gene~miRNA,mean)变成

    Gene hsa-miRNA-1 hsa-miRNA-2
    AA -0.91 -0.97
    BB -0.99 -0.95

    当不仅有miRNA,Gene的时候,Estimate会有不止一个值,mean就是取平均。

    6. R中用0代替NA

    data.c[is.na(data.c)]=0
    

    7. R中取特定的行

    而利用subset()函数进行访问和选取数据框的数据更为灵活,subset函数将满足条件的向量、矩阵和数据框按子集的方式返回。

    Subset函数的三种应用方式:

    subset(x, subset, ...)                     
    subset(x, subset, select, drop = FALSE, ...)    ##对于矩阵
    subset(x, subset, select, drop = FALSE, ...)    ##对于数据框
    x是对象,subset是保留元素或者行列的逻辑表达式,对于缺失值用NA代替。
    Select 是选取的范围,应小于x。 x<-data.frame(matrix(1:30,nrow=5,byrow=T))
    rownames(x)=c("one","two","three","four","five")
    colnames(x)=c("a","b","c","d","e","f")
    x
    new<-subset(x,a>=14,select=a:f)
    new                            ## 从a到f列选取a>14的行
    

    相关文章

      网友评论

          本文标题:*代码笔记

          本文链接:https://www.haomeiwen.com/subject/plbcoctx.html