バイオインフォマティクスにおいて、遺伝子発現データやDNA配列データを効率的に処理するためには、Pythonの pandas ライブラリが非常に有用です。特に データの参照とスライス(切り出し) は、大量のバイオデータを適切に処理するために欠かせない技術です。
本記事では、pandasの基本的なデータ参照の方法から、スライスの応用テクニック までを、バイオデータ解析の実例を交えながら詳しく解説します。
1. pandasのデータ構造:SeriesとDataFrame
pandasには、データを扱うための2つの主要なデータ構造があります。
- Series(1次元データ):リストのようなデータ構造(インデックス付きの配列)
- DataFrame(2次元データ):表形式のデータ(エクセルのような構造)
例えば、次のようなデータを考えます。
import pandas as pd
# 遺伝子発現データの作成
data = {
"Gene": ["BRCA1", "TP53", "EGFR", "MYC", "KRAS"],
"Sample1": [2.5, 8.1, 5.3, 6.2, 4.4],
"Sample2": [1.2, 7.9, 4.8, 5.6, 3.9],
"Sample3": [3.1, 8.5, 6.1, 7.0, 5.0]
}
df = pd.DataFrame(data)
print(df)
出力
Gene Sample1 Sample2 Sample3
0 BRCA1 2.5 1.2 3.1
1 TP53 8.1 7.9 8.5
2 EGFR 5.3 4.8 6.1
3 MYC 6.2 5.6 7.0
4 KRAS 4.4 3.9 5.0
このDataFrameを使って、データ参照やスライスを行っていきます。
2. データの基本的な参照方法
pandasでは、データを取得するための方法として、ラベル指定 と 位置指定 の2種類があります。
2.1 列の参照
特定の列を取得するには、以下のようにします。
print(df["Gene"]) # Gene列を取得
出力
0 BRCA1
1 TP53
2 EGFR
3 MYC
4 KRAS
Name: Gene, dtype: object
複数の列を取得する場合は、リストを使います。
print(df[["Gene", "Sample1"]])
出力
Gene Sample1
0 BRCA1 2.5
1 TP53 8.1
2 EGFR 5.3
3 MYC 6.2
4 KRAS 4.4
2.2 行の参照
pandasでは、行を参照する方法として、loc[]
(ラベル指定)とiloc[]
(位置指定)があります。
loc[]:ラベルを指定する方法
例えば、インデックスを遺伝子名に変更してから、特定の遺伝子のデータを取得できます。
df.set_index("Gene", inplace=True) # Gene列をインデックスに設定
print(df.loc["TP53"])
出力
Sample1 8.1
Sample2 7.9
Sample3 8.5
Name: TP53, dtype: float64
iloc[]:位置を指定する方法
例えば、2行目のデータを取得するには、以下のようにします。
print(df.iloc[2])
出力
Sample1 5.3
Sample2 4.8
Sample3 6.1
Name: EGFR, dtype: float64
3. スライス(切り出し)の基本
pandasでは、loc[]
や iloc[]
を使って、データの特定の部分を取得することができます。
3.1 行のスライス
例えば、最初の3行を取得する場合:
print(df.iloc[:3]) # 0行目から2行目まで
出力
Sample1 Sample2 Sample3
Gene
BRCA1 2.5 1.2 3.1
TP53 8.1 7.9 8.5
EGFR 5.3 4.8 6.1
特定の範囲の遺伝子だけ取得する場合(例:TP53からMYC):
print(df.loc["TP53":"MYC"])
出力
Sample1 Sample2 Sample3
Gene
TP53 8.1 7.9 8.5
EGFR 5.3 4.8 6.1
MYC 6.2 5.6 7.0
loc[]
を使う場合、範囲の 終点を含む のが特徴です。
3.2 列のスライス
例えば、Sample1
から Sample2
までのデータを取得するには:
print(df.loc[:, "Sample1":"Sample2"])
出力
Sample1 Sample2
Gene
BRCA1 2.5 1.2
TP53 8.1 7.9
EGFR 5.3 4.8
MYC 6.2 5.6
KRAS 4.4 3.9
4. スライスの応用(フィルタリング)
バイオデータの解析では、特定の条件に合うデータだけを取得したい場合があります。
4.1 遺伝子発現が5以上のデータを取得
filtered_df = df[df["Sample1"] > 5]
print(filtered_df)
出力
Sample1 Sample2 Sample3
Gene
TP53 8.1 7.9 8.5
EGFR 5.3 4.8 6.1
MYC 6.2 5.6 7.0
4.2 複数条件のフィルタリング
例えば、Sample1
の値が5以上で、かつ Sample3
の値が6以上のデータを取得:
filtered_df = df[(df["Sample1"] > 5) & (df["Sample3"] > 6)]
print(filtered_df)
5. まとめ
- データの参照 には
loc[]
(ラベル指定)とiloc[]
(位置指定)がある。 - スライス で行や列の特定範囲を取得できる。
- フィルタリング によって、条件に合うデータを抽出できる。
pandasのデータ参照やスライスを活用することで、遺伝子データの解析を効率化できます!!ぜひ実際のデータで試してみてくださいね〜!