R) 전처리 - 객체 및 변수 명명하기

R) 전처리 - 객체 및 변수 명명하기

R에서 데이터분석시 객체 및 변수명을 일관성 있게 짓는 법을 알아보도록 한다.

개요

R로 데이터를 분석하다 보면 점점 다뤄야 하는 객체와 변수가 많아진다. 이 때 일관성 있는 명명규칙을 준수하지 않는다면 코드의 가독성이 저하되고 유지보수하기 어려워진다는 단점이 있다. 그래서 데이터의 특성, 객체의 종류 등 특정 기준을 세워서 이름을 짓는 것이 좋다.

표기법

객체 또는 변수명을 표기할 때 단어 하나로 표현할 수 있지만, 두 개 이상의 단어로 이루어진 합성어라면 띄어쓰기를 해야한다. 하지만 변수명이나 객체명에 띄어쓰기를 쓸 수 없기 때문에 다양한 표기법이 등장하였다.

카멜 표기법(Camel Case)

낙타
여기서 카멜은 낙타를 뜻한다. 낙타의 등에 혹이 있는데 객체 또는 변수명을 표기할 때 대문자와 소문자를 사용하는 행태가 이 혹을 닮았다 해서 붙여진 이름이다. 예시는 다음과 같다.

1
camelCase

첫 글자는 소문자로 시작하며 이어서 오는 첫 글자는 대문자로 작성한다.

파스칼 표기법(Pascal Case)

파스칼
파스칼 표기법의 예시는 다음과 같다.

1
PascalCase

카멜 표기법과 비슷하지만 첫 글자도 대문자로 시작하며 이어서 오는 첫 글자 역시 대문자로 작성한다.

스네이크 표기법(Snake Case)

뺴애애앰
스네이크 표기법은 카멜과 파스칼 표기법에 비해 상대적으로 글자의 숫자가 많다. 즉 길게 늘어진다고 생각해도 무방하다. 예시는 다음과 같다.

1
snake_case

각 단어간 연결을 “_”로 이어주는 것이 스네이크 표기법의 핵심이다. 변수명과 객체명이 길어진다는 단점이 있으나 가독성 때문에 본인은 이 방법을 선호한다.

데이터 특성에 따른 명명

너무 긴 변수명은 자동완성의 도움을 받더라도

도메인

금융, 마케팅 등 도메인을 기준으로도 정할 수 있겠다.

● 상품: prod
● 부서/부처: dept
● 매출: rev
● 송금/변환: trans
● 인구: pop
● 교육: edu

각각의 도메인에는 CTR, CPP 등 특정 지표를 2~4글자로 줄여쓰는 경우가 많기 때문에 해당 용어를 활용하여 변수 및 객체명을 명명하는 것을 추천한다.

단위

경우에 따라 비슷한 자료의 단위를 명시해야 할 수 있다. 단위는 그 자체로 굉장히 중요한 정보이지만, 데이터의 출처 또는 도메인에 비하면 부차적인 정보이기 때문에 본인은 이 특징을 각 객체의 접미사에 주로 명시하며 다음과 같다.

● 개수: cnt, ea
● 단위: unit
● 시간 - 요일: wday
● 시간 - 주말: wend
● 시간 - 시간: H, hr
● 시간 - 분: M, min
● 시간 - 초: S, sec

상기 목록 이외에도 kg, km 와 같이 길이, 무게 등 수많은 단위 표기가 있지만 보통 물리/수학 분야에서 줄여서 많이 사용하기 때문에 생략하도록 하겠다.

연산

평균, 분산 등 다양한 통계량 또한 명명규칙이 될 수 있으며 본인은 이 특징을 각 객체의 접미사에 주로 명시하며 다음과 같다.

● 합계: sum
● 최대: max
● 최소: min
● 평균: mean, avg
● 분산: var
● 표준편차: sd, std
● 외도: skew
● 첨도: kurt
● 분포: dist
● 요약: agg
● 빈도: freq
● 비율: prop, ratio
● 확률: prob
● 모집단: pop
● 개수/수량: cnt, amt

