본문 바로가기

자격증/빅데이터 분석기사

모의고사 2

제 1 유형

 

  • 데이터셋 : HR-Employee-Attrition.csv

 

주어지는 데이터는 IBM의 근무자에 대한 직무정보와 퇴사여부를 정리한 것이다.

주요 컬럼 설명
Attrition Yes : 퇴사 , No : 퇴사하지 않음

 

 

1. 데이터에서 'Attrition'은 퇴사여부에 대한 종속변수에 해당한다.

   종속변수의 값을 다음과 같이 수치로 변환하고 각 범주별 레코드 수를 계산하시오. (Yes → 1, No  0)

# 1번

df <- read.csv("./sample_data/HR-Employee-Attrition.csv")

df$Attrition <- ifelse(df$Attrition =="Yes",1,0)
table(df$Attrition)   # 각 범주별 레코드 수 계산

2. 데이터셋의 데이터타입별 컬럼 개수를 계산하고, 범주형 변수 중 유일한 값 1개만 가지고 있는 컬럼을 찾아내어

   그 변수를 데이터에서 제거하시오.

# 2번

col <- c()

for(i in 1:ncol(df)){
  if(mode(df[,i])=="character"){
    col<- append(col,'chr')} else{
      col <- append(col,'num')
    }
}

table(col)   # 데이터타입별 컬럼 개수


str(df)   # 유일한 1개의 값을 가지는 범주형 변수 찾기 ->  Over18  
table(df$Over18)

df_new <- subset(df, select= -c(Over18))   # 값을 한개만 가지는 범주형 변수 제거 ; subset() 함수 사용
dim(df_new)

  • 컬럼명을 이용해서 삭제하기 위해서는 subset() 함수를 사용한다.
  • 컬럼번호를 이용해 삭제하는 방법도 있다.  (df_new <- df[,-c(22)])

 

 

3. 원래 데이터에서 숫자형인 컬럼만 추출하여 새로운 데이터프레임을 생성하고,

   각 변수간의 상관계수를 구하고 상관계수가 0.9 이상인 두 개의 컬럼을 찾아내어 그 변수 중 하나를 제거하시오.

 

* dataset 의 var 에서 결측치를 찾아내고 해당 결측치를 new_value 로 대체하는 코드

- dataset$var[is.na(dataset$var)] <- new_value
# 3번
n <- c()      # ★
for(i in 1:ncol(df_new)){
  if(mode(df_new[,i])!="character"){
    n <- append(n,i)
  }
}

df_number <- df_new[,n]
str(df_number)   # 27 개의 행

result = cor(df_number,method="pearson")   # 결측값 존재 -> 0 으로 대치
result[is.na(result)] <- 0

for(i in 1:27){
  for(j in 1:27){
    if((result[i,j]>=0.9) & (i != j)){
      cat(colnames(df_number[i]),",",colnames(df_number[j]),":",result[i,j],"\n")
    }
  }
}

 


제 2 유형

  • 데이터셋 : iris (R data set)

R의 iris 데이터셋을 이용하여 각 데이터에 따른 종의 분류를 시행해보고 이해 대한 결과에 대해서

(a) K=10 일 때 혼동행렬 이용 정확도 및 결과

(b) K=60 일 때 혼동행렬 이용 정확도 및 결과 를 보이시오.

 

* 분석조건

- 데이터는 기존의 데이터를 무작위화(randomizing) 하여 사용 (무작위화 결과화면 명시)
- 총 150 개 데이터 중 130 개를 학습에 사용. 나머지 20 개를 이용해 테스트한 결과를 나타냄
- 분석 전에 모든 숫자 컬럼에 대한 Min-Max 정규화를 수행

 

library(dplyr)
library(ggplot2)
# install.packages("caret")    
library(caret)    # ★ caret : 혼동행렬을 사용하기 위한 라이브러리
library(class)   # knn 을 사용하기 위한 라이브러리
data(iris)
df<- iris
summary(iris)

# 데이터 무작위화
set.seed(123)
index <- runif(nrow(df))
df_random <- df[order(index),]      # ★ df[order()]


# Min-Max 정규화
normal <- function(x){
  return((x-min(x))/(max(x)-min(x)))
}

df_new <- as.data.frame(lapply(df_random[,-5],normal))   # species 열 제외 후 정규화 적용
summary(df_new)  # 종속변수가 제거된 데이터


# train, test 분리
train <- df_new[1:130,]
Y_train <- df_random[1:130,5]

test <- df_new[131:150,]
Y_test <- df_random[131:150,5]


# KNN 적합 (K=10)
model1 <- knn(train=train, test=test, cl=Y_train, k=10)
table(factor(model1))   # 분류결과 확인  table(factor(model) ★
cm10 <- confusionMatrix(Y_test,model1)
cm10

acc10 <- cm10$overall[1]



# KNN 적합 (K=60)
model2 <- knn(train=train, test=test, cl=Y_train, k=60)
cm60 <- confusionMatrix(Y_test,model2)
cm60
acc60 <- cm60$overall[1]

 

 

  • caret : 혼동행렬을 사용하기 위한 라이브러리
  • class : knn 을 사용하기 위한 라이브러리

1. 난수함수를 통한 df_random 생성

2. df_random에 Min-Max 정규화 수행한 df_new 데이터셋 생성 (종속변수 없는 데이터셋) -> 여기서 train / test 분리 

3.  Y_train, Y_test 값은 df_random 에서 생성 (종속변수 있는 데이터셋)

'자격증 > 빅데이터 분석기사' 카테고리의 다른 글

로지스틱회귀(분류) in R  (0) 2022.11.25
SVM in R  (0) 2022.11.25
KNN in R  (0) 2022.11.25
의사결정나무 in R  (1) 2022.11.25
모의고사 1  (0) 2022.11.24