最近在学习对甲基化数据的分析,大部分甲基化数据都有已经处理好的beta值矩阵,少部分需要用原始的.idat文件去分析,本篇主要讲如何用champ包中的champ.load函数导入.idat文件。
myLoadchamp.load('./idat',arraytype='450k')
这个函数主要有两个参数,第一个是包含所有样本的.idat文件和一个Sample Sheet.csv文件的文件夹,第二个参数是阵列的类型。.idat在TCGA中可以直接下载,Sample Sheet.csv需要自己造一个。
TCGA数据库里面下载的数据是这个样子的:
下载好以后
解压以后打开是这样子的
文件夹里面是.idat文件,类似于这样
还要再下载一个sample_sheet文件,我们叫它临床数据
下载来的是这样的:
打开以后是这样的:
然后把每个文件夹里面的.idat文件拿出来,刚到一个单独的文件夹里面,然后在构造一个用于导入的Sample Sheet.csv文件就可以用ChAMP包导入文件了。
ChAMP测试数据中展示的数据和Sample Sheet.csv是这样的:
上面是所有的文件,下面是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是怎么命名的还不太了解,所以先这么做吧。
最终构造的Sample Sheet.csv是这样的
然后一定要注意,命名文件名的时候,连接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/
转载文章受原作者版权保护。转载请注明原作者出处!