没有项目描述

redbiom的Python项目详细描述


redbiom

构建状态

这是什么?

redbiom是一个用于示例元数据和示例数据的缓存服务。它允许快速:

  • 根据样本包含的功能查找样本
  • 通过任意元数据搜索查找样本
  • 通过元数据汇总示例
  • 将样本数据检索到biom中
  • 发现元数据类别
  • 从不同处理类型中提取样本数据(例如,搜索16s以上,检索wgs)

redbiom旨在处理生物和技术复制。具体来说,它允许样本元数据与其数据之间的一对多关系,无论是在准备类型内还是在准备类型之间。

这个存储库定义了事实上的redbiom数据表示,以及一个可能的资源接口。可以定义其他接口(如javascript)。有关如何编写其他接口的详细信息,请参见下面的设计部分。

默认情况下,redbiom将搜索qiita.ucsd.edu:7329。这可以在运行时通过设置redbiom_host环境变量来更改,例如,export redbiom_host=http://qiita.ucsd.edu:7329。默认主机是只读的,加载数据等管理功能不会对其起作用。

如果要加载自己的数据,则必须设置本地实例(请参阅下面的服务器安装说明)。此外,必须显式设置redbiom_host环境变量。

非常简短的示例

一些可以做的事情的快速例子。更复杂和详细的示例可以在文档后面找到。

获取所有发现"啤酒"一词的样本:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24

获取这些样本的闭合参考otu picking 16s v4数据(下面较长的示例中有更多关于ctxcontext的内容):

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt

查找与金黄色葡萄球菌相关的特征ID(本例中为greengenes otu ID)(例如,任意10个):

$ redbiom search taxon --context $ctx s__aureus | head
943389
1023241
862312
1102743
870118
969777
1086805
976010
951488
951136

…然后找到含有10种金黄色葡萄球菌特征的样本:

$ redbiom search taxon --context $ctx s__aureus | head | redbiom search features --context $ctx | wc -l
   40164

安装

一般要求

redbiom依赖于biom(在>;=2.1.5上测试)、熊猫(在0.19.0上测试)、单击(必需的>;=6.7)、nltk(在3.2.2中测试)、joblib(在0.9.3中测试)和scipy(无论biom喜欢什么)。

客户机

如果您只想将redbiom用作客户机(这是一般情况),则以下说明适用。注意,我们需要单独安装numpy,作为依赖项之一,biom格式,在安装过程中导入numpy。

$ pip install numpy
$ pip install redbiom

服务器

如果您希望运行自己的资源,并在本地或私有数据中加载数据,则适用以下说明。

除了一般要求外,redbiom服务器还需要redis(使用2.8.17和3.2.6测试)和webd is(只克隆repo)。无需超级用户访问即可建立redbiom服务器。

对于Redis来说,以下内容适用于OSX和多种版本的Linux,没有问题。

$ wget http://download.redis.io/releases/redis-3.2.6.tar.gz
$ tar xzf redis-3.2.6.tar.gz
$ pushd redis-3.2.6
$ make
$ ./src/redis-server --daemonize
$ popd

webdis打包其依赖项,libevent除外。很可能libevent已经在您的系统上可用。如果是的话,下面的方法应该有效。如果libevent不可用,编译将很快终止。然而,libevent存在于所有的公共存储库中(例如,yum、apt、brew等),按源代码编译是直接的。

$ git clone https://github.com/nicolasff/webdis.git
$ pushd webdis
$ make
$ ./webdis &
$ popd

最后,redbiom本身可以作为一个普通的python包安装。

$ pip install numpy
$ pip install redbiom

测试

测试框架默认设置为仅对localhost执行测试,特别是对127.0.0.1:7379。但是,默认情况下,存储库设置为与远程webdis服务器通信。如果要执行测试套件,请export redbiom_host=http://127.0.0.1:7379

术语和符号

在redbiom中,"context"一词是指处理样本数据的方式。数据被加载到上下文中,并在上下文中按功能搜索样本。

