genbankファイルをgffファイルに変換する

"convert gbff to gff"とかで検索して
[Question: Converting Gbff To Gff3](https://www.biostars.org/p/9926/)
というようなディスカッションの内容を見て途方にくれている人、

様々な形式のライフサイエンスデータを変換できるツールが知りたい人向け


## 経緯（読み飛ばしても問題ない）

<details><summary>クリックして展開</summary><div>

NCBIのSequence Read Archive(SRA)からゲノムデータを取得すると
- fastaファイル(.fasta) 
- genbankファイル(.gbff)
が得られる。
塩基の配列情報(.fasta)＋配列に遺伝子情報を付加するアノテーションファイル（**.gbff**）
によってゲノムを読み解くことが可能となる。

ただこのデータをIGV等でリファレンスゲノムとして使用したい場合、
アノテーションファイルは **.gff**(gff3)か **.gtf**(gff2)等でないとIGVが情報を読み込んでくれない。
(ファイル形式の説明については省略)

gbff(GenBank Flat File)もgff(General Feature Format)も
要はアノテーションファイルなので変換が可能なのでは？
と考え"convert gbff to gff"とかで検索すると、過去にそういった討論がされていた記録は見つかったが、
具体的な解決策が載っていない。

色々調べた挙句、なんとか変換方法を見つけたのでここで紹介することにする。

解決の鍵になったのは、始めに紹介したbiostarsでのディスカッション内で登場した
"bp_genbank2gff3.pl"なる謎のスクリプト。
bioperlで使えるらしいが会話内容からしてバグがあるっぽい。
もしかしてpythonに似たツールないかな？と調べたら見つかった。

Q.Ensemblを使えばアノテーションファイルはgff(gtf)ファイルとして入手できるので、そもそもこんな苦労しなくていいのでは？
~~A.使いたいのがマイナーな生物のものだったせいかNCBIにしかデータが無かった...~~
6/15 追記 
最近試験的にリリースされたNCBI Datasetsを利用すればfastaとgff3を一括でダウンロードできるようになった。

![Screenshot from 2020-06-15 10-08-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625877/74df5da3-a417-ff16-7aad-d23b80e75d18.png)

また、データの入手元をSRAではなくNCBIのGenome resourceにすることで、gbff以外の形式のアノテーションファイルが入手できることを確認。
![Screenshot from 2020-06-15 10-30-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625877/d298b14a-70d2-f2c0-9967-d0a0577e63f7.png)

|サイト|ダウンロードできるファイル|
|:--|:--
|NCBI(SRA)|GBFF|
|NCBI(Genome)|GFF3, GBFF, tabular| 
|Ensembl|GTF, GFF3|

INSDCとしてデータは共有していても提供するサービスは異なる様子。ややこしい


</div></details>

## ツールのインストール

### 使用環境
- Python3 (Python 3.6.8)
- pip (pip 20.1.1)

### インストールするpythonモジュール
- **bioconvert**  
  様々なライフサイエンスデータの変換を可能にしてくれるモジュール  
  今回はこの中のgenbank2gff3を使用
- **biocode**  
  genbank2gff3を動作させるために必要なconvert_genbank_to_gff3.pyが入っている


**1.bioconvertをインストール**

```python3
pip install bioconvert
```

> This method installs Bioconvert and its Python dependencies. Note, however, that bioconvert may use (depending on the conversion you want to use) external dependencies not available on Pypi. You will need to install those third-party dependencies yourself. An alternative is to install bioconvert using conda as explained here after.
> https://bioconvert.readthedocs.io/en/master/installation.html

pipでインストールする場合、PyPIで管理しているpythonモジュールの依存関係は解決してくれるが、サードパーティ製のパッケージに関しては解決してくれないらしい。
**要はpipでインストールすると機能が制限される。**
condaを使えばその辺の依存関係も解決してくれるらしいが、
condaを使用していない & gbff→gff3 の変換さえできればいいので今回は無視。


**2.途中でインストールが失敗する場合（恐らくmappyのインストール失敗）はpython3-develパッケージもインストール**

```bash
yum install python3-devel
```

**3.biocodeをインストール**

```bash
pip install biocode
```

```
bioconvert --help
```

と入力すると前述したように機能が制限されており、いくつかのメソッドが使用不可である警告がズラっと表示される。

```bash
WARNING [bioconvert.core.base]:  converter 'FASTQ2FASTA': method seqtk is not available
WARNING [bioconvert.core.base]:  converter 'GENBANK2EMBL': method squizz is not available
WARNING [bioconvert.core.base]:  converter 'GENBANK2FASTA': method squizz is not available
WARNING [bioconvert.core.base]:  converter 'GZ2BZ2': method pigz_pbzip2 is not available
WARNING [bioconvert.core.base]:  converter 'GZ2DSRC': method pigzdsrc is not available
```

```bash
genbank2gff3        genbank to-> gff3 (1 methods)
```

今回使用したいgenbank2gff3については警告が表示されないので一安心。
~~スクリプトを実行するたびログが汚れるのは覚悟する~~

## 実行

```bash
bioconvert genbank2gff3 foo.gbff foo.gff3
```

とすることで foo.gbff → foo.gff3 と変換できる。

変換の際、

```
WARNING: The following feature was skipped:
type: assembly_gap
location: [96782:96838](+)
qualifiers:
    Key: estimated_length, Value: ['56']
    Key: gap_type, Value: ['within scaffold']
    Key: linkage_evidence, Value: ['paired-ends']
```

のようにgff3がサポートしていない情報についてはgff3ファイルには引き継がれない。

## その他変換できるファイル形式

bioconvertのreadmeを参照
https://github.com/bioconvert/bioconvert