빅데이터 4주차 정리
2026. 3. 24. 11:58ㆍ2026 상반기 전공과목 공부/빅데이터
반응형
교수님 정리
else 위치
for문에서 변수를 지정할때 유의 할것
while문은 큰 차이는 없음
for문에 있는 break, next도 큰 차이 x
apply()잘 생각하기
가로 세로 열, 행 별로 어떻게 저장하는지
사용자 정의 함수 만들기 => 방향 표시 하는것과 function키워드 기억
위치 -> 용어 알아두기
1장. 데이터 살펴보기 (탐색적 데이터 분석)
우리가 엑셀 파일을 열면 가장 먼저 눈으로 표의 크기가 얼마나 되는지, 어떤 내용이 있는지 훑어보죠? R에서는 눈 대신 **함수(명령어)**를 이용해 데이터를 훑어봅니다.
- dim(), nrow(), ncol(): 데이터의 크기 확인
- dim()은 dimension(차원)의 약자입니다. 행(가로줄)과 열(세로칸)의 개수를 알려줍니다.
- nrow()는 행(Row)의 수, ncol()은 열(Column)의 수만 따로 보여줍니다.
R
# R에 기본으로 내장된 붓꽃(iris) 데이터를 예로 들어볼게요.
dim(iris) # 결과: 150 5 (가로 150줄, 세로 5칸이라는 뜻이에요)
nrow(iris) # 결과: 150 (데이터가 총 150개 있네요!)
- head(), tail(): 데이터 살짝 엿보기
- 데이터가 10만 줄인데 무작정 출력하면 화면이 꽉 차버리겠죠? 위에서 6줄(head), 아래서 6줄(tail)만 뽑아서 미리보기를 하는 기능입니다.
R
head(iris) # 첫 6줄만 예쁘게 표 형태로 보여줍니다.
- table(): 종류별로 개수 세기 (★아주 중요)
- 설문조사를 했을 때 "찬성 몇 명, 반대 몇 명이지?"를 셀 때 가장 많이 쓰는 함수입니다.
R
blood_type <- c("A", "B", "A", "O", "AB", "A", "O")
table(blood_type)
# 결과:
# A AB B O
# 3 1 1 2 (A형이 3명, O형이 2명이라고 바로 알려줍니다!)
- subset(): 원하는 조건의 데이터만 골라내기
- 엑셀의 '필터' 기능과 완벽하게 똑같습니다.
R
# 나이 데이터 프레임이 있다고 가정해볼게요.
# subset(데이터, 조건)
adults <- subset(people_data, age >= 20) # 20살 이상만 골라서 adults에 저장해!
2장. 조건문 (if, ifelse) - "만약 ~라면?"

