ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 빅데이터 분석 기사 실기 작업형 2유형 대비 : 한장만 외우기 : 꿀팁
    DATA_CERTIFICATES 2023. 10. 30. 22:52

    저는 시험볼 떄, 딱 이것만 달달 외워서 갔습니다.

    화이팅

    # print(dir( )) print(help( )) : method 사용시

    #문제에서 주어지는 성능평가 확인하고 => 방법이랑 기타 등등 원도우 메모장에 복사하기

     

    시험 문제풀이 순서  작업형2 (모델링)-> 작업형1(데이터 조회/탐색 등) -> 작업형3(통계)

    모델링 1문항에 40점이라는 배점은 꼭 챙겨야합니다 .


    1. 작업형 2 유형 순서 먼저 적어두기

    1) 데이터 다운로드

    2) EDA

    	x_train.info()
    	x_train.isna().sum()
    	x_train.nunique()
    	x_train.describe()

    3 ) x 컬럼 드랍, y컬럼 타겟만

    4 ) 결측치 처리

    5 + 6) 라벨링+스케일링 한번에 하기

    	from sklearn.compose import make_column_transformer
    	from sklearn.preprocessing import StandardScaler, OneHotEncoder

    7) validation

    	from sklearn.model_selection import train_test_split

    8) 모델선택

    	#분류 :  from sklearn.ensemble import RandomForestClassifier
    	#회귀 :  from sklearn.ensemble import RandomForestRegressor
    
    	model.fit(x_train, y_train)
    	
    	#이진분류 :     y_pred = model.predict_proba(x_val)[:,1]
    	#회귀,#다중분류: y_pred = modelpredic(x_val)

     

    9) 모델 성능 평가

    print( 성능지표_score(y_val, y_pred) ) )

    ##분류 성능평가

    	from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
    	from sklearn.metrics import roc_auc_score, r2_score  #결정계수
    	from sklearn.metrics import classification_report

    ##회귀 성능평가

    from sklearn.metrics import mean_squared_error, mean_absolute_error, mean_absolute_percentage_error,
    from sklearn.metrics import r2_score #결정계수

    10) 결과 제출

    pred_proba = model.predict_proba(x_test2)[:,1]  #이진 분류
    pred_label = model.predict(x_test2)             #회귀, 다중분류
    
    pd.DataFrame({'컬럼명': x_test.컬럼명, '타겟컬럼명': predict_test_proba}).to_csv('수험번호.csv', index=False)

    11) 확인

    df = pd.read_csv(‘수험번호.csv’)
    print(df.head())



    2. 작업형 2유형  작성하기 

    1) 데이터를 다운로드

    import pandas as pd 
    x_train =pd.read_csv()
    x_test = pd.read_csv()
    y_train= pd.read_csv()

     

    2) EDA 데이터 탐색 + 결측치 확인 =>윈도우 메모장에 복사하기 => 7회차부터는 IDE 자체 메모장 제공

    x_train.info()
    x_train.isna().sum()
    x_train.nunique()
    x_train.describe()
    
    x_test.info()
    x_test.isna().sum() 
    x_tesr.nunique() 
    x_test.describe()
    
    y_train.info()
    y_train.isna().sum() 
    y_train.describe()
    y_train.nunique()

    3) 변수를 구분, object범주형인지, 수치형인지 구분하고 불필요한 column의 경우 drop

    ## ( nunique()가 많은 컬럼은 삭제하는 것이 좋음)
    drop_col = ['' , '','컬럼명' ]
    x_train1 = x_train.drop(columns= drop_col)
    x_test1 = x_test.drop(columns= drop_col)
    
    #y_train에서는 Target column만 추출
    y_train1 = y_train['타겟컬럼명']
    y_test1  = y_test['타겟컬럼명'] # 만일 y_test값이 주어지면,
    
    #예시
    Y_test1 = Y_test['price']
    Y_test1 = Y_test[:, 1] # index와 값만 있는 경우 iloc를 사용할수도있었음

    4) 결측치 처리하기 :

    • 대체 fillna()
    • 제거 dropna(subset=['컬럼명'], axis=0) # how='any' 'all'.....
    • 가급적 행은 제거하면 안됨.... 갯수가 맞아야함.  문제에 써있는 것을 비교해가면서 하기
    x_train1['컬럼명'] = x_train1['컬럼명'].fillna(   )
    x_test1['컬럼명']  = x_test1['컬럼명'].fillna(    )

    # 컬럼별로 결측치가 다른경우 onehotencoding으로 pd.get_dummies 사용 5)으로

     

    5) label encoding : 문자형 데이터를 수치형 데이터로 변환

    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    
    label_e = LabelEncoder()
    # 라벨링에 필요한 컬럼명
    label_list = ['컬럼명','컬럼명'.....]
    x_train1[label_list] = x_train1[label_list].apply(label_e.fit_transform )
    x_test1[label_list] = x_test1[label_list].apply(label_e.fit_transform )
    
    ## 회귀regressor  에서는 OneHotEncoder를 사용
    One_e = OneHotEncoder() 
    x_train2 = pd.get_dummies(x_train1, drop_first=True )
    x_test2 = pd.get_dummies(x_test1, drop_first=True )
    
    #이후 test와 train의  컬럼순서를 동일화
    x_test2 = x_test2[x_train2.columns]

    ## 데이터 타입 변환 확인하기

    x_train2.dtypes
    x_test2.dtypes

     

    번외 5+6) ###라벨링+스케일링 한번에 하기 : 저는 이걸로 풀었음

    from sklearn.compose import make_column_transformer
    from sklearn.preprocessing import StandardScaler, OneHotEncoder
    
    c_num = x_train1.select_dtypes(exclude=object)  #print(c_num.columns) #수치형라벨링
    c_obj  = x_train1.select_dytpes(include=object)   #print(c_obj.columns)#명목형 라벨링
    
    ct = make_column_transformer(
    	(StandardScaler(), c_num.columns) , 
    	(OneHotEncoder(sparse=False), c_obj.columns)
    )
    ct.fit(x_train1)
    x_train2 = ct.transform(x_train1)
    x_test2 = ct.transform(x_test1)

    fit()train 데이터만 적용!!!

    6) 표준화스케일, 최대 최소 스케일

    ## StandardScaler
    from sklearn.preprocessing import StandardScaler
    s_scaler = StandardScaler()
    scale_list = ['스케일컬럼','스케일컬럼2','',...... ]
    s_scaler.fit(x_train2[scale_lsit])
    
    x_train2[scale_list] = s_scaler.transform(x_train2[scale_list] )
    x_test2[scale_list] = s_scaler.transform(x_test2[scale_list])
    
    
    ##MinMaxScaler
    from sklearn.preprocessing import MinMaxScaler
    
    m_scaler = MinMaxScaler()
    scale_list = ['스케일컬럼','스케일컬럼2','',...... ]
    m_scaler.fit(X_train2[scale_list])
    
    x_train2[scale_list] = s_scaler.transform(x_train2[scale_list] )
    x_test2[scale_list] = s_scaler.transform(x_test2[scale_list])

     

    7) 데이터 분리 hold out 검증용 데이터를 생성한다.

    # 보통 시험에서는 x_test , x_train, y_train 데이터를 받음
    # 만약 y_test데이터가 주어진다면, validation data는 따로 생성할 필요가 없다.
    
    from sklearn.model_selection import train_test_split
    x_train, x_val, y_train, y_val = train_test_split(x_train2, y_train1, test_size = 0.2, stratify=y_train1)
    
    # 분류에서만 stratify을 씀 
    #stratify= 타켓데이터  가 들어감 ,분류에서 특정 클래스 비율을 유지시켜줌 
    
    ##데이터 확인
    print(x_train.shape, x_val.shape, y_train.shape, y_val.shape)

    8) 모델 선택 & 학습

    ### 분류
    from sklearn.ensemble import RandomForestClassifier
    model = RandomForestClassifier(max_depth=5, n_estimators=100)
    
    ### 회귀 
    from sklearn.ensemble import RandomForestRegressor
    model = RandomForestRegressor(max_depth=5, n_estimators=100)
    model.fit(x_train2, y_train1) #마지막에 최종으로 다듬었던?? 데이터들을 넣어야함
    
    y_pred = model.predict(x_test2) # x_val2

    9) 모델 성능 평가 :

    # import sklearn.metrics
    # print(dir(sklearn.metrics))
    
    ##분류 성능평가
    from sklearn.metrics import accuracy_score,precision_score, recall_score,f1_score
    from sklearn.metrics import roc_auc_score, r2_score #결정계수
    from sklearn.metrics import classification_report
    
    #y_test 데이터가 주어진 경우
    print(accuracy_score(y_test1, y_pred1))
    ##회귀 성능평가
    from sklearn.metrics import mean_squared_error, mean_absolute_error, mean_absolute_percentage_error,
    from sklearn.metrics import r2_score #결정계수
    
    #RMSE
    rmse_value = mean_squared_error(y_test1, y_pred1, squared=False)  #기본값이 루트이다... 
    print(rmse_value

    10) 결과 출력 및 파일 저장

    # 분류 예측값 
    predict_test_label = model.predict(x_test2)
    pd.DataFrame( { '컬럼명 ' : x_test.컬럼명, '타겟컬럼명': predic_test_label}).to_csv('수험번호.csv', index=False)
    
    
    #분류 확률값 : proba를 쓰는 경우는 이진 분류 체계인 경우임, 데이터 확인해보고 쓰기
    #문제에서 roc_auc등으로 성능평가한다고 써있음 
    predict_test_proba = model.predict_proba(x_test2)[:,1] # proba  probability
    pd.DataFrame({'컬럼명': x_test.컬럼명, '타겟컬럼명': predict_test_proba}).to_csv('수험번호.csv', index=False)

    11) 저장된 결과 데이터 확인

    final = pd.read_csv('수험번호.csv')
    print(final.head())
Designed by Tistory.