iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
Build on Google AI

《解構生命暗物質:用 AlphaGenome Atlas 破譯 98% 非編碼基因組的 30 天實戰》系列 第 18 篇

AlphaGenome Atlas 實戰 | Day 18 | 深入多模態軌跡 —— 取得特定組織的轉錄與剪接預測數值

  • 分享至 

  • xImage
  •  

💡 導讀:如果想從音樂軟體裡,只想聽主唱的獨唱聲音……

如果你玩過 GarageBand、Logic Pro 或是看過音樂製作人混音,你一定知道一首歌裡面可能包含了 100 多個不同的音軌——有鼓聲、貝斯、電吉他、鋼琴,還有主唱。如果所有聲音同時炸開,你很難聽清楚鋼琴到底有沒有彈錯音。

這時候,混音師會按下 「Solo(獨奏)」 按鈕,把其他樂器通通靜音(Mute),只單獨聆聽鋼琴的軌跡。

在 DNA 數據的世界裡也是完全一樣的道理!AlphaGenome API 雖然會一口氣回傳幾千條跨器官(大腦、血液、肝臟、皮膚等)的預測波形,但如果我們只關心那名六週大癲癇嬰兒的 「大腦神經元 RNA 剪接」,我們就必須像混音師一樣,精準按下 Solo 鍵,把無關器官的數據通通過濾掉!

今天,我們就要教大家如何用 Python 篩選特定組織的波形數據,並用最簡單的「減法」算出突變帶來的破壞力——Delta Score!


一、 解鎖多模態軌跡:在 100 多條波形中抓出目標

在之前的癲癇案例中,我們學到了一個殘酷的經驗:致命的隱藏剪接只發生在大腦神經元中,血液裡完全測不到。

https://ithelp.ithome.com.tw/upload/images/20260930/20183596Rqeux0zrlA.png

