제3회 빅데이터분석기사 실기 문제를 대략적으로 복원해 보는 중으로
단답형의 경우
저도 정확하지 않은 답이나 틀린문제가 있어 정확한 답이나 문제에 대해
확인되는데로 추가로 업데이트할 예정입니다...ㅎㅎㅎ
단답형 문제의 경우 암기력이 부족해... ㅠㅠ 대략적인 출제 내용만 봐주세요^^
혹시 답을 아시거나 내용에 대해 부족한 부분에 대해 알려주실 사항이 있으시다면
언제든 알려주시면 감사드리겠습니다~
[빅데이터분석기사 단답형 복원 중]
연관성 분석에서 규칙이 우연히 나타난것이 아님을 확인하기 위한 척도
답 : 향상도(리프트, Lift)
그룹화를 의미하는 데이터 변환을 뭐라하는가
(예시 : 일별 매출건수를 그룹화하여 월별 매출건수, 분기별 매출건수로 변환)
답 : 데이터전처리???, 그룹핑??, 그룹화?? (정답을 아직 모름)
(문제 이해가 잘안됨, 행으로된 일별 자료를 월, 분기등으로 group 하는 방법을 묻는건지, 이런 방법을 뭐라하는지 등)
최대최소정규화의 경우 단점이 존재함 A학교 영어 성적 점수가 60점과 B학교 영어 성적 점수 60점의 경우 ( )이/가 상이한 점을 알수없음???
답 : 분포(평균, 분산 등을 고민하다 분포를 적음)
마지막 은닉층2개의 값 [0.2, -0.3] , 첫번째 은닉층과 출력층 간 가중치 0.3, 두번쨰 은닉층과 출력층 간 가중치 0.1 , bias 0.1, 출력층 1개 출력값 (이번에는 2회와 다르게 조건이 없음)
(빅데이터분석기사 실기 2회 문제 : 마지막 은닉층2개의 값 [0.2, -0.3] , 가중치 [0.3, 0.1] , bias -0.05, 출력층 1개, f(x) = x , if x >= 0 , 그외 -1 일때 )
답 : 0.13 ( 0.2 * 0.3 + ( -0.3 * 0.1) + 0.1)
순서형이 아닌 명명된 이름의 척도
답 : 범주형 -> 명목형 (책 다시보니 명목형이 정답인듯.. 문제에서 순서형 외인것을 명시했는데 왜그랬을까요..ㅜㅜ)
군집분석에서 ( ) 기반의 ~~~?
답 : 거리??
분포를 모를때 0-1 사이의 값으로 정규화하는 방법으로
답 : 최대최소정규화(minmaxsclear)
여러가지 동일한 종류 또는 상이한 모형의 예측/분류 결과를 종합하는
답 : 앙상블
군집간 거리, 군집을 합칠때 사용하는 가중평균을 사용하는 방법은????
답 : 유클리디안?? (뭔지몰라서 그냥 적은.. 유클리디안) -> 평균연결법????
회귀, 분류 둘다 사용가능하며 지도학습 알고리즘으로 구부하는 경계와 데이터와 멀수록(최대일경우) 가장 좋은 모델로 선정하는 알고리즘은
답 : SVM
*** 추후 답안 업데이트 예정
[빅데이터분석기사 작업형1 복원 중]
문제 1 :
[보스턴 데이터] 24000건?정도의 데이터 중 컬럼들의 결측값을 전부 제거 후 데이터를 처음부터 순서대로 70%를 추출하여 특정변수 1분위수를 산출
답 : 19
- 풀이 주의 : 한 문자형 컬럼에 빈칸 ''인 데이터 1건이 있어서 빈칸을 결측으로 처리시 빈칸 제거전 242건에서 빈칸 제거후 243건의 행이 제거됨 하지만 제거하지 않고 1분위수를 구하더라도 정답은 같음
- 풀이 주의 : 70% 데이터 추출시 소수점 부분의 반올림 처리 여부에 따라 추출되는 행의 수가 1건 차이나게됨
소수점 날림과 반올림 처리하여 1분위수를 추출하였지만 정답은 동일함
데이터 : 캐글 캘리포니아 주택 데이터 세트 (https://www.kaggle.com/harrywang/housing?select=housing.csv)
참고 경로 : https://www.kaggle.com/camnugent/introduction-to-machine-learning-in-r-tutorial
# 데이터 : 캐글 캘리포니아 주택 데이터 세트
# --- 풀이 과정 --- #
# step 0) housing 데이터 불러오기
# step 1) 결측값 확인
# step 2) 결측값 제거
# step 3) 첫번째 행 부터 순서대로 70% 데이터 추출
# step 4) 'housing_median_age' 변수 1분위수 산출
##### step 0) housing 데이터 불러오기 #####
### 데이터 로드
housing <- read.csv('C:/kaggle_data/housing.csv')
### 데이터 확인
str(housing)
# 'data.frame': 20640 obs. of 10 variables:
# $ longitude : num -122 -122 -122 -122 -122 ...
# $ latitude : num 37.9 37.9 37.9 37.9 37.9 ...
# $ housing_median_age: num 41 21 52 52 52 52 52 52 42 52 ...
# $ total_rooms : num 880 7099 1467 1274 1627 ...
# $ total_bedrooms : num 129 1106 190 235 280 ...
# $ population : num 322 2401 496 558 565 ...
# $ households : num 126 1138 177 219 259 ...
# $ median_income : num 8.33 8.3 7.26 5.64 3.85 ...
# $ median_house_value: num 452600 358500 352100 341300 342200 ...
# $ ocean_proximity : chr "NEAR BAY" "NEAR BAY" "NEAR BAY" "NEAR BAY" ...
##### step 1) 결측값 확인 #####
### 데이터 결측 확인
summary(housing)
# longitude latitude housing_median_age total_rooms total_bedrooms
# Min. :-124.3 Min. :32.54 Min. : 1.00 Min. : 2 Min. : 1.0
# 1st Qu.:-121.8 1st Qu.:33.93 1st Qu.:18.00 1st Qu.: 1448 1st Qu.: 296.0
# Median :-118.5 Median :34.26 Median :29.00 Median : 2127 Median : 435.0
# Mean :-119.6 Mean :35.63 Mean :28.64 Mean : 2636 Mean : 537.9
# 3rd Qu.:-118.0 3rd Qu.:37.71 3rd Qu.:37.00 3rd Qu.: 3148 3rd Qu.: 647.0
# Max. :-114.3 Max. :41.95 Max. :52.00 Max. :39320 Max. :6445.0
# NA's :207
#
#
# population households median_income median_house_value ocean_proximity
# Min. : 3 Min. : 1.0 Min. : 0.4999 Min. : 14999 <1H OCEAN :9136
# 1st Qu.: 787 1st Qu.: 280.0 1st Qu.: 2.5634 1st Qu.:119600 INLAND :6551
# Median : 1166 Median : 409.0 Median : 3.5348 Median :179700 ISLAND : 5
# Mean : 1425 Mean : 499.5 Mean : 3.8707 Mean :206856 NEAR BAY :2290
# 3rd Qu.: 1725 3rd Qu.: 605.0 3rd Qu.: 4.7432 3rd Qu.:264725 NEAR OCEAN:2658
# Max. :35682 Max. :6082.0 Max. :15.0001 Max. :500001
### --- 실기시험에 제공된 데이터에는 5개 이상의 변수에 NA 값이 존재했음 ---
### 추가로 'ocean_proximity' 변수에는 ''인 값이 1건 존재했음 ---
##### step 2) 결측값 제거 #####
## NA 제거
housing_na_del = housing[is.na(housing$"longitude") == FALSE,]
## 빈칸 제거
housing_na_del = housing_na_del[housing_na_del$"ocean_proximity" != '',]
print(nrow(housing_na_del)) # 20640
##### step 3) 첫번째 행 부터 순서대로 70% 데이터 추출 #####
## 70% 해당 행 번호 찾기
row_split_end <- nrow(housing_na_del) * 0.7 # 20640 * 0.7
print(row_split_end) # 14448
print(round(row_split_end)) # --- 실기시험에 제공된 데이터에는 NA 제거 후 70% 추출시 소수점이 존재했음 ---
## 순서데로 70% 추출
data_row_split <- housing_na_del[c(1:row_split_end),]
##### step 4) median_house_value 변수 1분위수 산출 #####
## 'housing_median_age'변수 분위수 확인
print(quantile(data_row_split$"housing_median_age"))
# 0% 25% 50% 75% 100%
# 1 19 30 38 52
## 1분위수 추출
result <- quantile(data_row_split$"housing_median_age")[[2]]
print(result) # 19
문제 2 :
[국가별 유병률? 데이터] 연도별(1990 ~ 2007:18개년도, 행) 대략 200개 정도의 국가(컬럼)의 데이터 중 2000년도 전체 국가 유병률의 평균보다 큰 국가 수 산출
답 : 71
*** 추후 코드 업데이트 예정
문제 3 :
[타이타닉 데이터] 컬럼별로 빈값 또는 결측값들의 비율을 확인하여 가장 결측율이 높은 변수명을 출력
답 : Age
데이터 : 캐글 캘리포니아 주택 데이터 세트 : https://www.kaggle.com/c/titanic/data?select=train.csv
참고 경로 : https://www.kaggle.com/c/titanic
# 데이터 : 캐글 캘리포니아 주택 데이터 세트
# --- 풀이 과정 --- #
# step 0) titanic 데이터 불러오기
# step 1) 결측값 확인
# step 2) 컬럼별 결측값 비율 산출
# step 3) 컬럼명별 결측비율 결과 정리
# step 4) 결측값 비율 높은 컬럼명 추출
##### step 0) titanic 데이터 불러오기 #####
### 데이터 로드
titanic <- read.csv('C:/kaggle_data/titanic_train.csv')
### 데이터 확인
str(titanic)
# 'data.frame': 891 obs. of 12 variables:
# $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
# $ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
# $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
# $ Name : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
# $ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
# $ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
# $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
# $ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
# $ Ticket : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
# $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
# $ Cabin : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
# $ Embarked : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
##### step 1) 결측값 확인 #####
### 데이터 결측 확인
summary(titanic)
# PassengerId Survived Pclass Name Sex
# Min. : 1.0 Min. :0.0000 Min. :1.000 Abbing, Mr. Anthony : 1 female:314
# 1st Qu.:223.5 1st Qu.:0.0000 1st Qu.:2.000 Abbott, Mr. Rossmore Edward : 1 male :577
# Median :446.0 Median :0.0000 Median :3.000 Abbott, Mrs. Stanton (Rosa Hunt) : 1
# Mean :446.0 Mean :0.3838 Mean :2.309 Abelson, Mr. Samuel : 1
# 3rd Qu.:668.5 3rd Qu.:1.0000 3rd Qu.:3.000 Abelson, Mrs. Samuel (Hannah Wizosky): 1
# Max. :891.0 Max. :1.0000 Max. :3.000 Adahl, Mr. Mauritz Nils Martin : 1
# (Other) :885
# Age SibSp Parch Ticket Fare Cabin Embarked
# Min. : 0.42 Min. :0.000 Min. :0.0000 1601 : 7 Min. : 0.00 :687 : 2
# 1st Qu.:20.12 1st Qu.:0.000 1st Qu.:0.0000 347082 : 7 1st Qu.: 7.91 B96 B98 : 4 C:168
# Median :28.00 Median :0.000 Median :0.0000 CA. 2343: 7 Median : 14.45 C23 C25 C27: 4 Q: 77
# Mean :29.70 Mean :0.523 Mean :0.3816 3101295 : 6 Mean : 32.20 G6 : 4 S:644
# 3rd Qu.:38.00 3rd Qu.:1.000 3rd Qu.:0.0000 347088 : 6 3rd Qu.: 31.00 C22 C26 : 3
# Max. :80.00 Max. :8.000 Max. :6.0000 CA 2144 : 6 Max. :512.33 D : 3
# NA's :177 (Other) :852 (Other) :186
### --- 실기시험에 제공된 데이터에는 3개 이상의 변수에 NA 값이 존재했음 ---
##### step 2) 컬럼별 결측값 비율 확인 #####
### --- 예시용 코드로 'PassengerId', 'Age', 'Embarked' 세 변수만 사용하여 풀이 ---
titanic <- titanic[,c('PassengerId', 'Age', 'Embarked')]
str(titanic)
# 'data.frame': 891 obs. of 3 variables:
# $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
# $ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
# $ Embarked : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
## 컬럼별 결측값 비율 산출
# 전체 데이터 행수
row_cnt <- dim(titanic)[1]
# 'PassengerId' 변수 결측 또는 빈칸인 행수 확인 및 비율 산출
PassengerId_na_df <- titanic[is.na(titanic$"PassengerId") == TRUE | titanic$"PassengerId" == '', ]
PassengerId_na_ratio <- dim(PassengerId_na_df)[1] / row_cnt
print(PassengerId_na_ratio) # 0
# 'Age' 변수 결측 또는 빈칸인 행수 확인 및 비율 산출
Age_na_df <- titanic[is.na(titanic$"Age") == TRUE | titanic$"Age" == '', ]
Age_na_ratio <- dim(Age_na_df)[1] / row_cnt
print(Age_na_ratio) # 0.1986532
# 'Embarked' 변수 결측 또는 빈칸인 행수 확인 및 비율 산출
Embarked_na_df <- titanic[is.na(titanic$"Embarked") == TRUE | titanic$"Embarked" == '', ]
Embarked_na_ratio <- dim(Embarked_na_df)[1] / row_cnt
print(Embarked_na_ratio) # 0.002244669
##### step 3) 컬럼명별 결측비율 결과 정리 #####
## 컬럼명별 결측비율 결과 정리
# 데이터 컬럼명 추출
col_names <- as.character(colnames(titanic))
print(col_names)
# [1] "PassengerId" "Age" "Embarked"
# 컬럼별 결측 비율 정리 저장
na_ratio_df <- data.frame(colname = col_names, na_ratio = c(PassengerId_na_ratio, Age_na_ratio, Embarked_na_ratio))
print(na_ratio_df)
# colname na_ratio
# 1 PassengerId 0.000000000
# 2 Age 0.198653199
# 3 Embarked 0.002244669
##### step 3) 결측값 비율 높은 컬럼명 추출 #####
result <- na_ratio_df[na_ratio_df$"na_ratio" == max(na_ratio_df$"na_ratio"), 'colname']
print(result)
# [1] Age
# Levels: Age Embarked PassengerId
## -- factor 형태로 나와서 맘에 안듬 as.character로 변경 해서 다시 추출 --
na_ratio_df$'colname' <- as.character(na_ratio_df$'colname')
result <- na_ratio_df[na_ratio_df$"na_ratio" == max(na_ratio_df$"na_ratio"), 'colname']
print(result)
# [1] "Age"
[빅데이터분석기사 작업형2 복원 중]
[ Travel Insurance Prediction Data ] 여행객의 정보들을 기반으로 여행보험 상품 가입 여부 예측
- index(id) 컬럼 포함 총 10개의 컬럼으로 되어있으며, train 데이터로 1490건, test 데이터로 497건의 자료를 제공
- 훈련데이터의 여행여부(0,1)의 비율은 7:3 ~ 8:2 정도의 비율로 되어 있었음
- 주의 : 데이터에 index 컬럼이 숫자형으로 되어있어 모델에 포함하여 index 변수를 활용하지 않도록 주의필요
데이터 - 캐글
https://www.kaggle.com/tejashvi14/travel-insurance-prediction-data
댓글