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

小程序的目的

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

2019.8.9更新

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

原始数据

将ICGC的基因表达数据处理成表达矩阵(perl)_第1张图片
exp_seq.LIRI_JP.tsv

处理后数据

将ICGC的基因表达数据处理成表达矩阵(perl)_第2张图片
normalization matrix
将ICGC的基因表达数据处理成表达矩阵(perl)_第3张图片
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 () {
    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))