Qiime 2 解析の始め方

バイオインフォマティクスプラットフォームである [Qiime 2](https://qiime2.org) の入門です。Qiime 2 はオープンソースでコミュニティ駆動で開発されています。初代の [Qiime](http://qiime.org) をより洗練させたものです。初代のサポートが終わるということで、備忘録として導入手順をまとめました。

Qiime 2 を始めるにあたって、パソコンにインストールするためには、通常、モジュール・ライブラリーの依存性の管理が求められます。Python とそのモジュールやライブラリーをもとにつくられているためです。

公式サイトのインストール手順のはじめに書かれているように、[Miniconda](https://conda.io/miniconda.html) というパッケージ管理システムを利用することで、利用モジュールの依存性を自動的に解決させて、Qiime 2 が導入できます。ただしこれはコマンドラインを比較的多く入力していくことになる導入法になります。

そのため今回は Docker イメージからの利用を試みます。公式に用意されている Qiime 2 導入法のひとつで、コマンドライン入力に不慣れでも気軽に始めやすいかと思います。


## Qiime 2 の Docker イメージインストール

手順としてはまず [Docker](https://www.docker.com) のインストールを行い、そして Qiime 2 の Docker イメージの追加を行います。

基本的には公式サイトのインストールマニュアルに従えば大丈夫です。Qiime 2 のバージョンによってコマンド内容が変わることに注意してください。今回はバージョン `2017.11` を例としてインストールします。マニュアルページは https://docs.qiime2.org/2017.11/install/virtual/docker/ です。

操作に不慣れな人のために丁寧めに説明します。Mac に導入することを前提としていますが、Windows でも Docker インストールできればイメージの利用が可能なはずです。

### Docker のインストール

Docker のサイト https://www.docker.com のヘッダー「Get Docker」メニューから「Mac」を選択します。「docker store」のページへ移動するので、「Get Docker」をクリックするとダウンロード開始します。


ダウンロードされた `Docker.dmg` ファイルを（開いて）マウントして、フォルダー背景に表示されているように、`Docker` アプリケーションを `Applications` フォルダーに入れます。これでインストールは完了です。

Docker を起動するには Finder の「移動」メニューから「アプリケーション」を選び、「アプリケーション」フォルダの中から `Docker` を開きます。初回起動時には導入処理があります。コンピューター操作の権限を求められるので、Mac の管理者としてのアカウント（パスワード）を入力して権限を与えてください。

「ターミナル」を開いて `docker version` を入力し、バージョン情報が出ればインストール成功です。今回は次のような内容が得られました。

```console
$ docker version
Client:
 Version:      17.09.1-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:22:25 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.09.1-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:28:28 2017
 OS/Arch:      linux/amd64
 Experimental: true
```

Docker はインストールすると、それ以降ログインごとに自動的に起動されるようになります。自動起動が不要であれば Docker の設定から変更できます。

### Qiime 2 の Docker イメージの追加

引き続き「ターミナル」から行います。はじめにも書きましたが、Qiime  2 のバージョンが変わると入力コマンドも変わることになります。最新の Qiime 2 をインストールするために、公式のインストール手順に書かれているコマンドを実行することが望ましいです。今回はバージョン `2017.11` ということで、次のコマンドで追加しました。

```console
$ docker pull qiime2/core:2017.11
```

容量が大きいのでダウンロードにはしばらく時間がかかります。完了すると次の出力のようにすべてが `Pull complete` になります。

```console
$ docker pull qiime2/core:2017.11
2017.11: Pulling from qiime2/core
85b1f47fba49: Pull complete 
b525cf142aa7: Pull complete 
64ab7e539a04: Pull complete 
f1a1bfc1f9f9: Pull complete 
15f559aa8834: Pull complete 
8b65c1ea5ba1: Pull complete 
71909b324413: Pull complete 
bffd29cbea59: Pull complete 
2f8fca1a5fe1: Pull complete 
b9c739944f0f: Pull complete 
Digest: sha256:e3d7e6d25e430fa37fac0e7f2a2ab652110c1ab455bad4625384e6c58f7dee50
Status: Downloaded newer image for qiime2/core:2017.11
```

実行できることの確認を、インストール時と同じくインストール手順に書かれている `docker run` コマンドで行います。ヘルプが表示されれば成功です。今回は次のような出力となりました。


```console
$ docker run qiime2/core:2017.11 qiime
Usage: qiime [OPTIONS] COMMAND [ARGS]...

  QIIME 2 command-line interface (q2cli)
  --------------------------------------

  To get help with QIIME 2, visit https://qiime2.org.
  
...以下略
```

上記のコマンド入力では省略しましたが、公式のインストール手順ではいくつかオプションがついています。少し説明します。

`-t` オプションは`ターミナル` をコンテナーへ割り当てます。`-i` オプションはインタラクティブ（対話）モードになり、コンテナと入力を接続します。`-v <volume>` オプションは現在ディレクトリーをコンテナの指定のパスにボリュームとして割り当てます。

インストール確認だけであれば、これらオプションはなくても構いません。実践的な、入出力をともなう Qiime 2 の利用にはこれらオプションをつけるべきです。

## Qiime 2 を利用する

Docker イメージにある Qiime 2 を利用するには大きく 2 つの方法があります。ひとつは、`docker` コマンドをつけて実行する方法です。前述のインストール確認で入力したような `docker run -t -i -v $(pwd):/data qiime2/core:2017.11 qiime` からコマンドをはじめます。

チュートリアルなどに書かれている `qiime` から始まるコマンドは、毎回上記に置き換えることになります。例えば次のコマンドがあります。

```console
$ qiime tools import \
  --type EMPSingleEndSequences \
  --input-path emp-single-end-sequences \
  --output-path emp-single-end-sequences.qza
```

これを `docker` コマンドをつけて実行するには次のようにします。

```console
$ docker run -t -i -v $(pwd):/data qiime2/core:2017.11 qiime tools import \
  --type EMPSingleEndSequences \
  --input-path emp-single-end-sequences \
  --output-path emp-single-end-sequences.qza
```

毎回これをやるのはやや手間があります。

もうひとつは「シェルのセッションに入る」方法です。上記 `docker run` コマンドは `qiime2/core:2017.11 ` Docker イメージから `qiime` を実行するものですが、この `qiime` の部分を `/bin/bash` とすれば、Docker イメージのシェルに入ることができます。

```console
$ docker run -t -i -v $(pwd):/data qiime2/core:2017.11 /bin/bash
root@bb3824b10c99:/data#
```

ここで `qiime` を実行すると、イメージ内で実行されるので、次のような出力が得られます。

```console
root@bb3824b10c99:/data# qiime 
Usage: qiime [OPTIONS] COMMAND [ARGS]...

  QIIME 2 command-line interface (q2cli)
  --------------------------------------

  To get help with QIIME 2, visit https://qiime2.org.
...以下略
```

シェルから抜けるには `exit` コマンドを入力します。

```console
root@bb3824b10c99:~# exit
exit
```

シェルセッションを利用する方が `qiime` コマンドを実行しやすくなるでしょう。

### Docker イメージ利用による制限

Docker イメージは「ヘッドレス環境」で実行されます。このため `qiime tools view` といった視覚化ツールがコマンドラインから利用できません。その場合、オンラインの視覚化ツール https://view.qiime2.org/ を利用することになります。


## 入力データの作成

Qiime 2 で使う入力ファイルは、基本的に「[Qiime 2 アーティファクト](https://docs.qiime2.org/2017.12/concepts/#data-files-qiime-2-artifacts)」という形式のファイルになります。ファイルの拡張子は `.qza` です。

「Qiime 2 アーティファクト」にすることで、Qiime 2 で処理されたファイルがどのような経路をたどったのかを記録してくれるようになります。

シーケンスから得られた結果ファイルが FASTQ 形式である場合、それを Qiime 2 で利用するには「Qiime 2 アーティファクト」に変換することになります。変換ツールは Qiime 2 に用意され、`qiime tools import` コマンドを利用します。

FASTQ ファイルには、読み込み方向やクオリティ情報が含まれていたりバーコード配列が含まれていたりなど、ファイルの内容によって読み込み方が異なります。詳しくは[公式ドキュメントの Importing](https://docs.qiime2.org/2017.11/tutorials/importing/) のページを参照するとよいでしょう。

### Casava 1.8 以降生成データを読み込む

イルミナ社のソフトウェア Casava のうちバージョン 1.8 以降で生成された FASTQ ファイルについて、一例として読み込み方をとりあげます。ここではペアエンド法でデマルチプレックスを行った FASTQ ファイルのコマンドを簡単に紹介します。データファイルは https://docs.qiime2.org/2017.11/tutorials/importing/#casava-1-8-paired-end-demultiplexed-fastq をもとにしています。

この FASTQ ファイルの名前は、例として `BAQ1552.1.1_67_L001_R1_001.fastq.gz` となるような、ファイルの識別子、バーコード識別子、レーン番号、リード番号、セット番号、とつけられています。

データファイルはすべてひとつのフォルダに入れておき、そのフォルダを `--input-path` オプションで指定します。ここでは `casava-18-paired-end-demultiplexed` というフォルダに入れておくこととします。`qiime tools import` コマンドにあたえるオプションとして `--type 'SampleData[PairedEndSequencesWithQuality]'` を指定します。`--output-path` には好みのファイル名に `.qza` 拡張子をつけて指定します。次のように実行します。

```console
$ qiime tools import \
  --type 'SampleData[PairedEndSequencesWithQuality]' \
  --input-path casava-18-paired-end-demultiplexed \
  --source-format CasavaOneEightSingleLanePerSampleDirFmt \
  --output-path demux-paired-end.qza
```

## シーケンスデータの解析を行う

`.qza` ファイルが生成できたら、あとは Qiime 2 で様々なフィルタリングなどを行って解析を進めていくことになります。

ここでは、おそらく解析手順のいちばんはじめとなる、概要情報の生成を説明します。`qiime demux summarize` コマンドを利用します。Qiime 2 はコマンドによって、入力ファイル指定のオプション名が異なります。リファレンスを読んで確かめておく必要があります。今回は `--i-data` オプションで指定します。

出力ファイルとして可視化データが得られますので、`--o-visualization ` オプションで指定します。拡張子としてファイル名が `.qzv` で終わらせる必要があります。

次のようなコマンドで生成できます。

```console
qiime demux summarize \
  --i-data demux-paired-end.qza \
  --o-visualization demux.qzv
```

生成された `.qzv` ファイルは Qiime 2 View を使って図表として視覚化してくれます。ウェブ版 https://view.qiime2.org/ からも利用できます。

シーケンス長とクオリティ値のバランスを見ながら、この後のフィルタリングのパラメーターを検討し、解析を進めていくことになるでしょう。