anvi'o如何添加数据表

写在前面:本文内容翻译自anvi'o的官方社区,若有疑惑的地方请各位优先前往官网进行查阅原文!!!
原作者: A.Murat Eren (Meren)
译:秋柔焉姬

常用anvio的小伙伴应该非常熟悉,anvi'o 交互界面非常灵活,允许我们将许多不同类型的数据添加到单个泛基因组的结果中显示。

通常要在 --manual 模式下使用交互界面(通过以临时方式自行提供每一位数据),否则界面中显示的大部分数据来自存储在 anvi'o contigs、profile 先前的计算信息里,或样本数据库(例如重叠群的 GC 含量,或样本的覆盖率值,或映射到给定样本的读取数等)。

但是,根据项目的不同,我们经常想在这些显示中添加额外的东西。 anvi-interactive 程序允许其用户相当快速地使用制表符分隔的数据文件来进行数据展示。但是尽管如此,作者认为这样仍然是不够灵活的,因而推出本教程。

通过使用 --additional-layers 参数通过制表符分隔的文件添加新信息来在任何方向扩展任何 anvi'o 显示非常高效,但这种做法对用户的配置文件有要求较为繁琐。另外,缺乏用户和程序员友好的方式来向 anvi'o 平移和配置文件数据库添加或删除此类附加信息,这样一来使得我们难以方便添加数据。

这就是为什么在保持临时工作流程的同时,我们在 anvio(v4) 中扩展了 anvi’o,采用全新的设计来处理添加的数据。

目的与相关术语

如果您不熟悉显示项目的 anvi'o 术语(即,如果您不知道什么是图层、视图或项目),请先阅读本文以熟悉标准 anvi'o 交互显示的各个部分:


图列说明

这篇文章的目的是向您展示如何使用项目、图层和图层顺序的附加数据来注释显示。对于所有这些任务,我们将使用相同的三个程序,anvi-import-misc-data、anvi-export-misc-data 和 anvi-delete-misc-data 以及不同的目标表(例如用于装饰项目的项目、层)使④出现,或者layer_orders使③的数据可用于我们的平底锅或剖面数据库。

在这篇文章中,我将使用一个简单的数据集进行演示。如果您想在 anvi’o v4 或更高版本安装的计算机上顺利运行它,请按照后续命令进行

wget http://merenlab.org/files/anvio_additional_data_tables_example.tar.gz
tar -zxvf anvio_additional_data_tables_example.tar.gz
cd anvio_additional_data_tables_example/

用户如何处理数据表

本节将逐步显示哪个表适合界面中的内容。尽管这些示例将使用空白的 anvi’o 配置文件数据库,但对于常规配置文件数据库和泛数据库,一切都将以相同的方式工作

在项目中添加附加数据表

如果您想显示每个重叠群、基因簇或中心的任何其他项目的内容,则可以使用此表。 items 的目标表名称是 items。

让我们首先在手动模式下可视化 view_data.txt 的内容(给定 tree.txt 文件),如下所示:

anvi-interactive -d view_data.txt \
                 -t tree.txt \
                 -p profile.db \
                 --title "Test" \
                 --manual

点击“绘制”会给我们这样的结果:
效果图

假设这里显示的每个项目都有以下信息,如下所示:
信息表

如果您查看 view_data.txt,您会发现两个文件的第一列是相同的。可以通过以下方式将显示的项目附加数据导入到配置文件数据库中:

anvi-import-misc-data items_additional_data.txt \
                              -p profile.db \
                              --target-data-table items
New data for 'items' in data group 'default'
===============================================
Data key "categorical_1" .....................: Predicted type: str
Data key "categorical_2" .....................: Predicted type: str
Data key "text_layer_01" .....................: Predicted type: str
Data key "numerical" .........................: Predicted type: float
Data key "bars_main!A" .......................: Predicted type: stackedbar
Data key "bars_main!B" .......................: Predicted type: stackedbar
Data key "bars_main!C" .......................: Predicted type: stackedbar

