iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
Build on Google AI

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

AlphaGenome Atlas 實戰 | Day 17 | 呼叫 Python API —— 3 分鐘精準提取單一變異 (SNV) 分數

  • 分享至 

  • xImage
  •  

💡 導讀:想像你在外送 App 輸入「地址」與「門牌號碼」……

如果你想在外送平台(如 UberEats)點餐,你必須給外送員一個精準的地址,例如:「台北市信義區某某路 100 號 5 樓」。如果地址寫錯,外送員就找不到地方。

在查詢 DNA 基因變異時也是一模一樣的道理!人類基因組有 30 億個字母,如果我們要讓 Google 的 AlphaGenome API 幫我們查詢某個特質或疾病變異,我們也必須給它一套標準的 「基因組全球定位系統(GPS 地址)」!

今天,我們就要向 AlphaGenome 的 1 PB 預計算資料庫發出第一道正式查詢指令,教你如何用 Python 程式碼把複雜的 JSON 數據包拆開,秒速挖出最有價值的 AVI 評分與致病機制!


一、 基因組的 GPS 定位系統:hg38 座標系

要讓 AI 知道你想查哪一個字母發生了突變,我們必須使用生醫資訊界通用的「國際地址簿」——人類參考基因組(目前主流版本為 GRCh38,簡稱 hg38)。

在股票 App 裡查詢台積電,我們會輸入股票代號 2330.TW;而在呼叫 AlphaGenome API 時,我們的查詢字串(Query String)必須嚴格遵守以下格式:

[\text{染色體 (chr)} : \text{位置 (pos)} : \text{原始字母 (ref)} : \text{突變字母 (alt)}]

  • 例如:chr9:13345678:A:G
    • chr9:代表第 9 號染色體(像行政區)。
    • 13345678:代表第 13,345,678 個鹼基位置(像門牌號碼)。
    • A:原本健康的 DNA 字母(野生型 Reference)。
    • G:突變後的 DNA 字母(變異型 Alternative)。

只要輸入這串格式完美的「基因地址」,AlphaGenome 就能在 1 秒內找到該位點的全部預測數據!


二、 解構 JSON:如何在數據大海中「抓大放小」?

當你把地址送出去後,AlphaGenome API 不會只回傳一個簡單的數字,而是會打包一個龐大且深層的 JSON 格式數據包。這個數據包裡面裝滿了我們在 Day 08 提到的多模態軌跡(如各種細胞的 RNA 剪接、轉錄信號等)。

為了不被幾千行的數據淹沒,我們的後端程式碼第一步必須學會**「抓大放小」**,重點提取以下三個核心欄位:

JSON 節點路徑 白話欄位意義 臨床與工程價值
variant_id 變異標準地址名稱 確認 API 沒有查錯地址,作為資料庫的主鍵(Primary Key)。
avi_score.percentile AVI 綜合評分 PR 值 (0-30) 決定這個變異是否夠危險、能不能進入前 50 名重點候選名單(降維打擊)。
feature_attribution.top_drivers 前三大核心致病機制 讓醫生秒懂這個高分是因為「RNA 剪接破壞」還是「染色質關閉」。

💻 三、 實作藍圖:撰寫單點變異查詢器 (SNV Query Client)(query_snv.py)

寫單點變異查詢器 (SNV Query Client)

打開程式碼編輯器,建立一個 Python 腳本 query_snv.py,寫一段能從「JSON 深海中撈出珍珠」的自動化查詢腳本。假設這正是那顆引發六週大幼兒癲癇的 DNM1 隱藏剪接變異(這裡以一組虛擬座標作為演示):

import os
from dotenv import load_dotenv
import alphagenome as ag

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

def query_and_parse_variant(variant_query):
    # 1. 初始化 AlphaGenome 客戶端
    client = ag.Client()

    print(f"🔍 正在向 1 PB 資料庫查詢基因地址: {variant_query} ...")

    try:
        # 2. 呼叫 API 獲取該變異的完整註解資料
        response = client.get_variant_annotation(variant_query)

        # 3. 從 JSON 數據包中抓取三大核心節點
        variant_id = response.get('variant_id')
        avi_score = response.get('avi_score', {}).get('percentile', 0)
        top_drivers = response.get('feature_attribution', {}).get('top_drivers', [])

        # 4. 在終端機印出漂亮且直覺的總結報告
        print("\n" + "="*45)
        print(f"🧬 變異標準地址 : {variant_id}")
        print(f"🎯 AVI 風險評分 : {avi_score} / 30 (數值越高代表越罕見且破壞力越強)")
        print(f"⚠️ 主要致病機制 (Top Drivers):")

        for idx, driver in enumerate(top_drivers, 1):
            feature_name = driver.get('feature_name')
            contribution = driver.get('contribution_weight')
            print(f"   {idx}. {feature_name} (機制影響權重: {contribution:.2f})")
        print("="*45 + "\n")

    except Exception as e:
        print(f"❌ 查詢失敗!請檢查輸入格式或網路連線。錯誤訊息: {e}")

if __name__ == "__main__":
    # 測試查詢格式:染色體:位置:原始字母:突變字母
    test_query = "chr9:13345678:A:G"
    query_and_parse_variant(test_query)

當這段腳本被執行,終端機將印出清晰的總結報告。不再需要盯著幾千行的 JSON 看到眼花,系統已經自動把「這顆變異高達 22 分,且高達 85% 的異常信號來自 RNA 剪接破壞」的結論萃取出來了。

接著,繼續往下深挖這個 JSON 物件。如呵將提取出不同組織(如大腦 vs. 血液)的細部預測數值,並且算出突變前後的 「Delta Score (差異信號)」,為繪製動態對比圖做準備!



上一篇
AlphaGenome Atlas 實戰 | Day 16 | 環境建置與認證 —— 下載 Python SDK
下一篇
AlphaGenome Atlas 實戰 | Day 18 | 深入多模態軌跡 —— 取得特定組織的轉錄與剪接預測數值
系列文
《解構生命暗物質:用 AlphaGenome Atlas 破譯 98% 非編碼基因組的 30 天實戰》 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言