빅분기 3회 실기 기출

빅분기 3회 실기기출

# 작업형 1유형
# 1. 데이터 중 결측치가 있는 경우 해당 데이터의 행을 모두 제거하고, 첫번째 행부터 순서대로 70%까지의 데이터를 훈련 데이터로 추출한 데이터 세트를 구성한다.
# 변수 중 'housing_median_age'의 Q1(제1사분위수) 값을 정수로 계산하시오.

# print(df.shape)
# print(df.isnull().sum())

# 결측치 제거
df = df.dropna()
# print(df.isnull().sum())
# print(df.shape)
# print(len(df))

# 첫번째 행부터 순서대로 70%까지의 데이터 추출
# print(len(df))
# print(len(df)*0.7)

train = df.iloc[:int(len(df)*0.7)]
# print(len(train))

# housing_median_age의 제1사분위수 구하기
print(int(train['housing_median_age'].quantile(0.25)))

# 정답 : 19

# 작업형 1유형
# 2. 2000년도의 평균값보다 더 큰 유병률 값을 가진 국가의 수 계산

# print(df.head())

cond = df['year'] == 2000
df2000 = df[cond].drop('year', axis = 1) # 2000년도의 데이터를 추출하면서 year 컬럼 제거
# print(df2000.head())
df2000.index = ['value'] # 컬럼명 짓기

df2000 = df2000.T # 행열 바꾸기
# print(df2000.head(20))

cond = df2000['value'].mean() # 2000년도의 평균값 구하기
# print(cond)

cnt = df2000['value'] > cond # 유병률이 평균값보다 큰 조건
print(len(df2000[cnt]))

# 정답 : 76

# 작업형 1유형
# 3. 주어진 데이터 세트의 컬럼 중 빈 값 또는 결측치를 확인하여, 결측치의 비율이 가장 높은 변수명을 출력하시오

# print(df.isnull().sum())

df_nan = df.isnull().sum().reset_index()
# print(df_nan.head())
df_nan.columns = ['value', 'cnt']
# print(df_nan.head())

# print(df_nan['cnt'].max())
cond = df_nan['cnt'] == df_nan['cnt'].max()
print(df_nan.loc[cond, 'value'].values[0])

# 작업형 2유형
# 고객별 여행보험 가입할 확률
# 0:가입 X, 1:가입 O
# 가장 높은 Accuracy 값을 가지는 최종 모델 도출
# print(train.shape, test.shape)

# EDA
# print(train.head()) #ID 포함, 타겟 : TravelInsurance
# print(test.head()) #ID 포함
# print(train.describe())
# print(train.info()) #object형 4개

# 결측치 확인
# print(train.isnull().sum()) # 없음
# print(test.isnull().sum()) # 없음

# 타겟 분리
target = train.pop('TravelInsurance')
train = train.drop('ID', axis = 1)
test_id = test.pop('ID')
# print(train.shape, test.shape, target.shape, test_id.shape)

# object 라벨 인코딩
cols = train.select_dtypes(include = 'object')
# print(cols)

from sklearn.preprocessing import LabelEncoder
for col in cols : 
  le = LabelEncoder()
  train[col] = le.fit_transform(train[col])
  test[col] = le.transform(test[col])

# print(train.info(), test.info())

# 모델 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state = 2023)
model.fit(train, target)
pred = model.predict_proba(test)
# print(pred)

# 데이터프레임 생성 및 제출
pd.DataFrame({
    'index' : test.index,
    'TravelInsurance' : pred[:,1]
}).to_csv('0000.csv', index = False)

print(pd.read_csv('0000.csv'))