기출2회 작업형 1 문제 2번 풀이 중 SettingWithCopyWarning가 같이 출력됩니다 문제 2번 주어진 데이터셋(members.csv)의 앞에서부터 순서대로 80% 데이터만 활용해 'f1'컬럼 결측치를 중앙값으로 채우기 전 후의 표준편차를 구하고, 두 표준편차 차이 계산하기 (단, 표본표준편차 기준, 두 표준편차 차이는 절대값으로 계산) import pandas as pd df = pd.read_csv("members.csv") # print(df.shape) # int(len(df)*0.8) df2= df.iloc[:int(len(df)*0.8),:] # print(df2.shape) std1 = df2["f1"].std() ## 20.574853076621935 print(std1) # print(df2) # print(df2["f1"].median()) # 68.0 df2["f1"] = df2["f1"].fillna(df2["f1"].median()) std2 = df2["f1"].std() ## 17.010788646613268 print(std2) print(std1-std2) 저는 이렇게 풀었고요. 아래처럼 출력되더라고요 20.574853076621935 17.010788646613268 3.564064430008667 <ipython-input-43-d0c995e0379e>:14: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df2["f1"] = df2["f1"].fillna(df2["f1"].median()) 정답은 풀이 내용 출력값과 일치하는데, SettingWithCopyWarning 가 나서 자꾸 신경이쓰이네요. 실제시험에서 혹시 문제가 생길 수 있을까요...?
문제 1 주어진 데이터셋(members.csv)의 'views' 컬럼 상위 10개 데이터를 상위 10번째 값으로 대체한 후 'age'컬럼에서 80 이상인 데이터의 'views' 컬럼 평균값 구하기 처음에는 이렇게 풀었습니다. df["views"].sort_values(ascending=False).head(10) ## 상위 10번째 값은 9690.0 t10 = df["views"].sort_values(ascending=False).iloc[9] ## 9690.0 df["views"] = df["views"].sort_values(ascending=False).reset_index(drop=True) df["views"].iloc[:10] = t10 # df.head(15) cond = df["age"] >= 80 df[cond]["views"].mean() # 4625.380952380952 로 나옴 # # <ipython-input-49-9959c4a1efa3>:13: SettingWithCopyWarning: # # A value is trying to be set on a copy of a slice from a DataFrame # # See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy # # df["views"].iloc[:10] = t10 4625.380952380952 로 나옴 두번째는 이렇게 풀었습니다 df = df.sort_values(["views"], ascending= False).reset_index(drop=True) # df.head(10) top10 = df["views"].iloc[9] ## 9690.0 df["views"].iloc[:10] = top10 # df.head(11) cond = df["age"] > 80 df[cond]["views"].mean() # 5660.318181818182 로 나옴 # <ipython-input-65-22f967dbf31d>:10: SettingWithCopyWarning: # A value is trying to be set on a copy of a slice from a DataFrame # See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy # df["views"].iloc[:10] = top10 5660.318181818182 로 나옴 그런데 풀이 부분을 보니 답이 5674.04347826087 로 나오더라고요... 첫번째는 df의 "views" 칼럼 소팅해서 기존 칼럼에 대입하는 식으로 한 df["views"] = df["views"].sort_values(ascending=False).reset_index(drop=True) 부분이 잘못 된거 같아서 두번째 풀 때 df 전체에서 "views"칼럼 지정해서 소팅하는 아래 처럼 했고 df = df.sort_values(["views"], ascending= False).reset_index(drop=True) 상위 10번째 값 구했고 조건 변수 설정해서 한건데... 왜 풀이랑 결과값이 다를까요....??
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 idmax가 잘 안와닿아서요 ㅠㅠ 이렇게 작성해도 정답처리되나요? df['교사1명당학생수'] = df['전체학생수'] / df['교사수'] df = df.sort_values('교사1명당학생수',ascending=False) print(int(df.iloc[0,1]))
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 저는 마지막에 iloc를 이용하였는데요 가능한지 여쭤봅니다 코드는 아래와 같습니다. df['출동시간'] = pd.to_datetime(df['출동시간']) df['도착시간'] = pd.to_datetime(df['도착시간']) # df.info() df['diff'] = df['도착시간'] - df['출동시간'] df['diff'] = df['diff'].dt.total_seconds()/60 result = df.groupby('소방서').mean() result = result.sort_values('diff',ascending=False) print(int(round(result.iloc[0,2],0)))
https://www.inflearn.com/questions/1287898 여기서 답변에 대한 추가 확인을 위한 연계 질문 내용도 확인 부탁드립니다 https://www.inflearn.com/questions/1287705 pop() 함수는 "train셋에는 존재하고 test셋에는 존재하지 않는 타겟 값 보존을 위해 사용한다" 그리고 피쳐엔지니어링(인코딩, 스케일링) 이후의 컬럼수를 맞추기 위함 이다. 그럼 train, test 2셋 문제( pop 사용해 타겟 분리), x_train.y_train,x_test 3셋 문제(타겟은 y_train에 있으니 pop 사용 불필요) 로 이해하면 되나요?? 3셋의 경우 타겟은 어차피 y_train에 있는 거니까 거기서 끌어오면 되고 지우면 안되는 거니까요
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 검증데이터 분할 할 때 test_size를 나누는 꿀팁있을까요? 0.1? 0.15? 0.2? 머신러닝 모델을 탁 찝어서 이거써라~하고 문제가 나온적도 있나요? 분류/회귀/분류회귀 둘다 사용가능한 모델들을 한번 정리하고 가는게 좋을까요?
train에서 주구매상품은 42종류고 test에서 주구매상품은 41종류입니다 이것을 확인하고 종류갯수가 달라서 라벨 인코딩을 해준것인가요? 지금까지는 확인하지 않고 object형 라벨 인코딩 해주었는데 train이 '소형가전' 이 하나 더 있는데 따로 어떤 처리를 해준 건가요?
예를들어 기출6회 작업형2유형 풀이시에 Heat_Load 를 예측하도록 되어있습니다. 예를들어 train 과 test 컬럼에서 nunique 로 값을 확인하고 실제 row수만큼의 빈도수가 발생하는 Cool_Load 값이 있는데요. 이 컬럼은 삭제하는것이 더 효율적인 머신러닝 성능이 나오더라구요. 하여 전처리시 컬럼을 삭제처리하는 기준을 nunique 로 임의로 판단해도 될지 혹시 강사님은 컬럼삭제의 기준을 어떤식으로 잡는지 궁금합니다. 아니면 그대로 진행하는게 더 나을지 판단이 잘 안서서 질문드려 봅니다.
작업형 2유형을 풀이하게되면 get_dummies 로 한방에 처리하거나 민맥스스케일러, 라벨인코더로 처리하는 경우가 있는데요 둘 중 어느것을 써야 더 효율적일지는 상황에 따라 달라지는건지요? 결과값은 같은건지요 ? 둘다 머신러닝이 납득할 수 있는 숫자로 인코더 되는 역할로 여겨지는데요. get_dummies 만 사용해서 풀이해도 괜찮을지, 혹은 민맥스 스케일러나 라벨인코더를 사용하는게 나을지 궁금합니다. 그리고 스케일러랑 인코더는 세트로 사용해야 하는지, get_dummies 를 혼용하여 사용하기도 하는지 궁금합니다. 결론적으로 minmaxscaler, labelencoder 는 어떤걸 효율적으로 해주고 성능에 영향을 미치는지 큰 차이가 없으면 get_dummies 로 사용해도 되는지 궁금합니다. 또한 get_dummies 는 숫자형과, 오브젝트형이 포함된 전체 테이블을 넣어서 인코딩 하면 되는지도 궁금합니다.
안녕하세요! 캐글 당뇨병 문제에서 Glucose, BloodPressure, SkinThickness, Insulin, BMI에서 이상치가 있는 부분을 처리하셨는데 저는 초보라 시험장에서 describe 만으로 저 데이터에 이상치가 있다는 것을 모를거 같은데 이상치 처리 하지않고 그냥 모델 학습시켜서 제출해도 괜찮을까요? 감점이 클까요? ㅜㅜ
EDA 단계에서 age, cabin에서 결측치가 있다는 것을 알았는데 혹시 이건 따로 처리를 하지 않아도 되는건가요? y = y_train["Survived"] # sex만 원핫인코딩 됨 features = ["Pclass", "Sex", "SibSp", "Parch"] X = pd.get_dummies(X_train[features]) test = pd.get_dummies(X_test[features]) -> 이 4개 컬럼을 원핫인코딩 하셨는데 혹시 이 컬럼들을 선택한 기준이 있을까요? object가 아닌 열도 포함되어 있어서요 ! 나머지 cabin이나 embarked 같은 문자 데이터는 인코딩 안해도 되나요?
질문이 사실 두 개 있어요. 제목처럼 RandomForestClassifier, RandomForestRegressor 를 작업형2 에서 구분하여 사용하는 기준은 뭔가요?? 타겟이 수치형, object 형에 따라서도 아닌거 같아요.. 6회 기출유형 작업형2 문제풀이에서 # 최종 제출 파일 rf.fit ( train , target ) pred = rf.predict ( test ) submit = pd.DataFrame ({ 'pred' : pred }) submit.to _csv ( "result.csv" , index= False ) 이렇게 적었는데, rf.fit (train, target) 이 아니라 rf.fit (X_tr, y_tr) 아닌가요??
토마토 예제 이원분산분석에서 상호작용을 * 로 간단하게 표시할 수 있다고 했는데아래 코드 실행하면 상호작용의 자유도는 6으로 나옵니다. 그런데 원래 " :" 식으로 표시하면 자유도가 4입니다. 어떤 차이가 있는가요?model = ols('토마토수 ~ 종자 * C(비료)', data = df).fit()anova_lm(model)
유의수준 0.05보다 크므로 기각역이 커서 귀무가설을 기각할 수 있으므로, 귀무가설 채택(정규분포를 따르지 않는다) 아닌가요? 숫자가 축약이 되서 저렇게 표시되었다는 말씀같은데 매번 pvalue를 다시 산출하고 하는 과정이 필요하다는 말씀이실까요? 이후 검산에서 0.00000000~2 로 나오는게 있던데 시험에서 이런경우 0.05보다 크다 작다가 아니라 기재하신 {}.format 이런 함수를 꼭 작성해봐야 pvalue를 확실하게 알수있는 건지 궁금합니다 작성하신 코드가 어려워서요