NCBIデータベースからのミトコンドリアデータ取得

# はじめに
研究に用いるデータとして、NCBIのデータベースにあるミトコンドリアのデータを用いて行ってきた。しかし、2024年6月からデータベースにアップデートがあり、従来の方法で行っていたオルガネラデータベースからの取得では難しいため、NCBIのFTPから直接ダウンロードする。

# データの取得

FTPにあるミトコンドリアのgzファイルをダウンロードする。

まず[NCBIのホーム](https://www.ncbi.nlm.nih.gov/)にあるDownloadへ移動し、FTPをクリック。
![Screenshot from 2025-01-14 13-09-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623163/4988a265-740d-ffdb-0bad-c7526d7ef964.png)


![Screenshot from 2025-01-14 16-09-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623163/5f9b81cb-857c-7d72-908f-fa74aa4c3efa.png)

FTPに移動した後、genomes/refseq/mitochondrionに移動。
mitochondrion.1.genomic.gbff.gz をインストール。

![Screenshot from 2025-01-14 16-30-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623163/ac8c3e60-819d-2e13-3fe3-30154b820609.png)

# データの処理

インストールしたgzファイルを解凍した後、データを整形しcsvに変換を行う。解凍後のgbffファイルから以下のpythonのコードでcsvに変換する。

```make_csv.py
import csv, re
from typing import AnyStr
from os import PathLike
from Bio import SeqIO, Seq, SeqRecord


def is_complete_genome(definition: str) -> bool:
    """完全なミトコンドリアゲノムかどうかを返す.

    Args:
        definition (str): definition

    Returns:
        bool:
    """
    return "mitochondrion, complete genome" in definition


def is_mongrel(name: str) -> bool:
    """'~ x ~'で書かれる雑種かどうかを返す.

    Args:
        name (str): 生物種

    Returns:
        bool:
    """
    return " x " in name


def has_contig(record: SeqRecord) -> bool:
    """Does the record has contig?

    Args:
        record (SeqRecord): record 

    Returns:
        bool: have contig or not have.
    """
    return "contig" in record.annotations


# GBFFファイルからTaxon情報を取得し、CSVファイルに書き込む関数
def extract_taxonomy_to_csv(input_file, output_file):
    tmp = []
    # GBFFファイルを解析する
    with open(input_file, 'r') as f:
        gbff_records = SeqIO.parse(f, 'genbank')
        
        # CSVファイルに書き込む
        with open(output_file, 'w', newline='') as f:
            writer = csv.writer(f)
            
            # ヘッダー行を書き込む
            writer.writerow(['Replicons', 
                             'name', 
                             'Taxon',  
                             'is_mongrel',
                             'has contig', 
                             'complete',
                             'shotgun', 
                             'chromosome'
                             ])
            
            # 各エントリのTaxon情報を書き込む
            for gbff_record in gbff_records:
                name = gbff_record.description
                taxonomy = gbff_record.annotations['taxonomy']
                # 動物以外はskip
                if "Metazoa" not in taxonomy:
                    continue

                taxon = taxonomy
    
                acc = gbff_record.name
                writer.writerow([acc, 
                                name, 
                                taxon, 
                                is_mongrel(name), 
                                has_contig(gbff_record),
                                is_complete_genome(name),
                                "shotgun" in name,
                                "chromosome" in name,
                                ])


if __name__ == "__main__":    
    input_file = 'mitochondrion.1.genomic.gbff'
    output_file = 'output.csv'
    extract_taxonomy_to_csv(input_file, output_file)
```

このプログラムでは表のようなカラムのデータになる。
| 列名 | 情報 |
|:-----------|------------:|
| Replicons | アクセッション番号 |
| name | 生物名 |
| Taxon | 分類情報 |
| is_mongrel | 雑種(True or False) |
| has contig | contigのデータ(True or False) |
| complete | 完全なゲノム(True or False) |
| shotgun | ショットガン配列(True or False) |
| chromosome | 染色体(True or False) |

# まとめ
NCBIのデータベースのアプデにより、FTPから直接データを持ってくる方法にした。ミトコンドリア以外のデータでもとりあえず迷ったならここからダウンロードできると思う。