NEW DATA
===============================================
Database .....................................: profile
Data group ...................................: default
Data table ...................................: items
New data keys ................................: categorical_1, categorical_2, text_layer_01, numerical, bars_main!A, bars_main!B, bars_main!C.

现在再次运行交互界面会给我们带来额外的东西

anvi-interactive -d view_data.txt \
                 -t tree.txt \
                 -p profile.db \
                 --title "Test" \
                 --manual
添加信息后的效果图

附加数据文件中的所有列以相同的顺序出现在界面中。另外,如果您单击打开“设置”面板,您可以看到主面板中的排序选项中,已根据此新的附加数据自动填充了新的排列顺序:
更新后的操作面板

我们通过单击“保存状态”来保存默认状态,这样下一次我们就不必单击“绘制”。
我们可以从给定表中导出数据:

anvi-export-misc-data -p profile.db \
                        --target-data-table items \
                        -o exported_additional_file.txt
                                   
Output file for items ........................: exported_additional_file.txt

或者,您可以删除整个给定表的内容,或通过指定一个或多个数据键仅删除特定数据项。 Anvi’o 可以使用 --list-available-keys 标志告诉您给定表中的可用键:

anvi-delete-misc-data -p profile.db \
                         --target-data-table items \
                         --list-available-keys

AVAILABLE DATA KEYS FOR ITEMS (5 FOUND)
===============================================
* bars_main!A;B;C (stackedbar, describes 300 items)
* categorical_1 (str, describes 300 items)
* categorical_2 (str, describes 300 items)
* numerical (float, describes 300 items)
* text_layer_01 (str, describes 300 items)

假设我们要删除其中之一:

anvi-delete-misc-data -p profile.db \
                         --target-data-table items \
                         --keys-to-remove categorical_1,categorical_2
WARNING
===============================================
items data for the following keys removed from the database: 'categorical_1,
categorical_2'.

现在它没了:

anvi-delete-misc-data -p profile.db \
                         --target-data-table items \
                         --list-available-keys
AVAILABLE DATA KEYS FOR ITEMS (3 FOUND)
===============================================
* bars_main!A;B;C (stackedbar, describes 300 items)
* numerical (float, describes 300 items)
* text_layer_01 (str, describes 300 items)

如果不指定数据键,则表的全部内容将消失:

anvi-delete-misc-data -p profile.db \
                        --target-data-table items
WARNING
===============================================
All data from the items additional data table is removed.

然后你就什么也看不到了:

anvi-delete-misc-data -p profile.db \
                         --target-data-table items \
                         --list-available-keys
* There are no item additional data for items in this database.

要继续使用项目附加数据表中的一些数据,让我们重新填充它并继续添加图层:

anvi-import-misc-data items_additional_data.txt \
                        -p profile.db \
                        --target-data-table items

图层附加数据表

如果您想显示每个图层的内容,则可以使用此表。这些层可以是您的宏基因组、宏转录组样本、您的基因组或上图中标识为②的任何其他层。层的目标表名称是layers。

对图层附加数据表的访问在概念上与我们处理项目附加数据的方式相同,并且需要对命令行进行一些小更改。例如,采用以下文件:
示例数据

现在,该文件的第一列与我们的图层名称相同,每列都描述给定图层的属性。

我们可以通过这种方式将其添加到配置文件数据库中:

anvi-import-misc-data layers_additional_data.txt \
                         -p profile.db \
                         --target-data-table layers
NEW DATA
===============================================
Database .....................................: profile
Data group ...................................: default
Data table ...................................: layers
New data keys ................................: numerical_01, numerical_02, categorical, stacked_bar!X, stacked_bar!Y, stacked_bar!Z.

之后,当您重新运行交互界面时,每层的更多信息应该显示在右侧:

anvi-interactive -d view_data.txt \
                 -t tree.txt \
                 -p profile.db \
                 --title "Test" \
                 --manual

