gtex-expression — Tissue Gene Expression
GTEx 54 조직 TPM 중앙값 + Bar/Heatmap/Violin (외부 lib 0, mygene-search 연계, ko/en/ja)
조직별 샘플 TPM 중앙값. TPM = Transcripts Per Million, 전사체 길이 정규화 단위.
z-score = (log10 TPM − 평균) / 표준편차 (gene별).
도구 가이드
정의
gtex-expression은 GTEx Portal API V2 (https://gtexportal.org/api/v2)를 Next.js 15 Route Handler 4종 (resolve / median / geneExpression / tissueSiteDetail)으로 프록시하여, 단일 또는 다중 (최대 5개) 유전자의 54 조직 TPM 중앙값을 막대 / 그룹 막대 / 히트맵 / 바이올린 4가지 시각화로 표시하는 무료 GTEx 발현 분석 도구입니다. 유전자 심볼 (TP53), Entrez ID (7157), Ensembl ID unversioned/versioned (ENSG00000141510 / ENSG00000141510.18) 4가지 입력 방식을 자동 감지하여 BioPlayground 자체 mygene-search Route Handler 경유로 versioned gencodeId를 한 번의 fetch로 확정합니다. GTEx 공식 정책 (verbatim: "do not send queries in parallel ... send one query and wait until it completes") 을 정합하기 위해 서버사이드 자체 GtexQueue (500ms 직렬 강제 + 2 RPS 상한) + Vercel Edge ISR 24h Brotli 자동 캐시 + IndexedDB 30일 raw wrapper (외부 idb-keyval 0)를 통합합니다. 외부 lib 0 baseline — D3.js 873KB / Chart.js / ECharts 모두 자체 SVG `<rect>` 270 셀 + CSS `transition: 350ms` + 자체 epanechnikov KDE 30줄로 대체.
목적
(1) GTEx Portal 영문 학술 UI 학습 부담 (54 조직 영문 명칭 + GENCODE 버전 관리 부담) 해소 + ko/en/ja 통합 진입점 (2) 신약 표적 검증 / off-target 조직 안전성 평가 / 조직 특이성 분석 통합 워크플로우 (3) mygene-search BL-108 연계 — 사용자가 보기엔 단일 도구 진입점 (Symbol → Gencode 자동 chain) (4) 54 조직 ko/ja 학술 표준 매핑 (KAMJE 의학용어 6판 + 일본해부학회 baseline) (5) 외부 npm lib 0 (Bundlephobia: D3.js 873 KB / Chart.js / ECharts 300 KB 모두 거부) — 자체 SVG + 자체 KDE + 자체 IndexedDB wrapper (6) GTEx 공식 정책 자동 준수 — 서버사이드 GtexQueue 직렬 강제 + Retry-After 우선 + 지수 백오프 (2s→4s→8s, max 3회)
사용법
① 유전자 입력 — 4가지 형식 자동 감지: • Symbol: TP53, GFAP, INS, MYH7, HBB • Entrez ID: 7157 (TP53), 2670 (GFAP) • Ensembl unversioned: ENSG00000141510 • Ensembl versioned: ENSG00000141510.18 ② 데이터셋 선택 — GTEx V8 (2019, GENCODE v26) / V10 (2024-11) / V11 (2026-01, GENCODE v47) ③ "검색" 클릭 — Route Handler `/api/gtex/resolve` 가 (1) mygene → ensembl, (2) GTEx `/reference/gene` → versioned gencodeId chain 처리 (사용자에겐 한 fetch). alias count > 3 시 충돌 모달 자동 노출. ④ 막대 차트 자동 표시 — 54 조직 TPM 중앙값 + 9 카테고리 배경 색상 + log10 default (0 TPM은 log10(max(tpm, 0.01)) 처리) ⑤ 카테고리 필터 (9 multi-toggle) / Y축 토글 (log10 / linear / z-score) / 정렬 (카테고리 / TPM↓ / A-Z) ⑥ 임의 막대 클릭 → Violin 모달 (sample TPM 분포, 자체 epanechnikov KDE + IQR 박스 + median 흰선) ⑦ "비교에 추가" 버튼 → chip 최대 5개. 자동 Grouped Bar 전환 + Heatmap 토글 (gene × tissue z-score 270 셀) ⑧ Export — CSV (조직별 TPM + 카테고리) / SVG (현재 차트) — 외부 lib 0 (Blob + URL.createObjectURL) ⑨ 외부 링크 — GTEx Portal / Ensembl / OpenTargets / HPA / mygene-search (내부 진입) ⑩ 최근 검색 5건 localStorage 자동 저장
예시
예 1) TP53 (Symbol 입력, 범발현 baseline) → ENSG00000141510.18 / Entrez 7157 / Chr 17 → 54 조직 전반 TPM 1-50 범위, 카테고리 색상 분포 정상 (log10 default) 예 2) GFAP (뇌 특이) → 뇌 카테고리 단독 필터 → 13 막대만 표시. Brain - Cerebellum / Brain - Cortex z > 1.5 예 3) INS (췌장 특이) → TPM↓ 정렬 → Pancreas 1위 (대형 outlier, log10 권장) 예 4) MYH7 (심장 특이) → Heart - Left Ventricle / Heart - Atrial Appendage 두 막대만 극단적으로 큼 예 5) 5종 비교 (TP53 + GFAP + INS + MYH7 + HBB) → chip 5개 → 자동 Grouped Bar (270 막대) + Heatmap 토글 (z-score 270 셀, 각 gene 조직 특이성 일목요연)