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

小程序的目的

最近在搞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去各种骚操作啦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容