안녕하세요! 강의 진행중 코드에서 오류가 생겨 질문드립니다 ㅠㅠ 라벨인코딩 하는도중 cols = train.select_dtypes(include='object').columns 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]) train() 이렇게 작성하였으나 TypeError: Encoders require their input to be uniformly strings or numbers. Got ['int', 'str'] 이런 오류가 나왔습니다 ㅠㅠ 위의 작성된코드를 살펴봐도 어디가 잘못된지모르겠어서, 또 저 에러가 무슨뜻인지 이해가 안가서 질문드립니다 ㅠ 또한, 데이터 전처리 과정 중 다소 불필요한 데이터(?)컬럼(?)을 삭제하지않고 진행할경우 성능이 크게 떨어질까요? ㅠㅠ 괜히 삭제했다가 나중에 뭔가 안맞아서 결과 도출에 오류가 생길까봐 컬럼을 삭제하는게 맘에 걸려서 시험에서는 되도록 그냥 두고싶습니다 ㅠㅠ 괜찮을까요?
안녕하세요 강사님 강의듣던 와중에 질문 있습니다! 2회 작업형2에서는 수치형변수 스케일링 과정이 없었고 이번 3회작업형2에서는 수치형변수 스케일링 과정이 있네요. 혹시 이유가 있을까요? 또 3회에서 MinMaxScaler나 StandardScaler를 쓰는것 또한 저의 재량인지 궁금합니다.\ 2회에서는 copy의 과정이 없었는데 3회에서는 copy를 한 이유가 있나요? 시험장에서 어떤방식으로 밀고나가야할지 혼란스러워요ㅠ 괄호안에 ' ' 와 " " 는 동일한가요? 검증데이터 분리시 train_test_split(train.drop('TravelInsurance', axis =1), train['TravelInsurance'] 에서 TravelInsurance를 drop한 이유가 뭔가요? 2회 작업형2에서는 ID를 drop한건 학습할때 필요가 없어서로 알고있는데 해당 문제에서는 Unnamed를 drop해야하는것 아닐까요? 헷갈리네요ㅠㅠ 수치형 변수 스케일링 과정에서 cols = ['Age', 'AnnualIncome', 'FamilyMembers', 'ChronicDiseases'] display(n_train.head()) n_train[cols] = scaler.fit_transform(n_train[cols]) n_test[cols] = scaler.transform(n_test[cols]) n_train.head() 이 부분에서 2회 작업형 2번처럼 cols안에 여러개가 들어있으므로 아래와 같이 반복문을 쓰거나 for col in cols: le = LabelEncoder() X_train[col] = le.fit_transform(X_train[col]) X_test[col] = le.transform(X_test[col]) 아래와 같이 일일히 col을 설정해줘야 오류가 안생기지 않나요? # col = 'Warehouse_block' # le = LabelEncoder() # X_train[col] = le.fit_transform(X_train[col]) # X_test[col] = le.transform(X_test[col]) # col = 'Mode_of_Shipment' # le = LabelEncoder() # X_train[col] = le.fit_transform(X_train[col]) # X_test[col] = le.transform(X_test[col]) # col = 'Product_importance' # le = LabelEncoder() # X_train[col] = le.fit_transform(X_train[col]) # X_test[col] = le.transform(X_test[col]) # col = 'Gender' # le = LabelEncoder() # X_train[col] = le.fit _transform(X_train[col]) # X_test[col] = le.transform(X_test[col])
라이브러리 및 데이터 불러오기 그리고 EDA강의중, 17:04->데이터 합치기 19:03->데이터 분리하기 부분입니다. N개의 데이터를 합치고 분리할 때 2개가 주어진 경우와 3개가 주어진 경우를 안다고 가정하고 ['income']을 기준으로 합치거나 분리하시던데, 시험에서는 2개나 3개 중 한가지로만 주어지지 않나요? 그럴 경우 어떤 컬럼을 기준으로 합/분리하는지 어떻게 알 수 있을까요..? 같은 강의의 EDA 전반 y_train데이터에 대해서는 결측치나 타입,크기 등을 확인하지 않아도 되는건가요..? 데이터전처리 강의에서 11:00->결측치채우기 -최빈값에서 mode() [0] 을 쓰시던데 [0]이 의미하는 바가 무엇인지 알고싶습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요. 강의 잘 듣고 있습니다. 항상 어의없을 질문에도 친절하게 답해주셔서 정말 감사드립니다. 3회 기출유형(작업형 2)에서 관련해서 문의드립니다. 1. 문제를 보고 회귀인지 분류인지 구분이 잘 안될 땐 모델링을 회귀도 해보고 분류도 해봐서 가장 성능이 좋은 걸 사용하면 되겠죠? 2. 확률을 예측할 때 분류모델이면 proba를 써야하는데 predict=model.predict_proba(x_val) 회귀모델일 경우에는 proba를 사용 안 해도 되나요? predict=model.predict(x_val) 3. Unnamed: 0 변수를 의미없는 값이라고 생각하여 데이터 전처리 과정 중에 train, test 데이터에서 모두 drop을 했습니다. 근데.... 왜 csv 파일 생성할 때, 다시 나타난 걸까요...ㅠㅠ <출력된 csv 파일..> <코드> # 라이브러리 및 데이터 불러오기 import pandas as pd train = pd.read_csv("train.csv") test = pd.read_csv("test.csv") # EDA pd.set_option('display.max_columns',None) print(train.head()) # target: TravelInsurance 포함되어 있음 print(test.head()) print(train.shape, test.shape) print(train.info()) print(train.describe()) print(train.describe(include= 'object')) # Employment Type GraduateOrNot FrequentFlyer EverTravelledAbroad print(train.isnull().sum()) print(train.value_counts('TravelInsurance')) # 0 965, 1 525 # 데이터 전처리(결측치: 없음, 의미 없는 칼럼 삭제, ID 처리: 없음) # Unnamed: 0 삭제 train = train.drop('Unnamed: 0', axis = 1) test =test.drop('Unnamed: 0', axis = 1) print(train.shape, test.shape) print(train.head()) print(test.head()) # 피처엔지니어링(범주형) from sklearn.preprocessing import LabelEncoder cols = ['Employment Type', 'GraduateOrNot', 'FrequentFlyer', 'EverTravelledAbroad'] for col in cols: la = LabelEncoder() train[col] = la.fit_transform(train[col]) test[col] = la.transform(test[col]) # 데이터 분할 from sklearn.model_selection import train_test_split x_tr, x_val, y_tr, y_val = train_test_split(train.drop('TravelInsurance', axis =1), train['TravelInsurance'], test_size = 0.2, random_state = 2023) print(x_tr.shape, x_val.shape, y_tr.shape, y_val.shape) # (1192, 8) (298, 8) (1192,) (298,) # 모델링(회귀) # import sklearn # print(sklearn.__all__) # print(sklearn.linear_model.__all__) from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(x_tr, y_tr) predict=model.predict(x_val) print(predict) # 성능평가(roc_auc_score) from sklearn.metrics import roc_auc_score r = roc_auc_score(y_val, predict) print(r) #베이스: 0.7544863861386139 # 예측 predict=model.predict(test) # 데이터 내보내기 submit = pd.DataFrame( { 'y_pred' : predict } ).reset_index().to_csv("1111.csv") df1 = pd.read_csv("1111.csv") print(df1.head())
안녕하세요! df = pd.read_csv("members.csv") import pandas as pd df = df.dropna() length = int(len(df) * 0.7) df = df.head(length) df['f1'].quantile(0.25) 저는 처음에 위와 같이 풀었는데 값은 동일하게 57.0이 나오는데요! 문제를 풀때 iloc를 안쓰고 해당 방법처럼 head(length)해서 df값에 넣어도 iloc랑 문제없을까요?
df.groupby(['city', 'f2']).sum() 안녕하세요, 문제를 풀다가 궁금한 점이 있어서 문의드립니다. 위와 같이 코드를 작성하면 <ipython-input-20-0b895b525272>:8: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function. df.groupby(['city', 'f2']).sum() 이런 오류가 발생하는데요. groupby에서의 sum함수가 deprecated되었다고 하는데요, 이는 다른 함수로 대체되거나 아예 사라지는 것으로 알고있습니다. 시험보는 버전 내에서는 문제없이 사용해도 될까요?
작업형1 모의문제3의 문제8번 중 일부 코드를 실행한 결과 FutureWarning이 발생하였습니다. (다른 코드 실행시에도 종종 보입니다.) 왜 발생하는지, 해결방법은 무엇인지 조언 부탁드립니다. 작성코드 df=pd.read_csv("members.csv") df=df.fillna(method='bfill') df=df.groupby(['city','f2']).sum().reset_index() 실행결과 <ipython-input-136-bfe31d68ed6e>:5: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function. df=df.groupby(['city','f2']).sum().reset_index()
안녕하세요! 강의 듣던 중 질문이 생겨 글남깁니다. 2회 기출문제 작업형2 강의와는 다르게 왜 데이터 전처리 과정에서 수치형데이터와 범주형데이터를 분리 하나요? 왜 2회 기출문제 과정에서는 필요가없는걸까요? ㅠㅠ # 수치형 데이터와 범주형 데이터 분리 n_train = train.select _dtypes(exclude='object').copy() c_train = train.select _dtypes(include='object').copy() n_test = test.select _dtypes(exclude='object').copy() c_test = test.select _dtypes(include='object').copy() (↑이 과정에 대한 질문입니다!) 어쩔때 robustscaler를 쓰고, minmaxscaler를 쓰고.. 스케일 방법이 다양한데 어떻게 선택하는건가요? 검증데이터 분리할떄 test_size 설정기준 은 무엇인가요? 0.1로할떄도 있고 0.2로 할떄도 있으신데 어떻게 선정하시는건가요? 위와 마찬가지로 검증데이터 분리과정에서 random_state = 1204 를 설정하는 이유 가 이해가 잘 안갑니다 ㅠ 저것의 의미가 무엇이고 숫자는 왜 1204인건가요?? (3,4번 질문은 이 코드에서의 질문입니다! from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train.drop('TravelInsurance', axis=1), train['TravelInsurance'], test_size=0.1, random_state=1204) X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
선생님!! 궁금한 점을 질문드리면 항상 빠른 답변 드리시는 점에 감사드립니다. "모의고사2" 관련하여 궁금한점을 질문드립니다. 평가지표가 f1 인데, f1도 점수가 높은 경우 성능이 좋은건가요? 만약 하이퍼파라미터 투닝을 할 경우 f1 점수가 높게 나오는 것으로 test 데이터를 에측해서 csv 화일을 작성해야 하는 건지요? '모의고사2'를 시험환경에서 연습하는데, 랜덤포레스트는 큰 문제 없이 진행되었는데, xgboost 모델로 할 경우 진행이 안되고 에러가 발생합니다. 이유가 무엇이고 어떻게 수정해야 하는지요?
안녕하세요 강사님 해당 강의를 듣던 도중 질문이 있어서 글 남깁니다. 라벨 인코딩 부분에서 cols = X_train.select_dtypes(include='object').columns 으로 표현하였는데 시험장에서는 그냥 info()를 통해 데이터타입 확인이후 object에 해당하는 컬럼들만 직접 수기로 입력해도 되나요? ex) cols = ['Warehouse_block', 'Mode_of_Shipment', 'Product_importance', 'Gender'] 라벨인코딩을 해야될때와 원핫인코딩을 해야될때 상황판단을 어떻게 하는지 궁금합니다. 그냥 매번 라벨인코딩만해도 무방할까요? 검증 데이터 분리시 test_size를 때에따라 0.1이나 0.2나 매번 바뀌는데 시험장에서는 성능이 더 좋은 test_size를 판단하기 위해 숫자를 바꿔가며 시도해봐야하나요? 그게 아니라면 그냥 test_size와 random_state는 0.1과 2023으로 해도 무방할지요 해당 강의와 마찬가지로 모델값들은 전부 같은 값이 나오는데 (0.7084055061812334, 0.6321275746145835, 0.7279225281811363, 0.7370938759652275) 이를 이용해 예측 및 제출에서 pred를 형성하면 array안의 확률값이 다르게 나옵니다. 이유가 있을까요? 강의에서 score가 0.7정도면 괜찮은 성능이라고 하셨는데요. 시험장에서 채점기준에서 만점과 부분점수를 맞는 기준이 성능차이인가요? 만약 성능을 내지 못하고 전처리까지만 하고 csv파일을 만들지 않았다면 이는 부분점수도 못받는걸까요?? 한 질문에 여러가지 질문을 해서 죄송하게 생각합니다! 좋은 강의 감사드립니다
문제 4번 마지막에 데이터수를 구하기위해 sum을 할때 이런 오류가 뜹니다 ㅠㅠ 정수형이랑 수치형은 연산이 불가하다는(?) 오류인거같은데 수치형으로 바꿔보고자 int(df) int(df.sum()) 등 다양한 시도를 해봤는데 이런 식은 통하지않더라구요 ㅠㅠ 질문1) 풀이 과정에서 뭔가 잘못건드렸을까요? 왜 이런 오류가뜰까요 ㅠㅠ 질문2) 이런 오류가 떴을때 df를 수치형으로 바꾸는방법? # your code import pandas as pd df = pd.read _csv('members.csv') cols = df.select _dtypes('object').columns cols df = df[cols] df.head() df = df.fillna(0) df = df.T df.head() print(sum(df.sum() > 3000)) <--------이 과정에서 발생되는 오류입니다 <오류메세지> /usr/local/lib/python3.10/dist-packages/pandas/_libs/ops.pyx in pandas._libs.ops.scalar_compare() TypeError: '>' not supported between instances of 'str' and 'int'
강의 듣고 혼자서 다시 풀어보는 도중에.. 질문이생겨 글남깁니다 ㅠㅠ 이상치를 벗어나는 값 찾기 cond1 = df['age'] < lower cond2 = df['age'] > upper 여기까지는 이해가 가는데 여기서 이상치의 합을 구할떄 sum(cond1 + cond2) 를 하면 왜 안되는걸까요? 'age'컬럼에서 lower 보다 작은것, upper보다 큰것을 더한다는 의미에서 될것같기도한데.. sum(cond1 + cond2) 와 df[(cond1)|(cond2)]['age'].sum() 의 차이가 궁금합니다 ㅠㅠ 비전공자인지라 아직 개념이 부족하여 쓸데없는 질문을 많이드리는것같지만 ㅠㅠ 정확하게 공부하고싶어서 질문드립니다
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 안녕하세요! 강사님 매번 강의 감사드립니다~~~ 다름이 아니라, 자꾸 여기서 에러가 발생하는데 transform 부분에 무슨 에러가 있는 지 도저히 모르겠어서요....ㅜ