안녕하세요. EDA 단계에서 수치형컬럼들의 기초통계량을 해보니 SeniorCitizen이 0과 1로 나뉘어있는거 같아 변수 확인 후, 해당 컬럼을 범주형으로 변환 후, 작업하였는데 이렇게 변경하여 작업해도 괜찮을까요 ? 범주형으로 변경 후, 작업하였을 때 # 원핫인코딩 : 946.3475544795037 946.7024808036148 # 레이블인코딩 : 951.0960435538027 952.7925407798712 다음과 같이 결과 값이 나왔습니다. 감사합니다 :)
# your code import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p1/members.csv") cols1 = df.columns[df.isnull().sum() >= len(df) * 0.3] df = df.dropna(subset=cols1) cols2 = df.columns[(df.isnull().sum() < len(df) * 0.3) & (df.isnull().sum() >= len(df) * 0.2)] for col in cols2: df[col] = df[col].fillna(df[col].mode()[0]) print(sum(df['f3'] == 'gold')) 문제에서 결측치가 30% 이상인 컬럼을 찾으라 했는데, 저는 이렇게 조건에 해당하는 컬럼들을 리스트 형태로 구해서 subset에 넘겨주었는데, 선생님 풀이를 보니 subset=['f1'] 이런 식으로 조건에 해당하는 컬럼의 이름을 직접 명시하셨더라구요..! 이런 문제를 풀 때 조건문을 이용해서 조건에 해당하는 컬럼들을 일괄적으로 선택할 필요는 없나요? 제가 아직 이 시험의 문제 유형을 잘 파악하지 못했는데, 이 시험이 혹시 코딩테스트를 예로 들면 "2+3의 값을 출력하시오" 라는 문제의 답을 print(2+3)이 아닌 print(5)로 써도 답은 맞으니 정답 처리가 되는 방식인가요? 감사합니다.
2유형 개념 강의 중 classification(분류) 문제 질문있습니다. label 인코딩 할 때 범주형 자료를 선택하기 위해 cols = train.select _dtypes(include='object')를 사용한다고 했습니다. 그 후 Min-Max 스케일링을 진행할 때 강의에서는 리스트 형태로 cols 변수에 직접 수치형 컬럼을 입력했지만 cols = train. select _dtypes (exclude= 'object' ) 또는 include=['int','float'] 으로도 선택할 수 있을 것을 것이라 생각해서 실행했더니 에러가 발생합니다. ValueError : Boolean array expected for the condition, not int64 제 방법대로 진행했을 때 cols에 선택된 데이터를 보면 강의에서 직접 리스트 형태로 입력한 컬럼에 추가로 'id' 컬럼이 더 선택된 것으로 보입니다. 이렇게 진행했을 때 왜 에러가 발생하는지, 에러가 발생하지 않아도 id 컬럼이 추가로 선택된 상태로 진행했을 때 문제가 있는지 질문 드립니다! 강의 내용 cols = ['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss', 'hours.per.week'] def get_data(): train_copy = train.copy() test_copy = test.copy() return train_copy, test_copy train_copy, test_copy = get_data() from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() display(train_copy[cols].head(2)) train_copy[cols] = scaler.fit_transform(train_copy[cols]) test_copy[cols] = scaler.transform(test_copy[cols]) display(train_copy[cols].head(2)) 제 코딩 내용은 위 코드에서 cols = ['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss', 'hours.per.week'] 부분을 cols = train.select_dtypes(include=['int','float']) 또는 cols = train.select_dtypes(exclude='object') 이렇게 바꿨습니다
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세 요 여기서 왜 가운데에 10이 생긴걸까요? 제가 100일을 쓰기도 전에 10일 쓰고 모르고 실행하긴했는데 그래서 그런걸까요?//...
랜덤포레스트 진행과정에서 전 강의에서는 pred_proba = rf.predict_proba(X_val) 쓰고, roc_auc = roc_auc_score(y_val, pred[:,1]) 이렇게 하셨는데 이번 강의에서는 roc_auc_score(y_val, pred_proba[:,1]) 로 표현하셨는데 어떤 차이로 인해서 다르게 쓰셨는지 문의드립니다.
안녕하세요 작업형2 예시문제에서 이상치 처리 여부 관련하여 문의드립니다. train데이터의 총구매액과 최대구매액의 최소값이 음수로 되어있고, test데이터의 최대구매액의 최소값이 음수로 되어있는데 이 경우 이상치 처리를 하고 진행하는게 맞는건가요? test데이터의 레코드 수는 동일해야하는데 위와 같은 경우 이상치 처리를 해야한다면 어떻게 처리를 해야 하는지 궁금합니다. 감사합니다 :)
모의문제 1의 문제 3번에서 df['f3']을 replace 함수 사용해서 값 변환해줄 때 굳이 numpy 불러오지 않고 하단처럼 구해도 되나요? 값은 133으로 똑같이 나왔습니다. #2. f3 컬럼의 결측치는 0, silver는 1, gold는 2, vip는 3 으로 변환한 후 총 합을 정수형으로 출력하시오 # print(df) df['f3'] = df['f3'].fillna(0) df['f3'] = df['f3'].replace('silver', 1) df['f3'] = df['f3'].replace('gold', 2) df['f3'] = df['f3'].replace('vip', 3) # print(df) print(int(sum(df['f3'])))