4강 / 20강

표 다듬기 — 같은 이름 합치고, 쓸 열만 고르기

groupby · 열 선택 · astype, 세 줄의 안전장치

표 다듬기 — 같은 이름 합치고, 쓸 열만 고르기
분석 전에 표를 믿을 수 있는 모양으로 만들어 두는 일 — 지루하지만 생략하면 반드시 탈이 납니다.

코드랩의 원본에는 표를 읽자마자 이런 세 줄이 나옵니다.

df = df.groupby(level=0).sum() # 같은 유전자 이름을 합친다 counts = df[WT + KD].astype(float)

얼핏 군더더기처럼 보이지만, 셋 다 이유가 있는 안전장치입니다.

① 같은 이름이 두 번 나오면?

유전자 이름표는 생각보다 지저분합니다. 하나의 유전자가 여러 조각으로 측정되거나, 이름이 바뀌는 과정에서 같은 이름의 행이 두 개 생기는 일이 흔해요. 그대로 두면 df.loc["Ddx54"] 가 한 줄이 아니라 표를 돌려주고, 그 뒤 코드가 전부 이상하게 꼬입니다.

df.groupby(level=0).sum() └ level=0 = "행 이름표를 기준으로 묶어라"

groupby(level=0) 는 같은 행 이름끼리 묶고, .sum() 이 그 값을 더합니다. 같은 유전자에서 읽은 개수는 더하는 것이 맞으니까요.

② 쓸 열만, 정한 순서대로

df[WT + KD] 는 열을 고르고 동시에 순서를 정합니다. 파일에 적힌 순서가 어떻든, 우리 표는 항상 앞 4개가 WT · 뒤 3개가 KD 가 됩니다. 13강에서 cols[:4], cols[4:] 로 두 그룹을 자를 때 이 약속이 그대로 쓰입니다.

③ 정수를 실수로

.astype(float) — 개수는 정수지만, 곧 나눗셈(CPM)과 로그를 씌울 겁니다. 정수인 채로 두면 파이썬 버전·numpy 설정에 따라 나눗셈이 잘려 나가는 사고가 날 수 있어요. 미리 실수로 바꿔 둡니다.

세 줄을 지나면 표가 '믿을 수 있는 모양'이 됩니다.
Python 브라우저에서 실행

🎮 중복이 있으면 어떻게 되는지 만들어 보기

일부러 같은 이름의 행을 넣고 groupby(level=0).sum() 을 켜고 꺼 보세요. .loc 가 돌려주는 것이 한 줄에서 표로 바뀌는 순간이 보입니다.

중복 이름 실험실 — groupby(level=0).sum() 을 켜고 꺼 보기
불러오는 중…
🤔 확인 문제
df.groupby(level=0).sum() 에서 level=0 은 무엇을 가리키나요?
🤔 확인 문제
df[WT + KD] 가 하는 일 두 가지는?
🤔 확인 문제
.astype(float) 를 미리 해 두는 이유로 가장 알맞은 것은?