The qiime artifact is a method for storing the input and outputs for QIIME2 along with associated metadata and provenance information about how the object was formed. This method of storing objects has a number of obvious advantages; however, on the surface it does not lend itself to easy import to R for the R-minded data scientist. In reality, the .qza file is a compressed directory with an intuitive structure.
This package is trying to simplify the process of getting the artifact into R without discarding any of the associated data through a simple read_qza()
function. The artifact is unpacked in to /tmp (or another directory if specified using tmp="/yourdirhere"
) and the raw data and associated metadata are read into a named list (see below). The object is then removed from the tmp dir (unless user specifies rm=F
). Data are typically returned as either a matrix, data.frame, phylo object (trees), or DNAStringSets (nucleic acid sequences). In addition a qza_to_phyloseq()
wrapper is provided to generate a phyloseq object for further analysis. It also provides a print_provenance()
function for summarizing how the data was generated.
In this analysis we will use the qiime2R, phyloseq, and tidyverse libraries.
library(qiime2R)
library(phyloseq)
library(tidyverse)
## ── Attaching packages ────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 2.2.1 ✔ purrr 0.2.4
## ✔ tibble 1.4.2 ✔ dplyr 0.7.4
## ✔ tidyr 0.8.0 ✔ stringr 1.3.1
## ✔ readr 1.1.1 ✔ forcats 0.3.0
## ── Conflicts ───────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
Here we are using data from the QIIME2 moving pictures tutorial. We start by reading the dada2-derived otu table.
download.file("https://docs.qiime2.org/2018.4/data/tutorials/moving-pictures/table.qza", "table.qza")
SequenceVariants<-read_qza("table.qza")
We can now view the associate data stored in this object by examining the names of the data stored within:
names(SequenceVariants)
## [1] "uuid" "type" "format" "contents" "version"
## [6] "data" "provenance"
The following information is stored within the object:
QIIME2 View can provide a graphical representation of this data; however, provenance is displayed as a nested list showing the input file dates, times, unique identifiers, and run time environments as below using the print_provenance()
function. See qiime2 documentation for interpretation.
print_provenance(SequenceVariants)
## artifact$provenance = list 3 (103880 bytes)
## . 6a560288-898e-4c1d-92ac-dd8d7822dcc9/provenance/action/action.yaml = list 4
## . . execution = list 2
## . . . uuid = character 1= 70ea1d17-ffcf-4113-8ce
## . . . runtime = list 3
## . . . . start = character 1= 2018-04-26T09:43:13.48
## . . . . end = character 1= 2018-04-26T09:47:32.33
## . . . . duration = character 1= 4 minutes, 18 seconds,
## . . action = list 6
## . . . type = character 1= method
## . . . plugin = character 1= environment:plugins:da
## . . . action = character 1= denoise_single
## . . . inputs = list 1
## . . . . [[1]] = list 1
## . . . . . demultiplexed_seqs = character 1= 640f363f-519b-4152-966
## . . . parameters = list 9
## . . . . [[1]] = list 1
## . . . . . trunc_len = integer 1= 120
## . . . . [[2]] = list 1
## . . . . . trim_left = integer 1= 0
## . . . . [[3]] = list 1
## . . . . . max_ee = double 1= 2
## . . . . [[4]] = list 1
## . . . . . trunc_q = integer 1= 2
## . . . . [[5]] = list 1
## . . . . . chimera_method = character 1= consensus
## . . . . [[6]] = list 1
## . . . . . min_fold_parent_over_abundance = double 1= 1
## . . . . [[7]] = list 1
## . . . . . n_threads = integer 1= 1
## . . . . [[8]] = list 1
## . . . . . n_reads_learn = integer 1= 1000000
## . . . . [[9]] = list 1
## . . . . . hashed_feature_ids = logical 1= TRUE
## . . . output-name = character 1= table
## . . transformers = list 2
## . . . inputs = list 1
## . . . . demultiplexed_seqs = list 1
## . . . . . [[1]] = list 2
## . . . . . . from = character 1= SingleLanePerSampleSin
## . . . . . . to = character 1= SingleLanePerSampleSin
## . . . output = list 1
## . . . . [[1]] = list 4
## . . . . . from = character 1= biom.table:Table
## . . . . . to = character 1= BIOMV210DirFmt
## . . . . . plugin = character 1= environment:plugins:ty
## . . . . . citations = character 2= view|types:2018.4.0|bi ...
## . . environment = list 5
## . . . platform = character 1= macosx-10.9-x86_64
## . . . python = character 1= 3.5.5 | packaged by co
## . . . framework = list 3
## . . . . version = character 1= 2018.4.0
## . . . . website = character 1= https://qiime2.org
## . . . . citations = character 1= framework|qiime2:2018.
## . . . plugins = list 2
## . . . . types = list 2
## . . . . . version = character 1= 2018.4.0
## . . . . . website = character 1= https://github.com/qii
## . . . . dada2 = list 3
## . . . . . version = character 1= 2018.4.0
## . . . . . website = character 1= http://benjjneb.github
## . . . . . citations = character 1= plugin|dada2:2018.4.0|
## . . . python-packages = list 124
## . . . . widgetsnbextension = character 1= 3.2.1
## . . . . wheel = character 1= 0.31.0
## . . . . webencodings = character 1= 0.5.1
## . . . . wcwidth = character 1= 0.1.7
## . . . . urllib3 = character 1= 1.22
## . . . . unifrac = character 1= 0.9.2
## . . . . traitlets = character 1= 4.3.2
## . . . . tornado = character 1= 5.0.2
## . . . . testpath = character 1= 0.3.1
## . . . . terminado = character 1= 0.8.1
## . . . . statsmodels = character 1= 0.8.0
## . . . . sphinxcontrib-bibtex = character 1= 0.4.0
## . . . . Sphinx = character 1= 1.4.6
## . . . . snowballstemmer = character 1= 1.2.1
## . . . . six = character 1= 1.11.0
## . . . . simplegeneric = character 1= 0.8.1
## . . . . setuptools = character 1= 39.0.1
## . . . . Send2Trash = character 1= 1.5.0
## . . . . seaborn = character 1= 0.8.1
## . . . . scipy = character 1= 0.19.1
## . . . . scikit-learn = character 1= 0.19.1
## . . . . scikit-bio = character 1= 0.5.1
## . . . . requests = character 1= 2.18.4
## . . . . qiime2 = character 1= 2018.4.0
## . . . . q2templates = character 1= 2018.4.0
## . . . . q2cli = character 1= 2018.4.0
## . . . . q2-vsearch = character 1= 2018.4.0
## . . . . q2-types = character 1= 2018.4.0
## . . . . q2-taxa = character 1= 2018.4.0
## . . . . q2-sample-classifier = character 1= 2018.4.0
## . . . . q2-quality-filter = character 1= 2018.4.0
## . . . . q2-quality-control = character 1= 2018.4.0
## . . . . q2-phylogeny = character 1= 2018.4.0
## . . . . q2-metadata = character 1= 2018.4.0
## . . . . q2-longitudinal = character 1= 2018.4.0
## . . . . q2-gneiss = character 1= 2018.4.0
## . . . . q2-feature-table = character 1= 2018.4.0
## . . . . q2-feature-classifier = character 1= 2018.4.0
## . . . . q2-emperor = character 1= 2018.4.0
## . . . . q2-diversity = character 1= 2018.4.0
## . . . . q2-demux = character 1= 2018.4.0
## . . . . q2-deblur = character 1= 2018.4.0
## . . . . q2-dada2 = character 1= 2018.4.0
## . . . . q2-cutadapt = character 1= 2018.4.0
## . . . . q2-composition = character 1= 2018.4.0
## . . . . q2-alignment = character 1= 2018.4.0
## . . . . pyzmq = character 1= 17.0.0
## . . . . PyYAML = character 1= 3.12
## . . . . pytz = character 1= 2018.4
## . . . . python-dateutil = character 1= 2.7.2
## . . . . PySocks = character 1= 1.6.8
## . . . . pyparsing = character 1= 2.2.0
## . . . . pyOpenSSL = character 1= 17.5.0
## . . . . Pygments = character 1= 2.2.0
## . . . . pycparser = character 1= 2.18
## . . . . pybtex = character 1= 0.21
## . . . . pybtex-docutils = character 1= 0.2.1
## . . . . ptyprocess = character 1= 0.5.2
## . . . . psutil = character 1= 5.4.5
## . . . . prompt-toolkit = character 1= 1.0.15
## . . . . pip = character 1= 9.0.3
## . . . . pickleshare = character 1= 0.7.4
## . . . . pexpect = character 1= 4.5.0
## . . . . patsy = character 1= 0.5.0
## . . . . parso = character 1= 0.2.0
## . . . . pandocfilters = character 1= 1.4.2
## . . . . pandas = character 1= 0.22.0
## . . . . packaging = character 1= 17.1
## . . . . oset = character 1= 0.1.3
## . . . . numpy = character 1= 1.12.1
## . . . . notebook = character 1= 5.4.1
## . . . . nose = character 1= 1.3.7
## . . . . nbformat = character 1= 4.4.0
## . . . . nbconvert = character 1= 5.3.1
## . . . . natsort = character 1= 5.3.0
## . . . . msgpack-python = character 1= 0.5.6
## . . . . mistune = character 1= 0.8.3
## . . . . matplotlib = character 1= 2.2.2
## . . . . MarkupSafe = character 1= 1.0
## . . . . lockfile = character 1= 0.12.2
## . . . . latexcodec = character 1= 1.0.5
## . . . . kiwisolver = character 1= 1.0.1
## . . . . jupyter-core = character 1= 4.4.0
## . . . . jupyter-client = character 1= 5.2.3
## . . . . jsonschema = character 1= 2.6.0
## . . . . Jinja2 = character 1= 2.10
## . . . . jedi = character 1= 0.12.0
## . . . . ipywidgets = character 1= 7.2.1
## . . . . ipython = character 1= 6.3.1
## . . . . ipython-genutils = character 1= 0.2.0
## . . . . ipykernel = character 1= 4.8.2
## . . . . imagesize = character 1= 1.0.0
## . . . . idna = character 1= 2.6
## . . . . html5lib = character 1= 1.0.1
## . . . . h5py = character 1= 2.7.0
## . . . . future = character 1= 0.16.0
## . . . . fastcluster = character 1= 1.1.24
## . . . . entrypoints = character 1= 0.2.3
## . . . . emperor = character 1= 1.0.0b16
## . . . . docutils = character 1= 0.14
## . . . . decorator = character 1= 4.3.0
## . . . . deblur = character 1= 1.0.4
## . . . . Cython = character 1= 0.28.2
## . . . . cutadapt = character 1= 1.16
## . . . . cryptography = character 1= 2.2.1
## . . . . click = character 1= 6.7
## . . . . chardet = character 1= 3.0.4
## . . . . cffi = character 1= 1.11.5
## . . . . certifi = character 1= 2018.4.16
## . . . . CacheControl = character 1= 0.12.4
## . . . . bokeh = character 1= 0.12.15
## . . . . bleach = character 1= 2.1.3
## . . . . bibtexparser = character 1= 1.0.1
## . . . . backcall = character 1= 0.1.0
## . . . . Babel = character 1= 2.5.3
## . . . . asn1crypto = character 1= 0.24.0
## . . . . appnope = character 1= 0.1.0
## . . . . alabaster = character 1= 0.7.10
## . . . . biom-format = character 1= 2.1.6
## . . . . cycler = character 1= 0.10.0
## . . . . gneiss = character 1= 0.4.2
## . . . . ijson = character 1= 2.3
## . . . . tzlocal = character 1= 1.3
## . . . . xopen = character 1= 0.3.2
## . 6a560288-898e-4c1d-92ac-dd8d7822dcc9/provenance/artifacts/640f363f-519b-4152-9664-07f9a33e9f25/action/action.yaml = list 4
## . . execution = list 2
## . . . uuid = character 1= 992f1169-c9cf-4e76-847
## . . . runtime = list 3
## . . . . start = character 1= 2018-04-26T09:42:05.18
## . . . . end = character 1= 2018-04-26T09:42:52.88
## . . . . duration = character 1= 47 seconds, and 695032
## . . action = list 6
## . . . type = character 1= method
## . . . plugin = character 1= environment:plugins:de
## . . . action = character 1= emp_single
## . . . inputs = list 1
## . . . . [[1]] = list 1
## . . . . . seqs = character 1= bbb00eed-8dec-475e-a07
## . . . parameters = list 3
## . . . . [[1]] = list 1
## . . . . . barcodes = character 1= barcodes.tsv
## . . . . [[2]] = list 1
## . . . . . rev_comp_barcodes = logical 1= FALSE
## . . . . [[3]] = list 1
## . . . . . rev_comp_mapping_barcodes = logical 1= FALSE
## . . . output-name = character 1= per_sample_sequences
## . . transformers = list 2
## . . . inputs = list 1
## . . . . seqs = list 1
## . . . . . [[1]] = list 3
## . . . . . . from = character 1= EMPSingleEndDirFmt
## . . . . . . to = character 1= q2_demux._demux:Barcod
## . . . . . . plugin = character 1= environment:plugins:de
## . . . output = list 1
## . . . . [[1]] = list 2
## . . . . . from = character 1= SingleLanePerSampleSin
## . . . . . to = character 1= SingleLanePerSampleSin
## . . environment = list 5
## . . . platform = character 1= macosx-10.9-x86_64
## . . . python = character 1= 3.5.5 | packaged by co
## . . . framework = list 3
## . . . . version = character 1= 2018.4.0
## . . . . website = character 1= https://qiime2.org
## . . . . citations = character 1= framework|qiime2:2018.
## . . . plugins = list 2
## . . . . demux = list 2
## . . . . . version = character 1= 2018.4.0
## . . . . . website = character 1= https://github.com/qii
## . . . . types = list 2
## . . . . . version = character 1= 2018.4.0
## . . . . . website = character 1= https://github.com/qii
## . . . python-packages = list 124
## . . . . widgetsnbextension = character 1= 3.2.1
## . . . . wheel = character 1= 0.31.0
## . . . . webencodings = character 1= 0.5.1
## . . . . wcwidth = character 1= 0.1.7
## . . . . urllib3 = character 1= 1.22
## . . . . unifrac = character 1= 0.9.2
## . . . . traitlets = character 1= 4.3.2
## . . . . tornado = character 1= 5.0.2
## . . . . testpath = character 1= 0.3.1
## . . . . terminado = character 1= 0.8.1
## . . . . statsmodels = character 1= 0.8.0
## . . . . sphinxcontrib-bibtex = character 1= 0.4.0
## . . . . Sphinx = character 1= 1.4.6
## . . . . snowballstemmer = character 1= 1.2.1
## . . . . six = character 1= 1.11.0
## . . . . simplegeneric = character 1= 0.8.1
## . . . . setuptools = character 1= 39.0.1
## . . . . Send2Trash = character 1= 1.5.0
## . . . . seaborn = character 1= 0.8.1
## . . . . scipy = character 1= 0.19.1
## . . . . scikit-learn = character 1= 0.19.1
## . . . . scikit-bio = character 1= 0.5.1
## . . . . requests = character 1= 2.18.4
## . . . . qiime2 = character 1= 2018.4.0
## . . . . q2templates = character 1= 2018.4.0
## . . . . q2cli = character 1= 2018.4.0
## . . . . q2-vsearch = character 1= 2018.4.0
## . . . . q2-types = character 1= 2018.4.0
## . . . . q2-taxa = character 1= 2018.4.0
## . . . . q2-sample-classifier = character 1= 2018.4.0
## . . . . q2-quality-filter = character 1= 2018.4.0
## . . . . q2-quality-control = character 1= 2018.4.0
## . . . . q2-phylogeny = character 1= 2018.4.0
## . . . . q2-metadata = character 1= 2018.4.0
## . . . . q2-longitudinal = character 1= 2018.4.0
## . . . . q2-gneiss = character 1= 2018.4.0
## . . . . q2-feature-table = character 1= 2018.4.0
## . . . . q2-feature-classifier = character 1= 2018.4.0
## . . . . q2-emperor = character 1= 2018.4.0
## . . . . q2-diversity = character 1= 2018.4.0
## . . . . q2-demux = character 1= 2018.4.0
## . . . . q2-deblur = character 1= 2018.4.0
## . . . . q2-dada2 = character 1= 2018.4.0
## . . . . q2-cutadapt = character 1= 2018.4.0
## . . . . q2-composition = character 1= 2018.4.0
## . . . . q2-alignment = character 1= 2018.4.0
## . . . . pyzmq = character 1= 17.0.0
## . . . . PyYAML = character 1= 3.12
## . . . . pytz = character 1= 2018.4
## . . . . python-dateutil = character 1= 2.7.2
## . . . . PySocks = character 1= 1.6.8
## . . . . pyparsing = character 1= 2.2.0
## . . . . pyOpenSSL = character 1= 17.5.0
## . . . . Pygments = character 1= 2.2.0
## . . . . pycparser = character 1= 2.18
## . . . . pybtex = character 1= 0.21
## . . . . pybtex-docutils = character 1= 0.2.1
## . . . . ptyprocess = character 1= 0.5.2
## . . . . psutil = character 1= 5.4.5
## . . . . prompt-toolkit = character 1= 1.0.15
## . . . . pip = character 1= 9.0.3
## . . . . pickleshare = character 1= 0.7.4
## . . . . pexpect = character 1= 4.5.0
## . . . . patsy = character 1= 0.5.0
## . . . . parso = character 1= 0.2.0
## . . . . pandocfilters = character 1= 1.4.2
## . . . . pandas = character 1= 0.22.0
## . . . . packaging = character 1= 17.1
## . . . . oset = character 1= 0.1.3
## . . . . numpy = character 1= 1.12.1
## . . . . notebook = character 1= 5.4.1
## . . . . nose = character 1= 1.3.7
## . . . . nbformat = character 1= 4.4.0
## . . . . nbconvert = character 1= 5.3.1
## . . . . natsort = character 1= 5.3.0
## . . . . msgpack-python = character 1= 0.5.6
## . . . . mistune = character 1= 0.8.3
## . . . . matplotlib = character 1= 2.2.2
## . . . . MarkupSafe = character 1= 1.0
## . . . . lockfile = character 1= 0.12.2
## . . . . latexcodec = character 1= 1.0.5
## . . . . kiwisolver = character 1= 1.0.1
## . . . . jupyter-core = character 1= 4.4.0
## . . . . jupyter-client = character 1= 5.2.3
## . . . . jsonschema = character 1= 2.6.0
## . . . . Jinja2 = character 1= 2.10
## . . . . jedi = character 1= 0.12.0
## . . . . ipywidgets = character 1= 7.2.1
## . . . . ipython = character 1= 6.3.1
## . . . . ipython-genutils = character 1= 0.2.0
## . . . . ipykernel = character 1= 4.8.2
## . . . . imagesize = character 1= 1.0.0
## . . . . idna = character 1= 2.6
## . . . . html5lib = character 1= 1.0.1
## . . . . h5py = character 1= 2.7.0
## . . . . future = character 1= 0.16.0
## . . . . fastcluster = character 1= 1.1.24
## . . . . entrypoints = character 1= 0.2.3
## . . . . emperor = character 1= 1.0.0b16
## . . . . docutils = character 1= 0.14
## . . . . decorator = character 1= 4.3.0
## . . . . deblur = character 1= 1.0.4
## . . . . Cython = character 1= 0.28.2
## . . . . cutadapt = character 1= 1.16
## . . . . cryptography = character 1= 2.2.1
## . . . . click = character 1= 6.7
## . . . . chardet = character 1= 3.0.4
## . . . . cffi = character 1= 1.11.5
## . . . . certifi = character 1= 2018.4.16
## . . . . CacheControl = character 1= 0.12.4
## . . . . bokeh = character 1= 0.12.15
## . . . . bleach = character 1= 2.1.3
## . . . . bibtexparser = character 1= 1.0.1
## . . . . backcall = character 1= 0.1.0
## . . . . Babel = character 1= 2.5.3
## . . . . asn1crypto = character 1= 0.24.0
## . . . . appnope = character 1= 0.1.0
## . . . . alabaster = character 1= 0.7.10
## . . . . biom-format = character 1= 2.1.6
## . . . . cycler = character 1= 0.10.0
## . . . . gneiss = character 1= 0.4.2
## . . . . ijson = character 1= 2.3
## . . . . tzlocal = character 1= 1.3
## . . . . xopen = character 1= 0.3.2
## . 6a560288-898e-4c1d-92ac-dd8d7822dcc9/provenance/artifacts/bbb00eed-8dec-475e-a07b-4a527a2f1863/action/action.yaml = list 4
## . . execution = list 2
## . . . uuid = character 1= 7558d18b-bcbf-4e6e-860
## . . . runtime = list 3
## . . . . start = character 1= 2018-04-26T09:41:56.30
## . . . . end = character 1= 2018-04-26T09:41:56.60
## . . . . duration = character 1= 305141 microseconds
## . . action = list 3
## . . . type = character 1= import
## . . . format = character 1= EMPSingleEndDirFmt
## . . . manifest = list 2
## . . . . [[1]] = list 2
## . . . . . name = character 1= barcodes.fastq.gz
## . . . . . md5sum = character 1= e238c2bac12c901b7161e3
## . . . . [[2]] = list 2
## . . . . . name = character 1= sequences.fastq.gz
## . . . . . md5sum = character 1= 754022eb0c74a9cc75834e
## . . transformers = list 1
## . . . output = list 1
## . . . . [[1]] = list 2
## . . . . . from = character 1= EMPSingleEndDirFmt
## . . . . . to = character 1= EMPSingleEndDirFmt
## . . environment = list 5
## . . . platform = character 1= macosx-10.9-x86_64
## . . . python = character 1= 3.5.5 | packaged by co
## . . . framework = list 3
## . . . . version = character 1= 2018.4.0
## . . . . website = character 1= https://qiime2.org
## . . . . citations = character 1= framework|qiime2:2018.
## . . . plugins = list 1
## . . . . demux = list 2
## . . . . . version = character 1= 2018.4.0
## . . . . . website = character 1= https://github.com/qii
## . . . python-packages = list 124
## . . . . widgetsnbextension = character 1= 3.2.1
## . . . . wheel = character 1= 0.31.0
## . . . . webencodings = character 1= 0.5.1
## . . . . wcwidth = character 1= 0.1.7
## . . . . urllib3 = character 1= 1.22
## . . . . unifrac = character 1= 0.9.2
## . . . . traitlets = character 1= 4.3.2
## . . . . tornado = character 1= 5.0.2
## . . . . testpath = character 1= 0.3.1
## . . . . terminado = character 1= 0.8.1
## . . . . statsmodels = character 1= 0.8.0
## . . . . sphinxcontrib-bibtex = character 1= 0.4.0
## . . . . Sphinx = character 1= 1.4.6
## . . . . snowballstemmer = character 1= 1.2.1
## . . . . six = character 1= 1.11.0
## . . . . simplegeneric = character 1= 0.8.1
## . . . . setuptools = character 1= 39.0.1
## . . . . Send2Trash = character 1= 1.5.0
## . . . . seaborn = character 1= 0.8.1
## . . . . scipy = character 1= 0.19.1
## . . . . scikit-learn = character 1= 0.19.1
## . . . . scikit-bio = character 1= 0.5.1
## . . . . requests = character 1= 2.18.4
## . . . . qiime2 = character 1= 2018.4.0
## . . . . q2templates = character 1= 2018.4.0
## . . . . q2cli = character 1= 2018.4.0
## . . . . q2-vsearch = character 1= 2018.4.0
## . . . . q2-types = character 1= 2018.4.0
## . . . . q2-taxa = character 1= 2018.4.0
## . . . . q2-sample-classifier = character 1= 2018.4.0
## . . . . q2-quality-filter = character 1= 2018.4.0
## . . . . q2-quality-control = character 1= 2018.4.0
## . . . . q2-phylogeny = character 1= 2018.4.0
## . . . . q2-metadata = character 1= 2018.4.0
## . . . . q2-longitudinal = character 1= 2018.4.0
## . . . . q2-gneiss = character 1= 2018.4.0
## . . . . q2-feature-table = character 1= 2018.4.0
## . . . . q2-feature-classifier = character 1= 2018.4.0
## . . . . q2-emperor = character 1= 2018.4.0
## . . . . q2-diversity = character 1= 2018.4.0
## . . . . q2-demux = character 1= 2018.4.0
## . . . . q2-deblur = character 1= 2018.4.0
## . . . . q2-dada2 = character 1= 2018.4.0
## . . . . q2-cutadapt = character 1= 2018.4.0
## . . . . q2-composition = character 1= 2018.4.0
## . . . . q2-alignment = character 1= 2018.4.0
## . . . . pyzmq = character 1= 17.0.0
## . . . . PyYAML = character 1= 3.12
## . . . . pytz = character 1= 2018.4
## . . . . python-dateutil = character 1= 2.7.2
## . . . . PySocks = character 1= 1.6.8
## . . . . pyparsing = character 1= 2.2.0
## . . . . pyOpenSSL = character 1= 17.5.0
## . . . . Pygments = character 1= 2.2.0
## . . . . pycparser = character 1= 2.18
## . . . . pybtex = character 1= 0.21
## . . . . pybtex-docutils = character 1= 0.2.1
## . . . . ptyprocess = character 1= 0.5.2
## . . . . psutil = character 1= 5.4.5
## . . . . prompt-toolkit = character 1= 1.0.15
## . . . . pip = character 1= 9.0.3
## . . . . pickleshare = character 1= 0.7.4
## . . . . pexpect = character 1= 4.5.0
## . . . . patsy = character 1= 0.5.0
## . . . . parso = character 1= 0.2.0
## . . . . pandocfilters = character 1= 1.4.2
## . . . . pandas = character 1= 0.22.0
## . . . . packaging = character 1= 17.1
## . . . . oset = character 1= 0.1.3
## . . . . numpy = character 1= 1.12.1
## . . . . notebook = character 1= 5.4.1
## . . . . nose = character 1= 1.3.7
## . . . . nbformat = character 1= 4.4.0
## . . . . nbconvert = character 1= 5.3.1
## . . . . natsort = character 1= 5.3.0
## . . . . msgpack-python = character 1= 0.5.6
## . . . . mistune = character 1= 0.8.3
## . . . . matplotlib = character 1= 2.2.2
## . . . . MarkupSafe = character 1= 1.0
## . . . . lockfile = character 1= 0.12.2
## . . . . latexcodec = character 1= 1.0.5
## . . . . kiwisolver = character 1= 1.0.1
## . . . . jupyter-core = character 1= 4.4.0
## . . . . jupyter-client = character 1= 5.2.3
## . . . . jsonschema = character 1= 2.6.0
## . . . . Jinja2 = character 1= 2.10
## . . . . jedi = character 1= 0.12.0
## . . . . ipywidgets = character 1= 7.2.1
## . . . . ipython = character 1= 6.3.1
## . . . . ipython-genutils = character 1= 0.2.0
## . . . . ipykernel = character 1= 4.8.2
## . . . . imagesize = character 1= 1.0.0
## . . . . idna = character 1= 2.6
## . . . . html5lib = character 1= 1.0.1
## . . . . h5py = character 1= 2.7.0
## . . . . future = character 1= 0.16.0
## . . . . fastcluster = character 1= 1.1.24
## . . . . entrypoints = character 1= 0.2.3
## . . . . emperor = character 1= 1.0.0b16
## . . . . docutils = character 1= 0.14
## . . . . decorator = character 1= 4.3.0
## . . . . deblur = character 1= 1.0.4
## . . . . Cython = character 1= 0.28.2
## . . . . cutadapt = character 1= 1.16
## . . . . cryptography = character 1= 2.2.1
## . . . . click = character 1= 6.7
## . . . . chardet = character 1= 3.0.4
## . . . . cffi = character 1= 1.11.5
## . . . . certifi = character 1= 2018.4.16
## . . . . CacheControl = character 1= 0.12.4
## . . . . bokeh = character 1= 0.12.15
## . . . . bleach = character 1= 2.1.3
## . . . . bibtexparser = character 1= 1.0.1
## . . . . backcall = character 1= 0.1.0
## . . . . Babel = character 1= 2.5.3
## . . . . asn1crypto = character 1= 0.24.0
## . . . . appnope = character 1= 0.1.0
## . . . . alabaster = character 1= 0.7.10
## . . . . biom-format = character 1= 2.1.6
## . . . . cycler = character 1= 0.10.0
## . . . . gneiss = character 1= 0.4.2
## . . . . ijson = character 1= 2.3
## . . . . tzlocal = character 1= 1.3
## . . . . xopen = character 1= 0.3.2
Many R users may wish to use phyloseq to help analyze their data. There is a wrapper function called qza_to_phyloseq()
to assist with this purpose. We will download the associated tree, metadata, and taxonomy to build the object. At least two of the above items will be required to build a phyloseq object.
download.file("https://data.qiime2.org/2018.4/tutorials/moving-pictures/sample_metadata.tsv", "sample_metadata.tsv")
download.file("https://docs.qiime2.org/2018.4/data/tutorials/moving-pictures/taxonomy.qza", "taxonomy.qza")
download.file("https://docs.qiime2.org/2018.4/data/tutorials/moving-pictures/rooted-tree.qza", "rooted-tree.qza")
phyobj<-qza_to_phyloseq(features="table.qza", taxonomy = "taxonomy.qza", tree = "rooted-tree.qza", metadata="sample_metadata.tsv")
phyobj
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 759 taxa and 34 samples ]
## sample_data() Sample Data: [ 34 samples by 10 sample variables ]
## tax_table() Taxonomy Table: [ 759 taxa by 7 taxonomic ranks ]
## phy_tree() Phylogenetic Tree: [ 759 tips and 757 internal nodes ]
We can use ggplot2 to graph data generated by QIIME2 in R allowing for advanced graphing parameters. Using the Shannon Diversity metrics generated in the moving pictures tutorial, we will plot the diversity over time by participant. See ggplot2 documentation for the vast array of plotting options available.
download.file("https://docs.qiime2.org/2018.4/data/tutorials/moving-pictures/core-metrics-results/shannon_vector.qza", "shannon_vector.qza")
metadata<-
read_tsv("sample_metadata.tsv", comment="#q2:types") #to exclude the column denoting the variable class
## Parsed with column specification:
## cols(
## `#SampleID` = col_character(),
## BarcodeSequence = col_character(),
## LinkerPrimerSequence = col_character(),
## BodySite = col_character(),
## Year = col_integer(),
## Month = col_integer(),
## Day = col_integer(),
## Subject = col_character(),
## ReportedAntibioticUsage = col_character(),
## DaysSinceExperimentStart = col_integer(),
## Description = col_character()
## )
read_qza("shannon_vector.qza")$data %>%
as.data.frame() %>%
rownames_to_column("#SampleID") %>% # to allow a smooth joining with the metadata
left_join(metadata) %>%
ggplot(
aes(
x=DaysSinceExperimentStart,
y=shannon,
group=BodySite,
color=BodySite,
shape=ReportedAntibioticUsage)
) +
geom_line() +
geom_point() +
facet_wrap(~Subject) + #make a separate plot for each subject
theme_bw()
## Joining, by = "#SampleID"
Similarily we could use this approach to match more metadata onto a PCoA analysis of say unweighted UniFrac Distances. When a PCoA is imported, data will contain two peices of information: .$data$ProportionExplained as well as the vectors themselves .$data$Vectors.
download.file("https://docs.qiime2.org/2018.4/data/tutorials/moving-pictures/core-metrics-results/unweighted_unifrac_pcoa_results.qza", "unweighted_unifrac_pcoa_results.qza")
pcoa<-read_qza("unweighted_unifrac_pcoa_results.qza")$data
pcoa$Vectors %>%
rename("#SampleID"=SampleID) %>% # to match the metadata
left_join(metadata) %>%
ggplot(
aes(
x=PC1,
y=PC2,
color=BodySite,
shape=Subject
)
) +
geom_point() +
theme_bw() +
xlab(paste0("PC1: ", pcoa$ProportionExplained["PC1"])) + #add variance explained to axis
ylab(paste0("PC2: ", pcoa$ProportionExplained["PC2"]))
## Joining, by = "#SampleID"
## Warning: Column `#SampleID` joining factor and character vector, coercing
## into character vector