如果再次运行交互式界面,您应该会在显示中看到新的内容:
示例图

输入文件中的图层附加数据按照它们在文件中出现的顺序显示。事实上,如果您单击打开设置面板,然后切换到“样本”选项卡,您可以看到样本订单的组合框已填充了一些自动订单,以根据这些数据组织图层:
依照样本排序

图层顺序附加数据表

如果您想存储图层的特定顺序(例如系统发育树)或基本形式的顺序,则需要使用此表。您可以执行此表的操作对应于本文开头所示示例图中标识为③的部分。图层的目标表名称是layer_orders。

图层顺序数据的文件格式如下:
示例排列顺序

每个图层顺序可以是基本形式或新形式,当然,您可以根据需要在图层顺序文件中包含任意数量的图层顺序。当您按以下方式导入图层订单文件时:
anvi-import-misc-data layers_order.txt \
                         -p profile.db \
                         --target-data-table layer_orders

New layer_orders data...
===============================================
Data key "test_tree" .........................: Type: newick
Data key "test_list" .........................: Type: basic

New order data added to the db for layer_orders : test_tree, test_list.

重新可视化一下

anvi-interactive -d view_data.txt \
                 -t tree.txt \
                 -p profile.db \
                 --title "Test" \
                 --manual

现在,如果您再次单击打开设置面板,并切换到样本选项卡,您可以在样本排序的组合框中看到新的顺序:
新的排序方式

选择进化树的排序方式,并且进行重新绘制
依照进化树的排序方式

现在您知道如何扩展 anvi'o 交互式界面显示了!

作为程序员处理项目附加数据表

如果您正在编写 Python 程序,则可以通过以下方式简单地处理其他数据项:

import argparse
import anvio.dbops as dbops

args = argparse.Namespace(pan_or_profile_db="/path/to/profile.db", target_data_table="items")

# MiscDataTableFactory will give you the right object based on your `target_data_table`
# argument --alternatively you can directly access to the relevant class. The factory
# pattern makes it easier to seamlessly select the right inheritance route.
items_additional_data_table = dbops.MiscDataTableFactory(args)

# add data:
item_additional_data_table.add(new_keys_list, new_data_dict)

# read data:
items_additional_data_keys, items_additional_data_dict = item_additional_data_table.get()

# remove data:
item_additional_data_table.remove(keys_list)

例如,此代码应该在上面的目录中完美运行:

import argparse

import anvio.dbops as dbops
import anvio.utils as utils

args = argparse.Namespace(profile_db="profile.db", target_data_table="items")

# get some data:
keys = utils.get_columns_of_TAB_delim_file('items_additional_data.txt')
data = utils.get_TAB_delimited_file_as_dictionary('items_additional_data.txt')

# add it to the database (because this is a blank profile, we use `skip_check_names`
# flag. This flag is not necessary when working with regular profile
# and pan databases.
dbops.MiscDataTableFactory(args).add(data, keys, skip_check_names=True)

# get data from the database:
keys, data = dbops.MiscDataTableFactory(args).get()

# remove data:
dbops.MiscDataTableFactory(args).remove(keys)

就是这样!只需更改项目、图层或图层顺序之间的 target_data_table 变量,您就可以使用不同的表。也就是说,以下内容将给出与上面相同的结果,但表选择将显式完成,而不是通过 target_data_table 参数:

import argparse

import anvio.dbops as dbops
import anvio.utils as utils

args = argparse.Namespace(profile_db="profile.db")

# get some data:
keys = utils.get_columns_of_TAB_delim_file('items_additional_data.txt')
data = utils.get_TAB_delimited_file_as_dictionary('items_additional_data.txt')

# add data
dbops.TableForItemAdditionalData(args).add(data, keys, skip_check_names=True)

# get data from the database:
keys, data = dbops.TableForItemAdditionalData(args).get()

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

推荐阅读更多精彩内容