본문 바로가기
빅데이터분석기사

빅분기 ) 빅분기 2회 실기 기출 풀어보기 작업형1유형 with R

by C.Mond 2023. 7. 22.
728x90
728x90

Q1.

보스턴 데이터의 crim 컬럼 top10 중 10번째 crim 값으로 1~10위의 crim 값을 변경 후

AGE 변수값이 80이상인 행의 crim의 평균을 산출해라

 

solution )

문제를 보면 어려워 하지말고 한스텝 한스텝씩 진행하세요.

 

1 step ) 보스턴 data를 crim 칼럼을 기준으로 내림차순정렬한다.

2 step ) 10번째행의 crim 컬럼의 값을구해 1~10번째행의 crim 컬럼의 값을 변경한다.

3 step ) AGE컬럼의 값이 80이상인 행만 남긴다

4 step ) crim 컬럼의 평균을 구한다

이렇게 크게 4스텝으로 나눌 수 있습니다.

코드로 풀이를 보겠습니다

###Boston data를 출력해서 대충 뭐 어떻게 생겼나 한번 살펴봅니다

Boston 

 

###Boston data의 구조를 출력해서 대충 뭐 어떻게 생겼나 한번 살펴봅니다

str(Boston)

 

###Boston data의 컬럼 이름을 출력해서 대충 뭐 어떻게 생겼나 한번 살펴봅니다
colnames(Boston)

 

###Boston_crimarr에 Boston data를 crim기준으로 내림차순정렬한 data를 저장합니다.
Boston_crimarr <- Boston %>% 
  arrange(desc(crim))

 

###10번째 crim value를 ten_value에 저장합니다
ten_value <- Boston_crimarr$crim[10]

 

###Boston_crimarr data의 1~10번째 행의 crim 컬럼에 10번째 값을 넣어줍니다
Boston_crimarr[1:10,"crim"] <- ten_value

 

###age기준으로 80이상의 data만 남깁니다
over_age_80 <- Boston_crimarr %>% 
  filter(age>=80)

 

###crim의 평균을 구합니다.
mean(over_age_80$crim)

 

answer )

5.759387

 

 

 

 

Q2.

주어진 데이터 첫번째 행 부터 순서대로 80%까지의 데이터를 추출 후

'total_bedrooms' 변수의 결측값(NA)을 'total_bedrooms' 변수의 중앙값으로 대체하고

대체 전의 'total_bedrooms' 변수 표준편차값과

대체 후의 'total_bedrooms' 변수 표준편차 값 산출

 

 

solution )

data 경로 

https://www.kaggle.com/camnugent/introduction-to-machine-learning-in-r-tutorial

 

Introduction to machine learning in R (tutorial)

Explore and run machine learning code with Kaggle Notebooks | Using data from California Housing Prices

www.kaggle.com

###data를 가져옵니다

df <- data

 

###80%의 행을 들고 옵니다
number <- nrow(df)*0.8
df_new <- df[1:number,]

 

###NA가 얼마나 있는지 확인합니다
sum(is.na(df_new$total_bedrooms))

 

###대체전 std를 구합니다
pre_sd <- sd(df_new$total_bedrooms,na.rm=T)

###NA가 있는 위치에 TRUE 아닌곳에 FALSE를 나타내는 벡터를 만듭니다
bool_na<- is.na(df_new$total_bedrooms)

 

###bool_na를 이용해 결측치를 median 값으로 채웁니다
df_new$total_bedrooms[bool_na] <- median(df_new$total_bedrooms,na.rm=T)

 

###채워졌나 확인합니다
sum(is.na(df_new$total_bedrooms))

 

###결측치 대체후 std값을 구합니다
aft_sd <- sd(df_new$total_bedrooms,na.rm=T)

 

###차이를 구합니다.

pre_sd-aft_sd

 

answer)

1.975147

 

 

 

 

Q3.

몰라서 비슷하게 출제

iris data에서 Sepal.Length 컬럼의 이상치를 없애고난 전과 후의 평균값의 차이는? 절대값으로 나타내라

이상치는 평균+1.5시그마, 평균-1.5시그마 범위를 벗어나는 data로 한다

 

 

solution )

###이상치 제거전 data를 이용해 평균을 구합니다

pre_mean <- mean(iris$Sepal.Length)

 

###std를 구하고 1.5를 곱해 1.5 sigma를 만들어 줍니다
std <- sd(iris$Sepal.Length)
std_15 <- std*1.5

 

###평균에 1.5시그마를 더하고 빼주어 범위의 숫자를 만들어줍니다
upper <- pre_mean+std_15
lower <- pre_mean-std_15

 

###범위를 넘는 data에 TRUE를 반환 아니면 FALSE를 반환하게 해줍니다
rem <- (iris$Sepal.Length>=upper)|(iris$Sepal.Length<=lower)

 

###bool indexing을 통해 이상치제거 data를 이용해 이상치제거후 평균을 구합니다
aft_mean <- mean(iris$Sepal.Length[!rem])

 

###data를 빼고 답을 구합니다
abs(pre_mean-aft_mean)

 

 

answer)

0.05728682

 

 

 

이렇게 간단하게 구할 수 있습니다.

 

 

 

 

728x90
728x90

댓글