too-many-cells 学习笔记

1. TooManyCells 简介

2. 软件安装

下面仅介绍一种安装方式,更多方式请见 github 文档

  1. 可以选择用 conda 安装 curl
  2. 用 curl 安装 stack
## 安装 stack
curl -sSL https://get.haskellstack.org/ | sh #这个 curl 可以用 conda 安装
stack setup
  1. 用 stack 安装 too-many-cells
## 安装 too-many-cells
git clone https://github.com/GregorySchwartz/too-many-cells.git
cd too-many-cells
stack install
  1. 完成后打开 nohup.out 看到最后提示将 /blabla/.local/bin 路径加入 PATH 变量,因为这是软件的安装路径

3. 文件架构

  • 个人习惯,project 下建三个文件夹:scpt,用于存放脚本;input,用于存放输入信息;out,用于存放输出信息

4. 关于常规表达矩阵转 cellranger 结果

  • 一开始由于我的疏忽,以为这个软件只能读取 cellranger 结果中的 3 个文件这样格式的输入文件,但我手头只有普通表达矩阵,在向曾老师求助之后他很快发了推文:https://mp.weixin.qq.com/s/NaZ5kz3ew2O01cFEnK8sXg

  • 从这段非常秀的代码中我学到这么几点

    • R 中的“常规写入”
    file="matrix.mtx"
    sink(file)
    cat("%%MatrixMarket matrix coordinate integer general\n")
    cat("%\n")
    sink()
    
    • 操作循环的输出结果(如每次循环返回一个小数据框,最后rbind到一起)
    tmp=do.call(rbind,lapply(1:ncol(ct),function(i){
    return(data.frame(row=1:nrow(ct),
                      col=i,
                      exp=ct[,i]))
    }))
    
    • write.csv中的append参数,避免覆盖原有内容

5. 默认参数

  • 但是,在我又读了一遍 github 文档之后,发现输入既可以是一个文件夹(里面放 cellranger 的 3 个文件),也可以是一个 csv 格式的普通表达矩阵...于是还是采用后者读取数据
  • 除了表达矩阵之外,还需要一个输入文件 labels.csv,大致长下面这个样子:
    如果已知细胞有不同的来源,或者数据分析之后对细胞有注释需求都可以通过这个输入文件实现
  • 代码
too-many-cells make-tree \
        --matrix-path ../input/expr_count.csv \
        --labels-file ../input/labels.csv \
        --draw-collection "PieRing" \
        --output ../out \
        > ../out/clusters.csv
  • 对于我的需求来说最后的输出只有两个文件有用,一个是 clusters.csv,记录聚类结果,一个是 dendrogram.svg,可视化聚类结果
  • 可视化效果:

6. “修剪”树枝

  • 显然,默认参数下的分支太细了,我们可以通过两种方式来调整
    • 直接设置 --min-size 参数为一个值,如 100,以规定最小分支细胞数
    • 设置 --smart-cutoff 参数为一个值,如 4,以规定最小分支细胞数为 4*median absolute deviation,这个我还不太明白,但是我猜测这是根据每个分支的情况决定分支大小,可能会更合理
  • 代码
too-many-cells make-tree \
    --prior ../out \
    --labels-file ../input/labels.csv \
    --smart-cutoff 1 \ #经调试,我的数据最合适的值是1
    --min-size 1 \
    --draw-collection "PieChart" \
    --output ../out_pruned \
    > ../out_pruned/clusters_pruned.csv
  • 可视化结果:
  • 只有一种颜色是因为我的 labels 只标了一种,如果 labels 有多种,那么就会呈现这样的效果:

7. 取细胞子集

  • 如果有取出一部分有一定特点的细胞进一步分析,就需要用到 clusters_pruned.csv
  • 首先查看这个文件的结构
