묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 2 - 데이터 전처리에서 공식같은 게 있을까요??
작업형 2 - 데이터 전처리에서 공식같은 게 있을까요?? 이 의미는 데이터 타입이 object, int/float 섞여있을 때 수치형만 모아서 분석을 한다거나수치형+범주형 같이 모아서 분석을 한다거나 위 두 개의 경우 점수 배점 차이가 없을지 궁금합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
2회 기출유형(작업형2) 데이터
케글에서 다운받았는데 X_train.csv y_train.csv X_test.csv는 없고 Train.csv 파일 하나 있네요. 어떻게 된걸까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 2 고민끝에 정리하여 질문드립니다.
안녕하세요 선생님 저는 작업형 2를 아래와 같은 매커니즘으로 푸려고 합니다.train.info()를 통해서 object 컬럼 확인→ 만약 범주형 데이터가 있다면?→ 라벨인코딩(여기서 cols = train.select_dtypes(include='object').columns 로 해서 푸려고 합니다.)→target = train.pop('타겟컬럼')train = train.drop('ID',axis=1)test_ID = test.pop('ID')→train_test_split을 통해 검증데이터 분리train_test_split(train, target, test_size=0, random_state=0)<여기서 train과 target으로만 쓰기 위해서 위에서 pop과 drop을 진행했습니다.>→모델 예측 및 검증무조건 랜덤포레스트로 진행하고 그 후에 하이퍼파라메터 튜닝으로 성능 비교해볼 생각입니다.→평가지표에 따른 성능 비교→하이퍼파라메터 튜닝 적용해보기→DataFrame 만들기→csv만들기매커니즘에 따른 코드는 다음과 같습니다. train.info() from sklearn.preprocessing import LabelEncodercols = train.select_dtypes(include='object').columnsfor col in cols:le = LabelEncoder()train[col] = le.fit_transform(train[col])test[col] = le.transform(test[col]) target = train.pop('타겟컬럼')train = train.drop('ID',axis=1)test_ID = test.pop('ID') from sklearn.model_selection import train_test_splitX_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0, random_state=0) from sklearn.ensemble import RandomForestClassifierrf = RandomForestClassifier(random_state=0, max_depth = 5, n_estimators = 500)rf.fit(X_tr,y_tr)pred = rf.predict(X_val) from sklearn.metrics import f1_scoreprint(f1_score(y_val, pred, average='macro')) pred = rf.predict(test) submit = pd.DataFrame({'ID' : test_ID,'타겟컬럼' : pred}) submit.to_csv('0000.csv', index=False)여기서 질문은1. pop과 drop을 저 단계에서 해줘도 무방한가요?cols를 라벨 인코딩에서 먼저 정의해주게 되는데 그 이후에 pop과 drop써도 무방한지 여쭤봅니다.2. 물론 어떤 데이터를 주냐에 따라 다르겠지만 위와 같은 과정으로 진행해도 점수획득에 큰 무리 없겠죠?(교차검증등등은 진행하고 싶지 않아서요)3. 범주형 데이터가 하나도 없다면? 그럴일이 없을거 같긴한대 그러면 인코딩단계만 빼고 그대로 진행하면되나용?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형3 다중선형회귀분석
원핫인코딩과 drop_first=true 를 통해 다중공선성을 줄이고 유형A가 제거된 상태인데 독립변수에 유형A를 포함하고싶으면 어떻게 해야하나요?
-
미해결빅데이터 분석기사 시험 실기(Python)
질문입니다 RandomForestClassifier
RandomForestClassifier만 적용하여 앙상블 학습하였을때 ROC_AUC_SCORE가 1.0이 나오는데,, 연습문제 동영상과 같이 0.84.... 가 나오지 않고 1.0이 나오는 이유가 뭘까요 혹시 과적합이라면 오답이라고 할 수 있을까요? 전체 소스 공유합니다. import seaborn as sns import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler from sklearn.ensemble import RandomForestClassifier df = sns.load_dataset('titanic') # 결측치 제거 df['age'] = df['age'].fillna(df.age.mean()) df['deck'] = df.deck.fillna(method='bfill') df['deck'] = df.deck.fillna(method='ffill') df['embarked'] = df.embarked.fillna('S') df['embark_town'] = df.embark_town.fillna('Southampton') df.isna().sum() from sklearn.preprocessing import LabelEncoder obj = ['sex', 'embarked', 'class', 'who', 'adult_male', 'deck', 'embark_town', 'alone'] encoder = LabelEncoder() for i in obj: df[i] = encoder.fit_transform(df[i]) category = ['pclass', 'sex', 'class', 'who', 'adult_male', 'alone'] for i in category: df[i] = df[i].astype('category') df = pd.get_dummies(df) scaler = MinMaxScaler() lst = ['age', 'fare'] scaler.fit(df[lst]) df[lst] = scaler.fit_transform(df[lst]) y = df['survived'] X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.3, stratify=y, random_state=23) ml = RandomForestClassifier() ml.fit(X_train, y_train) pred = pd.DataFrame(ml.predict_proba(X_test)) from sklearn.metrics import accuracy_score, roc_auc_score print(roc_auc_score(y_test, pred.iloc[:, 1]))
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
문제 1-1 데이터 분할 관련 질문입니다.
데이터셋 분할 시에 iloc안쓰고 그냥df[:210] 이렇게 나눠도 상관 없나요.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
인코딩
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요범주형 데이터가 있으면 필수로 인코딩을 해줘야하는걸로 알고 있는데요이때 무조건 라벨인코딩으로 진행하려고 하는데 문제없는 사항인가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
5-1 제출 시 타겟값과 제출값이 다른 부분에 질문있습니다.
5-1 제출 시에 타겟은 Attrition_Flag에서 1과 0으로 기재되어있고 y_test.csv 파일을 봐도 0, 1 로 되어있던데강의에서 제출 시에는 predict_proba로 확률값을 제출하던데 왜 그렇게 제출해도 괜찮은지 잘 이해가 안 갑니다 ㅜ
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
섹션 11 2회 기출유형(작업형2) 코드 질문
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요안녕하세요. 좋은 강의 감사드립니다.오류 없이 결과는 나왔습니다. 제 코드가 맞는지, 엉뚱한지 확인이 어려워 질문드립니다.맞는 풀이인가요? 고쳐야 할 부분이 어떤 부분인가요?ID 드랍하지 않고 쭉 진행했는데, 이러할 경우 문제가 되나요?roc_auc_score, submit 과정에서 pred에 [:,1]을 하면 오류가 없고, 빼면 오류가 생기는데 pred[:,1]인 이유가 헷갈립니다.랜덤포레스트에서 random_state=2024만 적어서 돌려도 되나요?질문이 장황한데 답변 주셔서 항상 감사합니다!cols = ['Warehouse_block' ,'Mode_of_Shipment','Product_importance' , 'Gender'] from sklearn.preprocessing import LabelEncoder le = LabelEncoder() for col in cols: X_train[col] = le.fit_transform(X_train[col]) X_test[col] = le.transform(X_test[col]) from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_train, y_train['Reached.on.Time_Y.N'], test_size = 0.2, random_state = 2024) from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=160, max_depth=20, random_state=2024) rf.fit(X_train, y_train) pred = rf.predict_proba(X_test) from sklearn.metrics import roc_auc_score print(roc_auc_score(y_test, pred[:,1])) pred = rf.predict_proba(X_test) pred submit = pd.DataFrame({ 'ID': X_test['ID'], 'pred':pred[:,1] }) submit.to_csv("result.csv", index=False) import pandas as pd df = pd.read_csv("result.csv")
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형2 모의문제1
안녕하세요 선생님,CLIENTNUM,Attrition_Flag타겟 분류 문제에서, y가 분류니까roc_auc_score을 구할 때 predict_proba를 이용해서 구했는데 from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_tr,y_tr) pred = model.predict(X_val)print(accuracy_score(y_val, pred)) # 정밀도 print(precision_score(y_val, pred)) # 재현율 (민감도) print(recall_score(y_val, pred)) # F1 print(f1_score(y_val , pred))정확도 ~ f1까지는 proba를 안하고 바로 구했는데어떤 차이로 인해 얘네는 proba를 안하게 될까요 ? ㅜㅜ
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
앞으로 공부방향
선생님, 이제 한 열흘 정도 남은 상황에서강의 보면 이해는 되는데 실제로 타이핑 치려니까 머리속이 하얘지면서 어려운데, ㅠ 앞으로 남은 기간동안은 어떤 방식으로 공부를 하는게 좋을까요? 강의를 빼곡히 노션에 정리하면서 멘트나 그런것들 정리해뒀는데... 막막하네요ㅜ.ㅜ 1유형은 캐글 반복 + 2유형 기출만 반복(1~7회)3유형은 회귀분석이랑 분산분석 2개만 외워가려고요..ㅎ 갑갑하네요ㅜ.ㅜ 증말
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
캐글 작업형3 updated 2024.06 문제
문제 1-2 accuracy를 구하는 문제를 저는 다음과 같이 풀었습니다.from statsmodels.formula.api import logitmodel = logit('purchase~income', data=train).fit()target = test.pop('purchase')pred = model.predict(test) > 0.5from sklearn.metrics import accuracy_scoreprint (round(accuracy_score(target, pred),3)) 답은 0.507로 동일하게 나오는 것 같습니다.다음과 같이 풀어도 문제 없는걸까요?그리고 pred = model.predict(test) > 0.5에서 '>0.5'의 역할은 무엇인지 다시 한번 설명해 주실 수 있을까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
캐글 문제 중 질문드립니다
답변 감사합니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
5회 기출 작업형1 - 1번 문제
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요cond1 = df['종량제봉투종류'] == '규격봉투' cond2 = df['종량제봉투용도'] == '음식물쓰레기' cond3 = df['2ℓ가격'] != 0 df = df[cond1 & cond2 &cond3] print(round(df['2ℓ가격'].mean()))위 작업에서 cond1,2,3를 df에 대입하지 않고 print문으로평균을 구할 수 있는 방법이 있나요??아니면 따로 방법이 없어서 df에 대입 후 2ℓ가격의 평균을 구한 건지 궁금합니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업2유형 전처리&피쳐엔지니어링
안녕하십니까. 선생님 수업 잘 듣고 있는데 제가 전처리나 피처엔지니어링에서 정확한 기준을 모르겠습니다. 그냥 object타입을 모두 제거하거나 아니면 결측치가 있는 경우 어떤것은 제거하고 어떤것은 0으로 채우는데 정확한 기준이 있나요? 있다면 대략적인 기준을 알고 싶습니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형1 모의문제2 - 4번
문제에서 자료형이 object인 칼럼을 삭제하라고 하였는데df.head()로 출력하면 'age', 'f1', 'f2', 'f5', 'views' 가 object인 칼럼을 제외한 칼럼이지만,df.info()로 출력하면 아래 사진과 같이 'age', 'f1', 'views' 만이 object인 칼럼을 제외한 칼럼으로 나옵니다.어떤게 맞는 기준인지 판단하기가 어려워 질문 드립니다.이럴 땐 어떻게 사고하고 판단하여야 할까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
피처 엔지니어링 전체 과정
피처 엔지니어링의 전체 과정에 대해서 잘 이해가 안되서 질문 드립니다.데이터 전처리를 통해 결측값과 이상값을 처리하고, 수치형 변수와 범주형 변수로 나눈 뒤 수치형 변수는 스케일링을 적용하고 범주형 변수는 인코딩을 적용하고 그 이후에 나눈 수치형 변수와 범주형 변수를 합친다.만약 수치형 변수와 범주형 변수를 합친 후 train 데이터와 test 데이터의 shape를 출력했을 때, 각각의 컬럼 수가 다르다면 인코딩을 잘못한 것이다.train데이터와 test 데이터의 shape를 출력했을 때 컬럼 수가 다르다는 걸 알게 되면 그때부턴 어떻게 해야 되나요?데이터를 다시 새로 load하고범주형 변수와 수치형 변수의 컬럼 정보를 리스트에 저장한 후 train data와 test data를 합쳐서합친 전체 data의 수치형 변수 컬럼과 범주형 변수 컬럼에 대해 각각 스케일링과 인코딩을 진행한 후 train data와 test data로 나눠줘야하는 건가요?제가 이해한 것이 맞는 건지 궁금합니다!!강의 잘 듣고 있습니다. 감사합니다!^^
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형1 모의문제3 - 9번 문제 (답글에 대한 답이 없어 다시 질문 드립니다.)
아래는 수업 자료에 있는 풀이부분 코드이고,from google.colab import drive drive.mount('/content/drive') import pandas as pd import numpy as np df = pd.read_csv('/content/drive/MyDrive/bigdata(빅분기 놀이터)/빅분기 놀이터 Dataset/members.csv') df['subscribed'] = pd.to_datetime(df['subscribed']) df['year'] = df['subscribed'].dt.year df['month'] = df['subscribed'].dt.month df['day'] = df['subscribed'].dt.day df = df.groupby('month').count() print(df.sort_values('subscribed').index[0]) ValueError Traceback (most recent call last) <ipython-input-1-2092ad4ed95e> in <cell line: 10>() 8 df = pd.read_csv('/content/drive/MyDrive/bigdata(빅분기 놀이터)/빅분기 놀이터 Dataset/members.csv') 9 ---> 10 df['subscribed'] = pd.to_datetime(df['subscribed']) 11 df['year'] = df['subscribed'].dt.year 12 df['month'] = df['subscribed'].dt.month 4 frames/usr/local/lib/python3.10/dist-packages/pandas/_libs/tslibs/strptime.pyx in pandas._libs.tslibs.strptime.array_strptime() ValueError: time data "9690" doesn't match format "%Y-%m-%d", at position 21. You might want to try: - passing `format` if your strings have a consistent format; - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format; - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.이는 에러 코드입니다.df['subscribed'] = pd.to_datetime(df['subscribed'])이 코드에서 발생한 에러입니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
빅분기 작업형 2유형 predict, predict_proba 제가 이해한게 맞나 의문이 생겨 질문드립니다
선생님 분류 문제에서 확률을 예측하라고 제시되고 평가는 f1-score로 하라고 하면평가부분에서는model.fit(X_tr,y_tr)pred = model.predict(X_val)print(f1_score(y_val,pred))이렇게 하고예측부분에서는pred = model.predict_proba(test)이렇게 하고 제출하면 될까요 ?제가 이해한게 맞나 긴가만가해서 여쭤보고싶습니다..!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
3-4 와 10-2 피쳐엔지니어링(인코딩) 부분 .columns 사용 등
질문 1. 3-4 피쳐엔지니어링 강의 부분과10-2 공식예제 체험형 2 연계 질문이 있습니다.아래건 10-2에서 풀어본 거입니다.import pandas as pd train = pd.read_csv("data/customer_train.csv") test = pd.read_csv("data/customer_test.csv") # 사용자 코딩 # EDA print(train.shape, test.shape) # print(train.info()) # 범주형 주구매상품 , 주구매지점 # print(test.info()) # 범주형 주구매상품 , 주구매지점 # print(train.isnull().sum()) # 결측치 환불금액 # print(test.isnull().sum()) # 결측치 환불금액 ## 전처리 (결측치, 이상치) # print(train["환불금액"]) train["환불금액"] = train["환불금액"].fillna(0) test["환불금액"] = test["환불금액"].fillna(0) # print(train["환불금액"]) ## 피쳐엔지니어링(스케일링, 인코딩) from sklearn.preprocessing import LabelEncoder cols = train.select_dtypes(include="O") for col in cols: le = LabelEncoder() train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col]) ## 검증데이터셋 분리 from sklearn.model_selection import train_test_split x_tr,x_val,y_tr,y_val = train_test_split(train.drop(["성별"], axis=1), train["성별"],test_size=0.2, random_state = 100) ## 평가지표 및 모델 불러오기 from sklearn.metrics import roc_auc_score, f1_score, accuracy_score from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(random_state = 100) rf.fit(x_tr, y_tr) pred_rf = rf.predict_proba(x_val) print("roc_auc:",roc_auc_score(y_val,pred_rf[:,1])) # 기본 0.6258311184510446 # 인코딩 후, 0.6356067057174067 # 예측 (테스트셋에 적용) pred = rf.predict_proba(test) # print(pred) # print(pred[:,1]) # df 생성 및 제출 df = pd.DataFrame({"pred": pred[:,1]}) # print(df) df.to_csv("result.csv", index=False) print(pd.read_csv("result.csv"))라벨? 레이블? 인코딩 하면서cols 변수를 만들 때, .columns 를 추가하지 않아도 결과까지 문제 없이 되더라고요. .columns를 추가하면 시리즈 타입의 변수가 생성되고, 위에처럼 빼면 데이터프레임 차원 타입으로 변수가 생성되는건 확인했습니다.그래서 간편성을 위해 .columns 를 빼고 원핫 인코딩도 가능한가3-4 강의 때 자료를 적용해서 돌려봤습니다n_train = X_train.select_dtypes(exclude = 'object').copy() n_test = X_test.select_dtypes(exclude = 'object').copy() #사본 작성시 copy() 넣어서 실행 c_train = X_train.select_dtypes(include='object').copy() c_test = X_test.select_dtypes(include = 'object').copy() cols = X_train.select_dtypes(include="O") c_train = pd.get_dummies(c_train[cols]) c_test = pd.get_dummies(c_test[cols]) 그랬더니 에러가 발생 하더라고요.# ValueError: Boolean array expected for the condition, not objectcols = X_train.select_dtypes(include="O").columns # 이렇게 .columns 를 추가하고 돌리니 사용 가능cols 변수 생성할때 다시 .columns 를 추가하고 돌리니까 에러 없이 끝까지 잘 되더라고요.라벨 인코딩에선 문제 없던게 원핫 인코딩에서 ValueError: Boolean array expected for the condition, not object가 발생하는 이유가 뭔지 궁금합니다.인코딩은 라벨이든 원핫이든 cols 변수 때 select_dtypes(include="O).columns 으로 .columns 까지 다 입력하는걸로 연습하는게 맞는거 같은데 오류 발생은 이해가 안되네요. 질문 2.※ 피쳐엔지니어링에서 train, test 셋을 분리( .copy() )해서 수치형은 스케일링하고 범주형은 인코딩 한 다음, 합치기 ( .concat() ) 하는 방식이 아니라수치형 부분 칼럼을 변수(cols_n)로 받고, 범주형 부분을 변수(cols_c) 으로 받아서, 데이터셋을 수치와 범주형으로 분리하지 않은 상태에서 각각 스케일링, 인코딩을 적용하고 검증데이터셋 분리-> 모델 & 평가지표 불러오기 -> 예측(테스트셋 적용) -> df 생성 -> 제출 하는 방법은 어렵나요?아래 처럼요. [train, test 2개 데이터셋 제공시]# train셋엔 있고 test셋엔 없는 target에 해당하는 칼럼 분리target = train["target"]cols_n = train.drop("target", axis=1).select_dtypes(exclude="O).columnscols_c = train.drop("target",axis=1).select_dtypes(include="O").columns# "target" 데이터는 범주형이든 수치형이든 스케일링이나 인코딩을 하면 안되므로 제외시킴(이거 맞나요?)또는target = train.pop(["target"])cols_n = train.select_dtypes(exclude="O).columnscols_c = train.select_dtypes(include="O").columns## 수치형 민맥스 스케일링 작업 from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() train[cols_n] = scaler.fit_transform(train[cols_n]) test[cols_n] = scaler.transform(test[cols_n]) ## 범주형 라벨 인코딩 작업 from sklearn.preprocessing import LabelEncoder le = LabelEncoder() for col in cols_c: le = LabelEncoder() train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col]) 그 다음 검증데이터셋 분리 ~~~~~~~~~~~ 제출 [X_train, y_train, X_test 3개 데이터셋 제공시]cols_n = X_train.select_dtypes(exclude="O).columnscols_c = X_train.select_dtypes(include="O").columns## 수치형 민맥스 스케일링 작업 from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_train[cols_n] = scaler.fit_transform(train[cols_n]) X_test[cols_n] = scaler.transform(test[cols_n]) ## 범주형 라벨 인코딩 작업 from sklearn.preprocessing import LabelEncoder le = LabelEncoder() for col in cols_c: le = LabelEncoder() X_train[col] = le.fit_transform(X_train[col]) # 처음에 X_test[col] = le.transform(X_test[col]) 이후 검증데이터셋 분리 ~~~~~~~~~~~ 제출 이런 식으로요.작업형2에서 피쳐엔지니어링 부분이 특히 어려워서 조금이라도 간편하고, 범용성 높은 방법을 찾는게 머리 속 정리하기도 쉽고, 외우기도 좋을 거 같아서 고민중입니다.