SuperAPI AI 工具集

etetoolkit

数据与分析

查看项目

更新于 10-15 11:11

技能介绍

ETE(Environment for Tree Exploration)是一个用于系统发育与层次树分析的工具包,其 Python 库为 ete3。它面向系统发育基因组学与聚类分析,提供树的加载、操作、分析、可视化以及与生物数据库集成的能力。

一、用途 ETE 主要用于系统发育树和层次树的处理与分析,包括树格式转换、拓扑修改、进化事件检测、直系同源/旁系同源判定、NCBI 分类信息整合、聚类结果评估以及出版级可视化。

二、主要能力

  1. 树操作与分析:支持 Newick、NHX、PhyloXML、NeXML 格式读写;可按前序、后序或层序遍历树;支持剪枝、定根、折叠节点、解析多分支;可计算分支长度与节点间拓扑距离;可计算 Robinson-Foulds 距离并识别拓扑差异。
  2. 系统发育分析:PhyloTree 类可结合 FASTA、Phylip 序列比对;支持自动或自定义物种名提取;通过 Species Overlap 或树调和检测复制与物种形成事件;识别直系同源与旁系同源;按复制事件拆分树、折叠谱系特异性扩张。
  3. NCBI 分类整合:NCBITaxa 可自动下载并本地缓存 NCBI 分类数据库(约 300MB);支持 taxid 与学名互译、获取完整谱系、构建指定类群间的物种树、自动注释树节点。
  4. 树可视化:支持 PNG、PDF、SVG 输出;提供矩形与环形布局;支持交互式 GUI(缩放、平移、搜索);可通过 NodeStyle 自定义节点外观,通过 Faces 添加文本、图像、图表、热图等图形元素,并支持基于节点属性的动态布局函数。
  5. 聚类分析:ClusterTree 类用于聚类树状图;可将树叶与数值矩阵关联;计算轮廓系数、Dunn 指数、簇间/簇内距离;支持不同距离度量的聚类质量验证;可结合热图展示数据矩阵。
  6. 树比较:提供 Robinson-Foulds 距离与归一化 RF;支持分区分析、共识树分析以及多树两两批量比较。

三、使用方式 安装:uv pip install ete3;如需 GUI 与渲染,可安装 ete3[gui],并在 macOS 上 brew install qt@5,在 Ubuntu/Debian 上 sudo apt-get install python3-pyqt5 python3-pyqt5.qtsvg。 首次使用 NCBITaxa 时会自动下载分类数据库至 ~/.etetoolkit/taxa.sqlite,可通过 ncbi.update_taxonomy_database() 更新。 基本用法示例: from ete3 import Tree tree = Tree("tree.nw", format=1) tree.prune(["species1", "species2"], preserve_branch_length=True) midpoint = tree.get_midpoint_outgroup() tree.set_outgroup(midpoint) tree.write(outfile="rooted_tree.nw")

基因树分析示例: from ete3 import PhyloTree tree = PhyloTree("gene_tree.nw", alignment="alignment.fasta") tree.set_species_naming_function(lambda x: x.split("_")[0]) events = tree.get_descendant_evol_events() ortho_groups = tree.get_speciation_trees()

分类树构建示例: from ete3 import NCBITaxa ncbi = NCBITaxa() name2taxid = ncbi.get_name_translator(["Homo sapiens", "Pan troglodytes"]) taxids = [name2taxid[sp][0] for sp in name2taxid] tree = ncbi.get_topology(taxids)

可视化示例: from ete3 import Tree, TreeStyle, NodeStyle tree = Tree("tree.nw") ts = TreeStyle() ts.show_leaf_name = True ts.show_branch_support = True ts.scale = 50 tree.render("tree.pdf", tree_style=ts)

聚类分析示例: from ete3 import ClusterTree matrix = """#Names\tSample1\tSample2\tSample3 Gene1\t1.5\t2.3\t0.8 Gene2\t0.9\t1.1\t1.8 Gene3\t2.1\t2.5\t0.5""" tree = ClusterTree("((Gene1,Gene2),Gene3);", text_array=matrix) for node in tree.traverse(): if not node.is_leaf(): print(node.get_silhouette(), node.get_dunn()) tree.show("heatmap")

树比较示例: from ete3 import Tree tree1 = Tree("tree1.nw") tree2 = Tree("tree2.nw") rf, max_rf, common_leaves, parts_t1, parts_t2 = tree1.robinson_foulds(tree2)

四、适用场景

  • 系统发育基因组学流程:从基因树到直系同源组识别。
  • 树预处理与格式转换:批量转换格式、中点定根、按类群剪枝、统计。
  • 出版级图表:自定义样式、支持值标注、矢量输出。
  • 自动化树分析:批量处理目录中的树文件,标准化定根、解析多分支、过滤低支持分支。
  • 聚类结果验证:结合数据矩阵评估聚类质量并可视化热图。

五、限制

  • 首次使用 NCBITaxa 需下载约 300MB 数据库,需网络连接。
  • 渲染与 GUI 依赖 Qt 相关系统库,缺失时可能报错。
  • 处理超过 10,000 个叶节点的大树时,建议使用迭代器(如 tree.iter_leaves())而非一次性加载全部叶节点,以降低内存占用。
  • 资料未提供收费、价格、平台或效果方面的信息。