8.

TSV(.tsv)完全ガイド — IANA 仕様・CSV との比較・バイオ/NLP での標準利用

編集
この記事の要点
  • TSV (Tab-Separated Values) はタブ文字でフィールドを区切るテキスト形式。CSV のタブ版
  • IANA に text/tab-separated-values として正式登録されている (CSV の text/csv と同等の地位)
  • タブはほぼ通常の文章に登場しないため、CSV のような引用符・エスケープ問題が起きにくい
  • データサイエンス・バイオインフォマティクス・自然言語処理の標準入出力形式。Kaggle データセットでも頻出
  • Excel との互換性も高く、Excel の "貼り付け" がタブ区切りを自動で列に分解する
  • タブ自体をフィールド内に含めることは原則禁止。含む場合は \t エスケープか TSV ではなく別形式を使う
  • Unicode 上はタブ U+0009 以外に Information Separator (US/RS/GS/FS, U+001F〜U+001C) という伝統的区切り文字も存在するがほぼ使われない

概要

TSV (Tab-Separated Values) は、フィールドをタブ文字 (\t, ASCII 0x09) で区切り、レコードを改行で区切ったテキスト形式である。CSV と並ぶ古典的な表形式の表現方法であり、データサイエンス・バイオインフォマティクス・自然言語処理の世界では CSV と双璧をなす標準フォーマットである。

IANA には text/tab-separated-values として正式に MIME タイプが登録されている (1993 年、IBM 提案)。CSV の text/csv (RFC 4180、2005 年) よりも登録が早く、規格としての地位は CSV と同等に確立している。CSV と比べて引用符 (ダブルクォート) によるエスケープが基本的に不要であり、フィールド内にカンマを多用する自然言語データを扱う場合に特に有利である。

内部構造とフォーマット規則

TSV のルールはきわめて単純である。

  • フィールド区切りはタブ文字 1 個 (\t, 0x09)。
  • レコード区切りは改行 (LF または CRLF)。
  • フィールド内にタブ・改行を含めない (含む場合は \t / \n 等のエスケープ表記にするのが慣習)。
  • 1 行目はヘッダ (列名) のことが多い。
  • 引用符での囲みは不要 (CSV のような " ルールは適用しない)。
name	age	email	comment
Alice	30	alice@example.com	Hi, I'm Alice
Bob	25	bob@example.com	short note
Charlie	40	charlie@example.com	has, comma, no problem

(上記のタブは表記の都合上 で示しているが、実ファイルではバイト 0x09 が入る)。Alice の comment にカンマや空白が含まれていても、フィールド境界はタブで明確に決まるため、CSV のような引用符付与が不要である点が TSV の最大の利点である。

IANA 仕様 (text/tab-separated-values) では、改行を CRLF とすること、各レコードのフィールド数が同一であること、空フィールドは「タブとタブの間に何も無い」状態で表すことが定められている。

主な用途

  • バイオインフォマティクス: BLAST / SAM (Sequence Alignment Map) / VCF (Variant Call Format) / GTF/GFF など、ゲノム解析の主要フォーマットの実体は TSV ベース。
  • 自然言語処理 (NLP): 注釈データセット (品詞・依存構造・固有表現) は TSV が標準。CoNLL 形式が代表例。
  • 機械学習データセット: Hugging Face Datasets / Kaggle の表形式データに頻出。フィールド内のテキストがカンマを多く含むため CSV より TSV が好まれる。
  • ログ解析: LTSV (Labeled TSV) は key:value をタブで連結した形式で、Web サーバの構造化ログとして 2013 年頃に普及。
  • Excel との貼り付け連携: Excel から「コピー → 他アプリにペースト」したときのクリップボードフォーマットはタブ区切り。逆方向 (タブ区切りテキスト → Excel) も「形式を選択して貼り付け」で列に分割される。
  • DB エクスポート: MySQL の SELECT ... INTO OUTFILE のデフォルト出力、PostgreSQL の COPY のデフォルトもタブ区切り。

関連形式との比較

形式区切り引用符規則方言の多さ備考
TSVタブ不要 (原則)少ないNLP / バイオで標準
CSVカンマ必要 (RFC 4180)多い業務・オープンデータで標準
SSVセミコロン必要欧州ロケール独・仏 Excel のデフォルト
PSVパイプ |必要少ない金融・通信業界の一部
LTSVタブ + :不要少ないWeb サーバログ
JSON Lines改行のみ (各行 JSON)JSON 構文少ないストリーミング処理

編集・パーサ・ツール

# Python pandas (区切り文字を明示)
python -c "import pandas as pd; print(pd.read_csv('data.tsv', sep='\t').head())"

# csvkit は TSV にも対応 (-t オプション)
csvstat -t data.tsv
csvgrep -t -c name -m Alice data.tsv

# xsv (タブ区切りモード)
xsv stats -d "\t" data.tsv

# miller (mlr) — TSV は --tsv
mlr --tsv filter '$age > 25' then sort -nr age data.tsv

# awk / cut で素朴に処理
cut -f1,3 data.tsv             # 1 列目と 3 列目を抜き出し
awk -F'\t' 'NR>1 && $2 > 25 {print $1}' data.tsv

# CSV → TSV 変換 (引用符込みの正しい変換)
python -c "
import csv, sys
r = csv.reader(open('data.csv', encoding='utf-8'))
w = csv.writer(sys.stdout, delimiter='\t')
for row in r: w.writerow(row)
" > data.tsv

# TSV → JSON Lines
mlr --t2j cat data.tsv > data.jsonl

注意点・落とし穴

  • タブと空白の混同: エディタで「タブを空白 4 個に展開」設定が有効だと、保存時にタブが空白に変わり TSV が壊れる。.editorconfigindent_style = tab を明示するか、cat -A でタブ (^I と表示) を確認する。
  • フィールド内タブ: 自由記述カラムにタブが混入すると列ズレを起こす。投入前に \t を空白に置換するか、Information Separator (US, 0x1F) を使った別形式を検討する。
  • 末尾の空フィールド: 「タブで終わって改行」の行は最後に空フィールドを 1 個持つ。awk や cut では問題ないが、pandas のデフォルトは末尾タブを無視せず NaN 列を増やすことがある。
  • Excel の自動型変換: TSV を Excel で開くと CSV と同じく先頭 0 落ち・日付化が起きる。CSV と同様に Power Query 経由でインポートし、列の型を文字列に固定する。
  • 改行コードの混在: Windows で作った TSV (CRLF) を Linux の awk に流すと、最終列に \r が残り、文字列比較が失敗する。dos2unix で事前変換する。
  • 文字コード問題: CSV と同じく Shift_JIS / UTF-8 BOM 有無の問題は TSV にも当てはまる。基本は UTF-8 (BOM なし) で統一する。
  • 「拡張子だけ TSV で中身はカンマ区切り」: 命名と中身が一致していないファイルが出回っているケースがある。head -1 data.tsv | od -c | head で先頭バイトを確認する。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. PDF(.pdf)
  2. CSV(.csv)
  3. Markdown(.md)
  4. TXT(.txt)
  5. DOCX(.docx)
  6. XLSX(.xlsx)
  7. PPTX(.pptx)
  8. TSV(.tsv)
  9. RTF(.rtf)
  10. ODT / ODS / ODP(.odt / .ods / .odp)

最近更新/作成されたページ