u-ar’s blog

研究や技術について。もろもろ。

情報系の人がゲノム配列データを扱いたいときの暗黙知【GRCh, VCF, etc...】

はじめに

私はアルゴリズム・データ構造系の人なのでバイオインフォマティクスには詳しくない。

だが、圧縮文字列索引の性能評価を行うにあたって、ヒトゲノム、特に1000 Genomes Project (以下1KG)から取得した大量の配列を連結した文字列としてのヒトゲノムには大きな魅力がある。

なぜなら、以下の条件を満たすため。

  • 非常に巨大なデータで
  • 反復が非常に多く(圧縮しやすい)
  • indexingに実用的な意味がある

その一方で、いざ実物の塩基配列を取得してみよう!と思っても、バイオインフォマティクス界隈のファイル形式は独特であり、またどのように配列が推定されるのかというプロセスへの知識も必要になってきて面倒なのが実情である。

実際、自分が1KGのデータリポジトリを意気揚々と訪れたときには、謎の拡張子のファイルやとても塩基配列ではないようなファイルの羅列に圧倒された。結果的に、どれが何の役割を果たしているのか理解するのに結構な時間を要した。たぶん、バイオインフォマティクスの人としては常識・暗黙知の部類であり、わざわざ解説するまでもないことなのだろう。私としては全くそんなことはないので、逐一用語や拡張子をググりつつ極端に少ない日本語情報に辟易しながら英語Wikipediaをページ翻訳したりしていた。

現在ではふんわりと理解が進んだので、用語やデータ取得の過程について記録を残しておき、同様に困っている人への助けにしたい。ただし、あくまで情報系の人がデータを利用するためという観点からの説明であり、厳密ではないし、たぶん間違いはあるし、必要でないことにはまったく踏み込んでいないのに注意。

用語

GRCh38 / GRCh37 / hg38 / hg19

これらはヒトゲノムの「リファレンス配列」を指す言葉である。つまり、ヒトゲノムのお手本のようなもの。

まず人によってDNA配列には若干の差がある。したがって、「これがヒトゲノムだ!」という唯一の配列は存在しない。代わりに、集めた個体サンプルのデータを総合して「これがまあ、ヒトゲノムの見本として妥当だよね」ぐらいのノリで作られるのがリファレンス配列である。

だから、作り方 (サンプルの数、取ってくる地域、推定のやり方) によってリファレンス配列の内容は変わってくる。これが複数のリファレンス配列が存在する理由。これら一つ一つのリファレンス配列を「アセンブリ」とも呼ぶ。

  • GRChはGenome Research Consortium humanの略で、その後に続く数字が世代らしい。つまり、GRCh38はGRCh37の後に作られたもの
  • hgはhuman genomeの略で、GRCh38≒hg38、GRCh37≒hg19らしい。とりあえず今はGRCh38を使えばいい

VCF

ファイル形式の名前。hogehoge.vcf みたいなファイルがVCFを採用している。

Variant Call Formatの略であり、このファイルがやりたいことは

  • いろんな個体のサンプル配列を1ファイルにまとめたい!

ということ。

リファレンス配列はいろんな個体のサンプルを元に作られるわけで、元となった大量の個体ごとのサンプルも遺伝子を解析するうえで大事。かといって、各個体の塩基配列全体を一つ一つ保存していてはあまりに冗長だし、データがデカくなりすぎる。

どうせ塩基の大半は同じなのだから、リファレンス配列を基準として、違う部分だけを指定してまとめたファイルを作れば手間が大幅に削減できる!という考えで生まれたのがVCFということになる。ファイルの中身は表形式のテキストファイルになっていて、各列が個体を、各行がリファレンス配列と異なる箇所とその内容を指している。

ここまでくると、リファレンス配列とVCFファイルさえあれば、サンプル個体の配列が全て生成できることが分かってくるだろう。

1KGの個体サンプルの情報が集まったVCFファイルは Index of /vol1/ftp/data_collections/1000_genomes_project/release にある。ここにはSNVとSNV_INDELという二種のVCFが置いてあるので、それらの違いも説明すると...

SNVとINDEL

塩基配列の変異の種類を指すワード。SNVは Single Nucleotide Variants 、つまり塩基一つが別のものに変わった変異。INDELは INsertion/DELetion 、つまり塩基が欠損したり余分なものが挿入されていたりする変異。(他にもCNVというのもあるそう)

SNVとSNV+INDELだったら、より考慮されている変異が多いSNV+INDELを使うのがたぶん良い。ぶっちゃけ文字列として取り扱うならどっちでもいいが。

exome (エクソーム)

ゲノムの中でも、タンパク質を合成するために必要な情報を持つ部分のこと。要はゲノムのサブセット(単に情報系の視点から見れば)。ゲノムをデータとして使う際は用がない。

データを取得した過程

ここまで分かればあとは割と早い。

取得する必要があるのは2つ。

これらから、サンプルに対応する配列を生成する。これには bcftools を用いる。セットアップ等は情報系の得意領域なので説明の必要はないと思う。 github.com

これはVCFファイルからいろんな操作をしてくれるプログラムで、bcftools consensusコマンドにリファレンス配列とVCF、生成したいサンプル名をぶち込めば、目的の配列が得られる。ようやくゴール。

私の場合はここから生成した配列を全部連結してデータセットに仕立て上げるわけである。長い旅だった。