데이터분석 준전문가 (ADsP) 필기 · 데이터분석 과목
AI 작성 · 운영진 검수 전데이터분석 준전문가 (ADsP) R기초와 데이터 마트 핵심정리
- 중요도
- ★★★☆☆ (3 / 5)
- 출제 비중
- 데이터분석 30문항 중 약 6문항 (20%)
R의 기본 자료형과 함수, 데이터 마트와 요약변수·파생변수, reshape·sqldf·plyr 같은 데이터 가공, 결측값 처리와 이상값 탐지를 다룹니다.
📖 R기초와 데이터 마트 개념 정리 보기 →R기초와 데이터 마트, 이것만은 꼭 외우세요
- R 벡터는 한 가지 자료형만 담으며, 섞이면 논리→숫자→문자 순으로 넓은 쪽으로 바뀝니다. 위치 번호는 1부터, 음수는 제외입니다.
- matrix()는 기본적으로 열 방향으로 채우고, apply(X, 1, f)는 행별, apply(X, 2, f)는 열별로 적용합니다.
- 요약변수는 집계한 변수(재활용성 높음), 파생변수는 분석가가 의미를 부여한 변수(논리적 타당성 필요)입니다.
- reshape(melt·cast)는 모양 바꾸기, sqldf는 SQL 사용, plyr는 나누기-적용-합치기, data.table은 빠른 검색에 씁니다.
- 결측값은 완전 분석·평균 대치·단순 확률 대치·다중 대치(대치→분석→결합)로, 이상값은 Q1−1.5IQR 미만·Q3+1.5IQR 초과로 판정합니다.
R기초와 데이터 마트 대표 문제 10개
문제 1. 어떤 변수의 1사분위수(Q1)가 20, 3사분위수(Q3)가 40이다. 사분위수 범위(IQR)를 이용해 Q1 − 1.5×IQR보다 작거나 Q3 + 1.5×IQR보다 큰 값을 이상값으로 판정할 때, 이상값에 해당하는 것은?
- ① −5
- ② 55
- ③ 65
- ④ 72
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ④ 72
핵심: 이상값 기준: Q1−1.5IQR 미만, Q3+1.5IQR 초과
- IQR = Q3 − Q1 = 40 − 20 = 20
- 1.5 × IQR = 1.5 × 20 = 30
- 아래 기준 = Q1 − 30 = 20 − 30 = −10
- 위 기준 = Q3 + 30 = 40 + 30 = 70
- −10 이상 70 이하는 정상 범위 → 72는 70보다 크므로 이상값
검산: 72 − 40 = 32 로, 30보다 큽니다.
틀린 선지
- 65: 70 이하라서 정상 범위입니다.
- −5: −10 이상이라서 정상 범위입니다.
- 55: 70 이하라서 정상 범위입니다.
문제 2. R에서 다음 코드를 실행했을 때 출력되는 결과는? x <- c(1, "a", TRUE) class(x)
- ① "logical"
- ② "character"
- ③ "numeric"
- ④ "list"
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ② "character"
핵심: 벡터는 한 가지 자료형만 — 섞이면 문자형으로 바뀜
R의 벡터(c 함수로 만든 자료)에는 한 가지 자료형만 들어갈 수 있습니다. 서로 다른 자료형을 섞으면 더 넓은 쪽으로 자동 변환됩니다.
- 변환 순서: 논리형(logical) → 숫자형(numeric) → 문자형(character)
- 문자 "a"가 들어 있으므로 1과 TRUE도 문자 "1", "TRUE"로 바뀝니다.
- 따라서 class(x)의 결과는 "character"입니다.
틀린 선지
- "numeric": 숫자만 있을 때의 결과입니다. 문자 "a"가 있으면 문자형이 됩니다.
- "logical": TRUE/FALSE만 있을 때의 결과입니다.
- "list": 여러 자료형을 그대로 담으려면 c()가 아니라 list()를 써야 합니다.
문제 3. R에서 다음 코드를 실행했을 때 출력되는 결과는? x <- c(10, 20, 30, 40, 50) x[-2]
- ① 10 30 40 50
- ② 20
- ③ 10 20 30 40
- ④ 40
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ① 10 30 40 50
핵심: R 인덱스 앞의 마이너스(-)는 그 위치를 뺀다는 뜻
R에서 대괄호 안에 음수 번호를 쓰면 그 위치의 원소를 빼고 나머지를 보여 줍니다.
- x는 10, 20, 30, 40, 50 (위치 1~5)
- x[-2]는 2번째 원소(20)를 뺀 나머지
- 결과: 10 30 40 50
참고로 R의 위치 번호는 0이 아니라 1부터 시작합니다.
틀린 선지
- 40: 파이썬처럼 '뒤에서 두 번째'로 착각한 결과입니다. R에서는 음수가 '제외'를 뜻합니다.
- 20: x[2]의 결과입니다.
- 10 20 30 40: 마지막 원소를 뺀 결과(x[-5])입니다.
문제 4. R에서 다음 코드를 실행했을 때 출력되는 결과는? x <- c(2, 4, NA, 6) mean(x, na.rm = TRUE)
- ① 0
- ② 3
- ③ 4
- ④ NA
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ③ 4
핵심: na.rm = TRUE면 결측값(NA)을 빼고 계산
NA는 R에서 결측값(값이 비어 있음)을 뜻합니다.
- na.rm = TRUE는 'NA를 빼고 계산하라'는 옵션
- NA를 빼면 2, 4, 6 → 3개
- 평균 = (2 + 4 + 6) ÷ 3 = 12 ÷ 3 = 4
틀린 선지
- NA: na.rm 옵션 없이 mean(x)만 실행했을 때의 결과입니다.
- 3: 합계 12를 NA까지 포함한 4개로 나눈 잘못된 계산입니다.
- 0: NA를 0으로 바꾼다고 해도 평균은 0이 아닙니다.
문제 5. R에서 데이터를 melt() 함수로 '식별자 – 변수 – 값' 형태로 녹인 뒤, cast() 함수로 원하는 모양의 표로 다시 짜는 데 쓰는 패키지는?
- ① plyr
- ② reshape
- ③ data.table
- ④ sqldf
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ② reshape
핵심: melt·cast = reshape 패키지
reshape 패키지는 데이터 모양을 바꾸는 데 씁니다.
- melt(): 넓은 표를 '식별자(id) – 변수 – 값'의 긴 형태로 녹임
- cast(): 녹인 데이터를 원하는 행·열 구조로 다시 짬 (요약 함수도 적용 가능)
틀린 선지
- sqldf: R에서 SQL 문장으로 데이터를 다루는 패키지입니다.
- plyr: 데이터를 나누고(split) 함수를 적용한 뒤(apply) 다시 합치는(combine) 패키지입니다.
- data.table: 키(key)를 이용해 큰 데이터를 빠르게 검색·처리하는 패키지입니다.
문제 6. R에서 다음 코드를 실행했을 때 출력되는 결과는? m <- matrix(1:6, nrow = 2) m[1, 3]
- ① 6
- ② 3
- ③ 2
- ④ 5
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ④ 5
핵심: matrix()는 기본적으로 열(세로) 방향으로 채움
matrix() 함수는 따로 정하지 않으면(byrow = FALSE) 숫자를 열 방향(위에서 아래로)으로 채웁니다.
- 1:6을 2행으로 열 방향으로 채우면
- 1열: 1, 2
- 2열: 3, 4
- 3열: 5, 6
- m[1, 3]은 1행 3열의 값 → 5
검산: 2행 3열(m[2, 3])은 6입니다.
틀린 선지
- 3: byrow = TRUE로 행 방향(1행: 1 2 3)으로 채웠을 때의 1행 3열 값입니다.
- 6: 2행 3열의 값입니다.
- 2: 2행 1열의 값입니다.
문제 7. R에서 다음 코드를 실행했을 때 출력되는 결과는? m <- matrix(1:6, nrow = 2) apply(m, 1, sum)
- ① 6 15
- ② 21
- ③ 9 12
- ④ 3 7 11
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ③ 9 12
핵심: apply(X, 1, 함수)=행별, apply(X, 2, 함수)=열별
apply(행렬, MARGIN, 함수)에서 MARGIN이 1이면 행(가로)별, 2이면 열(세로)별로 함수를 적용합니다.
- 행렬은 열 방향으로 채워져
- 1행: 1, 3, 5
- 2행: 2, 4, 6
- 행별 합계
- 1행: 1 + 3 + 5 = 9
- 2행: 2 + 4 + 6 = 12
- 결과: 9 12
검산: 9 + 12 = 21 = 1부터 6까지의 합
틀린 선지
- 3 7 11: 열별 합계(apply(m, 2, sum))입니다.
- 6 15: 행 방향(byrow = TRUE)으로 채웠다고 착각했을 때의 행별 합계입니다.
- 21: 전체 합계(sum(m))입니다.
문제 8. 데이터 마트를 만들 때 '주 구매 매장', '근무 시간대 구매 여부'처럼 분석가가 특정 조건이나 함수로 새 의미를 부여해 만든 변수로, 주관적일 수 있어 논리적 타당성을 갖춰야 하는 변수는?
- ① 요약변수
- ② 더미변수
- ③ 목표변수
- ④ 파생변수
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ④ 파생변수
핵심: 요약변수=종합·집계(재활용 높음), 파생변수=의미 부여(주관적)
데이터 마트의 변수는 두 가지를 구분합니다.
- 요약변수: 수집한 정보를 분석 목적에 맞게 종합·집계한 변수. 예) 기간별 구매 금액·횟수, 상품별 구매 순위. 많은 모델에 공통으로 쓸 수 있어 재활용성이 높음
- 파생변수: 분석가가 특정 조건이나 함수로 의미를 부여한 변수. 예) 주 구매 매장, 근무 시간 구매자, 주 활동 지역. 주관적일 수 있으므로 논리적 타당성이 필요함
틀린 선지
- 요약변수: 단순 집계 변수로, 분석가의 해석이 덜 들어갑니다.
- 목표변수: 모델이 맞히려는 결과 변수(종속변수)입니다.
- 더미변수: 범주형 값을 0과 1로 바꾼 변수입니다.
문제 9. R에서 다음 결과를 얻었다. 이에 대한 설명으로 옳지 않은 것은? x <- c(1, 2, 3, 3, 4, 6, 7, 7, 9, 20) summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.0 3.0 5.0 6.2 7.0 20.0
- ① 평균이 중앙값보다 커서 오른쪽으로 꼬리가 긴 분포로 볼 수 있다
- ② 상자그림 기준(Q3 + 1.5×IQR 초과)으로 최댓값 20은 이상값이다
- ③ 중앙값은 평균과 같은 6.2이다
- ④ 사분위수 범위(IQR)는 4이다
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ③ 중앙값은 평균과 같은 6.2이다
핵심: summary(): 최솟값·Q1·중앙값·평균·Q3·최댓값
summary() 결과를 하나씩 읽습니다.
- IQR = 3rd Qu. − 1st Qu. = 7.0 − 3.0 = 4
- 위 기준 = 7.0 + 1.5 × 4 = 13 → 최댓값 20은 13보다 커서 이상값
- 평균 6.2 > 중앙값 5.0 → 큰 값(20)이 평균을 끌어올린 오른쪽 꼬리 분포
- 6.2는 평균(Mean)이고 중앙값(Median)은 5.0입니다. 따라서 '중앙값은 평균과 같은 6.2'는 옳지 않습니다.
검산: 값을 크기순으로 놓으면 가운데 두 값은 4와 6이므로 중앙값 = (4 + 6) ÷ 2 = 5.0입니다.
틀린 선지
- IQR은 4: 옳은 설명입니다.
- 최댓값 20은 이상값: 옳은 설명입니다.
- 오른쪽 꼬리 분포: 옳은 설명입니다.
문제 10. R에서 rep(1:3, each = 2)를 실행했을 때 출력되는 결과는?
- ① 1 1 2 2 3 3
- ② 2 2 2
- ③ 1 2 3
- ④ 1 2 3 1 2 3
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ① 1 1 2 2 3 3
핵심: rep(each=) 원소별 반복, rep(times=) 전체 반복
rep() 함수는 값을 반복합니다.
- each = 2: 원소 하나하나를 두 번씩 반복 → 1 1 2 2 3 3
- times = 2: 전체 묶음을 두 번 반복 → 1 2 3 1 2 3
틀린 선지
- 1 2 3 1 2 3: rep(1:3, times = 2)의 결과입니다.
- 1 2 3: 반복하지 않은 원래 값입니다.
- 2 2 2: rep(2, 3)처럼 2를 세 번 반복한 결과입니다.
직접 풀어서 확인해 보세요.