バイオインフォマティクスでは、大規模な遺伝子発現データやゲノム配列データを扱うことが一般的です。その際、Pythonの pandas ライブラリを活用することで、データの整理や解析を効率的に行うことができます。
pandasでは 「index(インデックス)」 を活用することで、データの検索やフィルタリング、集約が容易になります。本記事では、indexの基本的な操作から応用的な使い方まで を、バイオインフォマティクスの実例を交えながら解説します。
1. indexの基本操作
pandasのindex
は、データフレームの行にラベルを付ける仕組みであり、デフォルトでは0から始まる整数が自動で割り振られます。しかし、サンプルIDや遺伝子名をindexとして設定することで、データ処理を直感的に行えるようになります。
1.1 indexの設定
データフレームを作成し、特定の列をindexとして設定する方法を見てみましょう。
import pandas as pd
# サンプルデータ
df = pd.DataFrame({
"Sample": ["S1", "S2", "S3"],
"Gene": ["BRCA1", "TP53", "EGFR"],
"Expression": [2.5, 8.1, 5.3]
})
# "Sample"列をindexに設定
df.set_index("Sample", inplace=True)
print(df)
出力
Gene Expression
Sample
S1 BRCA1 2.5
S2 TP53 8.1
S3 EGFR 5.3
これで、”Sample”列がindexになり、各サンプルに対する遺伝子と発現値を簡単に参照できるようになりました。
1.2 indexをリセットする
indexを通常の列に戻したい場合は、reset_index()
を使います。
df.reset_index(inplace=True)
print(df)
出力
Sample Gene Expression
0 S1 BRCA1 2.5
1 S2 TP53 8.1
2 S3 EGFR 5.3
indexが解除され、”Sample”が通常の列として戻りました。
1.3 indexを使ったデータの取得
indexを指定してデータを取得するには、loc[]
を使います。
print(df.loc["S2"])
出力
Gene TP53
Expression 8.1
Name: S2, dtype: object
このように、”S2″の行データを直接取得できます。
2. indexの応用操作
基本的なindexの使い方を理解したところで、応用的な操作についても見ていきましょう。
2.1 indexの変更
indexを変更したい場合は、set_index()
を再び使うことができます。
df.set_index("Gene", inplace=True)
print(df)
出力
Sample Expression
Gene
BRCA1 S1 2.5
TP53 S2 8.1
EGFR S3 5.3
今度は”Gene”列をindexにしました。遺伝子をキーにデータを管理したい場合に便利です。
2.2 複数のindex(MultiIndex)
pandasでは、複数のindex(MultiIndex)を設定する ことも可能です。例えば、サンプルIDと遺伝子名の両方をindexにすることで、データの整理をより細かく行えます。
df = pd.DataFrame({
"Sample": ["S1", "S1", "S2", "S2", "S3"],
"Gene": ["BRCA1", "TP53", "BRCA1", "TP53", "EGFR"],
"Expression": [2.5, 8.1, 3.2, 7.9, 5.3]
})
df.set_index(["Sample", "Gene"], inplace=True)
print(df)
出力
Expression
Sample Gene
S1 BRCA1 2.5
TP53 8.1
S2 BRCA1 3.2
TP53 7.9
S3 EGFR 5.3
このように、サンプルIDと遺伝子名の両方をindexにすることで、階層的なデータ管理が可能になります。
データを取得する際も、複数のindexを指定できます。
print(df.loc[("S1", "TP53")])
出力
Expression 8.1
Name: (S1, TP53), dtype: float64
2.3 indexのソート
indexをソートしたい場合は、sort_index()
を使います。
df.sort_index(inplace=True)
print(df)
この操作により、indexが昇順に並び替えられ、検索の効率が向上します。
2.4 indexの名前を変更する
indexに名前を付けることで、可読性が向上します。
df.index.names = ["Sample ID", "Gene Name"]
print(df)
出力
Expression
Sample ID Gene Name
S1 BRCA1 2.5
TP53 8.1
S2 BRCA1 3.2
TP53 7.9
S3 EGFR 5.3
このように、indexのラベルを明示することで、データの意味がより分かりやすくなります。
3. バイオインフォマティクスでのindexの活用例
バイオインフォマティクスでは、遺伝子発現データや変異データを扱う際に、indexを活用するとデータの管理が容易になります。
3.1 特定の遺伝子の発現値を取得
例えば、「TP53の発現値をすべて取得したい」場合、以下のように簡単に抽出できます。
print(df.xs("TP53", level="Gene Name"))
出力
Expression
Sample ID
S1 8.1
S2 7.9
3.2 発現値が一定以上のデータを抽出
filtered_df = df[df["Expression"] > 5.0]
print(filtered_df)
このように、indexを活用したデータのフィルタリングも簡単に行えます。
4. まとめ
pandasのindex
を適切に活用することで、バイオインフォマティクスのデータ解析がより効率的になります!!
- 基本操作:
set_index()
,reset_index()
,loc[]
を使ってデータを整理 - 応用操作:MultiIndexの設定、indexのソートや名前変更
- バイオインフォマティクスでの活用:遺伝子発現データの管理、特定の遺伝子やサンプルの抽出
大規模なデータを扱う際に、ぜひpandasのindexを活用してみてくださいね〜!