이진(binary) 변수

명목형 변수를 OHE(One Hot Encoding)처리를 하거나 특정 값 기준으로 기존 데이터를 이진으로 분류할 때 다음과 같이 사용할 수 있다.

1
2
df[, "is_wend"] = ifelse(test = df$wday >= 6, yes = 1, no = 0)
df[, "out_flag"] = ifelse(test = df$wday >= 6, yes = 1, no = 0)

이진 분류를 할 때 되도록이면 상기와 같이 1과 0으로 표기하는 것이 좋다. 그런데 가끔 보기좋게 한답시고 Y/N 으로 표기하는데 이는 해당 변수가 문자 속성으로 되기 때문에 비율 계산이나 추가 통계량 계산에서 코드 작성과 연산 부분에서 비효율적이다.

객체 속성에 따른 명명

대표적인 R의 객체는 1차원 벡터, 메트릭스, 데이터프레임, 리스트가 있는데 본인은 이 특징을 각 객체의 접두사로 사용하며 다음과 같다.

● 1차원 벡터: vec
● 메트릭스: mat
● 데이터프레임: df
● 리스트: list, ls

객체 필터링에 따른 명명

그리고 특정 객체에서 필터링하여 일부를 뽑아낸 객체는 접미사로 해당 내용을 명시한다.
● 일반적인 필터링 결과: sub

1
df_stat_sub = df_stat[2:6, ]

특정 변수의 값을 기반으로 필터링 할 경우 변수명과 값을 차례대로 접미사로 명시한다.
● 특정 변수 및 값 기준: 변수명_값

1
df_season_1 = df[df$season == 1, ]

표기 순서

우선 앞의 표기법을 따른다고 해도 어떤 단어를 어디에 배치해야 할까? 보통 데이터의 도메인, 출처 또는 객체의 속성과 관련된 단어를 접두사로 배치한다. 이는 코드 작성 스타일에 따라 달라질 수 있는데 아무래도 데이터의 도메인과 출처가 중요하긴 하지만 코드를 작성하는 입장에서는 객체명의 경우 벡터 또는 데이터프레임을 구분하는 접미사를 붙이는 것도 방법이다. 하지만 변수명의 경우 수량, 비율 등 접미사에 해당 내용을 명시하는 경우가 많기 때문에 숫자나 문자 등 이런 속성을 굳이 변수명의 접두사로 붙일 필요는 없다.

기타

R은 객체명 또는 변수명 지정시 숫자나 특수문자로 시작할 수 없다는 특징이 있다. 그렇기 때문에 시간의 경우 다음과 같이 표기할 수 있다.

1
2
3
4
colnamees(df)[(1:24) + 5] = paste0("H_", sprintf(fmt = "%02d", 1:20))
## [1] "year" "month" "wday" "value" "type" "H_01" "H_02" "H_03" "H_04" "H_05" "H_06" "H_07" "H_08"
## [14] "H_09" "H_10" "H_11" "H_12" "H_13" "H_14" "H_15" "H_16" "H_17" "H_18" "H_19" "H_20" "H_21"
## [27] "H_22" "H_23" "H_24"

여기서 sprintf() 함수를 사용하였는데 이는 1의 자리에서 10의 자리로 넘어갈 때에도 자연스레 정렬도 되고 길이를 통일하기 위해서이다. 응용해서 파일명 지정에도 사용할 수 있다.

주의점

종종 영어가 어렵다고 한글을 음차(音借) 하는 경우가 있는데 되도록이면 해당 단어의 영어 원문으로 작성하는 것을 추천한다. 예를 들어 매출을 “maechul”, 택시를 “taeksi” 로 적어놓는 엄청난 작명을 볼 수 있는데(심지어 정부 과제 산출물에서도 이런 황당한 경우가 종종 있다.) 이는 사람마다 표준 음차 규칙을 지켜가면서 명명하는 경우가 드물기 때문에 향후 문제가 생길 가능성이 높다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×