分析と広告のためのCookie
分析と広告のためにCookieを使っており、どちらもGoogleに送られます。拒否しても、目に見える動作は何も変わりません。プライバシーポリシーを読む
TSV
CSV と同じ考え方で、区切りがタブ。だからフィールドの中のカンマという問題がそもそも起きません。
TSV
TSV はプレーンテキスト形式です。どのエディターでも開けます。 プログラム間のデータ受け渡しのために使われます。
拡張子は .tsv、正式名称は Tab-Separated Values です。ただしどちらも、そのファイルが中に何を持てるかほどには多くを語りません。このページの残りは、その中身についての話です。
1993 年までさかのぼります。 仕様は IANA text/tab-separated-values です。
これだけ長く読まれ続けてきた形式なら、10 年後に取り出したいものを預けても大丈夫です。
仕様書がそのまま公開されているので、中身を推し量るのではなく文書を読んで実装できます。この形式が数多くのプログラムに載っているのはそのためであり、20 年前に書かれたファイルが今も開けるのもそのためです。ただし「仕様が公開されている」ことと「使用料が要らない」ことは別の話です。中でコーデックを包んでいる形式では、特許のライセンスは仕様書が答えていない別の問題として残ります。
TSV ファイルは中身をそのまま保存します。保存し直しても何も変わらないので、開いて、直して、また保存する——それを何度繰り返しても劣化は積み上がりません。これが、渡すための形式ではなく作業のための形式である理由です。
TSV ファイルにはコメントを書く方法がありません。説明にあたるものはすべてファイルの外に置くことになります。人が手で面倒を見る用途にこれを選ぶ前に、知っておくべきことです。
Microsoft Excel、LibreOffice Calc、pandasが読めますし、同じ種類のプログラムならたいてい読めます。
ファイルが開かないとき、形式が悪いことはめったにありません。たいていはプログラムのほうが形式より古いのです。もっと古い形式に変換してしまうのが確実な逃げ道で、このサイトの残りの部分はそのためにあります。
これを読めるブラウザーはありません。
これを変換するいちばんよくある理由がこれです。形式が悪いのではありません。ファイルを見せたい場所が、それを読めないというだけのことです。
TSV は、開いて手を入れるために作られています。作業が続いているあいだはこの形式でファイルを持ち、完成したものが必要になるたびに、ここから書き出してください。
繰り返し挙がる不満はこれです。列の型が、読み込み時に伝えられるのではなく推測される。
どれも、この形式を避ける理由にはなりません。どれかに不意を突かれる前に知っておくべきことがら、というだけです。これは別の主張であり、そして役に立つほうの主張です。
カンマは実際のデータの中に絶えず現れます。住所、社名、商品説明、あらゆる自由記述のテキストです。CSV はこれを引用符のルールで扱いますが、そのルールこそがこの形式が崩れる原因です。カンマを含む引用符付きフィールドの中に引用符自体が含まれる場合は仕様上有効ですが扱いにくく、CSV を読めると謳うツールの半分は実装が一貫していません。
タブ文字はフィールドの中にほとんど現れません。フォームやデータベースにタブを打ち込む人はいないからです。そのため TSV はたいてい引用符の仕組みをまるごと省けます。各行をタブで分割すればフィールドが正しく得られ、状態遷移機械も特殊なケースも必要ありません。これがこの形式の主張のすべてで、乱雑な実世界のデータに対しては説得力のある主張です。
バイオインフォマティクスでは、ゲノムの注釈ファイルや発現行列、変異のテーブルが当然のようにタブ区切りです。コマンドラインでのデータ作業でも、標準的な Unix のツールが空白で分割するため、引用符付きの CSV とは違い、タブ区切りのファイルはそこでは一級の存在です。
大きな公開データセットやデータベースのエクスポートもそうです。データにカンマや文章が含まれ、書き出す側が引用符のことをあれこれ考えたくない場合です。.tsv や .tab ファイルを渡されたなら、こうした世界のどれかから来ています。
タブの美点は、同時に欠点でもあります。目に見えないのです。ある場所にタブが、別の場所に四つのスペースがあるファイルは、エディター上では同じに見えても、解析結果はまったく違います。末尾に余分なタブが付いた値も、付いていない値と見分けがつきません。
これが一番厄介なのは、ファイルが手作業で編集されたり、どこかでスペースを使ったスクリプトで組み立てられたりした場合です。まともなエディターならたいてい空白文字を表示できるので、TSV に触る前にそれを有効にしておく二秒の習慣が、一時間分の混乱を防いでくれます。フィールドの中身を確認せずに文字列連結で TSV を組み立てるべきではない理由でもあります。
IANA の仕様は妥協がありません。フィールドはタブや改行を含んではならない、それだけです。エスケープの仕組みはなく、それがまさに解析を単純に保っている理由です。
実際には二つの慣習が生まれています。C 言語から借りたバックスラッシュのシーケンスでエスケープする書き出し側もあれば、CSV 式の引用符を上乗せする書き出し側もあり、これは TSV が避けようとしていたものをすべて呼び戻してしまいます。どちらも普遍的ではないため、埋め込まれたタブを含むファイルは、読み込む側が書き出した側と一致していなければなりません。フィールドの中に本当にタブや改行が含まれるなら、正しい引用符を使う CSV のほうが誠実な選択です。
Excel は取り込みダイアログを通せば .txt や .tsv を正しくタブとして扱えますが、.tsv をダブルクリックすると、拡張子に何が登録されているかによって、あまり役に立たない結果になることがあります。CSV を台無しにするのとまったく同じ型の推測も適用され、先頭のゼロが消え、コードが日付になり、長い識別子が精度を失います。
つまり助言は CSV の場合とまったく同じです。開くのではなく取り込みとして読み込み、扱いに困る列はテキスト型に指定してください。受け取る相手がプログラムではなく人であれば、代わりに XLSX を送って推測そのものをなくしてしまうのも手です。
ファイルの行き先が分からない場合は CSV です。アップロードフォームや取り込みルーチン、業務ソフトが名指しで期待しているのは CSV で、どちらか一方しか受け付けないツールは CSV を受け付けます。
両端を自分で管理していて、データがカンマや引用符、自由記述のテキストだらけの場合、あるいはコマンドラインでの作業なら TSV です。解析はより単純で、失敗も少なく、引用符のルールについて合意する必要もありません。
両者の変換は一方向は機械的で、もう一方向は注意が必要です。CSV から TSV へは、どのフィールドにもタブが含まれていないことを確認する必要があり、TSV から CSV へは、カンマを含むフィールドに引用符を追加する必要があります。どちらかを省く変換ツールは、一見正しく見えて実は列が静かにずれたファイルを作ってしまいます。
TSV はストリームで読めます。これがもう一つの目立たない利点です。どんな大きさのファイルでも全体を読み込まずに一行ずつ処理でき、数ギガバイトのエクスポートでも、同等のスプレッドシートでは不可能な扱い方ができます。
本当に大きく、繰り返し分析するデータには Parquet のほうが良い行き先です。列指向で、圧縮されていて、型を持ち、実際に行うクエリーに対して劇的に速くなります。TSV は受け渡しには正しい形式ですが、百回読み返すデータセットには不向きな形式です。
| 拡張子 | .tsv, .tab |
|---|---|
| メディアタイプ | text/tab-separated-values |
| 初版 | 1993 |
| 仕様 | IANA text/tab-separated-values |
どんなテキストエディターでも表示でき、どのスプレッドシートソフトも取り込めます。Excel ではダブルクリックではなく「データ」から「テキストまたは CSV から」を使い、列の型を指定できるようにしてください。タブは目に見えないため、エディターで空白文字の表示を有効にしておく価値があります。
区切り文字と、そこから生じる違いです。カンマは実際のデータの中に絶えず現れるため、CSV にはツールによって実装が一貫しない引用符のルールが必要です。タブはデータの中にほとんど現れないため、TSV はたいてい引用符をまったく必要とせず、解析が単純で失敗も少なくなります。
ファイルの行き先が分からない場合は CSV です。アップロードフォームや取り込みルーチンが名指しで期待している形式です。両端を自分で管理していて、データがカンマや自由記述のテキストだらけの場合、あるいはコマンドラインでの作業には TSV です。
仕様ではこれは禁止されていて、標準的なエスケープ方法もありません。バックスラッシュのシーケンスを使う書き出し側もあれば、CSV 式の引用符を使う書き出し側もあり、どちらも普遍的ではありません。フィールドに本当にタブや改行が含まれるなら、正しい引用符を使う CSV のほうが誠実な形式です。
CSV を台無しにするのと同じ型の推測が原因です。先頭のゼロが消え、コードが日付になり、長い識別子が精度を失います。開くのではなく取り込みとして読み込み、該当の列をテキスト型に指定するか、相手が人であれば XLSX を送ってください。
ストリームでよく読めるため、数ギガバイトのファイルでも一行ずつ処理できます。繰り返しクエリーをかけるデータセットには Parquet のほうがずっと良く、列指向で圧縮され型を持ち、読み込みが劇的に速くなります。