근거 기반 약물 추천을 위한 PubMed 논문 검색 및 분석 스크립트: 1. pubmed_search.py - PubMed 논문 검색 기본 템플릿 - Biopython Entrez API 활용 - 3가지 주제 검색 예시 포함 2. fetch_paper_abstract.py - PMID로 논문 초록 가져오기 - 특정 논문 상세 정보 조회 3. analyze_statin_myopathy.py - Statin 근육병증과 CoQ10 보충 연구 분석 - CK(Creatine Kinase) 측정의 의미 설명 4. ashwagandha_sleep_research.py - Ashwagandha의 수면 개선 효과 연구 - 작용 메커니즘 분석 (코르티솔, GABA) - 다른 수면 보조제와 비교 5. naproxen_advantages_research.py - Naproxen의 심혈관 안전성 연구 - NSAID 간 비교 분석 - 약동학 및 업셀링 시나리오 6. pycnogenol_multi_indication_research.py - 피크노제놀의 7가지 적응증 연구 - 발기부전, 당뇨망막병증, 정맥기능부전 등 - 우선순위 점수화 7. pycnogenol_womens_health_research.py - 피크노제놀의 여성 건강 효능 - 갱년기, 생리통, 피부 미용 8. sqlite_graph_example.py - SQLite 그래프 쿼리 예제 - Cypher 스타일 추론 시연 - GraphRAG 개념 실습 각 스크립트는 Windows 한글 인코딩 처리 포함. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
213 lines
6.4 KiB
Python
213 lines
6.4 KiB
Python
"""
|
||
Statin 근육병증의 스펙트럼 분석
|
||
왜 CK 측정이 중요한가?
|
||
"""
|
||
|
||
import sys
|
||
import os
|
||
|
||
if sys.platform == 'win32':
|
||
import io
|
||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
|
||
|
||
from Bio import Entrez
|
||
from dotenv import load_dotenv
|
||
|
||
load_dotenv()
|
||
|
||
Entrez.email = os.getenv('PUBMED_EMAIL', 'test@example.com')
|
||
|
||
|
||
def search_statin_myopathy_spectrum():
|
||
"""Statin 근육병증의 심각도 스펙트럼 관련 논문 검색"""
|
||
|
||
print("=" * 80)
|
||
print("Statin 근육병증의 종류와 CK의 관계")
|
||
print("=" * 80)
|
||
|
||
# 검색: Statin myopathy classification
|
||
query = "statin myopathy classification creatine kinase"
|
||
|
||
try:
|
||
handle = Entrez.esearch(
|
||
db="pubmed",
|
||
term=query,
|
||
retmax=3,
|
||
sort="relevance"
|
||
)
|
||
record = Entrez.read(handle)
|
||
handle.close()
|
||
|
||
pmids = record["IdList"]
|
||
|
||
if pmids:
|
||
handle = Entrez.efetch(
|
||
db="pubmed",
|
||
id=pmids,
|
||
rettype="medline",
|
||
retmode="xml"
|
||
)
|
||
papers = Entrez.read(handle)
|
||
handle.close()
|
||
|
||
print(f"\n관련 논문 {len(pmids)}건 발견:\n")
|
||
|
||
for idx, paper in enumerate(papers['PubmedArticle'], 1):
|
||
article = paper['MedlineCitation']['Article']
|
||
pmid = str(paper['MedlineCitation']['PMID'])
|
||
title = article.get('ArticleTitle', '')
|
||
|
||
# 초록
|
||
abstract_parts = article.get('Abstract', {}).get('AbstractText', [])
|
||
if abstract_parts:
|
||
if isinstance(abstract_parts, list):
|
||
abstract = ' '.join([str(part) for part in abstract_parts])[:300]
|
||
else:
|
||
abstract = str(abstract_parts)[:300]
|
||
else:
|
||
abstract = "(초록 없음)"
|
||
|
||
print(f"[{idx}] PMID: {pmid}")
|
||
print(f"제목: {title}")
|
||
print(f"초록: {abstract}...")
|
||
print(f"링크: https://pubmed.ncbi.nlm.nih.gov/{pmid}/")
|
||
print("-" * 80)
|
||
|
||
except Exception as e:
|
||
print(f"[ERROR] 검색 실패: {e}")
|
||
|
||
|
||
def print_myopathy_spectrum():
|
||
"""Statin 근육병증 스펙트럼 설명"""
|
||
|
||
print("\n\n" + "=" * 80)
|
||
print("Statin 근육병증의 스펙트럼 (경증 → 중증)")
|
||
print("=" * 80)
|
||
|
||
spectrum = [
|
||
{
|
||
"type": "1. Myalgia (근육통)",
|
||
"prevalence": "5-10%",
|
||
"ck_level": "정상 (Normal)",
|
||
"symptoms": "근육 통증, 뻐근함",
|
||
"severity": "경증",
|
||
"management": "CoQ10, 용량 조절"
|
||
},
|
||
{
|
||
"type": "2. Myopathy (근육병증)",
|
||
"prevalence": "0.1-0.5%",
|
||
"ck_level": "경도 상승 (<10배)",
|
||
"symptoms": "근육 약화, 통증",
|
||
"severity": "중등도",
|
||
"management": "Statin 변경/중단"
|
||
},
|
||
{
|
||
"type": "3. Rhabdomyolysis (횡문근융해증)",
|
||
"prevalence": "0.01%",
|
||
"ck_level": "심각한 상승 (>10배, 수천~수만)",
|
||
"symptoms": "심한 근육 통증, 갈색 소변, 급성 신부전",
|
||
"severity": "중증 (응급)",
|
||
"management": "즉시 중단, 입원 치료"
|
||
}
|
||
]
|
||
|
||
for item in spectrum:
|
||
print(f"\n【{item['type']}】")
|
||
print(f" 발생률: {item['prevalence']}")
|
||
print(f" CK 수치: {item['ck_level']}")
|
||
print(f" 증상: {item['symptoms']}")
|
||
print(f" 심각도: {item['severity']}")
|
||
print(f" 관리: {item['management']}")
|
||
print("-" * 80)
|
||
|
||
print("\n\n" + "=" * 80)
|
||
print("왜 논문에서 CK를 측정했는가?")
|
||
print("=" * 80)
|
||
|
||
reasons = [
|
||
{
|
||
"이유": "1. 안전성 확인",
|
||
"설명": """
|
||
CoQ10 보충이 단순히 '증상을 가리는 것'인지, 아니면 '실제로 근육을
|
||
보호하는 것'인지 확인하기 위함.
|
||
|
||
만약 CK가 계속 상승한다면?
|
||
→ 근육 손상이 진행 중이므로 위험
|
||
→ 증상만 완화되면 환자가 모르고 계속 복용 → 횡문근융해증 위험
|
||
|
||
CK가 정상이면?
|
||
→ 실제 근육 손상은 없음
|
||
→ CoQ10으로 증상만 관리하면 안전
|
||
"""
|
||
},
|
||
{
|
||
"이유": "2. 메커니즘 이해",
|
||
"설명": """
|
||
결과: 증상 개선 (O), CK 변화 없음 (-)
|
||
|
||
→ 이것이 의미하는 것:
|
||
CoQ10은 "근육 재생" 효과가 아님
|
||
대신 "미토콘드리아 기능 회복" 효과
|
||
|
||
Statin 근육통 = 구조적 손상(X), 기능적 문제(O)
|
||
"""
|
||
},
|
||
{
|
||
"이유": "3. 객관적 평가",
|
||
"설명": """
|
||
문제: 근육 통증은 주관적 증상 (placebo 효과 가능)
|
||
|
||
해결: CK는 객관적 바이오마커
|
||
- 환자가 "덜 아프다"고 느낌 (주관적)
|
||
- CK 정상 유지 (객관적) → 실제로 안전함을 증명
|
||
"""
|
||
},
|
||
{
|
||
"이유": "4. 임상 지침 반영",
|
||
"설명": """
|
||
미국심장학회(ACC/AHA) Statin 안전성 가이드라인:
|
||
|
||
【CK 측정 시점】
|
||
- 치료 전 베이스라인
|
||
- 근육 증상 발생 시
|
||
- CK > 정상의 10배 → 즉시 중단
|
||
|
||
논문에서 CK를 측정한 것은 이 가이드라인을 따른 것
|
||
"""
|
||
}
|
||
]
|
||
|
||
for item in reasons:
|
||
print(f"\n【{item['이유']}】")
|
||
print(item['설명'])
|
||
print("-" * 80)
|
||
|
||
|
||
def main():
|
||
# 1. Statin 근육병증 스펙트럼 설명
|
||
print_myopathy_spectrum()
|
||
|
||
# 2. 관련 논문 검색
|
||
print("\n\n" + "=" * 80)
|
||
print("관련 논문 검색 중...")
|
||
print("=" * 80)
|
||
search_statin_myopathy_spectrum()
|
||
|
||
# 3. 결론
|
||
print("\n\n" + "=" * 80)
|
||
print("결론: 논문에서 CK를 측정한 이유")
|
||
print("=" * 80)
|
||
print("""
|
||
1️⃣ 안전성: CoQ10이 증상만 가리는 게 아니라 실제로 안전한지 확인
|
||
2️⃣ 메커니즘: 근육 손상(X), 미토콘드리아 기능 저하(O)임을 증명
|
||
3️⃣ 객관성: 주관적 증상뿐 아니라 객관적 지표로도 안전함을 입증
|
||
4️⃣ 임상 적용: 실제 진료 시 CK 검사 없이 CoQ10 권장 가능
|
||
|
||
→ CK 정상 = "CoQ10 + Statin 병용이 안전하다"는 강력한 근거
|
||
""")
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|