做生信分析最怕什么?肯定是下数据!看着GEO上一堆GSM编号头都大了,不知道哪一个是单细胞,下回来还不是原始格式,还得自己转。别急,这篇我就把自己踩过的坑都整理出来,专门解决geo单细胞数据下载与处理中那些让人抓狂的细节问题。不管你是新手入门还是老手想换个流程,看完这几点,能帮你省下大把debug的时间。
首先,你得知道去哪找。很多人直接搜GEO,搜出来的全是bulk RNA-seq,根本不是单细胞。其实最简单的办法,直接在UCSC Xena或者Single Cell Expression Atlas这些专门平台搜,但今天咱们就聊聊最硬核的GEO直出流程。因为很多最新的数据可能还没来得及收录进其他库。这时候,geo单细胞数据下载与处理的第一个难点来了:怎么区分?你看那个GSE标题,如果有10x Genomics、Drop-seq、Smart-seq2这些字样,大概率是单细胞。还有看实验设计,如果有"nuclei"或者"single cell"字眼更稳。
我上次想复现一个肺癌异质性的文章,GSE编号记混了,下了一个GSM样本进去,结果发现那是bulk数据,硬着头皮用Seurat跑,报错报得一塌糊涂。后来才发现那个细胞数才几百个,明显不对。所以,下载前务必确认细胞数量级,通常在几千到几万之间。
接下来是下载环节。GEO官网下载慢得感人,尤其是那些大的矩阵文件。这时候我会推荐用SRA-toolkit或者直接在GEO2R旁边看有没有原始文件链接。有些数据作者会上传到GDC或者特定的存储库。如果是SRA格式的数据,你得用fasterq-dump这类工具,注意加--split-3参数,不然文件太大了磁盘容易满。这里有个小坑,很多单细胞数据的原始数据是fastq格式,你需要先映射到参考基因组。这一步耗时极长,我一般把它交给服务器后台跑,晚上睡觉前启动,第二天早上就能看结果。这一步做好,geo单细胞数据下载与处理才算完成了一半。
拿到表达矩阵后,才是真正的挑战。格式千奇百怪,有的用的是CSV,有的是TSV,还有的是h5ad或者rds格式。如果你 lucky 了,可以直接用readRDS读取,那简直是天堂。但大多数情况,你得自己清洗。比如,我发现有的矩阵里的基因ID全是ensembl ID,而你习惯用的是symbol,这时候就得做转换。用biomaRt包很方便,但要注意查重,一个ensmid可能对应多个symbol,处理不当会导致数据维度错乱。
然后是质控。这一步不能偷懒。我用Seurat的时候,最常犯的错误就是阈值设得太严或者太松。比如mt占比,不同组织差别很大,血液样本mt占比通常很低,但肺组织或者肌肉组织就很高。我有一次为了追求数据美观,把mt占比5%以上的细胞都删了,结果发现那些高代谢的细胞正好是我感兴趣的效应T细胞,直接漏掉了关键信息。所以,结合PCA图、UMAP图综合判断,不要盲目套用默认阈值。还有细胞数量,有些批次效应严重的,细胞总数特别多的,可能是doublet(双细胞),需要用Scrublet或者DoubletFinder去检测一下。这一步做不好,后面的聚类分析全飘。
预处理流程大致是:标准化->找高变基因->缩放->PCA->聚类->UMAP/t-SNE降维。每一步都有参数可调。比如找高变基因,方法可以用vst、mean.var.plot或者dispersion。我最近尝试用vst,感觉对于去除测序深度影响效果更好一些。缩放的时候,要看你下游分析需求,如果要算差异基因,可能不需要缩放太厉害,保留原来的生物学差异更重要。
最后,可视化。Seurat自带的DimPlot真的挺好用,但默认颜色丑得不行。你可以自定义调色板,比如用RColorBrewer里的深色系列,或者Viridis色系,这样发给老板或者发文章都好看。别忘了给图加标注,哪个簇是哪个细胞类型,心里要有数,别画完连自己都不认识。
整个过程下来,你会发现geo单细胞数据下载与处理虽然繁琐,但只要理顺了逻辑,其实也没那么难。关键是要有耐心,多查文档,遇到报错别慌,复制错误信息去Google或者Bioconductor论坛搜,通常都能找到解决方案。希望我的这些经验能帮你在生信之路上少踩坑,多出成果。加油吧,搞生物的信息学的同志们!