TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建

最近在学习对甲基化数据的分析,大部分甲基化数据都有已经处理好的beta值矩阵,少部分需要用原始的.idat文件去分析,本篇主要讲如何用champ包中的champ.load函数导入.idat文件。

myLoadchamp.load('./idat',arraytype='450k')

这个函数主要有两个参数,第一个是包含所有样本的.idat文件和一个Sample Sheet.csv文件的文件夹,第二个参数是阵列的类型。.idat在TCGA中可以直接下载,Sample Sheet.csv需要自己造一个。
TCGA数据库里面下载的数据是这个样子的:

TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
下载好以后
TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
解压以后打开是这样子的
TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
文件夹里面是.idat文件,类似于这样
TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建

还要再下载一个sample_sheet文件,我们叫它临床数据

TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建

下载来的是这样的:

TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
打开以后是这样的:
TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建

然后把每个文件夹里面的.idat文件拿出来,刚到一个单独的文件夹里面,然后在构造一个用于导入的Sample Sheet.csv文件就可以用ChAMP包导入文件了。
ChAMP测试数据中展示的数据和Sample Sheet.csv是这样的:

TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
上面是所有的文件,下面是Sample Sheet文件,这里面主要的是sample_name, sample_group, sentrix_id, sentrix_position.这里面的C表示control,正常样本,T表示tumour,肿瘤样本,我们下载的临床文件里面有C或T的信息,最后面两列可以看出来对应着.idat文件的名称,两列之间用_连起来就是.idat文件名的前面两部分,Sample Sheet.csv里面的样本对应文件夹里面红和绿一对.idat文件。
然后我们开始构造自己的Sample Sheet.csv文件,我下了三个病例,有六个.idat文件,所以Sample Sheet.csv里面应该有三个样本的信息,我们可以根据临床信息中的样本名字命名,临床数据里面有正常或是患病信息,但是名称不一定是sample_group,要自己分辨,Sample_Well那一行不太清楚是什么意思,可以根据测试数据随便写,最后两列的话,由于文件原本的命名不太好看,我就用临床的样本名重新命名了,这两列应该是有含义的,后面处理批次效应的时候会用倒数第二列,应该是跟批次有关的信息,那最后一列应该就是样本的编号。但是对TCGA是怎么命名的还不太了解,所以先这么做吧。
TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
最终构造的Sample Sheet.csv是这样的
TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建
然后一定要注意,命名文件名的时候,连接Sample Sheet最后两列之间的横线一定要是”_”不然没法识别,然后就可以在R里面导入,可以做后续一系列的分析了。
library('ChAMP')
library('minfi')
myLoadchamp.load('./idat',arraytype='450k')

用原本的文件名称是否能做我已经懒得试了,我专门下了一个样本量非常小的来尝试,所以这里面各种操作都是手动操作,后期要做数据分析的话一定是需要写代码完成的。
python初学者,写了一个简单的代码,实现批量处理:

import os
import shutil
import numpy as np
import pandas as pd

def creatname(filepath):

    data = pd.read_csv(filepath, sep='\t', header=0)
    filename = data[['File Name']]
    sampleid = data[['Sample ID']]
    newsampleid = []
    n = range(sampleid.shape[0])
    sampleid = np.array(sampleid)
    filename = np.array(filename)
    for i in n:
        name = sampleid[i][0]
        newsampleid.append(name[0:7] + '_' + name[8:16])
    newsampleid = np.array(newsampleid).reshape(len(newsampleid), 1)
    match = np.concatenate((filename, newsampleid), axis=1)

    return match

def filerename(path,out_path,arr):

    i = 0
    for dirpath, dirnames, filenames in os.walk(path):

        list = os.listdir(dirpath)

        for filename in list:
            if filename.endswith('.idat'):
                for j in arr:
                    if filename == j[0]:
                        print(filename)
                        col = filename.split(".")[0][-3:]
                        i += 1
                        print(i)
                        shutil.copy(os.path.join(dirpath, filename), os.path.join(out_path, j[1] + '_'
                                                                                  + col + '.idat'))

def sample(filepath,outpath):

    data = pd.read_csv(filepath, sep='\t', header=0)

    a = data[['Sample ID']]
    a = np.array(a)
    b = data[['Sample Type']]
    b = np.array(b)
    c = []
    d = []
    for i in range(a.shape[0]):
        spid = a[i][0]

        c.append(spid[0:7])
        d.append(spid[8:16])
    a = a.flatten()
    b = b.flatten()

    frame = pd.DataFrame({'Sample_Name': a, 'Sample_Plate': None, 'Sample_Group': b, 'Pool_ID': None, 'Project': None,
                          'Sample_Well': None, 'Sentrix_ID': c, 'Sentrix_Position': d})
    frame.drop_duplicates('Sample_Name', 'first', True)
    frame.to_csv(os.path.join(outpath,'sample_sheet.csv'), index=False, sep=',')

if __name__ == '__main__':
    path = "F:\\data\\lip\\gdc_download_20220421_022123.613305"

    out_path = "F:\\data\\lip\\nidat"

    filepath = r"F:\data\lip\gdc_sample_sheet.2022-04-21.tsv"

    name = creatname(filepath)
    filerename(path,out_path,name)
    sample(filepath,out_path)

在一个266个.idat文件的文件夹里面试了一下,效果还可以。

Original: https://blog.csdn.net/weixin_46803812/article/details/124325153
Author: 阿夏啊
Title: TCGA甲基化数据(.idat)champ.load文件导入Sample Sheet构建

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694956/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球