所有的经验都是我在开发CancerMIRNome数据库 (http://bioinfo.jialab-ucr.org/CancerMIRNome) 的过程中积累的。
CancerMIRNome是一个癌症miRNA表达谱数据库,目前共收录了 > 10,000个TCGA肿瘤组织miRNA表达谱数据以及~30,000个循环miRNA (circulating miRNA) 表达谱数据,并提供了非常全面系统的miRNA数据分析及可视化功能。
CancerMIRNome已正式在Nucleic Acids Research数据库专刊 (影响因子 16.97) 发表 (https://doi.org/10.1093/nar/gkab784)。该项目和论文得到我的博士导师加州大学河滨分校的贾老师,广州市第一人民医院的钟老师,以及贵州省人民医院的朱老师的大力支持和帮助。我的母校华中农业大学信息学院的谢老师也提供了非常好的建议和指导。也要感谢师兄弟姐妹和生信技能树的朋友提供的帮助。
除了CancerMIRNome之外,我们还开发了另外两个基于Shiny的数据库/网页工具,一个是前列腺癌转录组数据库PCaDB (http://bioinfo.jialab-ucr.org/PCaDB/),另一个是方便用户下载GEO表型数据的网页工具WebGEO (http://bioinfo.jialab-ucr.org/WebGEO/),WebGEO还在测试阶段,名字也还没最终确定,但是基本的功能都已经上线了。
希望借此机会系统介绍一下刚刚发表的CancerMIRNome数据库以及更多地分享一些Shiny app开发的经验。
1. 关于CancerMIRNome数据库
开发CancerMIRNome数据库的动机
虽然我是生物信息专业背景,但是我的兴趣在转化医学,也就是测序技术/生物信息/数据科学等在疾病尤其是癌症领域的应用, 而不是生物信息技术本身。所以开发工具不是目的,而是希望工具能服务于医学研究。在医学领域,癌症早筛/液体活检是我最感兴趣的研究方向,所以我在读博期间就做了很多癌症多组学数据收集的工作,miRNA只是其中的一小部分。而之所以先从miRNA入手,主要有两个原因,一是因为我在博士前三年做了大量的small RNA的研究,尤其对 miRNA, piRNA, 以及其他听过没听过的内源small RNA都有过深入了解,同时也在秀丽隐杆线虫(C. elegans)里做了一些实验项目;另一个原因是miRNA数据量相对较小,人类只有2,000多个成熟miRNAs,跟甲基化的450K芯片比起来要少太多了。对存储和计算的要求也就小很多。当然对于癌症早筛来说,甲基化是目前被认为最有希望的,所以虽然多组学的数据一直在收集,研究重点最终还是会放到甲基化上。我最初先开发了一个pipeline从GEO收集了接近100套来自于血清,血浆,外泌体等循环miRNA的数据集,目的是用这些数据鉴定用于癌症早期筛查的标记物或者构建诊断模型。当然也把TCGA来自肿瘤组织的miRNA数据下载和整理了一下。在做分析的同时发现这方面没有非常系统的数据库,已有的数据库/网页工具提供的分析和可视化功能也比较有限,于是就有了自己开发一个数据库的想法。方便用户查询和分析来自肿瘤的miRNA数据,也提供一个方便用户下载我们已经整理好的数据的平台。
CancerMIRNome数据库的功能
CancerMIRNome数据库整合了我们收集的来自TCGA 33个癌种肿瘤组织和癌旁的miRNA数据以及来自GEO的40套循环miRNA数据。来自GEO的数据只包含了多于1,000个miRNAs的数据集,所有miRNAs的ID都map到了最新的miRBase Release 22.1 。
(1) miRNA查询;
(2) TCGA miRNA数据分析;
(3) 循环miRNA数据分析。
miRNA组学(miRNome) 分析方法在TCGA以及循环miRNA数据集中非常类似。最大的不同是TCGA数据中可以做生存分析和预后模型。当选定一套miRNome数据集时,会自动产生一些summary信息,包括样本分布,年龄分布,生存曲线等等。CancerMIRNome可以鉴定高表达的miRNA(很多成熟miRNA的表达量是很低的);不同组之间比如肿瘤和癌旁,早期和晚期等表达有差异的miRNA;基于AUC值得诊断标记;基于机器学习Lasso算法得诊断标记;PCA降维分析;单变量KM、CoxPH分析,以及基于多变量CxoPH,Cox-Ridge和Cox-Lasso的预后模型构建。Pre-built预后模型是对单变量CoxPH中显著的miRNA再做多变量CoxPH筛选和模型构建。用户也可以自己提供miRNA列表,选择一个机器学习方法来自己构建预后模型。另外,CancerMIRNome数据库中收集的所有数据 (miRNA表达数据和样本表型数据) 都以ExpressionSet的形式存储在.RDS文件中,用户可以非常方便的下载这些数据并在R中读取用于更个性化的分析。
2. 关于Shiny app开发
是否要选择使用Shiny开发数据库/网页工具
我自己只会用Shiny,看到其他人用更“高端”的工具开发数据库也会着实羡慕一下。尤其是UI,简直太好看了。但是让我去学习其他的我可能也不舍得再花这个时间。个人理解Shiny的确有一些缺陷,比如网页设计不够灵活、有些功能无法实现、时间长了会掉线等等,我也注意到目前有很多新的R包被开发出来用于解决这些问题。整体来看应该会越来越好。抛开这些不足,Shiny可能是最容易上手的工具且跟R语言无缝连接 (只是说“可能”,因为其他工具我也不了解😂),再多花些时间学习一下也能做出很专业漂亮的页面。我个人的经验是,如果在公司,Shiny可能是必备技能。简单易学也好维护,不会因为某个开发者离开了公司而找不到接手的人。我和同事几乎每个人每年都要开发多个Shiny apps,当然这些对UI的要求不会特别高,以实用性为导向。如果是在学术界又有时间和兴趣学习其他开发工具的话,我觉得是极好的,做出来的网页可能都会高端大气上档次。最后稍微说一点,数据库/网页工具的文章是否发表跟用了哪种语言开发的关系不太大,网站不难看的前提下内容是最重要的。
Shiny app开发有哪些技巧
初学者认识的Shiny app一般都是长这样的:
其实Shiny app也可以是这样的:
或者这样的:
除了基础的语法外,想实现这些功能的秘籍就是:(1) “调包”、(2) 学习别人开发的优秀的工具、以及 (3) 学习一些简单的的html/css语法。很多生信技能树的朋友开发的工具都非常棒,比如:
BnaSNPDB: https://bnapus-zju.com/bnasnpdb/
UCSCXenaShiny: https://shiny.hiplot.com.cn/ucsc-xena-shiny/
LUADEXPRESS: http://www.bioinfo-zs.com/luadexpress/
GREIN: http://www.ilincs.org/apps/grein/
我自己的code也都可以在Github找到:https://github.com/rli012
另外有很多针对advanced Shiny app开发的R包可以直接拿来学习和使用。Github用户daattali总结了一些非常实用的技巧 (https://github.com/daattali/advanced-shiny)。我自己在Shiny app的UI设计上也做了很多研究。分享一下我经常用到的可以让网页看起来更专业的R包:
shinythemes
dashboardthemes
shinydashboard
shinydashboardPlus
shinyjs
shinyWidgets
shinycssloaders
shinyalert
shinydisconnect
shinybusy
DT
waiter
slickR
plotly
heatmaply
htmlwidgets
最后就是多搜索,多学习,多交流了。
作者简介
李瑞东,加州大学河滨分校 (UC Riverside) 遗传学、基因组学及生物信息学博士,现任美国吉利德科学公司 (Gilead Sciences, Inc.) 生物信息科学家,主要负责基因组测序平台,服务器/云计算平台,以及创新技术的应用。目前共发表SCI论文26篇,其中 (共同) 第一/通讯作者论文10篇,包括Nucleic Acids Research (IF: 16.97),Molecular Biology and Evolution (IF: 16.24),Briefings in Bioinformatics (IF: 11.62),Plant Biotechnology Journal (IF: 9.80),Bioinformatics (IF: 6.94) 等。
正是考虑到网页工具的大量现实需求,我们《生信技能树》安排了《跟我一起玩转shiny》的系列课程,在b站可以免费学习哦,目录如下:
-
观看地址是:https://www.bilibili.com/video/BV1fq4y1s7Wx