빅분기2회 실기 기출

빅분기 2회 기출

# 작업형 1유형
# 1. 범죄율 컬럼인 Crim 항목의 상위에서 10번째 값으로 상위 10개의 값을 변환한 후, 
#    age가 80이상인 데이터를 추출하여 crim의 평균값 추출

# print(df.head())
df = df.sort_values('CRIM', ascending = False)
# print(df['CRIM'].head(20))
# print(df['CRIM'].iloc[9])
# print(df['CRIM'].iloc[:10])
df['CRIM'].iloc[:10] = df['CRIM'].iloc[9]
# print(df['CRIM'].head(20))
cond = df['AGE'] >= 80
df = df[cond]
# print(df.head())
print(df['CRIM'].mean())

# 정답 : 5.759386625

# 작업형 1유형
# 2. 데이터의 첫번째 행부터 순서대로 80%까지의 데이터를 추출한 수, total_bedrooms 변수의 결측치를 
     해당 변수의 중앙값으로 대체한 데이터로 구성
# 결측치 대체 전의 total_bedrooms 변수 표준편차 값과 결측치 대체 후의 total_bedrooms 변수 표준편차 값의 차이에 대한 절댓값 계산

# print(df.head())
# print(len(df))
df = df.iloc[:int(len(df)*0.8)]
# print(len(df))

# print(df['total_bedrooms'].isnull().sum())
before = df['total_bedrooms'].std()
# print(before)
df['total_bedrooms'] = df['total_bedrooms'].fillna(df['total_bedrooms'].median())
after = df['total_bedrooms'].std()
# print(after)

print(abs(before - after))

# 정답 : 1.9751472916456692

# 작업형 1유형
# 3. population 항목의 이상값의 합계를 계산하시오
# 이상값은 평균에서 1.5 * 표준편차를 초과하거나 미만인 값의 범위로 정한다.

# print(df.head())
# print(df['population'].mean())
# print(df['population'].std())
upper = df['population'].mean() + 1.5 * df['population'].std()
# print(upper)
lower = df['population'].mean() - 1.5 * df['population'].std()
# print(lower)

print(df[(df['population'] > upper) | (df['population'] < lower)]['population'].sum())

# 정답 : 5607295.0

# 작업형 2유형
# 고객이 주문한 물품의 정시 도착인지 (확률)
# 제출한 예측값의 ROC_AUC 점수 결과를 통해 점수 반영

# print(X_train.shape, X_test.shape, y_train.shape)
# print(X_train.head()) #ID 포함
# print(X_test.head()) #ID 포함
# print(y_train.head()) # 타겟 : Reached.on.Time_Y.N

# print(X_train.info()) # object형 4개
# print(X_train.describe())

# 결측치 확인
# print(X_train.isnull().sum()) X
# print(X_test.isnull().sum()) X

# ID값 제거
X_train = X_train.drop('ID', axis = 1)
test_id = X_test.pop('ID')
# print(X_train.head()) 
# print(X_test.head()) 

# object형 라벨인코딩
from sklearn.preprocessing import LabelEncoder
cols = X_train.select_dtypes(include = 'object')
# print(cols)
for col in cols : 
  le = LabelEncoder()
  X_train[col] = le.fit_transform(X_train[col])
  X_test[col] = le.transform(X_test[col])

# print(X_train.head())
# print(X_test.head())

# 모델 학습 및 예측
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state = 2023)
model.fit(X_train, y_train['Reached.on.Time_Y.N'])
pred = model.predict_proba(X_test)
# print(pred)

# 데이터프레임 생성
pd.DataFrame({
    'ID' : test_id,
    'Reached.on.Time_Y.N' : pred[:,1]
}).to_csv('1111.csv', index = False)

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