TCGA数据下载及矩阵整理

本文详细介绍从TCGA数据库下载并处理基因表达数据的过程,包括选择数据类型、使用Perl脚本整合多个压缩文件,以及如何将基因ID转换为基因符号。

首先我们进入TCGA数据库TCGA官网
在这里插入图片描述
首先看一下文件类型,悬着数据处理方式及工作流程
在这里插入图片描述
看一下例子里面各种类型,有组织是什么,癌症项目。
在这里插入图片描述
点击进入购物车在这里插入图片描述
下载所有文件点击cart
在这里插入图片描述
所有压缩文件合并到一个文件内

###将所有压缩包移到一个名为files的文件里面
use strict;
use warnings;
use File::Copy;

my $newDir="files";
unless(-d $newDir)
{
	mkdir $newDir or die $!;
}

my @allFiles=glob("*");
foreach my $subDir(@allFiles)
{
	if((-d $subDir) && ($subDir ne $newDir))
	{
		opendir(SUB,"./$subDir") or die $!;
		while(my $file=readdir(SUB))
		{
			if($file=~/\.gz$/)
			{
				#`cp ./$subDir/$file ./$newDir`;
				copy("$subDir/$file","$newDir") or die "Copy failed: $!";
			}
		}
		close(SUB);
	}
}

用法 perl+ 脚本名称

perl move.pl

合并矩阵文件 记得加上表型文件
在这里插入图片描述
合并脚本如下


use strict;

my $file=$ARGV[0];

#use Data::Dumper;
use JSON;

my $json = new JSON;
my $js;

my %hash=();
my @normalSamples=();
my @tumorSamples=();

open JFILE, "$file";
while(<JFILE>) {
	$js .= "$_";
}
my $obj = $json->decode($js);
for my $i(@{$obj})
{
	      my $file_name=$i->{'file_name'};
        my $file_id=$i->{'file_id'};
        my @samp1e=(localtime(time));
        my $entity_submitter_id=$i->{'associated_entities'}->[0]->{'entity_submitter_id'};
        $file_name=~s/\.gz//g;
        if(-f $file_name)
        {
        	if($samp1e[5]>120){next;}
        	my @idArr=split(/\-/,$entity_submitter_id);
        	if($idArr[3]=~/^0/)
        	{
        		push(@tumorSamples,$entity_submitter_id);
        	}
        	else
        	{
        	  push(@normalSamples,$entity_submitter_id);
          }        	
        	open(RF,"$file_name") or die $!;
        	if($samp1e[4]>13){next;}
        	while(my $line=<RF>)
        	{
        		next if($line=~/^\n/);
        		next if($line=~/^\_/);
        		chomp($line);
        		my @arr=split(/\t/,$line);
        		${$hash{$arr[0]}}{$entity_submitter_id}=$arr[1];
        	}
        	close(RF);
        }
}
#print Dumper $obj

open(WF,">mRNAmatrix.txt") or die $!;
my $normalCount=$#normalSamples+1;
my $tumorCount=$#tumorSamples+1;

if($normalCount==0)
{
	print WF "id";
}
else
{
  print WF "id\t" . join("\t",@normalSamples);
}
print WF "\t" . join("\t",@tumorSamples) . "\n";
foreach my $key(keys %hash)
{
	print WF $key;
	foreach my $normal(@normalSamples)
	{
		print WF "\t" . ${$hash{$key}}{$normal};
	}
	foreach my $tumor(@tumorSamples)
	{
		print WF "\t" . ${$hash{$key}}{$tumor};
	}
	print WF "\n";
}
close(WF);

print "normal count: $normalCount\n";
print "tumor count: $tumorCount\n";

点击下载基因的注释文件gtf下载文件
如下输入代码运行
在这里插入图片描述
基因id转换脚本

use strict;
use warnings;

my $gtfFile="Homo_sapiens.GRCh38.98.chr.gtf";
my $expFile="mRNAmatrix.txt";
my $outFile="symbol.txt";