为了支持样本元数据与其数据之间的一对多关系,在上下文中,样本的id以"tag"作为前缀,可以在加载时指定。在内部,在上下文中,这些id的格式为<;tag>;\lt;sample id>;。使用\u字符可以确保它们不是有效的qiime示例id,并且是必要的,因此我们可以适当地区分这些id。写入数据的方法将这些无效的qiime id强制转换为<;sample id>;<;tag>;格式的有效id。重要信息:如果您运行自己的资源,则在加载示例数据时指定--tag非常重要,以区分biom表,其中表之间的示例id可能不是互斥的。

如果存在歧义,则写入数据的命令将通知用户。模棱两可意味着在输出中有一个映射到多个redbiom id的样本id。由于上述原因,写入的ID是唯一的,

命令结构

redbiom依靠单击来提供分层的命令行界面。下面是第一层的一个示例,除了admin,它由动词组成:

$ redbiom --help
Usage: redbiom [OPTIONS] COMMAND [ARGS]...

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  admin      Update database, etc.
  fetch      Sample data and metadata retrieval.
  search     Feature and sample search support.
  select     Select items based on metadata
  summarize  Summarize things.

要执行的实际命令包含在子模块中。例如,下面是与"搜索"相关的命令:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
0

目的是让命令在英语中有意义。一般命令格式为"redbiom<;verb>;<;noun>;",但此格式并非严格执行。

一般来说,这些命令可以通过unix管道进行组合。例如:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
1

示例

按元数据搜索示例

默认情况下,redbiom设置为查询qiita。首先,让我们按元数据搜索一些示例。具体来说,我们要做的是确定qiita中存在哪些示例,其中任何示例元数据都包含单词beer的词干。这将返回相当多的示例,因此为了示例起见,我们只使用head

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
2

现在我们有了一些样本,让我们拿出他们的样本数据。qiita包含大量的数据,这些数据按照样本制备和处理参数进行逻辑划分——这些划分在redbiom中表示为上下文。为了提取数据,我们需要指定要在其中操作的上下文。有很多上下文,所以我们只过滤那些使用grep的16s和v4上下文。我们还将剪切前三列数据,因为第四列是对处理参数的大量描述。最后,让我们sort按上下文中表示的样本数计算的结果。不幸的是,grep删除了列标题,因此我们将运行第二个summary命令并获取标题:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
3

为了减少以后的输入,让我们选择一个上下文并将其存储为环境变量:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
4

…现在我们可以获取一些数据:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
5

我们可能还希望获得示例元数据:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
6

您可能会注意到,元数据搜索找到的样本总数与样本数据提取找到的样本数不同。样品信息不同于样品制备和数据处理:仅仅因为有样品信息并不意味着给定的样品具有(例如)16s v4序列数据与其相关。

元数据的查询结构是相当允许的,实际上可以执行两种类型的查询。其结构如下:<;set operations>;where<;value restrictions>;<;set operations>;通过查找包含给定单词(可以组合在一起)的所有示例来工作。对于set查询,&;执行示例id的交集,并集和-差异:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
7

重要信息:仅仅因为样本可能有一个词与之关联,并不意味着该词的使用如您所料。在下面的示例中,我们将根据其所描述的sample_type值来计算样本数。我们正在努力改进搜索功能,用户仔细检查他们的结果非常重要:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
8

按功能搜索

我们也可以使用redbiom搜索包含感兴趣特征的样本。让我们从上面的元数据搜索中去掉示例表。我们要做的是在qiita中找到所有包含少数特征id的样本。在这个特定的例子中,我们只需获取10个任意的id:

$ redbiom search metadata beer | head
10105.Ingredient.18
1976.Beer.286
1689.261
10105.Ingredient.19
1976.Beer.262
10105.Ingredient.23
1976.Beer.228
10105.Ingredient.17
10395.000041066
10105.Ingredient.24
9

…然后让我们将它们导入redbiom,以便在我们的上下文中搜索包含这些相同功能的其他示例:

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
0

按分类单元搜索

您可能需要做的一件事是根据分类查找功能。我们可以通过搜索分类单元来完成此操作:

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
1