Shutterstock
프로그램이 상황에 따라 다른 행동을 하게 만드는 갈림길 역할을 합니다.
- if ~ else if ~ else (기본 조건문)
- 위에서부터 차례대로 질문을 던집니다. 하나라도 TRUE(참)가 나오면 그 안의 코드를 실행하고 갈림길을 완전히 빠져나옵니다.
R
score <- 85
if (score >= 90) {
print("A등급 입니다.") # 90점 이상이면 실행 (거짓이므로 넘어감)
} else if (score >= 80) {
print("B등급 입니다.") # 80점 이상이면 실행 (참! 출력하고 끝남)
} else {
print("C등급 입니다.") # 위의 모든 조건이 틀렸을 때만 실행
}
- ifelse() (한 줄짜리 조건문)
- 엑셀의 =IF() 함수와 구조가 100% 똑같습니다. 코드를 짧고 간결하게 쓰고 싶을 때 씁니다.
- 형태: ifelse(조건, 참일 때 할 일, 거짓일 때 할 일)
R
point <- 75
# point가 80 이상이면 "합격", 아니면 "불합격"을 result에 저장해라.
result <- ifelse(point >= 80, "합격", "불합격")
print(result) # 결과: "불합격"
3장. 반복문 (for, while) - "이거 100번만 대신 해줘"
똑같은 작업을 여러 번 해야 할 때 복사-붙여넣기를 하지 않기 위해 사용합니다.
- for문: 반복 횟수가 정해져 있을 때
- in 뒤에 있는 숫자들을 i라는 바구니에 하나씩 넣어가며 반복합니다.
R
# 1부터 5까지 순서대로 출력하기
for (i in 1:5) {
print(i)
# 첫 번째 바퀴: i에 1이 들어감 -> 인쇄
# 두 번째 바퀴: i에 2가 들어감 -> 인쇄 ... (5까지 반복)
}
- while문: 특정 조건이 만족되는 동안 계속 반복할 때
- 주의점: 무한 반복에 빠지지 않도록 반복문 안에서 조건을 변화시켜주는 코드가 반드시 있어야 합니다. (이전에 1만 계속 출력되던 문제가 바로 이 때문이었죠!)
R
coin <- 3
while (coin > 0) {
print("게임을 한 판 합니다.")
coin <- coin - 1 # 게임을 했으니 코인을 1개 줄입니다. (이게 없으면 영원히 게임함!)
}
- break 와 next (반복문 제어)
- break: "조건 달성했으니 당장 반복문 완전히 끝내!"
- next: "이번 턴만 건너뛰고 다음 반복으로 넘어가!"
R
for (i in 1:5) {
if (i == 3) next # i가 3이면 아래 코드를 무시하고 다음 바퀴(i=4)로 넘어감
if (i == 5) break # i가 5가 되면 반복문을 아예 부수고 나감
print(i)
}
# 결과: 1, 2, 4 (3은 건너뛰었고, 5는 출력되기 전에 부서짐)
4장. 함수 만들기 & apply()의 마법
- 사용자 정의 함수 (function)
- 내가 자주 쓰는 복잡한 코드를 묶어서 '나만의 단축키'를 만드는 과정입니다.
R
# 숫자를 2개 넣으면 더해서 10을 곱해주는 나만의 함수 만들기
my_magic <- function(a, b) {
result <- (a + b) * 10
return(result) # 계산 결과를 밖으로 뱉어내라!
}
# 나만의 함수 사용해보기
my_magic(2, 3) # (2+3)*10 이므로 결과는 50
- ★ apply() 함수 (R의 꽃!)
- 데이터 표(행렬, 데이터프레임)가 있을 때, 가로 합계, 세로 평균 등을 반복문 없이 한 줄로 계산해 주는 엄청난 함수입니다.
- 형태: apply(데이터, 방향, 적용할_함수)
- 방향 기억법: 숫자 1은 한 일(一)자처럼 생겼으니 가로(행) 방향! 숫자 2는 위아래로 길쭉하니 세로(열) 방향!
R
# 3명(행)의 국어, 영어 점수(열)가 있는 표라고 상상해봅시다.
scores <- data.frame(Korean = c(80, 90, 100), English = c(70, 85, 95))
# 1(가로): 각 학생별 총점 구하기
apply(scores, 1, sum)
# 2(세로): 각 과목별 평균 점수 구하기
apply(scores, 2, mean)
5장. 원하는 데이터의 '위치' 찾기 (which)
특정 조건을 만족하는 값이 **"몇 번째에 있는지(인덱스 번호)"**를 찾아냅니다. 단순히 값 자체를 찾는 것보다, 위치를 알아야 그 위치의 값을 다른 값으로 수정할 수 있기 때문에 자주 쓰입니다.
- which(조건): 조건에 맞는 데이터의 위치 번호들을 알려줍니다.
- which.max(), which.min(): 제일 큰 값, 제일 작은 값의 위치 하나만 딱 알려줍니다.
R
# 5명의 학생 점수
student_scores <- c(40, 95, 80, 100, 60)
# 1. 100점 맞은 애는 몇 번째 학생이야?
which(student_scores == 100) # 결과: 4 (4번째)
# 2. 80점 이상인 애들은 몇 번째 애들이야?
which(student_scores >= 80) # 결과: 2, 3, 4
# 3. 1등(최고점)은 몇 번째 학생이야?
which.max(student_scores) # 결과: 4
# 응용: 60점 이하인 학생(1번, 5번) 점수를 모두 65점으로 올려주기!
idx <- which(student_scores <= 60)
student_scores[idx] <- 65 # 찾은 위치에 65를 덮어씌움
> # 심화문제 1. 평균 미만 점수 상향 조정
> # 10명 성적 중 평균보다 낮은 점수만 찾아서 5점씩 올리기
>
> score <- c(76, 84, 69, 50, 95, 60, 82, 71, 88, 84)
> avg_score <- mean(score)
> idx <- which(score < avg_score)
> score[idx] <- score[idx] + 5
> print(score)
[1] 76 84 74 55 95 65 82 76 88 84
>
>
> # 심화문제 2. 등급 분류 및 인원수 세기
> # 8명 방문 횟수. 10회 이상 "VIP", 아니면 "Normal"로 분류하고 등급별 인원수 세기
>
> visit_count <- c(3, 15, 8, 12, 2, 20, 9, 11)
> grade <- ifelse(visit_count >= 10, "VIP", "Normal")
> table(grade)
grade
Normal VIP
4 4
>
>
> # 심화문제 3. 특정 조건 합 구하기
> # 1~30 중 3의 배수가 아닌 숫자들만 더하기. (for, next 사용)
>
> total_sum <- 0
> for(i in 1:30) {
+ if (i %% 3 == 0) next
+ total_sum <- total_sum + i
+ }
> print(total_sum)
[1] 300
>
>
> # 심화문제 4. 짝수/홀수 판별 함수
> # 숫자 넣으면 짝수/홀수 출력하는 함수 check_num() 만들기
>
> check_num <- function(n) {
+ if (n %% 2 == 0) {
+ print("짝수")
+ } else {
+ print("홀수")
+ }
+ }
> check_num(7)
[1] "홀수"
> check_num(10)
[1] "짝수"
>
>
> # 심화문제 5. apply와 사용자 함수 결합
> # 3개 부서 실적. 각 부서(행)별 실적 차이(최댓값 - 최솟값) 구하기
>
> performance <- data.frame(
+ First_Half = c(100, 85, 120),
+ Second_Half = c(110, 80, 150)
+ )
> rownames(performance) <- c('영업1팀', '영업2팀', '영업3팀')
>
> gap_func <- function(x) {
+ return(max(x) - min(x))
+ }
> apply(performance, 1, gap_func)
영업1팀 영업2팀 영업3팀
10 5 30 '2026 상반기 전공과목 공부 > 빅데이터' 카테고리의 다른 글
| 빅데이터 (0) | 2026.04.14 |
|---|---|
| 빅데이터 1주차 (0) | 2026.03.03 |