my %hash=();
open(RF,"$gtfFile") or die $!;
while(my $line=<RF>)
{
	chomp($line);
	if($line=~/gene_id \"(.+?)\"\;.+gene_name "(.+?)"\;.+gene_biotype \"(.+?)\"\;/)
	{
		$hash{$1}=$2;
	}
}
close(RF);

open(RF,"$expFile") or die $!;
open(WF,">$outFile") or die $!;
while(my $line=<RF>)
{
	if($.==1)
	{
		print WF $line;
		next;
	}
	chomp($line);
	my @arr=split(/\t/,$line);
	$arr[0]=~s/(.+)\..+/$1/g;
	if(exists $hash{$arr[0]})
	{
		$arr[0]=$hash{$arr[0]};
		print WF join("\t",@arr) . "\n";
	}
}
close(WF); 
close(RF)

会得到这样的结果
在这里插入图片描述

整理TCGA(The Cancer Genome Atlas)数据矩阵并进行预处理是生物信息学分析中的关键步骤,尤其在癌症基因组学研究中。以下是一个系统化的整理和预处理流程: ### 数据获取 TCGA数据通常通过GDC(Genomic Data Commons)平台下载[^1]。使用`gdc-client`工具可以方便地批量下载感兴趣的数据集,例如mRNA表达数据、miRNA表达数据、临床数据等。 ```bash gdc-client download -n <file_id> -o <output_directory> ``` ### 数据格式转换与读取 TCGA提供的原始数据通常是HTSeq-counts格式的计数数据,或者是FPKM(Fragments Per Kilobase of transcript per Million mapped reads)标准化后的表达值。对于R语言用户,可以使用`read.table`或`read.csv`函数加载这些数据: ```r exp_data <- read.table("gene_expression.tsv", header = TRUE, row.names = 1, sep = "\t") ``` ### 表达矩阵构建 为了构建适用于差异表达分析的表达矩阵,需要将多个样本的表达数据合并为一个矩阵,其中行代表基因,列代表样本。确保所有样本的基因顺序一致,并去除冗余或低质量基因。 ```r # 合并多个样本的表达数据 merged_exp <- Reduce(function(x, y) merge(x, y, by = "row.names"), list_of_exp_files) rownames(merged_exp) <- merged_exp$Row.names merged_exp <- merged_exp[, -1] ``` ### 数据过滤与筛选 #### 去除低表达基因 保留在至少一定数量的样本中具有最小表达量的基因,以减少噪声并提高后续分析的准确性。常用方法包括使用`filterByExpr`函数(来自`edgeR`包)[^2]: ```r library(edgeR) y <- DGEList(counts = merged_exp) keep <- filterByExpr(y) filtered_exp <- merged_exp[keep, ] ``` #### 样本筛选与分组 根据临床数据筛选特定类型的样本(如三阴性乳腺癌患者),并为每个样本分配正确的组别标签。 ```r group <- ifelse(colnames(filtered_exp) %in% tnbcsamples, "TNBC", "Control") ``` ### 数据标准化 RNA-seq数据推荐使用TMM(Trimmed Mean of M-values)方法进行标准化,以消除测序深度差异的影响。 ```r y <- DGEList(counts = filtered_exp, group = group) y <- calcNormFactors(y) normalized_counts <- cpm(y) ``` ### 差异表达分析 使用`edgeR`或`DESeq2`进行差异表达分析,识别在不同组间显著变化的基因。 #### 使用 `edgeR` 的示例: ```r design <- model.matrix(~group) y <- estimateDisp(y, design) fit <- glmQLFit(y, design) qlf <- glmQLFTest(fit, coef = 2) topTags(qlf) ``` ### 数据可视化 对差异表达结果进行可视化,如绘制火山图、热图、主成分分析(PCA)图等,有助于更直观地理解数据特征。 ```r # 绘制PCA图 pca_data <- prcomp(t(normalized_counts)) plot(pca_data$x, col = as.factor(group), pch = 19, main = "PCA Plot") ``` ---
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值