Python pandasライブラリの活用:データのグループ化(groupby)について

スポンサーリンク

バイオインフォマティクスでは、大量のデータを処理し、解析する機会が多くあります。例えば、遺伝子発現データ、ゲノム変異データ、タンパク質データ など、多次元のデータを扱う場面がよくあります。

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() を活用し、より深い洞察を得ましょう〜!

タイトルとURLをコピーしました