$ head clusters_pruned.csv
cell,cluster,path
AAACGGGAGGTGTTAA.1,9,9/8/7/6/5/4/3/2/1/0
AACACGTTCGGCGGTT.1,9,9/8/7/6/5/4/3/2/1/0
AACCGCGGTATATGAG.1,9,9/8/7/6/5/4/3/2/1/0
ACACCCTTCTGGTTCC.1,9,9/8/7/6/5/4/3/2/1/0
ACCTTTAAGGTGTTAA.1,9,9/8/7/6/5/4/3/2/1/0
ACGAGGACACGTTGGC.1,9,9/8/7/6/5/4/3/2/1/0
AGGGAGTCAGGCTCAC.1,9,9/8/7/6/5/4/3/2/1/0
AGGGATGAGCGATAGC.1,9,9/8/7/6/5/4/3/2/1/0
AGTGGGAAGATGTAAC.1,9,9/8/7/6/5/4/3/2/1/0
  • 看来是通过数字的形式记录 cluster 信息的,并且记录了从小到大的每一个分支,但是这个数字和图怎么对应呢?可以把数字标出来
too-many-cells make-tree \
    --prior ../out \
    --labels-file ../input/labels.csv \
    --smart-cutoff 1 \
    --min-size 1 \
    --draw-collection "PieChart" \
    --draw-node-number \ #只需多加这个参数
    --output ../out_pruned \
    > ../out_pruned/clusters_pruned.csv
  • 结果:
  • 那么接下来就可以取任意分支的所有细胞的 barcodes 并由此去除该细胞子集的表达信息了

8. 其他可视化选项

  • 由于我没有这些需求,所以这里仅仅是搬运 github 文档

8.1. 分支末端画成饼图

  • 代码
too-many-cells make-tree \
    --prior out \
    --labels-file labels.csv \
    --smart-cutoff 4 \
    --min-size 1 \
    --draw-collection "PieChart" \
    --output out_pruned \
    > clusters_pruned.csv
  • 可视化结果:

8.2. 调整树枝宽度

  • 代码
too-many-cells make-tree \
    --prior out \
    --labels-file labels.csv \
    --smart-cutoff 4 \
    --min-size 1 \
    --draw-collection "PieChart" \
    --draw-max-node-size 40 \
    --output out_pruned \
    > clusters_pruned.csv
  • 可视化结果:

8.3. 不按分支大小缩放

  • 代码
too-many-cells make-tree \
    --prior out \
    --labels-file labels.csv \
    --smart-cutoff 4 \
    --min-size 1 \
    --draw-collection "PieChart" \
    --draw-max-node-size 40 \
    --draw-no-scale-nodes \
    --output out_pruned \
    > clusters_pruned.csv
  • 可视化结果:

9. 体现特定基因表达量

  • 代码
too-many-cells make-tree \
    --prior ../out \
    --matrix-path ../input/expr_count.csv \
    --labels-file ../input/labels.csv \
    --smart-cutoff 1 \
    --min-size 1 \
    --feature-column 2 \
    --draw-leaf "DrawItem (DrawThresholdContinuous [(\"gene1\", 0), (\"gene2\", 0)])" \
    --draw-colors "[\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#eaeaea\"]" \
    --draw-scale-saturation 10 \ #如果不加这个参数,很可能表达量普遍较低以至于整张图没有颜色,至于这个值多少比较合适我还没有试过
    --output ../out_gene_expression \
    > ../out_gene_expression/clusters_pruned.csv
  • 可视化结果:

10. 任意分支之间的差异分析

  • 比如我想比较上图中两根蓝色(也就是 gene1 高表达,gene2 低表达)的分支,一看他们的 cluster 号码分别是 110 和 148(当然可以直接空缺一个数字,表示比较一个分支和其他所有细胞)
  • 代码
too-many-cells differential \
    --matrix-path ../input/expr_count.csv \
    -n "([110], [148])" \
    +RTS -N24
    > ../out/differential.csv

11. diversity

  • 比较两个细胞群的多样性(需要先跑过 make-tree 得到结果)
  • 代码
too-many-cells diversity\
    --priors ../out1 \
    --priors ../out2 \
    -o ../out_diversity_stats

12. 伪时序分析

  • 代码
too-many-cells paths\
    --prior ../out \
    --labels-file ../input/labels.csv \
    --bandwidth 3 \
    -o ../out_paths
  • 结果:
  • 个人认为还是用 slingshot 吧...

友情宣传

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,428评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,024评论 3 413
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,285评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,548评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,328评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,878评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,971评论 3 439
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,098评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,616评论 1 331
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,554评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,725评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,243评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,971评论 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,361评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,613评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,339评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,695评论 2 370

推荐阅读更多精彩内容