Newick格式 (skbio.io.format.newick

Newick格式 (newick )以最小文件格式存储带加权边和节点名的生成树 [1]. 这对于表示系统发育树和分类学非常有用。Newick是1986年6月26日作为非正式规范创建的 [2].

格式支持

有嗅探员:是的

读者

writer

对象类

是的

是的

skbio.tree.TreeNode

格式规范

Newick文件使用以下语法表示树。请参阅下面的简单英语格式说明。

形式语法

       NEWICK ==> NODE ;
         NODE ==> FORMATTING SUBTREE FORMATTING NODE_INFO FORMATTING
      SUBTREE ==> ( CHILDREN ) | null
    NODE_INFO ==> LABEL | LENGTH | LABEL FORMATTING LENGTH | null
   FORMATTING ==> [ COMMENT_CHARS ] | whitespace | null
     CHILDREN ==> NODE | CHILDREN , NODE
        LABEL ==> ' ALL_CHARS ' | SAFE_CHARS
       LENGTH ==> : FORMATTING NUMBER
COMMENT_CHARS ==> any
    ALL_CHARS ==> any
   SAFE_CHARS ==> any except: ,;:()[] and whitespace
       NUMBER ==> a decimal or integer

备注

这个 _ 安全字符内的字符将转换为 skbio.tree.TreeNode 反之亦然。

' 被认为是转义字符。逃跑 ' 使用前面的 ' .

scikit-bio中newick的实现允许嵌套注释。逃跑 [] 在COMMENT_CHARS中,使用前面的 ' .

解释

Newick格式通过创建节点及其相互关系的最小表示来定义树。

基本符号

有几个符号定义节点,其中第一个是分号 (; ). 分号在其左侧创建一个根节点。回想一下,一棵树只能有一个根。

下一个符号是逗号 (, ),在其右侧创建一个节点。然而,光靠这两个是不够的。例如,想象以下字符串: , , , ; . 很明显,有一个根,但其他3个节点(用逗号定义)没有关系。因此,在根级别有多个节点不是有效的Newick字符串。

为了提供这些关系,还有另一种结构:成对括号 (( ) ). 它们被插入到现有节点的位置,并使其能够拥有子节点。放置 ( ) 在一个节点的位置将在最左边的内边缘的圆括号内创建一个子节点。

规则的适用

在括号中添加逗号将创建两个子级: ( , ) (也称为分叉节点)。注意,只需要一个逗号,因为圆括号已经创建了一个子项。添加更多的逗号将产生更多的孩子谁是兄弟姐妹。例如,写作 ( , , , ) 将创建一个具有4个子节点的多采购节点,这些子节点彼此是兄弟节点。

根的符号可以用来创建一个完整的树。这个 ; 将创建一个可以放置圆括号的根节点: ( ); . 添加逗号将创建更多子项: ( , ); . 这些规则可以递归地应用。无限: (( , ), ( , )); .

信息添加节点

可以添加有关节点的信息来提高树的清晰度和意义。每个节点可以有一个标签和/或长度(到父节点)。Newick总是将节点信息放在节点位置的最右边。

从标签开始, (( , ), ( , )); 将成为 ((D, E)B, (F, G)C)A; . 有一个命名的根 A 根的子元素(从左到右)是 BC . B 有孩子吗 DEC 有孩子吗 FG .

长度表示将节点连接到其父节点的距离(或边的权重)。必须是十进制或整数。举个例子,假设 D is rather estranged from B, and E is very close. That can be written as: ((D:10, E:0.5)B, (F, G)C)A;. Notice that the colon (:) separates the label from the length. If the length is provided but the label is omitted, a colon must still precede the length (`` (:0.25,:0.5):0.0;```)。如果没有这个,长度将被解释为一个标签(正好是一个数字)。

备注

scikit-bio将在内部 float 从技术上说,即使是指数字符串 (1e-3 )支持)

高级标签和长度规则

可以使用更多字符来创建更具描述性的标签。创建标签时,由于Newick格式的限制,必须考虑一些规则。标准标签中不允许使用以下字符:括号、逗号、方括号、冒号、分号和空白。这些字符也不允许出现在一个长度内,长度有一个更严格的格式:十进制或整数。这些字符中的许多都是定义Newick树结构的符号,因此由于明显的原因而被禁止使用。尚未提及的符号是方括号 ([ ] )和空白(空格、制表符和换行符)。

如果标签中需要这些字符呢?在简单的空格情况下,下划线 (_ )读时将转换为空格,写入时转换为空格。

如果需要一个文字下划线或任何其他提到的?标签可以用单引号转义(这意味着它的内容被理解为常规文本) (' ). 当标签用单引号括起来时,允许使用任何字符。如果转义标签或其他任何地方需要一个单引号,则可以使用另一个单引号对其进行转义。例如, A_1 是书面的 'A_1''A'_1 将是 '''A''_1' .

行内注释

方括号定义注释,这是Newick格式中最不常用的部分。注释不包含在生成的对象中,只作为人类可读的文本存在,被解析器忽略。scikit bio中的实现允许嵌套注释 ([comment [nested]] ). 在现有注释中,未成对方括号可以在括号前用单引号转义。(这与转义单引号相同)。单引号具有最高的运算符优先级,因此无需担心从正确转义的标签中开始注释。

空白

在任何未转义的标签内或任何长度内都不允许空白,但在其他任何地方都是允许的。

告诫

Newick不能总是提供任何树的唯一表示,换句话说,同一棵树可以用多种方式编写。例如: (A, B); 同构于 (B, A); . scikit-bio中的实现在其对象表示中保持给定的兄弟顺序。

Newick没有无根树的表示。一些生物软件包假设,当一棵分叉的树中存在三叉根时,树必须是无根的。在scikit-bio里, skbio.tree.TreeNode 将永远扎根于 newick 根 (;

格式参数

唯一支持的格式参数是 convert_underscores . 这是 True 默认情况下。什么时候? False ,在未转义标签中找到的下划线将不会转换为空格。这在读取下划线未转义的外部程序的输出时非常有用。此参数仅影响 read 操作。它不存在于 write 操作;它们总是正确地转义下划线。

示例

这是一个简单的Newick字符串。

>>> from io import StringIO
>>> from skbio import read
>>> from skbio.tree import TreeNode
>>> f = StringIO("((D, E)B, (F, G)C)A;")
>>> tree = read(f, format="newick", into=TreeNode)
>>> f.close()
>>> print(tree.ascii_art())
                    /-D
          /B-------|
         |          \-E
-A-------|
         |          /-F
          \C-------|
                    \-G

这是一个复杂的Newick字符串。

>>> f = StringIO("[example](a:0.1, 'b_b''':0.2, (c:0.3, d_d:0.4)e:0.5)f:0.0;")
>>> tree = read(f, format="newick", into=TreeNode)
>>> f.close()
>>> print(tree.ascii_art())
          /-a
         |
-f-------|--b_b'
         |
         |          /-c
          \e-------|
                    \-d d

请注意,该节点最初标记为 d_d 成为 d d . 另外 'b_b''' 成为 b_b' . 请注意,下划线保留在 b_b' .

引用