我们得到的是那个分类单元的特征ID。然后我们可以获取这些特征ID并将其反馈到redbiom。例如,假设我们想找到所有包含Roseburia特性的样本:

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
2

重要并非所有上下文都必须有分类法,分类法可能对上下文没有意义(例如,如果它包含kegg直系群特征)。

检索预先选定的样本

除了允许您根据特定的元数据或功能进行搜索外,您还可以根据样本ID检索样本列表。例如,我们可能希望获得所有与之关联的带有CIDER的样本列表,然后在数据库更新后可能只访问这些样本。

要做到这一点,我们可以下拉前五个与苹果酒相关的样品的列表。

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
3

然后,我们可以使用这个样本列表来检索biom表。文本文件只需是数据库中示例ID的列表,每行一个。

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
4

摘要

我们发现了很多含有玫瑰囊的样品。这并不奇怪,因为奇塔含有大量粪便样本。有多少?在下一个示例中,我们将获取与roseburia相关的所有特征id,然后查找包含该分类单元的所有样本,然后按其sample_type类别值对每个样本进行分类,最后只获取前10个条目。您可以看到元数据有点嘈杂。

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
5

尽管如此,我们还是可以克服噪音。让我们采集我们发现的含有玫瑰囊的样本,只有选出那些明显是粪便的。我们将"选择"样本,其中sample_type是"stool"或"stool",而不是像上一个示例中那样进行总结。(由于此命令越来越长,我们将用\)将其分解:

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
6

最后,我们可以获取这些样本的数据。获取24667个样本的数据可能需要几分钟的时间,因此在本例中,让我们只获取与皮肤相关的数据。请注意输出上的"模糊性",一秒钟内详细说明:

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
7

如果同一个样本被多次处理,可能会产生歧义,就像技术复制一样。它是同一个物理样本,但可能已被多次处理。。含糊不清的文件是json格式的,包含id映射到同一示例的映射。

加载一些数据(例如,如果您正在运行自己的服务器)