圖 | AlphaGenome 架構(來源:https://storage.googleapis.com/deepmind-media/papers/alphagenome.pdf)

當我們向 AlphaGenome API 發送查詢後,回傳的 JSON 數據包裡有一個名為 tracks(軌跡波形)的龐大陣列。這就像是一整排未經處理的音樂音軌,裡面裝滿了模型對不同組織與細胞系的預測數值。

我們的資料處理腳本必須具備「精準過濾」的能力:

  • 篩選條件 1:tissue == 'brain'(目標器官:大腦)
  • 篩選條件 2:assay_type == 'splicing'(目標模態:RNA 剪接)

把其他像血液、肝臟等無關的軌跡通通靜音,我們就能只專注看大腦神經元裡的波形變化!


二、 計算 Delta Score:用「前後減法」讓致病訊號現形

拿到大腦神經元的波形後,我們會看到兩組數據陣列(一維數字串):

  1. Reference (Ref 野生型):健康 DNA 狀態下的波形(正常情況)。
  2. Alternative (Alt 突變型):DNA 字母改變後的預測波形(病患情況)。

為了量化這個突變到底造成了多大的改變,我們不需要什麼高深的微積分,只需要做簡單的 「陣列減法」:

[\text{Delta Score} = \text{Alt (突變後波形)} - \text{Ref (突變前波形)}]

算出來的落差(Delta Score),就是這個突變帶來的 「淨破壞力」!

軌跡類型 生物學白話意義 數據特徵(數字會長怎樣?) 在六週大嬰兒癲癇案例中的表現
Reference (Ref) 未突變前,一般人的正常生理狀態。 一維數字陣列,代表每個位置的訊號強度。 在深層內含子區域,正常剪接機率趨近於 0.00。
Alternative (Alt) 突變發生後,病患體內的預測狀態。 同等長度的一維數字陣列。 突變點附近的剪接機率異常狂飆至 0.85!
Delta Score (Alt - Ref) 突變造成的「淨破壞力(Net Impact)」。 將兩個陣列相減得到的差值陣列。 算出來出現高達 +0.85 的巨型正峰值(隱藏剪接抓包)!

💻 三、 實作:撰寫多模態軌跡萃取器 (Track Delta Extractor)(extract_track_delta.py)

現在,打開程式碼編輯器,建立腳本 extract_track_delta.py。我們將使用 Python 科學運算庫 NumPy,在一秒鐘之內完成數千個座標點的矩陣相減:

import os
from dotenv import load_dotenv
import alphagenome as ag
import numpy as np

# 載入隱藏設定檔中的憑證
load_dotenv()

def extract_and_calculate_delta(variant_query, target_tissue, target_assay):
    client = ag.Client()
    print(f"🔍 正在向 1 PB 資料庫提取 {variant_query} 的 [{target_tissue} - {target_assay}] 軌跡...")

    try:
        # 1. 呼叫 API 並要求帶回詳細的波形軌跡 (include_tracks=True)
        response = client.get_variant_annotation(variant_query, include_tracks=True)
        tracks = response.get('tracks', [])

        # 2. 像混音師一樣,過濾出目標組織與模態 (例如:brain, splicing)
        target_data = next((t for t in tracks if t['tissue'] == target_tissue and t['assay_type'] == target_assay), None)

        if not target_data:
            print(f"⚠️ 提示:在回傳資料中找不到指定組織 ({target_tissue}) 的 {target_assay} 軌跡。")
            return

        # 3. 轉為 NumPy 矩陣,準備進行超高速數學運算
        ref_array = np.array(target_data.get('ref_signal', []))
        alt_array = np.array(target_data.get('alt_signal', []))

        # 4. 計算 Delta Score(突變後的淨落差矩陣)
        delta_array = alt_array - ref_array

        # 5. 找出落差最大的那個絕對波峰位置
        max_delta_index = np.argmax(np.abs(delta_array))
        max_delta_value = delta_array[max_delta_index]

        # 6. 印出清楚的分析報告
        print("\n" + "="*45)
        print(f"🧠 目標器官 : {target_tissue} | 實驗模態 : {target_assay}")
        print(f"📊 軌跡範圍 : 涵蓋周圍 {len(delta_array)} 個鹼基位置")
        print(f"⚠️ 最大訊號波峰 (Max Delta) : {max_delta_value:+.4f} (發生在相對索引 {max_delta_index})")

        # 臨床自動警報邏輯
        if max_delta_value > 0.5:
            print("🚨 警告:偵測到極強烈的正向訊號突增!極可能創造了致命的隱藏剪接點 (Cryptic Splice Site)!")
        print("="*45 + "\n")

    except Exception as e:
        print(f"❌ 軌跡提取失敗!錯誤訊息: {e}")

if __name__ == "__main__":
    # 測試查詢:第 9 號染色體的單點突變
    test_query = "chr9:13345678:A:G"

    # 鎖定大腦組織 (brain) 的 RNA 剪接 (splicing) 數據
    extract_and_calculate_delta(test_query, target_tissue="brain", target_assay="splicing")

這段程式碼算出來的 delta_array 乾淨數據,前端工程師可以直接傳給 Recharts 或 Chart.js 圖表套件,在網頁畫面上繪製出 「紅色(突變後)vs. 藍色(正常)」 的動態對比波形圖!


在臨床情境中,一名病患的 VCF 基因檔案動輒包含幾百個候選變異,要一個個手動去點擊執行腳本是不可能的。

明天,我們將介紹程式工程裡的 「批次處理(Batch Processing)」,並實作非同步架構與 指數退避機制(Exponential Backoff),學習如何在 1 秒鐘之內穩定吞吐數百個變異查詢,還不會被 Google 伺服器當成駭客阻擋!



上一篇
AlphaGenome Atlas 實戰 | Day 17 | 呼叫 Python API —— 3 分鐘精準提取單一變異 (SNV) 分數
下一篇
AlphaGenome Atlas 實戰 | Day 19 | API 批量查詢與優化 —— 搞定非同步處理與突破 Rate Limit
系列文
《解構生命暗物質:用 AlphaGenome Atlas 破譯 98% 非編碼基因組的 30 天實戰》 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言