14강 / 20강

차등발현 표 만들기 — 13,095개를 줄 세우기

DataFrame 조립과 sort_values(key=…)

차등발현 표 만들기 — 13,095개를 줄 세우기
숫자 배열 세 개를 이름표 붙은 표 한 장으로 — 여기서부터 사람이 읽을 수 있게 됩니다.

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) 에서 딕셔너리의 키는 무엇이 되나요?
🤔 확인 문제
key=lambda s: s.abs() 를 붙이면 정렬이 어떻게 달라지나요?
🤔 확인 문제
p < 0.05 인 유전자가 4,484개라는 결과를 조심해서 읽어야 하는 이유는?