빅데이터 4주차 정리

2026. 3. 24. 11:582026 상반기 전공과목 공부/빅데이터

반응형

교수님 정리

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