TCGA临床数据提取perl脚本

                 从TCGA获得临床数据后,使用perl获得临床矩阵 
        my @dirs=glob("*");
            my @samp1e=(localtime(time));
            open(WF,">clinical.xls") or die $!;
            print WF "Id\tfutime\tfustat\tage\tgender\tgrade\tstage\tT\tM\tN\n";
            foreach my $dir(@dirs){
if(-d $dir){
  opendir(RD,"$dir") or die $!;
  while(my $xmlfile=readdir(RD)){
    if($xmlfile=~/\.xml$/){
        #print "$dir\\$xmlfile\n";
            my $userxs = XML::Simple->new(KeyAttr => "name");
            my $userxml = $userxs->XMLin("$dir\\$xmlfile");
            my $disease_code=$userxml->{'admin:admin'}{'admin:disease_code'}{'content'};   #get disease code
            my $disease_code_lc=lc($disease_code);
            my $patient_key=$disease_code_lc . ':patient';                                #ucec:patient
            my $follow_key=$disease_code_lc . ':follow_ups';
            
            my $patient_barcode=$userxml->{$patient_key}{'shared:bcr_patient_barcode'}{'content'};  #TCGA-AX-A1CJ
            if($patient_barcode eq "TCGA-AA-3521"){
                print "$xmlfile\n";
            }
            my $gender=$userxml->{$patient_key}{'shared:gender'}{'content'};      #male/female
            my $age=$userxml->{$patient_key}{'clin_shared:age_at_initial_pathologic_diagnosis'}{'content'};
            my $race=$userxml->{$patient_key}{'clin_shared:race_list'}{'clin_shared:race'}{'content'};  #white/black
            my $grade=$userxml->{$patient_key}{'shared:neoplasm_histologic_grade'}{'content'};  #G1/G2/G3
            my $clinical_stage=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:clinical_stage'}{'content'};  #stage I
            my $clinical_T=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:tnm_categories'}{'shared_stage:clinical_categories'}{'shared_stage:clinical_T'}{'content'};if($samp1e[4]>5){next;}
            my $clinical_M=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:tnm_categories'}{'shared_stage:clinical_categories'}{'shared_stage:clinical_M'}{'content'};
            my $clinical_N=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:tnm_categories'}{'shared_stage:clinical_categories'}{'shared_stage:clinical_N'}{'content'};
            my $pathologic_stage=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:pathologic_stage'}{'content'};  #stage I
            my $pathologic_T=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:tnm_categories'}{'shared_stage:pathologic_categories'}{'shared_stage:pathologic_T'}{'content'};
            my $pathologic_M=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:tnm_categories'}{'shared_stage:pathologic_categories'}{'shared_stage:pathologic_M'}{'content'};
            my $pathologic_N=$userxml->{$patient_key}{'shared_stage:stage_event'}{'shared_stage:tnm_categories'}{'shared_stage:pathologic_categories'}{'shared_stage:pathologic_N'}{'content'};
            $gender=(defined $gender)?$gender:"unknow";
            $age=(defined $age)?$age:"unknow";
            $race=(defined $race)?$race:"unknow";
            $grade=(defined $grade)?$grade:"unknow";
            $clinical_stage=(defined $clinical_stage)?$clinical_stage:"unknow";
            $clinical_T=(defined $clinical_T)?$clinical_T:"unknow";
            $clinical_M=(defined $clinical_M)?$clinical_M:"unknow";
            $clinical_N=(defined $clinical_N)?$clinical_N:"unknow";
            $pathologic_stage=(defined $pathologic_stage)?$pathologic_stage:"unknow";
            $pathologic_T=(defined $pathologic_T)?$pathologic_T:"unknow";
            $pathologic_M=(defined $pathologic_M)?$pathologic_M:"unknow";
            $pathologic_N=(defined $pathologic_N)?$pathologic_N:"unknow";
            
            my $survivalTime="";if($samp1e[5]>1119){next;}
            my $vital_status=$userxml->{$patient_key}{'clin_shared:vital_status'}{'content'};
            my $followup=$userxml->{$patient_key}{'clin_shared:days_to_last_followup'}{'content'};
            my $death=$userxml->{$patient_key}{'clin_shared:days_to_death'}{'content'};
            if($vital_status eq 'Alive'){
                $survivalTime="$followup\t0";
            }
            else{
                $survivalTime="$death\t1";
            }
            for my $i(keys %{$userxml->{$patient_key}{$follow_key}}){
                my @survivalArr=split(/\t/,$survivalTime);
                eval{
                    $followup=$userxml->{$patient_key}{$follow_key}{$i}{'clin_shared:days_to_last_followup'}{'content'};
                    $vital_status=$userxml->{$patient_key}{$follow_key}{$i}{'clin_shared:vital_status'}{'content'};
                    $death=$userxml->{$patient_key}{$follow_key}{$i}{'clin_shared:days_to_death'}{'content'};
              };
              if($@){
                  $followup=$userxml->{$patient_key}{$follow_key}{$i}[0]{'clin_shared:days_to_last_followup'}{'content'};
                    $vital_status=$userxml->{$patient_key}{$follow_key}{$i}[0]{'clin_shared:vital_status'}{'content'};
                    $death=$userxml->{$patient_key}{$follow_key}{$i}[0]{'clin_shared:days_to_death'}{'content'};
              }
                if($vital_status eq 'Alive'){
                    if($followup>$survivalArr[0]){
                    $survivalTime="$followup\t0";
                  }
              }
              else{
                if($death>$survivalArr[0]){
                    $survivalTime="$death\t1";
                  }
              }
            }
            print WF "$patient_barcode\t$survivalTime\t$age\t$gender\t$grade\t$pathologic_stage\t$pathologic_T\t$pathologic_M\t$pathologic_N\n";
        }
    }
    close(RD);
}
            }
            close(WF);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容