バイオインフォマティクスでは、複数のデータセットを統合して解析する ことが非常に重要です。例えば、遺伝子発現データとメタデータの統合、異なる実験の結果の比較、ゲノム変異データと疾患情報のマッピング など、多くの場面で異なるデータソースを組み合わせる必要があります。
Pythonの pandas ライブラリは、こうしたデータ統合を効率的に行うための「データのマージ(merge)」機能を提供しています。本記事では、pandasの データのマージ について、基本的な使い方から応用例まで詳しく解説していきます。
1. データのマージとは?
pandasの データのマージ(merge) は、SQLのJOIN操作と同様 に、共通のカラム(またはindex)を基準に2つのデータフレームを結合する機能です。
例えば、以下のような 遺伝子発現データ と メタデータ を統合するケースを考えます。
データ1:遺伝子発現データ(gene_expression)
Gene | Sample1 | Sample2 | Sample3 |
---|---|---|---|
BRCA1 | 2.5 | 3.1 | 1.8 |
TP53 | 8.1 | 7.9 | 8.5 |
EGFR | 5.3 | 4.8 | 6.1 |
データ2:遺伝子情報データ(gene_info)
Gene | Chromosome | Function |
---|---|---|
BRCA1 | 17 | DNA repair |
TP53 | 17 | Tumor suppressor |
MYC | 8 | Transcription factor |
この2つのデータセットを “Gene” をキーとして統合することで、遺伝子発現データに遺伝子の詳細情報を付加できます。
2. 基本的なデータのマージ
pandasのデータをマージするには、merge()
関数を使用します。
import pandas as pd
# 遺伝子発現データ
gene_expression = pd.DataFrame({
"Gene": ["BRCA1", "TP53", "EGFR"],
"Sample1": [2.5, 8.1, 5.3],
"Sample2": [3.1, 7.9, 4.8],
"Sample3": [1.8, 8.5, 6.1]
})
# 遺伝子情報データ
gene_info = pd.DataFrame({
"Gene": ["BRCA1", "TP53", "MYC"],
"Chromosome": [17, 17, 8],
"Function": ["DNA repair", "Tumor suppressor", "Transcription factor"]
})
# "Gene" をキーにしてマージ
merged_df = pd.merge(gene_expression, gene_info, on="Gene", how="inner")
print(merged_df)
出力
Gene Sample1 Sample2 Sample3 Chromosome Function
0 BRCA1 2.5 3.1 1.8 17 DNA repair
1 TP53 8.1 7.9 8.5 17 Tumor suppressor
この場合、how="inner"
により 共通する “Gene” のみが統合される(BRCA1, TP53) ため、”MYC” は結果に含まれません。
3. マージ方法の種類
pandasの merge()
では、SQLのJOINのように4種類の結合方法があります。
結合方法 | 説明 |
---|---|
inner | 共通するキーのみ結合(デフォルト) |
outer | すべてのデータを統合(NaNが入る) |
left | 左側のデータを優先して統合 |
right | 右側のデータを優先して統合 |
3.1 left join(左結合)
merged_df = pd.merge(gene_expression, gene_info, on="Gene", how="left")
print(merged_df)
出力
Gene Sample1 Sample2 Sample3 Chromosome Function
0 BRCA1 2.5 3.1 1.8 17.0 DNA repair
1 TP53 8.1 7.9 8.5 17.0 Tumor suppressor
2 EGFR 5.3 4.8 6.1 NaN NaN
“EGFR” の情報がないため、NaN
が入ります。
3.2 outer join(外部結合)
merged_df = pd.merge(gene_expression, gene_info, on="Gene", how="outer")
print(merged_df)
出力
Gene Sample1 Sample2 Sample3 Chromosome Function
0 BRCA1 2.5 3.1 1.8 17.0 DNA repair
1 TP53 8.1 7.9 8.5 17.0 Tumor suppressor
2 EGFR 5.3 4.8 6.1 NaN NaN
3 MYC NaN NaN NaN 8.0 Transcription factor
すべての遺伝子が統合され、マッチしない部分には NaN
が入ります。
4. 応用例:異なるindexでのマージ
merge()
の left_index=True, right_index=True
を使うと、indexを基準にマージできます。
# 遺伝子発現データ
gene_expression.set_index("GeneName", inplace=True)
# 遺伝子情報データ
gene_info.set_index("Gene", inplace=True)
# Indexを基準にマージ
merged_df = gene_expression.merge(gene_info, left_index=True, right_index=True, how="left")
print(merged_df)
この方法は、サンプルIDや遺伝子IDをindexにしている場合に便利 です。
5. まとめ
pandasの merge()
を使うことで、バイオインフォマティクスのデータ統合がスムーズに行えます!!
まとめポイント
✅ merge(on="カラム名", how="inner")
で共通データを統合
✅ how="left"
や how="outer"
を使うと、より柔軟な統合が可能
✅ set_index()
を活用すると、indexベースのマージができる
✅ 遺伝子発現データ、メタデータ、ゲノムデータを統合する際に有効
データ解析の効率を上げるために、ぜひ活用してみてくださいね〜!