美文网首页TCGA数据挖掘ICGC
将ICGC的基因表达数据处理成表达矩阵(perl)

将ICGC的基因表达数据处理成表达矩阵(perl)

作者: 547可是贼帅的547 | 来源:发表于2019-03-19 23:09 被阅读0次

    小程序的目的

    最近在搞ICGC的数据库,想作为TCGA数据挖掘的验证集,然后发现ICGC下下来的数据不能够直接用于分析,于是写个小的perl处理了一下,能够分别输出标准化过的表达矩阵和raw read counts表达矩阵。

    2019.8.9更新

    其实用R的melt更简洁,将长数据转为宽数据。

    原始数据

    exp_seq.LIRI_JP.tsv

    处理后数据

    normalization matrix raw read counts matrix

    代码

    #!/usr/bin/perl
    use warnings;
    use strict;
    
    open (EXP,'exp_seq.LIRI-JP.tsv') or die $!;
    open (NORM,'>exp_norm_matrix.LIRI-JP.tsv');
    open (RAW,'>exp_raw_matrix.LIRI-JP.tsv');
    my %hash_norm;
    my %hash_raw;
    my %hash1;
    my %hash2;  
    my @samples_id;
    my @gene_id;
    
    #跳过首行
    readline EXP;    
    while (<EXP>) {
        chomp;
        my @line;
        @line=split(/\t/,$_);
        $hash_norm{$line[4]}{$line[7]}=$line[8];
        $hash_raw{$line[4]}{$line[7]}=$line[9];
        push @samples_id,$line[4];
        push @gene_id,$line[7]; 
    }
    my @samples_id_clear=grep {++$hash1{$_}==1} @samples_id;
    my @gene_id_clear=grep {++$hash2{$_}==1} @gene_id;  
    
    foreach (@gene_id_clear) {
        print NORM $_."\t";
        print RAW $_."\t";
    }
    foreach my $sample (@samples_id_clear){
        print NORM "\n".$sample."\t";
        print RAW "\n".$sample."\t";
        foreach my $gene (@gene_id_clear){
            if ($hash_norm{$sample}{$gene}){
                print NORM $hash_norm{$sample}{$gene}."\t";
                
            }else {
                print NORM "0"."\t";
                
            }
            if ($hash_raw{$sample}{$gene}){
                
                print RAW $hash_raw{$sample}{$gene}."\t";
            }else {
                
                print RAW "0"."\t";
            }
        }
    }
    
    
    

    接下来就可以顺理成章的用R去各种骚操作啦!

    相关文章

      网友评论

        本文标题:将ICGC的基因表达数据处理成表达矩阵(perl)

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