묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형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에서 피쳐엔지니어링 부분이 특히 어려워서 조금이라도 간편하고, 범용성 높은 방법을 찾는게 머리 속 정리하기도 쉽고, 외우기도 좋을 거 같아서 고민중입니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
5회 작업형2 rmse 질문입니다
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요target = train.pop("price") train = pd.get_dummies(train) test = pd.get_dummies(test) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size = 0.2, random_state=0) from sklearn.ensemble import RandomForestRegressor rf = RandomForestRegressor(random_state=0) rf.fit(X_tr,y_tr) pred = rf.predict(X_val) from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_val, pred) rmse = mse **0.5 print(rmse) 이런식으로 rmse를 만들면 될까요??
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형2 피쳐엔지니어링 과정에서 pop() 을 사용하는 이유
어떤 경우는 pop()을 사용하고 어떤 경우는 사용하지 않는 것 같은데, 명확히 이해가 안되서 질문 남깁니다. pop() 으로 train셋의 target 값 보존을 위한 것인가요? 아니면 df 생성 때 pred 값이 외의 칼럼을 함꼐 출력하기 위해서인가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
기출유형4회 작업형1-3
import pandas as pd df = pd.read_csv("nf.csv") # print(df.head()) df['date_added']=pd.to_datetime(df['date_added']) df['year']=df['date_added'].dt.year df['month']=df['date_added'].dt.month cond1=df['year']==2018 cond2=df['month']==1 cond3=df['country']=='United Kingdom' #print(len(df[cond1&cond2&cond3])) #print(len(cond1&cond2&cond3)) 여기서 맨밑에 샵 두줄이 어떻게 다른건가요? 두개 결과가 다르게 나오는데 시험상황에서 실수할것 같아요 ㅜ 헷갈립니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
1, 3교시 소문제를 풀고 답안 제출화면으로 갔다가 다시 돌아올 경우
시험 테스트 환경에서 파이썬으로 프로그램을 짜고 답안을 도출해서 왼쪽상단에 답안제출 화면으로 가서 답안을 넣고 다시 프로그램 화면으로 돌아가려고 풀이화면을 눌렀는데, 프로그램 작성 코드가 다 없어 집니다. 시험 테스트 환경에서만 그런 것인지? 시험환경에서도 이렇게 된다면 어떻게 해야하는지 문의 드립니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
예시문제 작업형2(신버전)
선생님 train과 test 데이터에서 회원ID를 드랍하지 않고 모델에 가져가는 이유가 궁금합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
다중선형회귀2(범주형 변수) 질문있습니다.
위의 다중선형회귀에서 유형 칼럼은 범주형 변수인데,C(유형) 으로 안해줘도 되나요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
rmse/mse 사용법
sklearn으로 rmse 활용하는 방법을 알려주셨는데공식이 너무 길고 암기가 어려워서요 코드 전체를 외워야 한다는 말씀이시죠?그리고, 대안으로 말씀주신 mse는 사용법이 어떻게 될까요?from sklearn.metrics import mean_squared_error랜덤포레스트 모델생성/학습/예측 ~이후mse(y_val, pred)위와 같이 작성해서 점수를 산출하면 되는게 맞는지 궁금합니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
2유형 베이스라인 코드 질문
2유형 풀때마다 조금씩 헷갈려서 저만의 베이스라인을 잡고가려는데아래와 같이 틀을 잡아도 괜찮을까요?# 데이터 불러오기 import pandas as pd X_test = pd.read_csv('X_test') X_train = pd.read_csv('X_train') y_train = pd.read_csv('y_train') # EDA실시, 제출용 아이디 값 분리, 데이터 전처리(예: 라벨인코더) X_train = X_train.drop('ID', axis = 1) X_test_id = X_test.pop('ID') from sklearn.preprocessing import LabelEncoder cols = X_train.select_dtypes(include = 'object').columns for col in cols: le = LabelEncoder() 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_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train['변수'], test_size = 0.2, random_state = 2022) # 분류일때는 stratify=y 설정추가 # 랜덤 포레스트 from sklearn.ensenble import RandomForestClassifier # 회귀문제시에는 Regressor from sklearn.metrics import 평가지표 # 시험에서 요구하는 평가지표 model = RandomForestClassifier() model.fit(X_tr,y_tr) pred = model.predict_proba(X_val) # model.predict일수도 있음 print(평가지표(y_val, pred[:,1])) # 0,1중 시험에서 요구하는 값 #예측 pred = model.predict_proba(X_test) # model.predict일수도 있음 print(pred) # 데이터 프레임 만들기, 제출 result = pd.DataFrame({'ID': X_test_id, '변수': pred[:,1]}) result.to_csv('수험번호.csv', index = False)또한 모델학습시에 predict_proba와 predict을 어떻게 구분하여 사용하는지 아직 헷갈리는데 설명해주시면 감사하겠습니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
문자열 풀이
왜 출력결과 index 2번에 False라고 나올까요?? True 아닌가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
2유형 최종 예측시 질문드립니다.
안녕하세요 강사님2유형 최종 예측 시 궁금한게 있어서 질문드립니다. 파라미터 튜닝하면서 RandomForestClassifier() 인자로 'random_state' 를 넘겨주고 있는데,튜닝이 끝난 후 실제 예측 시에도 'random_state' 값을 그대로 두고 하는게 나은가요?아니면 튜닝이 끝났으면 해당 인자는 지우고 예측하는게 나을까요?rt = RandomForestClassifier(random_state=2002, max_depth=7, n_estimators=200)
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
lightbgm 관련 질문
안녕하세요 선생님!원핫인코딩 후 lightgbm을 적용했을때 아래와 같은 코드가 나오는데, 일단 제가 구하려는 rmse 값은 나오는데 아래와 같은 코드가 나오는 이유가 궁금합니다![LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000150 seconds. You can set force_row_wise=true to remove the overhead. And if memory is not enough, you can set force_col_wise=true. [LightGBM] [Info] Total Bins 386 [LightGBM] [Info] Number of data points in the train set: 3007, number of used features: 8 [LightGBM] [Info] Start training from score 12299.193216 [LightGBM] [Warning] No further splits with positive gain, best gain: -inf
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
원핫인코딩시 에러
원핫인코딩을 하면 항상 이런 에러를 만나게 되는데 어디가 잘못된건지 잘 모르겠습니다.(cols 에는 ['Gender', 'Ever_Married', 'Graduated', 'Profession', 'Spending_Score', 'Var_1'] 이렇게 들어가있다고 나옵니다)
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
1번문제
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요df[:int(len(df)*0.7)]저는 위와 같이 적었는데 이렇게 적어줘도 상관없을까요?강의에서는 iloc를 사용해서요!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
4회기출 작업2 원-핫 인코딩 안될때
선생님!노트북에 있는 코드 그대로 실행했는데위처럼 원-핫 인코딩이 안되는데 ㅠ에러도 안뜨고...이건 무슨 문제일까요? 강의 15분 35초 정도입니다
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 1-1문제에서 이렇게 하면 왜 틀린 답이 나올까요?
import pandas as pd df = pd.read_csv("basic1.csv") # age컬럼 오름차순 정렬 df['age']=df['age'].sort_values(ascending=True) # age컬럼 3사분위수, 1사분위수 구해서 절대값 차 구하기 print(df['age'].loc[24]) print(df['age'].loc[74]) print(int(abs((df['age'].loc[24])-(df['age'].loc[74]))))
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형1 모의문제3 - 9번
위의 에러가 발생하여 질문드립니다.맨 아래는 제가 작성한 전체 코드 이고,df['subscribed'] = pd.to_datetime(df['subscribed']) 위 코드에서 에러가 발생한 것입니다. 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') # print(df.head()) df['subscribed'] = pd.to_datetime(df['subscribed']) df['month'] = df['subscribed'].df.month df = df.groupby(df['month']).count() print(df.sort_values('subscribed').index[0])
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
[2유형] 부분점수
안녕하세요.혹시 2유형 부분점수도 존재할까요? 그리고 sklearn에는 rmse 함수가 없다고 하셨는데그러면 무조건 rmse로 평가지표로 문제가 나오면def(rmse) ~~ 함수 생성해 줘야하는건가요?