環境DNAで使用するデータベースを構築するスクリプトを作ってみたので解説します。分類群に依存せず魚類の他にも鳥類や両生類などにも対応しています。
どのようなツール?
NCBI EntrezのAPIを使用してワード検索でヒットした情報を取得します。検索ワードの構成や取得するデータフォーマットは決まっているので、検索結果より必要な情報を抽出して最終的にFasta形式に変換します。
PMiFishパイプライン用のFastaであれば下記のようなフォーマットにする必要があります。
>gb|PX940051.1|Anthias_nicholsi
CAAAGGCTTGGTCCTGACTTTACTATCAGCTCTAGCTAGGTTTACACATGCAAGTCTCCG...
このようなファイルを生成するツールです。
使い方
まず、環境構築を構築する必要があります。基本的にターミナルを使用します。次に検索対象の情報を取得します。
実行環境の構築
TaxonDBBuilderを実行するための実行環境を構築します。uvを使って構築する方法を説明します。
uvは多数あるpythonのパッケージマネージャーの一つです。環境構築は今いるフォルダ (カレントディレクトリ) 配下で完結するようにします。
curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="$PWD/uv" sh
出力
downloading uv 0.10.0 x86_64-unknown-linux-gnu
no checksums to verify
installing to <Path to dir>/uv
uv
uvx
everything's installed!
To add <Path to dir>/uv to your PATH, either restart your shell or run:
source <Path to dir>/uv/env (sh, bash, zsh)
source <Path to dir>/uv/env.fish (fish)
WARN: The following commands are shadowed by other commands in your PATH: uv uvx
続いて、仮想環境を作成します。
source $PWD/uv/env
# 確認
which uv
# <Path to dir>/uv/uv
# 仮想環境作成
uv venv
# Using CPython 3.11.14
# Creating virtual environment at: .venv
# Activate with: source .venv/bin/activate
TaxonDBBuilderはpythonで書いたので、使用するpyhtonパッケージをインストールします。必要なパッケージはTaxonDBBuilderのリポジトリにあるrequirements.txtに記載しています。
ということで、TaxonDBBuilderのリポジトリをGitHubからクローンします。

