묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
drop(), dropna(),fillna() 관련 질문
좋은 강의 감사합니다. 제목에 기재한 메소드들에 대해 실습하다 헷갈리는게 있어서,개념 정립차원에서 정리글을 작성해봤는데, 맞는지 확인 좀 부탁드려도 될까요? ////////////////////////////////////////////////////////////////////////////////////////////예: trian데이터 셋에서 작업, "A","B" 칼럼에 결측치 있다고 가정 @@@ drop() // 삭제 메소드@1개의 특정 칼럼(열) 삭제train = train.drop(["A"], axis=1)# "A" 로 해도 진행 됨.@1개의 특정 (칼럼에 해당 하는) 행 삭제train = train.drop(인덱스값, axis=0) @ 복수의 특정 칼럼(열) 삭제train = train.drop(["A","B"], axis=1)@ 복수의 특정 (칼럼에 해당 하는) 행 삭제train = train.drop([인덱스값들], axis=0) @@@ dropna() // 결측치 삭제 메소드@ 결측치 존재하는 칼럼 전체삭제train = train.dropna(axis=1)@ 결측치 존재하는 행 전체삭제train = train.dropna(axis=0) #axis=0 은 기본값이라 생략가능. @ 복수의 결측치 존재 칼럼(열) 삭제train = train.dropna(["A","B"], axis=1)에러 : TypeError: DataFrame.dropna() got multiple values for argument 'axis'@ 복수의 (특정 칼럼 내) 결측치 존재 행 삭제train = train.dropna(subset=["A","B"], axis=0)# train이라는 데이터 셋을 대상으로( train. ), 결측치가 있는 것들 행(axis=0 이 기본)을 제거할 것인데( dropna() ), 그 결측치 우뮤의 기준은 "A","B"칼럼이다 (subset=["A","B"]) @@@ fillna() // 결측치 채움 메소드train.fillna(0) # train데이터셋의 결측치를 전부 0으로 채움 @특정 칼럼의 결측치들을 특정 값으로 동일하게 채움train["A"] = train["A"].fillna(0) # "A" 칼럼의 결측치를 모두 0으로 채워 train의 "A"칼럼에 대입하고, 결과를 동일이름의 변수로 적용@특정 행의 결측치들을 특정 값으로 동일하게 채움# 어떤 인덱스(행)이 갖는 여러 칼럼을 동일한 값으로 채우는 경우는 사실상 없으므로, 알 필요 없음(...??)//////////////////////////////////////////////////////////////////////////////// 일단 여기까지 정리한게 다인데, @ 복수의 결측치 존재 칼럼(열) 삭제train = train.dropna(["A","B"], axis=1) 이렇게 하면 오류 발생해서...dropna() 메소드로 결측치 존재하는 특정 칼럼만 지정해서 삭제하려면 어떻게 해야하나요? 그리고 fillna()메소드에서 @특정 행의 결측치들을 특정 값으로 동일하게 채움이런 경우는 없을테니, 그냥 넘어가도 괜찮은지 궁금합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
기출문제 질문
선생님 안녕하세요! 기출 등에서 궁금한 점이 있어 질문드립니다. 1. 기출 1회 작업형 2에서 train데이터와 test데이터의 고유데이터 수가 다르다면 set을 사용하여 어떤 부분이 다른지 알 수 있는 방법을 알려주셨는데 그럼 이 부분을 어떻게 하면되는것일까요? 강의에서는 뭐가 나온건지만 알려주시고 따로 처리를 하시거나 그러지 않으신것같아서요! 2. 기출 2회 작업형 1에서 문제를 푸는데 아래와 같은 에러?워닝?이 떴는데 이유를 잘 모르겠습니다! 이걸 제거하려면 어떻게 해야할까요?3. 작업형 1의 경우에 답을 꼭 마지막에 print()문으로 표시를 해줘야하는 것 맞을까요? 작업형 1,3 모두 따로 답변하는 란이 있는것같았는데 그럼 1,3 모두 풀이과정을 쓰는 곳에선 문제 각각 print()문으로 답을 표시해야 할까요??
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 2 체험 환경에서 왜 계속 아래와 같은.. 오류가 뜰까요 ?
(사진)
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
캐글 T1-16 문제 풀이중 질문드립니다.
선생님 안녕하세요~ 지금 T1 캐글 문제 풀어보고 있는데,import pandas as pd# 데이터 불러오기df = pd.read_csv("../input/bigdatacertificationkr/basic1.csv")df.head(5)#f2가 0인 데이터 정렬df2 = df.loc[df['f2']==0].sort_values('age', ascending = True)#앞에서부터 20개 데이터 추출df2 = df2.iloc[:19]before = df2['f1'].var()df2['f1']= df2['f1'].fillna(df2['f1'].min()).var()after = df2['f1'].var()print(round(after-before,2)) 이렇게 했을 때 정답값이 저는 -390.68으로 나오는데, 선생님 풀이를 보면 정답 : 38.44으로 나오더라고요.혹시 어디서 틀렸는지 알 수 있을까요? 앞에서부터 20개의 데이터 추출할때저처럼 df2.iloc로 사용해도 무방한가요..?! ㅜㅜ# 앞에서 부터 20개의 데이터 df = df[:20]
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
6회 기출 유형(작업형2) xgboost 관련 질문있습니다!
안녕하세요 다중분리를 할 때 xgboost classification을 적용하는 과정에서 문제가 생겨서 질문드립니다.처음 데이터셋 그대로 xgboost를 쓰니까"ValueError: Invalid classes inferred from unique values of y. Expected: [0 1 2 3 4], got ['High' 'Low' 'Medium' 'Very High' 'Very Low']" # 참고로 y는 train 데이터에서 타겟변수만 따로 pop해놓은 변수입니다.이런 에러가 뜨더라구요, 그래서 for문을 이용해서for i in range(len(y)): if y[i] =='Very Low': y[i] = 0 elif y[i] =='Low': y[i] = 1 elif y[i] =='Medium': y[i] = 2 elif y[i] =='High': y[i] = 3 elif y[i] =='Very High': y[i] = 4이렇게 바꾸니까, 모델과 pred는 돌아가긴 돌아가는데, f1_score(pred, y_val, average= 'macro')로 점수를 내는 과정에서 새로운 오류가 생겨 점수가 나타나지 않습니다..ValueError: Classification metrics can't handle a mix of multiclass and unknown target 이라고 떴고, 이전과 비교를 해보니까랜덤 포레스트 classifier를 돌릴 때 pred는 'Low' 'High' 'Very Low' 'Medium' 'Low' 'Low' 'Low' 'Low' 'High' 'High' ... 이런식으로 되어있는 반면xgboost는 [1 3 0 2 1 1 1 1 3 3 3 3 0 2 1 3 3 3 3 1 2 3 1 2 0 3 3 1 1 0 0 3 0 1 4 0 40 3 1 4 2 2 1 2 3 0 3 1 0 3 1 3 0 0 1 1 2 0 0 4 1 4 2 3 1 2 4 4 4 3 1 0 00 0 4 1 0 4 0 0 3 2 0 1 2 4 3 4 0 1 1 0 1 2 3 0 0 1 3 3 0 0 4 0 2 3] 이렇게 콤마로 되어있는걸 알게되었습니다.그래서 모델을 돌린 뒤for i in range(len(pred)): if pred[i] == 0: pred[i] = 'Very Low' elif pred[i] == 1 : pred[i] = 'Low' elif pred[i] ==2: pred[i] = 'Medium' elif pred[i] ==3: pred[i] = 'High' elif pred[i] ==4: pred[i] = 'Very High' 다시 원상복구를 시켜서,['Low', 'High', 'Very Low', 'Medium', 'Low', 'Low', 'Low', 'Low', 'High', 'High', 'High', 'High', 'Very Low', 'Medium',...] 이 형식으로 만들었고,pred = pd.DataFrame(pred)으로해서.. 음.. 만들었는데 여전히 되지 않습니다.. 결론은 저런 과정을 통해.. 해결하고자 했는데 여전히 못하고있고..xgboost를 사용하려면 어떻게 해야되나요 ?이런 과정을 거치지 않고서도 xgboost를 돌리려면 어떻게 해야하나요?입니다. 감사합니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
빅분기 응시환경 체험에서 데이터셋 변경
ㄱ빅데이터 분석기사 응시환경 체험 화면에서 제시된 데이터셋인 data/mtcsrs.csv를 기출 문제들의 데이터셋으로 변경하는 방법이 있을까요?>?기출문제들을 실제 시험환경에서 풀어보고 싶습니다
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
pred_proba 관련해서 질문드립니다!
안녕하세요 선생님 최근에 올려주신 강의를 통해 어떤 확률 값을 제출하는지 명시가 안되어 있을 경우에는 양성인 값 pred_proba[:,1]를 제출하는 것을 잘 알았습니다!그러면 만약에 어떤 확률을 제출하라는 말이 없고 타겟값이 뇌졸중 0 : 뇌졸중 양성, 1: 뇌졸중 음성 이런식으로 되어 있을 경우에는 뇌졸중 양성인 pred_proba[:,0]을 제출하는게 맞을까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
pred_proba 질문
데이터를 예측할 때 predict가 아니라 predict.proba를 사용하였을 때,데이터프레임을 제작할 때 pred_proba[:,1]로 작성하는 것을 외웠지만 [:,1]을 작성하는 이유를 모르겠어서 질문 드립니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
카이제곱 독립성 검정에서 각 항목의 빈도수가 이상하게 나와요.
import pandas as pd df = pd.DataFrame({ '남자': {'합격': 100, '불합격': 200}, '여자': {'합격': 130, '불합격': 170}}) from scipy.stats import chi2_contingency chi2_contingency(df)Chi2ContingencyResult(statistic=5.929494712103407, pvalue=0.01488951060599475, dof=1, expected_freq=array([[115., 115.], [185., 185.]]))위 코드를 실행하면 expected_freq 값이 행별로 동일하게 나오는데.. 혹시 이유가 있을까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
예시문제 작업형2(신버전) 질문입니다.
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요분명 CSV 파일 예시는pred0010 이렇게 되어있는데,pred[:,1]로 하면 확률로 표시되는데... 그래도 가능할까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
2회 기출 작업형 1문 풀이 질문있습니다.
주어진 데이터셋(members.csv)의 'views' 컬럼 상위 10개 데이터를 상위 10번째 값으로 대체한 후 'age'컬럼에서 80 이상인 데이터의 'views' 컬럼 평균값 구하기문제에서는 view 칼럼 내림차순으로 정렬된 df에서 10번째 값으로 상위 10번째 값으로 모두 대체후에 age 조건 이후 view 평균값을 구해주셨는데, 문제를 읽어보면 원래 기존의 df 에서 10번째 값까지 상위 10번째 view 값으로 대체 후에 정답을 구해야 하지 않나요? 주어진 데이터셋을 정렬한 후에 값을 구하면 답이 달라지는것 같습니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 2,3 관련 질문
선생님 안녕하세요! 공부하다가 헷갈리는 부분에 대해 질분드립니다🙂 1. 작업형 3에서 회귀 분석에서 범주형 변수는 get_dummies 사용하지 않고 선형 회귀 분석 하듯이 하면 되는것 맞을까요?? 2. 강의 이원 분산 분석 편에서 사후 검정 중 Tukey HSD를 진행할 때 비료에 .astype(str)를 하는 이유는 무엇인가요?? 3. 작업형 2에서 수치형 데이터로만 모델 성능을 예측할 때 이미 검증데이터 분리에서from sklearn.model_selection import train_test_splitX_tr, X_val, y_tr, y_val = train_test_split(train[cols], train['성별'], test_size=0.15, random_state=0) 로 했다면 모델 학습 시model.fit(X_tr, y_tr)로만 하면 되지 않나요?? 왜 fit(X_tr[cols])로 또 해줘야하는지 궁금합니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업2
1. 빠르게(인코딩 없이 드랍) 베이스라인을 만들고 (데이터 분할과 랜덤포레스트 모델 random_state값 고정) 검증 - 1차 제출인코딩 후 검증 -> 점수 좋아졌다면 - 2차 제출(결측치가 있다면) 결측치 처리 다양한 방식 시도 - 3차 제출다른 질문에서 이렇게 답변하셨는데 인코딩 없이 드랍시에도 데이터분할 treain_test_split 을 해야하는거군요?? 처음부터 드랍말고 라벨인코딩이나 원핫인코딩을 하면 무조건 성능이 좋은건 아닌가요? 라벨인코딩과 원핫인코딩 둘중 하나를 선택하셔서 풀이하시던데기준이 궁금합니다
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형2 train_test_split 사용 관련 질문
작업형2문제를 풀때 eda 후 전처리&피처엔지니어링 단계에서 범주형자료들을 무조건 라벨인코딩만 하려고 합니다 ((원핫인코딩과 라벨인코딩 둘다 실행시켜서 비교안할거임)라벨인코딩만 하려는 상황에서도 train_test_split 을 사용해야 하는지 아니면 그냥 바로 랜덤포레스트를 돌려도 되는지 궁금합니다 작업형2 모의문제1 풀이를 적으면서 보는중인데 만약 train_test_split 을 사용안하면 랜덤포레스트 돌릴때model(X_tr,y_tr)pred =model.predict(X-val) 이자리에 뭘 넣어야 할지 궁금합니다 +train_test_split 을 사용하면 좋은 점수를 받는지도 궁금합니다 +작업형2 모의문제1 풀이에서 강사님이 처음에 drop의 방식을 하셨는데 drop방식보단 라벨인코딩이 더 좋은점수를 받을수 있는 풀이방법인지도 궁금합니다
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
인코딩과 컬럼선택기준
인코딩을 할때 선생님이 어쩔때는 원핫인코딩을 하시고 어쩔때는 레이블인코딩을 하시던데 그 인코딩을 정하시는 기준을 잘 모르겠습니다! 인코딩을 정하실때 그 경우에 대해서 자세히 알려주시면 감사하겠습니다 그리고 인코딩을 할때 컬럼도 몇개 정하셔서 하시던데 그 컬럼고르는 기준도 잘 모르겠습니다 그 기준에 대해서도 선택하는 방법을 알려주시면 감사하겠습니다 ㅠㅠ
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
25강질문입니다
밑에적혀있던 시험환경 링크로 들어가서 강의들으면서 따라해봤는데요 선생님이 수업으로 진행하실때는 영상에 x_train, x_test, y_train 파일 3개가 있었는데 실제 제가 할때는 파일이 train이랑 test가 두개밖에없어서 RandomForestClassifier를 진행할때 영상에서는 model. fit(x_train,y_train['gender')를 적으셨는데 데이터가 2개밖에없다보니 어떻게 적어야할지모르겠습니다 이럴때는 랜덤포레스트말고 다른모델로 적용해야하나요? 아니면 RandomForestClassifier를 이용한 다른코딩법이있나요? 답변부탁드립니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 모의문제 1
마지막에 예측및 csv제출 하실ㄸ ㅐ'Attirition_Flag' : pred[:,1]로 하셨는데이탈할 고객을 찾아라니깐 이탈의 확률인 1의 확률로 구해야하는거 아닌가요? 제가생각한 답은 'Attirition_Flag' : pred[:,0] 이였는데 왜 그런거죠? +강사님train['Attrition_Flag'].value_counts() 을 치면0 68151 1286이렇게 나오는데pred = model.predict_proba(X_val)pred array([[0.88, 0.12], [0.95, 0.05], [1. , 0. ], ..., [0.66, 0.34], [1. , 0. ], [0.93, 0.07]])위 0,1 의 순서가 여기서도 동일하게 적용되서여기서 0.88은 0의 확률 0.12는 1의 확률인가요?그래서'Attirition_Flag' : pred[:,1]이 정답인건가요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
2회 기출유형(작업형2)
import pandas as pdimport numpy as npfrom sklearn.model_selection import train_test_splitdef exam_data_load(df, target, id_name="", null_name=""): if id_name == "": df = df.reset_index().rename(columns={"index": "id"}) id_name = 'id' else: id_name = id_name if null_name != "": df[df == null_name] = np.nan X_train, X_test = train_test_split(df, test_size=0.2, random_state=2022) y_train = X_train[[id_name, target]] X_train = X_train.drop(columns=[target]) y_test = X_test[[id_name, target]] X_test = X_test.drop(columns=[target]) return X_train, X_test, y_train, y_testdf = pd.read_csv("Train.csv") # 파일명이 다를 경우 파일명을 수정해주세요X_train, X_test, y_train, y_test = exam_data_load(df, target='Reached.on.Time_Y.N', id_name='ID')X_train.to_csv("X_train.csv", index=False)y_train.to_csv("y_train.csv", index=False)X_test.to_csv("X_test.csv", index=False) import pandas as pd X_test = pd.read_csv("X_test.csv") X_train = pd.read_csv("X_train.csv") y_train = pd.read_csv("y_train.csv") # X_train.shape, y_train.shape, X_test.shape #print(X_train.info()) print(X_test.info()) #print(y_train.info()) y_train = y_train.drop(columns = ['ID']) #print(X_train.shape, X_test.shape) X_train = X_train.drop(columns = ['ID']) X_train = X_train.drop(columns = ['Warehouse_block']) X_train = X_train.drop(columns = ['Mode_of_Shipment']) X_train = X_train.drop(columns = ['Product_importance']) X_train = X_train.drop(columns = ['Gender']) X_test = X_test.pop('ID') X_test = X_test.drop(columns = ['Warehouse_block']) X_test = X_test.drop(columns = ['Mode_of_Shipment']) X_test = X_test.drop(columns = ['Product_importance']) X_test = X_test.drop(columns = ['Gender']) #print(X_train.shape, X_test.shape) from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_train,y_train) model_pred = model.predict_proba(X_test) 강사님 안녕하세요. 위와 같이 인코딩을 하지 않고 object 컬럼을 지우는 방향으로 해서 모델학습을 진행하였어요. 그런데 이런 애러가 났어요. 어떻게 해야 할까요? None <ipython-input-36-25befb274901>:30: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel(). model.fit(X_train,y_train) /usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but RandomForestClassifier was fitted with feature names warnings.warn( --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-36-25befb274901> in <cell line: 31>() 29 model = RandomForestClassifier() 30 model.fit(X_train,y_train) ---> 31 model_pred = model.predict_proba(X_test) 32 3 frames/usr/local/lib/python3.10/dist-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name) 900 # If input is 1D raise error 901 if array.ndim == 1: --> 902 raise ValueError( 903 "Expected 2D array, got 1D array instead:\narray={}.\n" 904 "Reshape your data either using array.reshape(-1, 1) if " ValueError: Expected 2D array, got 1D array instead: array=[ 8285. 10192. 8675. ... 7390. 9977. 5696.]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
dropna와 drop의 차이가 궁금합니다.
#특정컬럼에 결측치가 있으면 데이터(행) 삭제 subset=['native.country']df = X_train.dropna(subset=['native.country']) # 결측치가 많은 특정 컬럼 삭제 drop(['workclass'], axis=1) df=X_train.drop(['workclass'], axis=1) 언제 drop을 쓰고, 언제 dropna를 쓰는지 궁금합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
적합도 검정 예제 결과, 답안은?
[작업형3] 범주형 데이터 분석 > 적합도 검정pvalue = 0.028이 나왔으니, 귀무가설 기각, 대립가설 채택으로 새로운 시험문제는 기존 시험문제 점수와 다르다. 가 맞는지요?