python与perl的矩阵转换及多样品的PCA

之前看过前辈用python转换矩阵,但python一直没系统学过,所以从网络中学到perl的矩阵转换,两个做了一下比较:

import sys
file = open(sys.argv[1], 'r')

arr = []
for line in file:
    info = line.rstrip().split()
    arr.append(info)
    
tarr = [[r[col] for r in arr] for col in range(len(arr[0]))]

for x in tarr:
    print '\t'.join(x)
#!/usr/bin/env perl
use warnings;
use strict;

my @matrix;
my $i=0;
open FA, $ARGV[0] || die $!;
while(<FA>)
{	
	foreach my $elem (split/\s+/, $_)
	{
		push @{$matrix[$i]}, $elem;
	}
	$i++;
}
close FA;

my @transition = map{my $x=$_;[map{$matrix[$_][$x]}0..$#matrix];}0..$#{$matrix[0]};

foreach my $row(@transition)
{
        foreach my $col (@{$row})
	{
                print $col, "\t";
        }
        print "\n";
}

关于perl的矩阵转换加入了一点点数据结构的知识了,一开始也没看懂数据结构,用的多了就熟练了,不过最常用的还是哈希的数组。
PCA,Principal Component Analysis,主成分分析,主要用于数据降维,但博主是生物信息领域,那么就看一下这方面的分析吧。在进行基因表达数据分析时,一个重要问题是确定每个实验数据是否是独立的,如果每次实验数据之间不是独立的,则会影响基因表达数据分析结果的准确性。对于利用二代测序所检测到的基因表达数据,如果用 PCA 方法进行分析,将基因作为变量通过分析确定一组“主要基因元素”,如果能够解释清楚基因的特征,那么就可以解释实验现象。拿之前的程序出来看看吧:

#!/usr/bin/env perl
use warnings;
use strict;
@ARGV == 0 and die "$0 <Matrix> <all> <need>\n";

open HEAD, shift or die $!;
open LST, shift or die $!;
open MATX, shift or die $!;

open RCMD , '>run_pca.R' or die $!;
open MX , '>mat.tab' or die $!;
open PF , '>pch_col.txt' or die $!;
open GT , '>genotypes.txt' or die $!;

my @ids = ();
while(<HEAD>){
	chomp;
	push @ids, $_;
}
close HEAD;

my %good_ids = ();
while(<LST>){
	chomp;
	$_ or next;
	my @F = split;
	$good_ids{$F[0]}  = $F[1];
}
close LST;

print RCMD 
'library("pls")
library("pcaMethods")
data<-read.table("mat.tab")
para <- read.table("pch_col.txt")
pdf("PCA.pdf")
res <-pca(data, method="ppca", nPcs=3, center=TRUE)
write.table(res@loadings, "loadings")
write.table(res@scores, "scores")
plotPcs(res, type = "scores", pch=as.character(para[,1]), col=as.integer(para[,2]))
';

for my $i (@ids){
	$_ = <MATX>;
	if(exists $good_ids{$i}){
		print MX $_;	
		if( $good_ids{$i} eq 'A'){
			print PF "@\t1\t$i\n";
		}elsif($good_ids{$i} eq 'B'){
			print PF "^\t2\t$i\n";
		}elsif($good_ids{$i} eq 'C'){
			print PF "&\t3\t$i\n";
		}elsif($good_ids{$i} eq 'D'){
			print PF "*\t4\t$i\n";
		}elsif($good_ids{$i} eq 'E'){
			print PF "-\t5\t$i\n";
		}elsif($good_ids{$i} eq 'F'){
			print PF "+\t6\t$i\n";
		}elsif($good_ids{$i} eq 'G'){
			print PF "#\t7\t$i\n";
		}elsif($good_ids{$i} eq 'H'){
			print PF ".\t8\t$i\n";
		}
		print GT "$i\t$good_ids{$i}\t$_";
	}
}

system ("R CMD BATCH run_pca.R");


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值