バイオインフォマティクスでは、大量のデータを処理し、解析する機会が多くあります。例えば、遺伝子発現データ、ゲノム変異データ、タンパク質データ など、多次元のデータを扱う場面がよくあります。
Pythonの pandasライブラリ には、大規模なデータを整理・集約し、解析を効率化する 「データのグループ化(grouping)」 の機能が備わっています。本記事では、pandasのデータグループ化の基本から応用まで を、バイオインフォマティクスの実例とともに解説します。
1. pandasの「データのグループ化」とは?
pandasの データのグループ化 とは、特定のカテゴリごとにデータをまとめ、統計値を計算したり、解析を行う手法 です。Excelの「ピボットテーブル」のようなイメージです。
例えば、異なる条件下での遺伝子発現データをグループ化して平均値を求める といった操作が可能になります。
2. グループ化の基本:groupby()
pandasのデータグループ化には groupby()
メソッドを使用します。
2.1 基本的な groupby()
まずは、簡単なデータセットを使って基本を学びましょう。
import pandas as pd
# サンプルデータ(遺伝子発現データ)
df = pd.DataFrame({
"Gene": ["BRCA1", "TP53", "EGFR", "BRCA1", "TP53", "EGFR"],
"Condition": ["Cancer", "Cancer", "Cancer", "Normal", "Normal", "Normal"],
"Expression": [8.2, 9.5, 6.7, 5.1, 6.3, 4.8]
})
print(df)
出力
Gene Condition Expression
0 BRCA1 Cancer 8.2
1 TP53 Cancer 9.5
2 EGFR Cancer 6.7
3 BRCA1 Normal 5.1
4 TP53 Normal 6.3
5 EGFR Normal 4.8
このデータでは、Condition
(がん細胞か正常細胞か)ごとの遺伝子発現値をまとめたい場合、groupby()
を使用します。
grouped = df.groupby("Condition")[df.select_dtypes(include="number").columns].mean()
print(grouped)
出力
Expression
Condition
Cancer 8.13
Normal 5.40
groupby("Condition")
により、”Cancer” と “Normal” の 2 つのグループにデータが分けられ、それぞれの Expression(発現値) の平均値が計算されました。
3. 応用編:複数のカラムを使ったグループ化
3.1 遺伝子ごとの発現値の平均を求める
遺伝子ごとに発現値の平均を計算する場合は、次のようにします。
grouped_gene = df.groupby("Gene")[df.select_dtypes(include="number").columns].mean()
print(grouped_gene)
出力
Expression
Gene
BRCA1 6.65
EGFR 5.75
TP53 7.90
これにより、各遺伝子の平均発現値が計算されました。
3.2 条件ごと+遺伝子ごとのグループ化
「Cancer/Normalごとに、遺伝子ごとの平均発現値を求める」 場合、複数の列でグループ化できます。
grouped_condition_gene = df.groupby(["Condition", "Gene"]).mean()
print(grouped_condition_gene)
出力
Expression
Condition Gene
Cancer BRCA1 8.2
EGFR 6.7
TP53 9.5
Normal BRCA1 5.1
EGFR 4.8
TP53 6.3
このように、“Condition”(状態)と”Gene”(遺伝子)の2つのキー でグループ化することで、各条件下での遺伝子発現の平均値を取得できます。
4. グループ化後のデータ操作
4.1 特定のグループを取得
get_group()
を使うと、特定のグループのデータを取り出せます。
cancer_group = df.groupby("Condition").get_group("Cancer")
print(cancer_group)
出力
Gene Condition Expression
0 BRCA1 Cancer 8.2
1 TP53 Cancer 9.5
2 EGFR Cancer 6.7
これは、がん細胞(Cancer)のデータのみを取得した例です。
4.2 グループごとの統計値を取得
基本的な統計量(平均・標準偏差・最大値・最小値など)をまとめて取得できます。
stats = df.groupby("Condition")[df.select_dtypes(include="number").columns].agg(["mean", "std", "min", "max"])
print(stats)
出力
Expression
mean std min max
Condition
Cancer 8.13 1.13 6.7 9.5
Normal 5.40 0.76 4.8 6.3
このように、各条件ごとに 平均(mean)、標準偏差(std)、最小値(min)、最大値(max) を一度に求められます。
5. バイオインフォマティクスへの応用
pandasの groupby()
は、バイオインフォマティクスのデータ解析において以下のような用途に活用できます。
- 遺伝子発現データのサンプルごとの集約(がん vs 正常、異なる実験条件)
- NGSデータの変異ごとの集計(サンプルごとのSNPの発現頻度)
- タンパク質の機能別統計(機能ごとにタンパク質の発現レベルを比較)
- 臨床データとの統合解析(患者の病態ごとの遺伝子発現解析)
例えば、RNA-seqデータを解析する際に、異なる疾患状態ごとの遺伝子発現差をグループ化して解析する ことができます。
6. まとめ
pandasの groupby()
は、バイオインフォマティクスにおけるデータ解析を効率化する強力なツールです!!
groupby("列名")
でデータをグループ化mean()
やagg()
で統計量を取得get_group()
で特定のグループを抽出- 複数の列をキーにしてグループ化が可能
- バイオデータの解析(遺伝子発現データ、SNPデータ、臨床データ)に応用できる
バイオインフォマティクスのデータ解析で groupby()
を活用し、より深い洞察を得ましょう〜!