123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- # -*- encoding: utf-8 -*-
- '''
- @File : s01_samplesheet_v0_20230420_finish.py
- @Time : 2023/04/20 11:35:55
- @Author : liuxiangqiong
- @Version : 0.1
- '''
- # here put the import lib
- import pandas as pd
- import os
- import argparse
- import re
- ##项目表有上海和启动两个sheet
- ##修改,提取检测项目的编号,204或者602.
- def pancancer_project(inputpath,laneid):
- #inputpath = '/cgdata/liuxiangqiong/work62pancancer/pipelinetest-CGB0158'
- #laneid = 'CGB0158'
- ###0.拷贝CNV分级表
- rawcnvdir = '/cgdata/pancancer_report/refdata/CNV.xlsx'
- cnvtable = pd.read_excel(rawcnvdir)
- cnvtable['gene'] = cnvtable['gene'].str.strip()
- cnvtable['CNV_label'] = cnvtable['CNV_label'].str.strip()
- refcnvdir1 = '/cgdata/liuxiangqiong/work62pancancer/pipeline/v0/refdata/CNV_tier_infor.txt'
- biocnvdir2 = '/cgdata/bioproject/pancancer602gene/Project_table/CNV_tier_infor.txt'
- cnvtable.to_csv(refcnvdir1, index=False, header=True, sep='\t')
- cnvtable.to_csv(biocnvdir2, index=False, header=True, sep='\t')
- ###1.从项目表提取出当前大panel的样本表
- project = pd.read_excel('/cgdata/bioproject/pancancer602gene/Project_table/阅尔基因项目信息总表-0606.xlsx',engine='openpyxl',sheet_name=None)
- #project = pd.read_excel('/cgdata/liuxiangqiong/work62pancancer/probe204/阅尔基因项目信息总表-0606.xlsx',engine='openpyxl',sheet_name=None)
- #提取出两个sheet的结果并追加合并
- project_SH=project['项目信息表-上海']
- project_QD=project['项目信息表-启东']
- project_all=project_QD.append(project_SH)
- project_all.reset_index(drop=True,inplace=True)
- ###2.1获得602的项目
- projectsample1 = project_all[project_all['检测项目1'] == '阅全-泛癌种602基因检测']
- projectsample2 = project_all[project_all['检测项目1'].str.contains('CPS', na=False)]
- projectsample_602=projectsample1.append(projectsample2)
- ##2.2获得204的项目
- projectsample_204 = project_all[project_all['检测项目1'].str.contains('CMS', na=False)]
- ##2.3将204和602项目合并
- projectsample=projectsample_602.append(projectsample_204)
- projectsample.reset_index(drop=True,inplace=True)
- outputfile1 = os.path.join('/cgdata/bioproject/pancancer602gene/Project_table/pancancer_allsamples.xlsx')
- #outputfile1 = os.path.join('/cgdata/bioproject/pancancer602gene/Project_table/pancancer_602gene_samples.xlsx')
- writer = pd.ExcelWriter(outputfile1)
- projectsample.to_excel(writer, sheet_name='sample', index=False)
- writer.save()
- writer.close()
- ####3.提取出当前我们panel分析样本的信息
- selectlist = ['样本编号', '样本类型', '临床诊断','检测项目1']
- selectsample = projectsample[selectlist]
- selectsample.reset_index(drop=True, inplace=True)
- selectsample['样本编号'] = selectsample['样本编号'].str.replace("^A", "Lib")
- ###3.1 我们从底层表中获取疾病的名称
- tumordbdir = '/cgdata/liuxiangqiong/work62pancancer/pipeline/v0/refdata/TCGA_tumor_list_20220915.txt'
- tumordblist = pd.read_table(tumordbdir, sep='\t', header=0, encoding='gbk')
- # 添加TCGA的名称
- selectsample.rename(columns={'临床诊断': 'tumor_name', '样本编号': 'sampleid', '样本类型': 'sampletype','检测项目1':'project'}, inplace=True)
- selectsample_TCGA = pd.merge(selectsample, tumordblist, on=['tumor_name'], how='left')
- # 将不在TCGA的癌症名称标为unknown
- selectsample_TCGA['tumor_name'] = selectsample_TCGA['tumor_name'].fillna('unknown')
- # 3.2 获得当前的样本对应的信息
- ####提取出当前lane的样本对应的信息
- lane_sampelelist = pd.read_table(os.path.join(inputpath, laneid + '_sample.txt'), sep='\t', header=None, names=['sampleid'])
- lane_sampleinfor = pd.merge(lane_sampelelist, selectsample_TCGA, on=['sampleid'], how='left')
- # 输出原始信息表
- outputfile2 = os.path.join(inputpath, laneid + '_sampleinfor_raw.xlsx')
- writer = pd.ExcelWriter(outputfile2)
- lane_sampleinfor.to_excel(writer, sheet_name='sampleinfor', index=False)
- writer.save()
- writer.close()
- return lane_sampleinfor
- #inputpath='/cgdata/liuxiangqiong/work62pancancer/probe204'
- #laneid='CGB0434_2'
- #rawsheet=pancancer_project(inputpath,laneid)
- ##修改,加上检测项目编号
- #且给出下机数据的样本编号。如果对应的需要修改,那么人工再改
- def project_pair(rawsheet):
- #inputfile = os.path.join(inputpath, laneid + '_sampleinfor_raw.xlsx')
- #rawsheet = pd.read_excel(inputfile)
- ##首先获得所有的肿瘤样本
- rawsheet_tumorid = rawsheet[rawsheet['sampleid'].str.contains('T')]
- rawsheet_tumorid.reset_index(drop=True, inplace=True)
- ###获得肿瘤样本名,构建配对表,因为不管正常如何命名,最后的normal也是根据肿瘤样本名,所以只需要看肿瘤样本名就可
- sample_pair = pd.DataFrame()
- for i in range(len(rawsheet_tumorid)):
- sample = rawsheet_tumorid.loc[i, 'sampleid']
- sampletype1 = rawsheet_tumorid.loc[i, 'sampletype']
- tumortype = rawsheet_tumorid.loc[i, 'Abbr']
- projectid=rawsheet_tumorid.loc[i, 'project']
- sample_pair.loc[i, 'samplename'] = sample
- #判断样本项目
- if 'CPS' in projectid:
- sample_pair.loc[i, 'projectid'] = 'Pan602'
- elif 'CMS' in projectid:
- sample_pair.loc[i,'projectid']='Pan204'
- else:
- sample_pair.loc[i,'projectid']='other'
- #获得normal新命名
- sample_pair.loc[i, 'normal'] = sample + 'CN'
- #判断样本类型和tumor新命名
- if sampletype1 == '血浆':
- sample_pair.loc[i, 'tumor'] = sample + 'CT'
- sample_pair.loc[i, 'sampletype'] = 'blood'
- sample_pair.loc[i, 'tumortype'] = tumortype
- sample_pair.loc[i, 'fastq_tumor'] = sample
- sample_pair.loc[i, 'fastq_normal'] = sample[:-2]+'N'
- elif sampletype1=='外周血':
- sample_pair.loc[i, 'tumor'] = sample + 'CT'
- sample_pair.loc[i, 'sampletype'] = 'blood'
- sample_pair.loc[i, 'tumortype'] = tumortype
- sample_pair.loc[i, 'fastq_tumor'] = sample
- sample_pair.loc[i, 'fastq_normal'] = sample[:-2]+'N'
- else:
- sample_pair.loc[i, 'tumor'] = sample + 'TT'
- sample_pair.loc[i, 'sampletype'] = 'FFPE'
- sample_pair.loc[i, 'tumortype'] = tumortype
- sample_pair.loc[i, 'fastq_tumor'] = sample
- sample_pair.loc[i, 'fastq_normal'] = sample[:-1]+'N'
- return sample_pair
- def sheetrunmain(inputpath,laneid):
- lane_sampleinfor=pancancer_project(inputpath,laneid)
- project_sample=project_pair(lane_sampleinfor)
- print('project_sample')
- print(project_sample)
- outputfile = os.path.join(inputpath, laneid + '_sample_infor_label.txt')
- project_sample.to_csv(outputfile,sep='\t',header=True, index=False)
- print('finish')
- #inputpath='/cgdata/liuxiangqiong/work62pancancer/pipelinetest-CGB0158'
- #laneid='CGB0158'
- #sheetrun(inputpath,laneid)
- if __name__=='__main__':
- parser = argparse.ArgumentParser(description='sample pair')
- parser.add_argument('-i', '--inputpath', type=str, help='the path of lane')
- parser.add_argument('-l', '--laneid', type=str, help='laneid')
- args = parser.parse_args()
- Inputpath = args.inputpath
- Laneid = args.laneid
- sheetrunmain(Inputpath,Laneid)
|