gitコマンドがある場合はgit cloneでリポジトリをダウンロードできます。gitコマンドがない場合はDownload ZIPよりカレントディレクトリにダウンロードして解凍します。
git clone https://github.com/NaokiShibata/TaxonDBBuilder.git
仮想環境をActivateしてrequirements.txtに記載のパッケージをインストールします。
source .venv/bin/activate
uv pip install -r TaxonDBBuilder/requirements.txt
Resolved 10 packages in 440ms
Prepared 10 packages in 485ms
Installed 10 packages in 23ms
+ biopython==1.86
+ click==8.3.1
+ markdown-it-py==4.0.0
+ mdurl==0.1.2
+ numpy==2.4.2
+ pygments==2.19.2
+ rich==14.3.2
+ shellingham==1.5.4
+ typer==0.21.1
+ typing-extensions==4.15.0
TaxonDBBuilderの実行
実行コマンドは以下のようになります。
python3 TaxonDBBuilder/taxondbbuilder.py build -c TaxonDBBuilder/configs/db.toml -t 32443 -t 7777 -t 97265 -m 12s --output-prefix "MiFish" --dump-gb Results/MiFish_gb --workers 32 --resume --post-prep
taxondbbuilder.pyの引数は下記のとおりです。
Usage: taxondbbuilder.py build [OPTIONS]
Build a FASTA database by downloading GenBank records and extracting features.
Examples (Teleostomi): taxondbbuilder.py build -c configs/db.toml -t 117570 -m 12s taxondbbuilder.py build -c configs/db.toml -t "Salmo salar" -m mitogenome taxondbbuilder.py
build -c configs/db.toml -t 117570 -m 12s --workers 2 taxondbbuilder.py build -c configs/db.toml -t 117570 -m 12s --output-prefix "mifish" taxondbbuilder.py build -c configs/db.toml
-t 117570 -m 12s --dump-gb Results/gb --resume taxondbbuilder.py build -c configs/db.toml -t 117570 -m 12s --from-gb Results/gb
╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ * --config -c PATH Path to TOML config file. [default: None] [required] │
│ * --taxon -t TEXT Taxon (taxid or scientific name). [default: None] [required] │
│ * --marker -m TEXT Marker key or prefix. [default: None] [required] │
│ --out -o PATH Output file or directory. [default: None] │
│ --dump-gb PATH Directory to store GenBank chunks for caching. [default: None] │
│ --from-gb PATH Directory of GenBank chunks to extract without downloading. [default: None] │
│ --resume Resume using cached GenBank chunks. │
│ --dry-run Print query and exit. │
│ --workers -w INTEGER Number of extraction workers. [default: 2] │
│ --output-prefix TEXT Prefix added to output FASTA filename. [default: taxondbbuilder_] │
│ --post-prep Apply [post_prep] FASTA processing after extraction. │
│ --post-prep-step [primer_trim|length_filter|duplicate_report] Post-prep step(s) to run. Repeat to select multiple. Choices: primer_trim, length_filter, │
│ duplicate_report. │
│ [default: None] │
│ --post-prep-primer-set TEXT Primer set name(s) for primer_trim. Repeat to select multiple (overrides config). [default: None] │
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
情報を集めていきます。
対象分類群のtaxid
まず対象分類群のtaxidを知る必要があります。taxidはNCBIのtaxonomy browserで確認可能です。
https://www.ncbi.nlm.nih.gov/datasets/taxonomy/tree/
MiFishプライマーのデータを扱うことを想定した場合、硬骨魚類 (Teleostei) / 軟骨魚類 (Chondrichthyes) / 円口類 (Cyclostomatida) が対象になります。
| 分類 | リンク |
|---|---|
| 硬骨魚類 | https://www.ncbi.nlm.nih.gov/datasets/taxonomy/32443 |
| 軟骨魚類 | https://www.ncbi.nlm.nih.gov/datasets/taxonomy/7777 |
| 円口類 | https://www.ncbi.nlm.nih.gov/datasets/taxonomy/1476529 |
ページ中のNCBI Taxonomy IDが目的のtaxidです。
対象領域
続いて、プライマーが増幅した領域を知る必要があります。MiFishは論文からも分かるとおり12s rRNA領域を増幅してます。
記載パターンについてはTaxonDBBuilder/configs/markers_mitogenome.tomlを参照してください。コマンドによる確認はpython3 TaxonDBBuilder/taxondbbuilder.py list-markers -c TaxonDBBuilder/configs/db.tomlで可能です。現在は下記に対応していますが、12sと16sしかまだ使ったことがありません。
| Marker ID | Aliases | Header Format |
|---|---|---|
| 12s | 12, 12s, rrns | mifish_pipeline |
| 16s | 16, 16s, rrnl | mifish_pipeline |
| atp6 | atp6 | mifish_pipeline |
| atp8 | atp8 | mifish_pipeline |
| coi | coi, co1, cox1 | mifish_pipeline |
| coii | coii, cox2 | mifish_pipeline |
| coiii | coiii, cox3 | mifish_pipeline |
| control_region | control, control-region, dloop, d-loop | mifish_pipeline |
| cytb | cytb, cyt b, cytb1 | mifish_pipeline |
| mitogenome | mitogenome, mtgenome, mtDNA, mt | mifish_pipeline |
| nd1 | nd1 | mifish_pipeline |
| nd2 | nd2 | mifish_pipeline |
| nd3 | nd3 | mifish_pipeline |
| nd4 | nd4 | mifish_pipeline |
| nd4l | nd4l | mifish_pipeline |
| nd5 | nd5 | mifish_pipeline |
| nd6 | nd6 | mifish_pipeline |
設定ファイル (db.toml) の編集
最後に設定ファイルに情報を反映させます。初期設定は下記のとおりです。
[ncbi]
# Provide either in config or via env vars NCBI_EMAIL / NCBI_API_KEY.
email = "your.email@example.com"
api_key = "YOUR_API_KEY"
db = "nucleotide"
rettype = "gb"
retmode = "text"
per_query = 1000
use_history = true
# delay_sec overrides default rate-limit delay.
# delay_sec = 0.34
# Output header format
[output]
default_header_format = "{acc_id}|{organism}|{marker}|{label}|{type}|{loc}|{strand}"
[output.header_formats]
simple = "{acc_id}|{marker}|{loc}"
verbose = "{acc_id}|{organism_raw}|{marker_raw}|{label_raw}|{type_raw}|{loc}|{strand}"
mifish_pipeline = "gb|{acc_id}|{organism}"
# Taxon options
[taxon]
# If true, do not expand descendants in taxon search.
noexp = false
[markers]
# Marker definitions are loaded from an external file.
file = "configs/markers_mitogenome.toml"
# Optional filters. If unset, no filtering is applied.
[filters]
filter = ["mitochondrion","ddbj_embl_genbank"]
properties = ["biomol_genomic"]
sequence_length_min = 120
sequence_length_max = 30000
# publication_date_from = "1990/01/01"
# publication_date_to = "2025/12/31"
# modification_date_from = "2024/01/01"
# modification_date_to = "2026/12/31"
# all_fields_include = ["12S"]
# all_fields_exclude = ["WGS"]
# raw = "complete[prop]"
# Optional post-processing for the generated FASTA.
[post_prep]
# Enable with CLI option: --post-prep
# Runtime step selection example:
# --post-prep-step primer_trim --post-prep-step duplicate_report
# Parameters are required only for enabled steps:
# - length_filter: sequence_length_min + sequence_length_max
# - primer_trim: primer_file + primer_set
# primer candidates: `python3 taxondbbuilder.py list-primer-sets -c configs/db.toml`
sequence_length_min = 120
# sequence_length_max = 300
primer_file = "configs/primers.toml"
primer_set = ["mifish_u","mifish_ev2","mifish_u2","mifish_l"]
# primer_set = ["mifish_12s", "mifish_ev2"]
主要な項目だけ説明します。
[ncbi]
emailやapi_keyはNCBIにアカウント登録することで取得可能です。使用しない場合は # でコメントアウトして下さい。
また、1回の取得レコード数を増やしたい場合は、per_queryの値を増やします。ただ、増やし過ぎには注意して下さい。
[ncbi]
# Provide either in config or via env vars NCBI_EMAIL / NCBI_API_KEY.
email = "your.email@example.com"
api_key = "YOUR_API_KEY"
db = "nucleotide"
rettype = "gb"
retmode = "text"
per_query = 1000
use_history = true
# delay_sec overrides default rate-limit delay.
# delay_sec = 0.34
[output]
出力するFastaのヘッダー構成を指定可能です。markers_mitogenome.tomlにマーカーごとに設定可能です。デフォルトはmarkers_mitogenome.tomlでmifish_pipeoineが指定され、PMiFishパイプラインが受け付けるフォーマットになっています。
# Output header format
[output]
default_header_format = "{acc_id}|{organism}|{marker}|{label}|{type}|{loc}|{strand}"
[output.header_formats]
simple = "{acc_id}|{marker}|{loc}"
verbose = "{acc_id}|{organism_raw}|{marker_raw}|{label_raw}|{type_raw}|{loc}|{strand}"
mifish_pipeline = "gb|{acc_id}|{organism}"
[markers]
コマンドラインの指定に紐づく、検索ワードに関する情報が記載されている、markers_mitogenome.tomlまでのファイルパスを記載します。同様のフォーマットであれば自身で編集したファイルを指定することも可能です。
[markers]
# Marker definitions are loaded from an external file.
file = "configs/markers_mitogenome.toml"
[filters]
NCBI entrezで検索する際に使用するパラメーターを指定します。例えば、検索対象の配列長や対象データベースなど。
# Optional filters. If unset, no filtering is applied.
[filters]
filter = ["mitochondrion","ddbj_embl_genbank"]
properties = ["biomol_genomic"]
sequence_length_min = 120
sequence_length_max = 30000
# publication_date_from = "1990/01/01"
# publication_date_to = "2025/12/31"
# modification_date_from = "2024/01/01"
# modification_date_to = "2026/12/31"
# all_fields_include = ["12S"]
# all_fields_exclude = ["WGS"]
# raw = "complete[prop]"
詳細はこちらを参照下さい。デフォルトはMiFish DBを作るような設定となっています。
[post_prep]
GenbankファイルからFastaファイルを作成後、配列長フィルタリングとトリムするプライマーに関する情報を指定可能です。コマンドライン引数で--post-prepを指定した場合、db.tomlに記載の情報から処理パターンを自動推定して処理が走ります。処理の個別指定もコマンドライン引数から可能です。
# Optional post-processing for the generated FASTA.
[post_prep]
# Enable with CLI option: --post-prep
# Runtime step selection example:
# --post-prep-step primer_trim --post-prep-step duplicate_report
# Parameters are required only for enabled steps:
# - length_filter: sequence_length_min + sequence_length_max
# - primer_trim: primer_file + primer_set
# primer candidates: `python3 taxondbbuilder.py list-primer-sets -c configs/db.toml`
sequence_length_min = 120
# sequence_length_max = 300
primer_file = "configs/primers.toml"
primer_set = ["mifish_u","mifish_ev2","mifish_u2","mifish_l"]
# primer_set = ["mifish_12s", "mifish_ev2"]
primer_fileでプライマーに関する情報が記載されているconfigs/primers.tomlを指定しています。メタバーコーディングプライマーの情報をまとめているページの情報に基づいています。
# Primer definitions for [post_prep] primer trimming.
# Source: https://edna-blog.com/metaba-primer/ (accessed 2026-02-08)
# forward: primer candidates expected at 5' end
# reverse: primer candidates expected at 3' end (reverse-complement side is matched automatically)
# Fish (Osteichthyes, Chondrichthyes, Cyclostomata)
[primer_sets.mifish_u]
forward = ["GTCGGTAAAACTCGTGCCAGC"]
reverse = ["CATAGTGGGGTATCTAATCCCAGTTTG"]
[primer_sets.mifish_ev2]
forward = ["RGTTGGTAAATCTCGTGCCAGC"]
reverse = ["GCATAGTGGGGTATCTAATCCTAGTTTG"]
[primer_sets.mifish_u2]
forward = ["GCCGGTAAAACTCGTGCCAGC"]
reverse = ["CATAGGAGGGTGTCTAATCCCCGTTTG"]
[primer_sets.mifish_l]
forward = ["GCTGGTAAACCTCGTGCCAGC"]
reverse = ["CATAGCGGGGTATCTAATCCCGGTTTG"]
フォーマットに従えばオリジナルプライマーを使用することも可能です。
configs/primers.tomlの情報を使用する場合、primer_setにどのプライマーを指定するのか記載します。カンマ区切りで複数指定可能です。
詳細はコマンドラインのhelpかREADMEを参照下さい。
最終的に下記のようになりました。
[ncbi]
# Provide either in config or via env vars NCBI_EMAIL / NCBI_API_KEY.
email = "your.email@example.com"
api_key = "YOUR_API_KEY"
db = "nucleotide"
rettype = "gb"
retmode = "text"
per_query = 500
use_history = true
# delay_sec overrides default rate-limit delay.
# delay_sec = 0.34
# Output header format
[output]
default_header_format = "{acc_id}|{organism}|{marker}|{label}|{type}|{loc}|{strand}"
[output.header_formats]
simple = "{acc_id}|{marker}|{loc}"
verbose = "{acc_id}|{organism_raw}|{marker_raw}|{label_raw}|{type_raw}|{loc}|{strand}"
mifish_pipeline = "gb|{acc_id}|{organism}"
# Taxon options
[taxon]
# If true, do not expand descendants in taxon search.
noexp = false
[markers]
# Marker definitions are loaded from an external file.
file = "configs/markers_mitogenome.toml"
# Optional filters. If unset, no filtering is applied.
[filters]
filter = ["mitochondrion","ddbj_embl_genbank"]
properties = ["biomol_genomic"]
sequence_length_min = 120
sequence_length_max = 30000
# publication_date_from = "1990/01/01"
# publication_date_to = "2025/12/31"
# modification_date_from = "2024/01/01"
# modification_date_to = "2026/12/31"
# all_fields_include = ["12S"]
# all_fields_exclude = ["WGS"]
# raw = "complete[prop]"
# Optional post-processing for the generated FASTA.
[post_prep]
# Enable with CLI option: --post-prep
# Runtime step selection example:
# --post-prep-step primer_trim --post-prep-step duplicate_report
# Parameters are required only for enabled steps:
# - length_filter: sequence_length_min + sequence_length_max
# - primer_trim: primer_file + primer_set
# primer candidates: `python3 taxondbbuilder.py list-primer-sets -c configs/db.toml`
sequence_length_min = 120
# sequence_length_max = 300
primer_file = "configs/primers.toml"
primer_set = ["mifish_u","mifish_ev2","mifish_u2","mifish_l"]
# primer_set = ["mifish_12s", "mifish_ev2"]
実行
python3 TaxonDBBuilder/taxondbbuilder.py build -c TaxonDBBuilder/configs/db.toml -t 32443 -t 7777 -t 97265 -m 12s --output-prefix "MiFish" --dump-gb Results/MiFish_gb --workers 32 --resume --post-prep
╭──────────────── TaxonDBBuilder ─────────────────╮
│ Generic NCBI GenBank fetch + feature extraction │
╰─────────────── DB FASTA builder ────────────────╯
Run Summary
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Item ┃ Value ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ Config │ TaxonDBBuilder/configs/db.toml │
│ Taxids │ 32443, 7777, 1476529 │
│ Markers │ 12s │
│ Output │ Results/db/20260208/MiFish_multi_taxon__12s.fasta │
│ Filters │ filter, properties, sequence_length_max, sequence_length_min │
│ Dump GB │ Results/MiFish_gb │
│ Resume │ true │
└─────────┴──────────────────────────────────────────────────────────────┘
taxid 32443 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60358/60358 0:18:37
taxid 7777 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4500/4169 0:00:04
taxid 1476529 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 500/203 0:00:00
post_prep duplicate ACC records CSV:
Results/db/20260208/MiFish_multi_taxon__12s.fasta.duplicate_acc.records.csv
post_prep duplicate ACC groups CSV:
Results/db/20260208/MiFish_multi_taxon__12s.fasta.duplicate_acc.groups.csv
Result Summary
┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Metric ┃ Value ┃
┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ Total records │ 65358 │
│ Matched records │ 61882 │
│ Matched features │ 63041 │
│ Kept records │ 56014 │
│ Skipped duplicates (same acc+seq) │ 6131 │
│ Kept duplicates (same acc, diff seq) │ 17 │
│ Output │ Results/db/20260208/MiFish_multi_taxon__12s.fasta │
│ Log │ Results/db/20260208/MiFish_multi_taxon__12s.fasta.… │
└──────────────────────────────────────┴─────────────────────────────────────────────────────┘
WARNING: duplicate accessions with different sequences were kept. See log for details.
ACC-organism mapping CSV: Results/db/20260208/MiFish_multi_taxon__12s.fasta.acc_organism.csv
私の環境では20分程度で終了しました。
出力
標準で以下のファイルが出力されます。
データベース用Fastaファイル
出力先は**Results/db/YYYYMMDD/**です。ファイル名は、taxid{ID}__{marker}.fastaとなります。複数指定時はIDの部分がmulti_taxonになるか、makerの部分がmulti_markernになります。
下記のような一般的なFasta formatです。
>gb|PX940051.1|Anthias_nicholsi
CAAAGGCTTGGTCCTGACTTTACTATCAGCTCTAGCTAGGTTTACACATGCAAGTCTCCG
CAATCCTGTGAGGATGCCCTGTCCCTCCCATCGGGAGGCCAGGAGCGGGCATCAGGCACA
TTCCTATAGCCCACGACGCCTTGCTTAGCCACACCCCCAAGGGAACTCAGCAGTGGTAAA
TATTAAGCCATGAGTGAAAACTTGACTTAATTATGGCTAAGAGGGCCGGTAAACCTCGTG
...
>gb|PX940048.1|Syngnathus_fuscus
CAAAGGCCTGGTCCTAACTTTACTGTCCCCTATAGCTATACTTACACATGCAAGTATCCG
CACCCCTGTGAGAATGCCCTTCACCCTCTTATGAGACCAAGGAGCCGGTATCAGGCACAC
TTTGTAGCCCATAACACCTTGCTTAGCCACACCCCCAAGGGAACTCAGCAGTGATAAACA
Acession numberと生物種名の対応表
*.fasta.acc_organism.csvとして出力されます。列はacc_id, accession, organism_name, headerで構成されます。
以下のような構成となっています。
| acc_id | accession | organism_name | header |
|---|---|---|---|
| AB000667.1 | AB000667.1 | Paralichthys olivaceus | gb |
| AB006953.1 | AB006953.1 | Carassius langsdorfii | gb |
| AB016274.1 | AB016274.1 | Sigmops gracilis | gb |
| AB018224.1 | AB018224.1 | Coryphaenoides armatus | gb |
| AB018225.1 | AB018225.1 | Coryphaenoides yaquinae | gb |
Fasta headerの情報も併記されるので、データベース管理する用にでも使用して下さい。
実行ログ
出力FASTA.logの形式で出力されます。
# started: 2026-02-08T14:20:01.260333
# config: TaxonDBBuilder/configs/db.toml
# taxon input: ['32443', '7777', '1476529']
# taxids: ['32443', '7777', '1476529']
# markers: ['12s']
# output_prefix: MiFish
# dump_gb: Results/MiFish_gb
# from_gb: none
# resume: True
# post_prep: True
# post_prep.steps: primer_trim, length_filter, duplicate_report
# post_prep.sequence_length_min: 120
# post_prep.primer_file: <Path to dir>/TaxonDBBuilder/configs/primers.toml
# post_prep.primer_set: mifish_u, mifish_ev2, mifish_u2, mifish_l
# post_prep.primer_forward_count: 4
# post_prep.primer_reverse_count: 4
# workers: 32
# query taxid=32443: (txid32443[Organism]) AND ((("12S"[All Fields]) OR ("rrnS"[All Fields]) OR ("small subunit ribosomal RNA"[All Fields]))) AND (mitochondrion[filter]) AND (ddbj_embl_genbank[filter]) AND (biomol_genomic[prop]) AND (120[SLEN] : 30000[SLEN])
# query count taxid=32443: 60358
# query taxid=7777: (txid7777[Organism]) AND ((("12S"[All Fields]) OR ("rrnS"[All Fields]) OR ("small subunit ribosomal RNA"[All Fields]))) AND (mitochondrion[filter]) AND (ddbj_embl_genbank[filter]) AND (biomol_genomic[prop]) AND (120[SLEN] : 30000[SLEN])
# query count taxid=7777: 4169
# query taxid=1476529: (txid1476529[Organism]) AND ((("12S"[All Fields]) OR ("rrnS"[All Fields]) OR ("small subunit ribosomal RNA"[All Fields]))) AND (mitochondrion[filter]) AND (ddbj_embl_genbank[filter]) AND (biomol_genomic[prop]) AND (120[SLEN] : 30000[SLEN])
# query count taxid=1476529: 203
# kept records before post_prep: 56910
# post_prep primer trim: before=56910 after=56910 removed=0 trimmed_both=358 trimmed_left_only=51 trimmed_right_only=565 untrimmed=55936 dropped_empty=0 canonical_orientation=974 reverse_orientation=0
# post_prep length filter: before=56910 after=56014 removed=896
# post_prep duplicate_acc_report: total=56014 parsed=56014 unparsed=0 groups=6793 records=25683 cross_organism_groups=1360
# post_prep duplicate_acc_records_csv: Results/db/20260208/MiFish_multi_taxon__12s.fasta.duplicate_acc.records.csv
# post_prep duplicate_acc_groups_csv: Results/db/20260208/MiFish_multi_taxon__12s.fasta.duplicate_acc.groups.csv
# acc_organism_map: total=56014 mapped=56014 unmapped=0 unused_source_records=896 unique_accessions=55997 unique_organisms=15270
# acc_organism_map_csv: Results/db/20260208/MiFish_multi_taxon__12s.fasta.acc_organism.csv
# total records: 65358
# matched records: 61882
# matched features: 63041
# kept records: 56014
# skipped duplicates (same accession+sequence): 6131
# kept duplicates (same accession, different sequence): 17
# duplicate accessions with different sequences:
# - AH013008.2: 2 sequences
# - AH013009.2: 2 sequences
# - AH013010.2: 2 sequences
# - AH013011.2: 2 sequences
# - AH013012.2: 2 sequences
# - AH013013.2: 2 sequences
# - AH013014.2: 2 sequences
# - AH013015.2: 2 sequences
# - AH013016.2: 2 sequences
# - AH013017.2: 2 sequences
# - AH013018.2: 2 sequences
# - AH013019.2: 2 sequences
# - AH013020.2: 2 sequences
# - AH013021.2: 2 sequences
# - AP005998.1: 2 sequences
# - KJ643927.1: 2 sequences
# - OP326524.1: 2 sequences
# output: Results/db/20260208/MiFish_multi_taxon__12s.fasta
# finished: 2026-02-08T14:38:53.197825
実際に使用された検索クエリや処理ステップでどのように配列数が変化したのかなどを確認することが可能です。
配列がデータベース内でどのように重複しているか確認
何をしているかというと、配列に対して区別できない生物種リストをここで作成しています。その時のデータセットに応じたで生物多様性センターの「誤同定チェックシート」に関連する情報を提供するイメージですが、参考情報程度です。
*.fasta.duplicate_acc.records.csvと*.fasta.duplicate_acc.groups.csvが対象ファイルになります。
*.fasta.duplicate_acc.records.csvは最終出力Fastaの配列で共通しているものにグループIDを割り振った1行1レコードのテーブルデータになります。また、*.fasta.duplicate_acc.groups.csvはグループIDごとに関連するAccession IDと生物種名を1行にまとめたファイルです。
オオクチバス属 Micropterus を対象に確認すると*.fasta.duplicate_acc.records.csvは下記のような結果となっています(一部)。organism_nameかheaderをみてみると種名が2つあります。
group_id,sequence_hash,sequence_length,records_in_group,unique_accessions,unique_organisms,cross_organism_duplicate,acc_id,accession,organism_name,header
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,LC882225.1,LC882225.1,Micropterus_salmoides,gb|LC882225.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,LC069536.1,LC069536.1,Micropterus_nigricans,gb|LC069536.1|Micropterus_nigricans
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,OR380107.1,OR380107.1,Micropterus_salmoides,gb|OR380107.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,OR380106.1,OR380106.1,Micropterus_salmoides,gb|OR380106.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,OR380105.1,OR380105.1,Micropterus_salmoides,gb|OR380105.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,OR380103.1,OR380103.1,Micropterus_salmoides,gb|OR380103.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,OR379507.1,OR379507.1,Micropterus_salmoides,gb|OR379507.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,OR379506.1,OR379506.1,Micropterus_salmoides,gb|OR379506.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,OR379505.1,OR379505.1,Micropterus_salmoides,gb|OR379505.1|Micropterus_salmoides
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,LC474183.1,LC474183.1,Micropterus_nigricans,gb|LC474183.1|Micropterus_nigricans
...
*.fasta.duplicate_acc.records.csvの該当グループIDの情報を*.fasta.duplicate_acc.groups.csvで確認すると下記のようになっています。
group_id,sequence_hash,sequence_length,records_in_group,unique_accessions,unique_organisms,cross_organism_duplicate,accessions,organism_names
283,ca10abaa969662cded6eba24df2960dad3485719,169,10,10,2,true,LC069536.1;LC474183.1;LC882225.1;OR379505.1;OR379506.1;OR379507.1;OR380103.1;OR380105.1;OR380106.1;OR380107.1,Micropterus_nigricans;Micropterus_salmoides
347,e70f6788f9df280b99b5c2485bddf7ad26e2609e,947,9,9,2,true,HQ391896.1;MH301074.1;MH301075.1;MH301076.1;OK945939.1;OL339398.1;OL339402.1;OL693877.1;OM736837.1,Micropterus_salmoides;Micropterus_salmoides_salmoides
...
1行にどのAccession Numberとどの種が同一配列を持つのか確認することができますね。
ただ、1点注意点があります。*.fasta.duplicate_acc.groups.csvのseqeuence_lengthの列を見ると169と947の記載があります。169bpはMiFishの増幅領域の配列長ですが、947bpは12s rRNAの全長配列に近い値です。処理の中でbiopythonにてMiFishプライマーでトリミングを実施していますが、完全では無いためトリムされなかった配列はそのまま残ることがあります。
ここで期待しているのは増幅領域で判別できない種の情報を得ることです。そのため、増幅配列長よりかなり長い数値がsequence_lengthに記載されている場合は注意して下さい。
まとめ
メタバーコーディングで必ず必要になるリファレンスデータベースを作成するためのツールを作成しました。不完全なところはありますが、手元に分類群に依存しないオリジナルデータベース用のFastaを取得するには十分かなと考えています。
記事公開後も使い勝手が良くなるように更新すると思うので気になったら覗いてみて下さい。