使用Perl对TCGA数据库下载后的文件合并与转换

2,873 阅读6分钟

本文针对萌新小盆友,貌似很多学医的小可爱们会使用一些类似Perl脚本语言、R语言一些专业性比较高但比较偏门的语言,本人就遇到一个萌新小可爱,需要用到Perl对从TCGA数据库下载的数据进行格式转换处理,后期还会使用R语言进行统计分析。

       书归正传,本文主要是针对Perl解释器环境安装的各种踏坑,后面用到R语言时再踏吧,敬请期待。纵观各大论坛,其实详细的文章特别是Perl执行脚本解释器的环境依赖安装的特别少,而且相关的文章都是比较老旧的,有的甚至10年前的翻出了大概几个有点参考价值的文章,现贴出来,供感兴趣的童鞋参考。

       因为我的操作平台是windows10,萌新小盆友的操作平台是macOS,所以,找资料是分两个系统去参考找的,现把文章分为两类,如下:

Perl GD模块的安装linux/windows/mac (Windows系统、macOS)

perl官网 (Windows系统、macOS)

perl官方下载地址 (Windows系统、macOS)

cpan官网 (Windows系统、macOS)

Perl模块的三种安装方法 (Windows系统、macOS)

Perl PPM安装模块 (Windows系统)

mac系统perl安装JSON模块 (macOS)

在Mac OSX 10.7.3上面安装perl模块 (macOS)

mac安装perl :blog.csdn.net/yuxin6866/a… (macOS)

在新Mac上配置Perl  (macOS)

Mac必备神器Homebrew  (macOS)

爬坑爬了一天后现把收获整理出来分享给大家:

1. perl解释器的下载安装

  • 下载

Perl(一般MacOS X已经自带安装了Perl,但版本待定,不知道是否会因为版本过老不能使         用,windows系统需要各位童鞋自行去官网下载安装,mac也可以去官网下载),通过Perl官网下载,如下图:

Windows有两种下载安装方式,ActiveState Perl方式安装(下图是windows的ActiveState下载方式)

windows还有一种安装方式是Strawberry Perl。

注意:ActiveState Perl方式在5.26之前的老版本默认附带PPM(即Perl Package Manager,是windows下的perl编译器active perl的包管理工具,具体作用类似于CPAN),5.26之后,包括5.26版本,现在默认安装时没有PPM这个工具,并且将不再为早期版本的ActivePerl构建许多软件包。,想要安装perl的包,就需要通过CPAN方式安装,与macOS安装perl包的方式一样。如果安装方式是Strawberry Perl,则想要安装perl的包,也需要通过CPAN方式安装。

Windows下载后的安装包是.msi结尾

macOS安装则需要登录后,进入以下页面选择Download Builds模块下去下载

下载的安装包则是以.pkg结尾的安装包。

  • 安装

安装直接点击安装包安装。

windows安装后如下图所示(5.26版本已经无PPM)

故如果安装的activePerl有PPM,可以直接通过PPM搜索相关的模块(也就是包)安装,例如JSON模块,如果是安装的activePerl版本比较高不支持PPM或者安装的是Strawberry Perl这种没有PPM的,则需要使用CPAN安装些perl模块(包)。

2. 安装Perl相关包

安装Perl解释器的目的除了执行基本的脚本功能,肯定也是想依赖他的各种包跟模块来处理一些数据的,例如处理从TCGA上下载癌症相关数据,加入cart之后下载,得到的数据如下所示:

里面的数据格式并不是我们想要的,我们想要的是把数据生成矩阵的格式,就需要通过Perl做处理,分以下几个步骤去处理,首先我们需要把下载的每个文件夹里.gz的文件放在一个统一的文件夹下,如果文件少的话,也可以手动自己粘贴复制,但如果几十上百的文件的话,手动粘贴复制就是最笨的方法了,所以,我们完全可以利用工具,可以通过Perl脚本完成这些繁琐而没有意义的工作。

  • 首先,我们检测我们刚才安装的perl是否安装成功

打开终端,windows系统的同学,Win + R,调出运行框(左下角),输入cmd,就会出现命令提示符,如下图

输入命令:

perl -v

如果出现展示perl版本信息,如上图,则证明安装成功,如果查看不到或者报错,则没有安装成功。

macOS打开终端的方法如下:

