小程序的目的
最近在搞ICGC的数据库,想作为TCGA数据挖掘的验证集,然后发现ICGC下下来的数据不能够直接用于分析,于是写个小的perl处理了一下,能够分别输出标准化过的表达矩阵和raw read counts表达矩阵。
2019.8.9更新
其实用R的melt更简洁,将长数据转为宽数据。
原始数据
处理后数据
代码
#!/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去各种骚操作啦!