언제 쓰나
논문 목록을 사람 단위로 뒤집어 누가 이 분야의 핵심인지 볼 때. 입력은 병합된 논문 JSON, 출력은 시트 5개짜리 Excel(Papers / KOL / Institutions / Rising / Summary)이다.
정본 코드
~/Documents/혜연/BTC_KOL_PoC/analyze_kol.py 1,046줄
resolve_roles() 저자 역할 판정
career_stage() 경력 단계 분류
build_profiles() 연구자 프로파일
write_excel() 다중 시트 산출python3 analyze_kol.py --topic btc
python3 analyze_kol.py --selfcheck저자 동일인 판정이 선행되어야 한다 — author-disambiguate.
역할 판정 — 5단계 우선순위
이 함수의 주석이 이 스킬에서 가장 값진 부분이다.
| 순위 | 근거 | 성격 |
|---|---|---|
| ① | WoS RP 필드 | 실측 · Clarivate 가 저자 순서까지 맞춰둠 |
| ② | OpenAlex is_corresponding | 실측 · 이름으로 맞춘 결과 |
| ③ | PDF 원문 ∪ 소속란 이메일 | 실측 · ⑤를 대체하는 것이 목적 |
| ④ | PubMed Electronic address: | 실측이나 0.3% 만 존재 |
| ⑤ | 마지막 저자 | 추정 · 실측 대비 60.3% 오차 |
②를 ①보다 뒤에 두는 이유가 중요하다. 둘 다 실측이지만 WoS RP 는 저자 순서까지 맞춰진 값이고 OpenAlex 는 우리가 이름으로 맞춘 결과다. 같은 '실측'이라도 검증 단계를 더 거친 쪽을 먼저 쓴다.
③은 합집합으로 쓴다
PDF 와 이메일이 서로 다른 사람을 가리키면 한쪽을 버리지 않고 공동교신으로 본다.
각각 독립 근거이고 둘 다 이름으로 검증된 값이라, 서로 다른 사람을 가리키면 한쪽을 버릴 게 아니라 공동교신으로 보는 편이 맞다 — 실측 사례가 그랬다(Clin Mol Hepatol 2026, 원문 표기 "Corresponding authors" 복수형).
충돌을 오류로 처리하기 전에 둘 다 맞을 수 있는지 본다.
경력 단계
제1저자 수(fa)와 교신저자 수(ca)로 나눈다.
ca == 0 → 신진 (pre_transition)
ca >= 10 또는 ca/(fa+ca) > 0.5 → 확립 (established)
그 외 → 전환기 (in_transition)교신저자 비중이 경력을 말해준다. 1저자만 있으면 아직 남의 연구를 수행하는 단계, 교신이 늘면 자기 연구를 이끄는 단계다.
Rising star 선별
rising = kol_df[(kol_df["Total"] >= 5) # 최소 실적
& (kol_df["Recent_Share"] >= 0.6) # 최근 편중
& (kol_df["Recent_Corresponding"] >= 1)] # 최근 교신 경험세 조건을 모두 요구한다. 최근 비중만 보면 논문 2편짜리가 100%로 1등이 되고, 실적만 보면 옛날 사람이 올라온다. 교신 경험을 넣어야 단순 참여자가 걸러진다.
recent_from(최근 실적 기준 연도)은 고정값으로 두고 인자로 덮어쓸 수 있게 한다 — 데이터에 의존하면 데이터가 바뀔 때마다 기준이 흔들려 비교가 안 된다.
기관은 두 단위로 낸다
# 상위기관 — 병원 단위와 대학 단위 집계를 모두 낼 수 있게 한다.
# (서울아산병원은 울산대학교 계열, 삼성서울병원은 성균관대학교 계열)병원별·대학별 순위가 다르게 나오고 둘 다 필요하다. institution-resolve 의 parent_label 을 써서 한 번에 낸다.
연구주제는 MeSH 로
# ponytail: 수작업 키워드 분류표를 두지 않는다. MeSH는 NLM 인덱서가 이미 붙여둔
# 통제어휘이고, 질환을 바꿔도 그대로 동작한다.
# 한계 = MeSH 미부여 논문(최신·국내지, 약 19%)은 주제가 비게 된다.한계와 업그레이드 경로를 주석에 같이 적어 뒀다. 19% 결측을 채우는 건 paper-relevance-judge 가 맡는다.
변별력 없는 MeSH(GENERIC_MESH)와 주제별 제외어(mesh_exclude)를 걷어낸다 — "Humans", "Male" 같은 게 상위 주제로 올라오면 표가 무의미하다.
함정
- 애매한 저자 묶음은
ambig_df로 따로 시트를 낸다. 자동 판정을 숨기지 않는다. - 지표를 내기 전에
author-disambiguate결과를 먼저 검토한다. 저자가 잘못 묶이면 모든 지표가 틀린다. --selfcheck로 로직을 먼저 검증하고 전량을 돌린다.
연관 skill
author-disambiguate(선행), corresponding-author-verify(역할 근거 공급), institution-resolve, paper-relevance-judge