通过command + space 打开搜索
然后输入terminal 打开终端

在终端内输入命令:

perl -v

就可以查看到perl版本信息了,如果查看不到或者报错,则没有安装成功。

  • 安装perl相关依赖包方法

因为某个萌新童鞋是macOS系统,而且windows系统安装依赖包的相关环境有些麻烦,貌似需要手动处理,就只整理了macOS安装环境的相关步骤,如下:

1. 首先安装Xcode

Xcode是运行在操作系统Mac OS X上的集成开发工具,安装Xcode不是为了让你使用这款IDE编写代码,Xcode在整个perl使用环境里是使用不到的,只是因为在使用macOS的命令行工具homebrew时如果不安装Xcode会报错,也有办法在不安装Xcode的情况下,使用homebrew,只是有些麻烦,为了避免给各位萌新制造额外困难,就老老实实安装吧

注意:安装包有些大,下来11个G多,安心下载完成。

安装步骤如下:

在Mac电脑的App Store搜索下载Xcode,图标如下:

2. 打开一次Xcode

能成功进入软件即可(目的是为了初始化,注意:如果电脑配置过低的萌新童鞋,打开一次Xcode后以后请不要打开了,即使再次使用Perl或者命令行工具homebrew也不需要打开,否则电脑内存有爆炸风险,卡的你会什么也干不了,它的使命只有第一次,做一些初始化的配置工作)

3. 安装完Xcode后,打开终端(即terminal

打开终端方法:通过**command + space打开搜索,然后输入terminal**就能打开终端。

终端内输入命令如下:

xcode-select --install

之后一直选择“安装”即可。

4. 安装命令行工具homebrew,继续在终端输入命令:

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

注意:直接安装homebrew因为是国外的源,会非常的慢甚至安装不成功,上面的命令是已经替换成国内源。

执行命令之后按照提示安装操作即可。

5. 安装最新Perl 5.30(没有Perl 6……)(如果mac安装了可跳过此步骤)

注意:因为mac自带了Perl,所以可以先尝试不安装最新的Perl,第五步可以跳过,如果下面步骤出错,可以再回来按照第五步安装最新版本Perl,但因为本身也有一个版本的Perl,所以可能会导致有问题,故在不确定已安装的版本能不能使用的情况下可以先跳过第五步。

安装Perl命令如下:

brew install perl

此命令就是通过命令行工具homebrew安装perl。

安装完成后,验证一下当前正在使用的perl版本,在终端使用命令:

perl -v

如果还是原版本,检查一下引入,在终端输入命令:

Where is perl

应该能看到/usr/local/bin/perl在/usr/bin/perl前面,并且指向

/usr/local/Cellar/perl/{version}/bin/perl,那么就退出当前Terminal(即终端),重新打开,应该就好了。

6. 安装Cpanm

该步骤进入正题,即安装Perl的包管理工具Cpanm。

cpanm是cpan的升级版。

在终端输入命令如下:

brew install cpanm

7. 通过cpanm安装JSON包

在终端输入命令如下:

sudo cpanm install JSON

即JSON包安装完成。

3. 使用Perl处理数据

TCGA上下载的相关数据如下:

进入文件夹后

我们需要处理的就是每个文件夹里的.gz结尾的文件,整理成矩阵格式的数据

1. 我们首先需要把所有文件夹下的.gz文件整理到一个文件夹里

可以手动粘贴到一个文件夹下,多的话会很笨重。接下来我们使用Perl脚本帮我们整理。

  • 创建putFilesToOneDir.pl文件

我们可以创建一个以.pl结尾putFilesToOneDir.pl文件,放在要处理的文件夹同级目录,如下图

putFilesToOneDir.pl文件代码如下:

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);
         }
}
  • 使用终端在目标文件夹下执行putFilesToOneDir.pl脚本文件

首先要使用终端进入putFilesToOneDir.pl所在的文件夹,进入方式如下:

进入目标文件夹后,执行命令如下:

perl putFilesToOneDir.pl

执行完毕后,就会在putFilesToOneDir.pl文件的同级目录下生成一个files的文件夹,如下图

进去files文件夹后内容如下

所有的.gz文件已经已经复制到files文件夹里了。

以上给我启发的文章是该篇:

TCGA数据库下载后文件合并与转换