Bioinformaticsで使うファイルフォーマットまとめ
TL;DR
バイオインフォマティクスをしていて、障壁になることの1つにファイルフォーマットが多すぎることがあります。ツールを動かそうとすると出現するフォーマットが多く、どうやってこの形式のファイルを作ればいいんだ、ということはよくあります。備忘録を兼ねて、よく使うフォーマットと関連するツールについてまとめておきます。基本的なフォーマットは網羅しているはずですが、新しいフォーマットに出会えば追記していきます。
NGSでよく使うファイルフォーマット一覧
- fasta
- fastq
- sam/bam/cram
- bed
- bedgraph
- gtf/gff
- wig/bigwig
- vcf/gvcf/bcf
- maf (Mutation Annotation Format)
- paf (Pairwise mApping Format)
- plink (bed/bim/fam, ped/map)
- h5ad (AnnData) / mtx (Matrix Market)
- fast5 / pod5
上記はNGS中心のフォーマットです。質量分析ベースのプロテオーム系フォーマットは後半の「プロテオーム系ファイルフォーマット」にまとめています。
fasta
いろんな場面で使いますが、多分一番最初に目にすることが多いファイルフォーマットです。
>で始まるID行と、配列データそのものを保存する行に分かれています。配列行では改行が許されています。配列行ではIUB/IUPACで規定されている塩基配列コードとアミノ酸コードを使用できます。詳しくはWikipediaなどを参照してください。
fasta sample
例としては、以下のようなフォーマットになります。
使い道としては、
- blastdbの作成
- マルチプルアラインメントの作成
- 系統解析
- bowtie2やSTARなどのmapping toolのインデックスの作成
- bedファイルなどから配列データへのアクセス
などが主な使い道でしょうか。
fastaフォーマットを扱うツール
| tool name | description |
|---|---|
| seqkit | 基本的になんでもできる。golang で書かれていて、マルチスレッドにも対応しており高速 |
| samtools | faidxの作成とか、sam/bamをfastaに変換したりなど |
| picard | dictの作成 |
| bedtools | bedの情報から配列を抜くときなどに使う |
fastq
NGS解析で一番最初に作成されるファイルフォーマットです。厳密には画像データが一次データですが、シーケンサーを持っていてそこからデータを直接扱う立場でない限り、これ以前のファイルを見ることはないと思います。
fastqファイルには、NGSで読まれたリードの名前を示す@から始まるヘッダ行、配列、配列のクオリティが記載されています。また、配列と配列クオリティを分けるために+から始まるヘッダ行が配列と配列クオリティの間に置かれています。fastaフォーマットとは違い、配列、配列クオリティ行内では改行が許されていません。
fastq sample
例えばNCBIのSRAに存在するfastqは以下のようなフォーマットになります。
配列には、AGCTNのみが許されており、配列クオリティには、Phredクオリティスコア(下の式)というものが使われています。基本的に高いほどシーケンサーのエラーである可能性が低いです。最近のバージョンではサンガーの式が使われていますが、Wikipediaによるとオッズ比などが使われていることもあるそうです。実際には数字ではなくASCIIコードで33から126の文字としてエンコーディングされます。このエンコーディングはSAM/BAMフォーマットでも共通のものです。
このファイルフォーマットはクオリティコントロール程度にしか使われず、基本的にはSAM/BAMに変換してから扱うことが多い印象です。最近ではRNA-seqなどにはSAM/BAMを介さずそのまま発現量測定などをすることもあります。
クオリティコントロールツール
クオリティコントロールには以下のようなツールがよくつかわれている気がします。他にもいろいろあります。
マッピング・定量ツール (fastq -> SAM/BAM)
SAM/BAMに変換する際には、以下のようなMapping Toolが使われていることが多いように思えます。RNA-seqの際にはイントロン等を考慮する必要があるので、DNAを読むときとは別に処理が必要になり、専用のMapping Toolを使う必要があります。Bisulfite SequenceなどはDNAですが、処理が特殊なので専用のMapping Toolが必要です。
bulk NGS sequence
| tool name | description |
|---|---|
| bwa | Whole Genome Sequence, ChiP-Seq, ATAC-seq etc., |
| bowtie2 | Whole Genome Sequence, Chip-Seq, ATAC-seq etc., |
| hisat2 | RNA-seq、STARと比べると省メモリ |
| STAR | RNA-seq、メモリが結構必要、gatkなどの変異検出の際には推奨されている。quantmodeが存在し、発現量の定量も行ってくれる。 |
| Bismark | Bisulfite Sequencing |
その他にリードの分割やダウンサンプリングなどを行いたい場合にはfastaで紹介したようなseqkitなどが有用です。マージはcatとかでいいです。小ネタとしてgzip形式のものでもcatでマージできます。
bulkのRNA-seqでは以下のようなツールでSAM/BAMを介さずそのまま発現量テーブルを作成でます。また、これらのツールのほうが精度は高いらしいです。
この辺はCSVとかわかりやすい形式ではなく、よくわからない形式で出力されるのでR packageのtximportなどを使ってテーブル形式に変換します。変換の仕方などはこちらが参考になります。
scRNA-seq
scRNA-seqを扱う場合には、それ専用のツールがまたいろいろありますが、代表的なものとしては以下のようなものがあります。
| tool name | description |
|---|---|
| UMI-tools | もともとはUMIを扱うために作られたツール。正規表現でバーコードを扱うので、基本的になんでも扱える。MappingなどはSTARなど他のツールを使って行う必要がある。drop-seqとかsmart-seqとかのときに使えます。 |
| kallisto | bustools | kallistoとbustoolsを組み合わせてscRNA-seqを扱う。bulkのRNA-seq解析でも使われるツールの組み合わせ。 |
| Alevin | Salmonの開発元が提供しているscRNA-seqのための発現量定量ツール。UMI-Toolsよりはこっちが推奨されている |
| STAR-solo | STARの開発元が提供しているscRNA-seqのためのMapping Tool。Cellrangerと同一のアルゴリズムを使っていてCellRangerよりかなり早いらしい。 |
| cellranger | 10x Genomicsが提供しているツール。基本的に全部やってくれる。 |
miRNA-seq
miRNAの定量はイントロンとかないのでDNAと同じ感じでもいいのですが、isomirみたいな概念もあり、なんか色々ツールがあったりします。BAMとかじゃなくて独自形式に変換されていくものが多いです。独自形式を統一するための概念としてmirGFFというものが提案されていますが、かなり未成熟な印象があります。詳しくはmirGFF formatのところで書きます。
TCGAとかで扱われているmiRNA-seq解析はまた別のパイプラインが使われていたりします。
SAM/BAM/CRAM
マッピングを行ったあとに扱うようになるファイルフォーマットです。BAMはSAMをバイナリ化したものでフォーマットとしては同一です。CRAMはリファレンスFASTA情報を使ってさらに圧縮率を上げることができるフォーマットで、近年ではストレージ削減を目的にCRAMで保存するケースも増えています。あまりSAMのまま扱うことはなく、BAM/CRAMに変換されることが多いです。リードのヘッダ、配列、クオリティ、マッピング位置などほぼすべての情報が格納されています。情報が膨大なので、フォーマットの詳細はマニュアルを読んでほしいです。マニュアル以外の有用そうなリンクをまとめておきます。
SAM sample
例としてはこんな感じです。@から始まるヘッダ行とリードの情報が格納されているボディ部分に分かれています。
マニュアル以外の有用そうなリンク
- SAM Formatのcigar列の読み方(samtoolsとか)
- SamファイルのCIGAR string, MD tagから変異(mismatch&indels)を取得する
- Explain SAM Flags - GitHub Pages
- Strand-specific アラインメントの分割
基本操作
基本的にはsamtoolsを使えばたいていのことはできます。picardなども有用です。
可視化
どんなふうにリードが貼りついているのか、などを確認するのはクオリティコントロールの観点から重要です。IGVを使えば簡単に可視化できます。IGVは後述するGFF/GTFやbed、wig/bigwig、bedgraphなども可視化できるので、とりあえずインストールしておくべきツールです。
クオリティコントロール
duplicate readの除去や、マッピングクオリティによるフィルターなどを行うことがあります。基本的には先ほど上げたツールを使えば問題ないですが、少し複雑なフィルターがしたい時などには、deeptoolsのalignmentSieveコマンドが便利です。フラグメントサイズによるフィルターやStrand Specificなリードの抽出などを行えます。あとはbamUtilsを使えばリードのトリミングとかができます。
発現量の定量 (bam -> csv etc.,)
RNA-seqを行った後に行う代表的な解析は、発現量の定量です。ツールとしては色々ありますが、代表的そうなものを紹介します。cuffdiffなんかは有名ですが使用は推奨されていないようです。
| tool name | description |
|---|---|
| featureCounts | GFF/GTFデータをもとにカウントしてくれます。最近kallistoの作者が推奨しないツイートをしたみたいなのを聞いたのですが、ソースがあれば教えてください |
| RSEM | bowtie2とSTARを使ってカウントまでやってくれます。BAMも出力するのですが、入れるべき場所がわからなかったのでここで紹介しておきます。GFF/GTFが必要です。 |
| salmon | alignment based modeを使えばbamからカウントもできます。fastaが必要です。 |
遺伝子アノテーション (bam -> gff/gtf)
RNA-seqデータからtranscript assemblyを行う場合などに使います。代表的なツールは以下の通りです。
| tool name | description |
|---|---|
| StringTie | HISAT2やSTARの出力したBAMからtranscriptを再構築し、GTFとして出力する。RNA-seqからのnovel transcript検出などに使われる |
| Cufflinks | かつて広く使われていたが、現在はStringTieへの移行が進んでいる。 |
| Scallop | StringTieと同様にBAMからtranscriptを再構築するツール |
変異の検出 (bam -> vcf)
SAM/BAMフォーマットからVariant Call Format(VCF)に変換するステップと考えてもいいです。基本的にはSNVの検出を想定しており、SVなどは考慮していません。よく使われていそうなツールは以下のようなものがあります。
| tool name | description |
|---|---|
| bcftools | mpileupコマンドでSNVの検出ができます。BAQ補正をすることでFPが出にくいらしいです |
| freebayes | ベイズ推定を用いたvariant caller。小規模な解析で手軽に使えます。 |
| gatk | 多分一番有名なツールです。非常に処理が煩雑ですがbest practiceが公開されています。 |
| DeepVariant | Google製。ディープラーニングベースのvariant callerで、ショートリード・ロングリードの両方に対応している |
samtools mpileupは現在variant callingの用途には非推奨とされており、bcftools mpileup を使うのが推奨されています。
ピークのコール (bam -> bed etc.,)
ChIP-seqなどではリードが集中した領域をピークとして扱うことが多いです。この時もBAMから何らかのフォーマットへの変換が行われます。たいていはbedに準ずる形式へと変換されます。代表的なツールは以下のようなものがあります。また、転写因子に関するChIPでは狭いピークが、ヒストン修飾などのChIPでは広いピークが見られます。これらは、検出方法が異なるので、ツールやオプションを使い分ける必要があります。たいていbedかそれに準ずる形式のファイルに変換されます。
| tool name | description |
|---|---|
| MACS2 | 一番多く使われている気がします。narrowなピークの検出によく使います。最近はbroadにも対応しているらしいです。 |
| Homer | narrow、broad両方で使えます。そのあとのMotif enrichmentなどもできて便利です。pos形式という独自形式で出力されますが、pos2bed.plみたいなbed形式の変換もサポートされています。 |
| SICER2 | broadなピークの検出に使えます。 |
htslib
samtoolsの本体です。SAM/BAMフォーマットを扱う際のAPIを提供しています。凝ったことをしたくなると使います。もともとはCで書かれていて、いろんな言語でWrapperが作成されています。個人的に知っているのは以下です。GitHubへのリンクを貼ります。
- pysam
- rust-htslib
- hts-nim
- htsjdk (Java)
- noodles (Rust、pure Rust実装)
各種変換
bam -> fasta
変換する用途があまり思い浮かびませんが、samtoolsを使えばできます。
bam -> fastq
samtoolsとかbedtoolsを使えば変換できます。あまり使うことはない気がします。k-merとか使って機械学習したいときとかにマップされたリードだけ使う、などの用途が考えられます。
bam -> bed
samtoolsとawkでできる気はしますが、bedtoolsを使うと簡単です。
bam -> bedgraph
bedtoolsのgenomecovかdeeptoolsのbamCoverageで変換できます。
bam -> bigwig
deeptoolsのbamCoverageを使います。オプションとかは色々あって、ノーマライズなどもしてくれたりします。ChIPなどの解析の際にも、RPGC normalizeに対応しているので使えます。RNA-seqでもRPKMやCPMに対応しています。TPMにも対応してほしいです。
bed
bedtoolsなどで扱います。Pythonなどではpybedtoolsのようなライブラリが提供されています。最初の三行(chrom, chromStart, chromEnd)が必須で、その他が自由なフォーマットです。一応ある程度は決まっていて、UCSCのFAQでは、
- chrom: 染色体名
- chromStart: スタート位置(0-index)
- chromEnd: 終了位置
- name: 遺伝子名など
- score: 任意のスコア(track上での色の濃淡とかに反映される)
- strand: strand (+, -)
- thickStart: CDSの開始位置
- thickEnd: CDSの終了位置
- itemRgb: track上でのRGBカラー
- blockCount: exonのブロック数
- blockSizes: ブロックサイズ
- blockStarts: exonの転写開始位置から見たスタート位置
という風に決まっているそうです。7行目以降は可視化する際に使われるパラメーターです。最初の三行のみのBEDをBED3、6行目までのBEDをBED6、12行目までのBEDをBED12と呼んだりします。三行目までのデータがあればbedtoolsで扱うことができます。またフォーマットは微妙に異なるのですが、GFFとかVCFもbedtoolsで扱えます。そういう意味では非常に基本的なフォーマットです。
bed -> fasta
bedtoolsのgetfastaを使うことで変換できます。興味のある領域のbedを作成した後、getfastaで配列を取得してMotif Enrichmentを行うなどの使用用途があります。
bed -> bam
bedtoolsのbedToBamで変換できます。ただmutation情報などは失われます。
bedgraph
Bedの亜種っぽい感じです。ProbabilityやTranscriptomeなど連続性のあるデータを表示させるために使われるフォーマットらしいです[参考]。あまり使ったことがありませんが、Bisulfite Sequenceの解析の際にMethylDackelというツールを使うと出てきました。MACS2のinput/outputでも使われてます。
gff/gtf
遺伝子のアノテーションなどは基本的にこのフォーマットでまとまっていることが多いです。GFFにはversion2とversion3があり、微妙にフォーマットが違います。また、GFF/GTFを扱うツールとしては以下のようなものがあります。
| tool name | description |
|---|---|
| gffread | GFF/GTFの相互変換、bedへの変換、配列の抜き出しなど |
GFF format
- chrom: 染色体番号や、Scaffold番号など
- source: 何をもとに作られたか、どこのデータかなど
- feature: CDS, exon, gene, five_prime_utrなど
- start: featureの開始位置
- end: featureの終了位置
- score: なにかのスコア
- strand: (+, -, .)。
.は方向が不明な際に使われる。 - frame: coding exonの場合はどのフレームなのかが書かれている。
- attribute: 他のデータがセミコロン区切りで入力されている。gene_idや、parent_idなど。
GFF3 sample
GTF format
基本的にGFFと同じですが、9行目が厳格に決められており、gene_idとtranscript_idを持たなければならない。また、#によるコメントが許されていなかったりする。
GTF sample
gff/gtf -> fasta
gff/gtf -> bed
wig/bigwig
bigwigはwigをバイナリ化したものです。UCSC genome browserで可視化するときに使用されている形式です。bigwigなどはbamとかと比べると本当に軽いので、可視化などが目的のときは最もおすすめできるフォーマットです。また、deeptoolsを使うことで、ヒートマップやPCA、相関解析などを行えます。deeptoolsは高機能なのでこれはこれで記事が書きたいです。あとオープンソースなのでGithubのコードを読むと勉強になります。Pythonで書かれています。
vcf/gvcf/bcf
変異情報が格納されているフォーマットです。samtoolsと同じところがフォーマットを決定しており、現状はver4.2です(4.3、4.4も策定済み)。非常に情報量が多いフォーマットなので、詳細はマニュアルを参照してください。
VCFはテキスト形式で、人間が直接読むことができます。gVCF(genomic VCF)は変異がコールされていない領域(ホモリファレンス)の情報を加えて含んでおり、gatkのJoint Genotypingワークフローで中間ファイルとして登場します。詳しくは公式ページなどを参照してください。BCFはVCFをバイナリ化したもので、BAMがSAMに対して担う役割と同様です。bcftoolsはBCFをネイティブに扱えるので、大規模なVCF操作ではBCF経由のほうが高速になります。
vcfを扱うツールとしては以下のようなものが有名です。ただvcfに関してはプログラム組んで動かした方が早い気もします。
| tool name | description |
|---|---|
| bcftools | mergeやsplit、intersectなどを行える。早い。 |
| vcftools | mergeやsplit、intersectなどをおこなえる。bcftoolsより多機能。 |
| SnpSift | 変異のフィルタリングなど。vcflibでも似たようなことができる。Javaで書かれているのでC++で書かれているvcflibのほうが早い気がするがベンチマークなどはとっていない。 |
| vcflib | 変異のフィルタリングなど。C++で書かれているので、高速そう。 |
| snpeff | VCFにアノテーションを付け、各種集計を行う。 |
プログラミング言語として扱えるパッケージはいろいろありますが、htslibのWrapper系列は大体対応しています。タブ区切りのファイルなので、Pythonならpandas等でも扱えます。他には、
などが候補です。
vcf sample
##から始まるヘッダ行とそれ以外のボディ部分に分かれています。
dbSNPs
よく知られているSNPsなどはデータベースとしてまとまっていて、これらは基本的にvcfフォーマットで配布されています。broadinstituteのgoogle cloud platformとかで配布されています。
maf (Mutation Annotation Format)
TCGAをはじめとするがんゲノムプロジェクトでよく使われるタブ区切りのフォーマットです。VCFに対してアノテーション(遺伝子名、変異影響予測、サンプル情報など)を加えてサンプル間で扱いやすく整形したものです。UCSCのMultiple Alignment Formatと名前が同じですが、別物なので注意してください。TCGAで配布されているMAFは基本的に変異アノテーション用のMAFを指します。
仕様は GDC MAF Format を参照してください。VCFからMAFへの変換にはvcf2mafがよく使われます。R/Bioconductorには maftools があり、サマリー描画やoncoplotの作成などが簡単にできます。
paf (Pairwise mApping Format)
minimap2などロングリードのアライナーで使われる、ペアワイズアラインメントを表現するタブ区切りフォーマットです。SAM/BAMよりもシンプルで、各行にクエリ配列とターゲット配列のマッピング位置、マッチ数、アラインメント長などが記録されます。仕様はPAF: a Pairwise mApping Formatを参照してください。
PacBio / Oxford Nanoporeのアセンブリやリード-to-リードの重なり検出(miniasmなど)でよく目にします。SAMに変換するにはminimap2の -a オプションをつけるだけです。
plink形式 (bed/bim/fam, ped/map)
GWASやpopulation geneticsで標準的に使われる、PLINKのファイル形式です。VCFとは別物で、NGSのSAM/BAMで使うbedとも全くの別物なので初見では非常に紛らわしいです。
テキスト形式のped/mapはpedに個体ごとの遺伝子型、mapにSNP座の情報が格納されます。バイナリ形式のbed/bim/famはbedにバイナリ化された遺伝子型行列、bimにSNP情報、famに家系・表現型情報が格納されます。大規模なデータではバイナリのbed/bim/famを使うのが一般的です。VCFとの相互変換はplink --vcf ...で行えます。新しいPLINK 2.0ではpgen/pvar/psam形式が導入されています。
関連ツール:
| tool name | description |
|---|---|
| PLINK 1.9 / 2.0 | 本体。フィルタリング、association study、LD計算など何でもできる |
| BCFtools | bcftools +plink2vcf などのプラグインで相互変換可能 |
| Hail | Python/Spark上で大規模ゲノムデータを扱う。PLINK形式の読み書きをサポート |
h5ad (AnnData) / mtx (Matrix Market)
scRNA-seqの発現量テーブルを保存する際のデファクトスタンダードです。
mtxはMatrix Market形式で、疎行列をテキストで表現します。Cell Rangerの生出力はmatrix.mtx.gz、barcodes.tsv.gz、features.tsv.gzの3点セットで、scanpy.read_10x_mtxやSeuratのRead10Xで読み込めます。
h5adはAnnDataのオンディスク表現(HDF5ベース)で、細胞メタデータ、遺伝子メタデータ、count行列、低次元埋め込みなどを1ファイルにまとめられます。scanpyやscvi-toolsのエコシステムで事実上の標準になっています。
他にHDF5ベースのloom(linnarsson labが策定、velocytoなどで使用)や、クラウドネイティブな配列ストレージであるzarrもあります。AnnDataはzarrバックエンドにも対応しており、大規模アトラスではこちらが使われることも増えてきました。
R側ではSeuratの.rdsやSingleCellExperimentが対応物ですが、.h5adと.rds間のやり取りはzellkonverterやanndata2riを使うのが便利です。
fast5 / pod5 (Nanopore raw signal)
Oxford Nanopore Technologies (ONT) のシーケンサーが出力する生のシグナルデータ(squiggle)を格納するファイル形式です。
fast5はHDF5ベースで、長らくONTの標準でしたが、容量が大きく、ファイル数も膨大になりがちでした。pod5はONTが2022年以降に導入した新フォーマットで、読み込みが高速かつファイルサイズも削減されており、現在のONTの推奨形式になっています。
シーケンサーから出てきたこれらのファイルをdoradoなどのbasecallerに通すとFASTQやSAM(unaligned BAM)として塩基配列が得られます。methylation情報もSAM/BAMのタグとして埋め込まれるので、意外と扱うのはBAMになります。
PacBioの対応物としてはHiFi / CCS BAMがあり、こちらはunaligned BAMとして配布されることが多いです。
インデックスファイル (fai / dict / bai / csi / tbi)
フォーマットというよりは補助ファイルですが、ツールが要求してくるので把握しておくと便利です。
| ファイル | 対象 | 作成コマンド | 説明 |
|---|---|---|---|
.fai | fasta | samtools faidx ref.fa | FASTAのランダムアクセス用インデックス |
.dict | fasta | samtools dict ref.fa > ref.dict | GATK/Picardが要求するシーケンス辞書 |
.bai | bam | samtools index input.bam | BAMのインデックス。従来から使われている形式 |
.csi | bam / vcf | samtools index -c input.bam | 大きな染色体(>512Mbp)にも対応したインデックス |
.tbi | vcf.gz, bed.gz, gff.gz | tabix -p vcf input.vcf.gz | tabixによる汎用タブ区切りファイルのインデックス |
.crai | cram | samtools index input.cram | CRAM用インデックス |
これらのインデックスファイルは元ファイルと同じディレクトリに置く必要がある点に注意してください。GATKのように.faiと.dictの両方を要求するツールもあり、片方だけだとエラーになります。
プロテオーム系ファイルフォーマット
ここまでNGS中心のフォーマットを扱ってきましたが、質量分析ベースのプロテオミクスも独自の一大ファイルフォーマット圏を形成しています。触っているツール群がNGSとほぼ重ならないので、別セクションとしてまとめます。筆者自身はプロテオーム解析にあまり詳しくないので、間違いがあればご指摘いただけると助かります。
プロテオーム系でよく出会うフォーマット一覧
- vendor RAW(Thermo
.raw/ Bruker.d/ Waters.raw/ SCIEX.wiff/ Agilent.d) - mzML / mzXML
- mgf (Mascot Generic Format)
- mzIdentML / mzTab / pepXML / protXML
- スペクトルライブラリ(
.msp/.sptxt/.blib/.dlib/.elib) - MaxQuantやFragPipeの出力(
proteinGroups.txt、evidence.txtなど) - pdb / mmCIF (PDBx) / BinaryCIF(タンパク質構造)
vendor RAW
質量分析装置から直接出てくるファイルはベンダー依存のバイナリ形式です。代表的なものとしてはThermo Fisherの.raw(単一ファイル)、Brukerの.d(ディレクトリ)、Watersの.raw(ディレクトリ)、SCIEXの.wiff / .wiff2、Agilentの.d(ディレクトリ)などがあります。読み書きできるツールがベンダー純正かライセンスDLLに依存するため、多くの場合はProteoWizardのmsconvertでオープンな中間形式(mzMLやmgf)に変換してから解析します。
msconvertはWindows専用バイナリが基本ですが、Dockerイメージも配布されており、LinuxやmacOSでもコンテナ経由で動かせます。
mzML / mzXML
HUPO PSI (Proteomics Standards Initiative) が策定しているオープンな質量分析データ形式です。XMLベースで、MS1 / MS2スペクトル、m/z配列、intensity、retention time、各種フラグメントメタデータなど一通り格納できます。mzXMLは先行して作られていた古い形式で、現在はmzMLへの移行が進んでいます。
スペクトル数が増えると容量が大きくなりがちなので、バイナリ効率を上げたmzMLb(HDF5ベース)や、近年はParquet / Zarrベースの新フォーマットも提案されています。PythonからはpyteomicsやpyOpenMSでmzMLを扱えます。
mgf (Mascot Generic Format)
MS/MSスペクトルをシンプルなテキスト形式で並べたピークリスト形式です。Mascot検索エンジンの入力として生まれましたが、今では多くの検索エンジンが入力として受け付けます。構造が単純なので自作スクリプトでパースしやすいのが利点です。
同定結果フォーマット (mzIdentML / mzTab / pepXML / protXML)
検索エンジン(MaxQuant、Mascot、MSFragger、Comet、X!Tandemなど)の出力として使われるフォーマットです。mzIdentML(.mzid)はHUPO PSIのXMLベース標準で、PSM(Peptide-Spectrum Match)や同定タンパク質の情報を格納します。mzTabはタブ区切りの同定結果サマリで、シンプルに扱えるため下流解析で重宝します。pepXMLとprotXMLはTrans-Proteomic Pipeline(TPP)系列の古いフォーマットで、PSMレベル(pepXML)とタンパク質レベル(protXML)に分かれています。
実務ではmzTabや、MaxQuantのproteinGroups.txt / evidence.txtといったタブ区切りテキストを直接扱うケースが多い印象です。
スペクトルライブラリ
DIA(Data-Independent Acquisition)やターゲテッド解析で使われる、過去に同定されたMS/MSスペクトルを溜めておくためのライブラリ形式です。NIST MS Searchの.msp、SpectraSTの.sptxt、Skylineの.blib、EncyclopeDIAの.dlib / .elibなどが代表的です。最近は機械学習ベースの予測ライブラリ(Prositや、DIA-NNの内蔵予測器など)を使うケースも広がっています。
プロテオミクス関連ツール
| tool name | description |
|---|---|
| ProteoWizard | msconvertでvendor rawをmzMLやmgfに変換できる |
| MaxQuant | label-free / TMT / SILAC対応のフリー検索ソフト。Perseusで下流解析 |
| FragPipe / MSFragger | 高速なOpen SearchおよびClosed Searchに対応する検索エンジン |
| OpenMS | オープンソースのMSデータ処理フレームワーク。pyOpenMSでPythonからも扱える |
| Skyline | ターゲテッドプロテオミクス向けのGUIツール、DIAにも対応 |
| DIA-NN | DIAデータ解析ソフト、機械学習ベースの予測ライブラリを内蔵 |
| pyteomics | PythonからmzML / mgf / pepXMLなどを扱うライブラリ |
| sage | Rust製の高速プロテオーム検索エンジン |
タンパク質構造 (pdb / mmCIF / BinaryCIF)
同じく「プロテオーム系」で外せないのがタンパク質構造ファイルです。AlphaFoldやESMFoldなどの構造予測ツールが普及したことで、バイオインフォ的な文脈でも構造ファイルを扱う機会が格段に増えました。
PDB形式(.pdb)は歴史的に一番使われている80カラムの固定幅テキスト形式です。1行1原子で読み書きしやすい反面、大きな複合体や残基番号の桁数に制限があり、RCSBでは非推奨化が進んでいます。mmCIF(PDBx、.cif)は現行の推奨形式で、PDBの制限を解消しており、RCSBもAlphaFold DBもこちらをメインに配布しています。XMLフレーバーのPDBML(.xml)や、mmCIFのバイナリ版であるBinaryCIF(.bcif)もあり、後者はMol*などのWebビューアで高速ローディングに使われます。
構造ファイルを扱うツールとしては以下のようなものがあります。
| tool name | description |
|---|---|
| PyMOL | 構造可視化のデファクト |
| ChimeraX | 可視化および解析、大規模構造やクライオEM密度マップに強い |
| Biopython Bio.PDB | PythonでPDB / mmCIFを扱う |
| gemmi | 結晶学・構造のC++ / Pythonライブラリ、高速で安定 |
| Mol* | ブラウザベースの構造ビューア、RCSB公式のビューアでもある |
| Foldseek | 構造ベースの類似検索、AlphaFold時代以降の必携ツール |
X線の結晶構造解析や電子顕微鏡の密度マップ側では、.mtz(反射データ)、.mrc / .map(3D密度マップ)、.cif(反射データのCIF版)といった形式もあります。この辺りは筆者の専門からは外れているので、gemmiやMRC formatのドキュメントを参照してください。
たまに使うファイルフォーマット
- twobit
- mirGFF
- chain / liftover
- cool / mcool / .hic (Hi-C)
twobit
deeptoolsを使ってGCBiasを補正するときに使いました。他に使ったことはないです。たぶんfastaをビット形式で扱っているので、効率がいいです。UCSCのツール群にあるfaToTwoBitを使えば作成できます。もう少し詳しい使い方などはこちらのサイトが詳しいです。
mirGFF
GFFに準拠したようなフォーマットでmiRNA系のNGSデータを統一的に扱うために策定されたフォーマットです。昔見たときはbioaxivだったんですが、最近論文になっているようです(Desvignes et al., 2020 Bioinfomatics)。様々な形式から相互変換ができるフォーマットでmirtopというパッケージを使って作成できます。miRNA-seqで使われているツールとしては以下のようなものがあります。なんか昔はエンコーディングが対応してなくて変換できない、とかだったんですが修正されているのでしょうか。
これらのツールは独自形式のものを出力することが多いのですが、mirTopを通すことで、以下のようなフォーマットに変換できます。
- mirGFF3
- isomiRs
- VCF
- fasta
- count matrix
また、isomiRsというのはisomiRを考慮した解析するisomiRsというR packageで用いられている形式になります。
chain (coordinate liftover)
ゲノムアセンブリのバージョン間(例: hg19 → hg38)で座標を変換するためのフォーマットです。UCSCが定めたもので、CrossMapやUCSCのliftOverツールが扱います。VCFやBEDをlift overするときにhg19ToHg38.over.chain.gzのようなファイルをダウンロードして使います。
GATKのLiftoverVcfも選択肢の1つで、REF alleleの反転チェックなどもしてくれます。
cool / mcool / .hic (Hi-C)
Hi-Cなどの3Dゲノム解析で得られる接触行列を格納するためのフォーマットです。
.hicはAidenラボのJuicerが出力する形式で、Juiceboxで可視化できます。coolとmcoolはcoolerライブラリが扱うHDF5ベースの形式で、mcoolは複数解像度の接触行列をまとめたものです。HiGlassでの可視化によく使われます。
相互変換はhic2coolやcoolerが提供しています。
最後に
思ったよりすごい分量になってしまいました。間違いなどがあればご指摘いただけると幸いです。
2026年時点の追記として、ロングリード関連(pod5、PAF、unaligned BAM)、シングルセル関連(h5ad、mtx)、GWAS・がんゲノム関連(PLINK、MAF)、Hi-C関連(.cool、.hic)のフォーマットを追加しました。あわせて質量分析ベースのプロテオーム系フォーマット(mzML、mgf、mzIdentMLなど)やタンパク質構造ファイル(pdb、mmCIF)もまとめて追加しています。