숫자 배열 세 개를 이름표 붙은 표 한 장으로 — 여기서부터 사람이 읽을 수 있게 됩니다.
moderated_ttest 가 돌려준 것은 이름표 없는 배열 세 개입니다 —
lfc, t, p. 각각 길이 13,095.
어느 값이 어느 유전자 것인지 순서로만 알 수 있죠. 위험합니다.
de = pd.DataFrame({"logFC": lfc, "t": t, "p": p}, index=logcpm.index)
딕셔너리의 키가 열 이름, 값이 열의 내용이 됩니다.
그리고 index= 로 유전자 이름을 붙이면
de.loc["Ddx54"] 처럼 이름으로 찾을 수 있게 됩니다.
무엇을 기준으로 줄 세울까
13,095줄을 다 볼 수는 없으니 중요한 것부터 봐야 합니다.
그런데 "중요하다"의 기준이 셋이나 있어요.
logFC 순
변화의 크기가 큰 순서
그런데 잡음이 큰 유전자가 섞인다
p 순
우연으로 설명하기 어려운 순서
변화가 작아도 일관되면 위로
|t| 순 ← 코드랩의 선택
신호 ÷ 잡음이 큰 순서
방향과 상관없이 강한 변화부터
de.sort_values("t", key=lambda s: s.abs(), ascending=False)
└ 정렬하기 전에 각 값에 abs() 를 적용해 달라 ┘
key= 는 "값 자체가 아니라 이 함수를 통과시킨 결과로 비교하라"는 뜻입니다.
그냥 sort_values("t") 로 하면 −20 이 +20 보다 아래로 가서
크게 내려간 유전자와 크게 올라간 유전자가 표의 양 끝으로 흩어집니다.
절댓값으로 정렬하면 둘 다 위로 모입니다.
이 표가 15~19강의 모든 분석의 출발점입니다.
Python브라우저에서 실행
🎮 정렬 기준을 바꿔 보기
같은 표를 logFC · p · |t| 로 각각 정렬해 보세요.
상위 10개의 얼굴이 완전히 달라집니다.
어떤 기준이 우리 목적에 맞는지 생각해 보세요.
정렬 실험실 — 무엇을 기준으로 줄 세울 것인가
불러오는 중…
🤔 확인 문제
pd.DataFrame({"logFC": lfc, "t": t, "p": p}, index=L.index) 에서 딕셔너리의 키는 무엇이 되나요?
해설 딕셔너리의 키가 열 이름, 값이 그 열의 내용이 됩니다. 행 이름표는 index= 로 따로 지정합니다.
🤔 확인 문제
key=lambda s: s.abs() 를 붙이면 정렬이 어떻게 달라지나요?
해설 표시되는 값은 그대로이고 비교 기준만 절댓값이 됩니다. 그래서 −20 과 +20 이 나란히 최상위에 놓입니다.
🤔 확인 문제
p < 0.05 인 유전자가 4,484개라는 결과를 조심해서 읽어야 하는 이유는?
해설다중검정 문제입니다. 13,095 × 0.05 ≈ 655개는 순전히 우연으로 걸립니다. 그래서 실제 연구에서는 FDR 보정으로 q값을 계산해 씁니다.