为了利用这个缓存,我们需要加载一些东西。可以并行加载。首先,我们将加载元数据。这将在redis中创建描述与示例相关联的所有列的键(例如,元数据:类别:<;sample_id>;,每个类别和示例组合的哈希桶(例如,元数据:类别:<;category_name>;作为哈希和<;sample_id>;作为字段)、一组所有已知类别(例如,元数据:表示的类别)和一组所有已知示例ID(例如,元数据:表示的示例):

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
8

redbiom支持样本元数据和实际样本数据之间的一对多映射。这是因为在相同的数据上可能有多种类型的处理(例如,不同的核苷酸三聚体)。或者,物理样本可能已经通过多个协议(例如16s、wgs等)运行。因此,在加载任何数据之前,我们需要为要放置的数据创建一个上下文。以下操作将在状态中添加一个条目:contextsname键入并由description赋值的散列桶:

$ export ctx=Pick_closed-reference_OTUs-illumina-16S-v4-66f541
$ redbiom search metadata beer | head | redbiom fetch samples --context $ctx --output beer_example.biom
$ redbiom search metadata beer | head | redbiom fetch sample-metadata --context $ctx --output beer_example.txt
9

下一步,我们将把biom表中的每个特征与它在中找到的所有样本进行关联。这将创建redis集,并可以使用以下格式的键访问:samples:<;feature\u id>;。请注意,我们指定了要加载到的上下文。

$ redbiom search taxon --context $ctx s__aureus | head
943389
1023241
862312
1102743
870118
969777
1086805
976010
951488
951136
0

最后,让我们加载所有的biom表数据。我们将只存储非零值,并将样本数据编码成一些简单的东西,以便它作为一个字符串进入redis。重要提示:我们现在只支持存储计数数据,不支持浮点。创建的键的格式为:sample:<;redbiom\u id>;。为了减少空间,我们对特征id重新编制索引,因为sotus之类的东西的名称往往很长。映射在加载的所有表上都是稳定的(即相同的功能具有相同的索引),并存储在<;context\u name>;:feature index下。因为我们需要更新索引,这个操作不能并行完成,但是代码是用基于redis的互斥锁设置的,所以可以将多个负载排队。

$ redbiom search taxon --context $ctx s__aureus | head
943389
1023241
862312
1102743
870118
969777
1086805
976010
951488
951136
1

注意事项

红生生物仍在大力开发中。此时,仍有一些重要的注意事项。

  • 不能表示包含/字符的元数据值正斜杠用于表示带有webdis的参数。目前,这些值被省略了。对于尚未标准化为ISO标准的日期,这通常是一个问题。见第9期。

  • 不会存储看似为空的元数据值。当前认为为空的值集是:

    {不适用','未知','未指定','丢失:未收集', '缺少:未提供','缺少:限制访问', 'null'、'null'、'no_data'、'none'、'nan'}

  • 示例ID必须与qiime兼容。

< h2>设计

python和测试

有一些设计决策与其他一些典型的python项目不同。首先,大多数imports被延迟。这里的动力是尽量减少加载时的开销,以提供响应性用户界面——延迟导入是实现这一目标的最直接的方法。

测试线束分为多个组件,由makefile驱动。这最初是为了实用,因为编写集成测试比为click命令编写单元测试更容易。这些测试可以在test.sh中找到,它由"阳性"测试和test_failures.sh组成,后者由"阴性"测试组成。区别在于,如果任何命令导致非零退出状态,则肯定的测试将失败,而否定的测试则期望非零退出状态(实际上,决定是为了避免取消设置"-e")。可以在redbiom/tests/test\u rest.py中找到验证某些redis内容的其他测试。这些既不是单元测试,也不是集成测试,而是简单地练习幕后的rest接口。最后,在redbiom/tests/下有一组单元测试。

redis数据组织

由于redbiom目前处于alpha中,其数据模型可能会发生变化,因此我们暂缓对其进行深入的描述。也就是说,api方法通常概述在其docstring中发出的redis命令,并可用于指导交互。

使用的关键结构形式如下:

  • 状态:*redbiom状态信息,如上下文详细信息
  • 元数据:类别:<;类别>;类别的示例和元数据值
  • 元数据:类别:<;sample id>;已知给定示例存在的元数据类别
  • 元数据:文本搜索:<;词干>;与给定元数据值词干关联的示例
  • 元数据:类别搜索:<;词干>;与给定词干关联的类别
  • 元数据:表示的示例由元数据表示的示例
  • <;context>;:示例:<;redbiom id>;上下文中的示例数据
  • <;context>;:功能:<;功能ID>;上下文中的功能数据
  • <;context>;:表示的样本上下文中包含生物组织数据的样本
  • <;context>;:示例索引示例ID与上下文唯一稳定整数之间的映射
  • <;context>;:反转的示例索引上下文唯一稳定整数与其关联的示例ID之间的映射
  • <;context>;:表示的功能上下文中表示的资源
  • <;context>;:功能索引功能ID与上下文唯一稳定整数之间的映射
  • <;context>;:反转的功能索引上下文唯一稳定整数与其关联的功能ID之间的映射
  • <;context>;:分类单元的子级:<;分类单元>;分类单元的子级
  • <;context>;:分类法父分类单元映射子分类单元到父分类单元映射

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaGWT:何时使用Lazydemelement?   Java中跟踪消失线程的多线程处理   java Springboot未能配置数据源:“url”,但我没有使用数据库   java为按钮生成随机位置   math Java:包含二项式系数计算的表达式   java通过AsyncTask传递参数   从路径错误创建java文件   高流量网站的性能播放框架、Java、Apache、PostgreSQL、JPA和Hibernate   java将4D矢量转换为长矢量   arraylist Java循环在没有任何错误的情况下终止   java正在制作一个计算器应用程序,希望在第二个片段中更新历史,但无法完成   java将信息从IntentService发送到Activity   java如何在游戏中插入大量实体!工作   javascript如何在ScriptEngineforJava中从数学中获得准确的结果?