본문 바로가기
카테고리 없음

빅데이터 분석 기사 실기 참고 정보3

by 이켠작가 2024. 5. 20.
반응형

 
 


작업유형별 문제 종류 간단 정리

 


작업형1 문제 유형


1.  이상치 값을 구하기, 이상치 평균값 등으로 대체하기
2.  특정 조건 표준편차 구하기
3. .iloc, .loc와 같이 행과 열을 컨트롤할 수 있는 명령어,
4. for문, while문과 같은 반복문,
5. 결측값(NaN) 채우기 .fillna()
6. 값 대체 .replace() replace는 리스트 및 데이터프레임 해당하는 데이터형 연습 필수
7. 데이터프레임을 다룰수 있는 코드


작업형2 문제 유형

 
1.  훈련, 테스트 데이터 나누고, 특정 알고리즘 활용하여 예측하는 것
2.  타이타닉 유명
3.  RMSE, Regression 등 사용하기
4. 데이터 결측치, 이상치 제거
5. 텍스트형 자료 더미변수화
6. 데이터 정규화
7. train, test data split
8. (자료가 불균형할 때) 오버, 언더샘플링
9. 차원축소
10. 모델링
11. Fit 학습
12. test data set으로 Accuracy score 확인(R^2, mse, auroc 등등)을 통해 모델 평가
13. 배깅
14. 배깅 모형 평가
15. 최종 모델을 사용해 새로운 데이터셋의 결과 확인
16. 분류는 RandomForestClassifier , 회귀는 RandomForestRegressor
 


작업형3 문제 유형


1. 두 그룹의 평균 비교
2. 로지스틱 회귀
3. 적합도 검정
4. 지지도, 신뢰도, 향상도
5. 포아송분포
6. 독립성 검정
7. 베루누이분포
8. 점추정 및 구간추정
9. 이원 분산 분석
10. 독립 표본 T검정
11. 일원 분산 분석


참고 Tip


####################### 참고 Tip ###################
런타임 1분 넘어가면 오류나고 탈락하니까 꼭 다 돌려보고 1분 안넘어가는지 확인 필수!!
 
#데이터 프레임에서 할 수 있는 것
print(dir(pd.DataFrame))

#help을 통해 사용업 확인
# hepl 사용예시 데이터 프레임에서 결측치 drop
print(help(pd.DataFrame.drop))

# 아래와 같이 치면
from sklearn.model_selection import train_test_split
print(help(train_test_split))

#아래와 같이 변수를 어떻게 넣어야하는지 나옴
train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)


##################   반복암기 #########################


분류
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import Yoc_auc_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClaaifier
from sklearn.ensemble RandomForestClassifier
from xgboost import XGBClassifier
from scpiy import stats ( p-value)


#원핫인코딩 어떻게 사용했더라?
import pandas as pd
print(help(pd.get_dummies))

 


 

유형별 참고 코딩

 
 
#테스트, 훈련 데이터 만드는 것은 핵심
# 시험환경 세팅 (코드 변경 X)
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

def 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=2021)
    
    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_test 
    
df = pd.read_csv("../input/titanic/train.csv")
X_train, X_test, y_train, y_test = exam_data_load(df, target='Survived', id_name='PassengerId')

X_train.shape, X_test.shape, y_train.shape, y_test.shape

# f3 컬럼 삭제
print("삭제 전:", df.shape)
df = df.drop(['f3'], axis=1)
print("삭제 후:", df.shape)

# 도시 확인
df['city'].unique()

# 도시별 중앙값 계산
s=df[df['city']=='서울']['f1'].median()
k=df[df['city']=='경기']['f1'].median()
b=df[df['city']=='부산']['f1'].median()
d=df[df['city']=='대구']['f1'].median()
s, k, b, d

#방법2
# k, d, b, s = df.groupby('city')['f1'].median()

## f1결측치 city별 중앙값으로 대체
df['f1'] = df['f1'].fillna(df['city'].map({'서울':s,'경기':k,'부산':b,'대구':d}))

# 만약 그냥 f1 중앙값으로 대체 한다면 
# df['f1'] = df['f1'].fillna(df['f1'].median())

# 조건에 맞는 f1의 표준편차
enfj = df[df['f4']=='ENFJ']['f1'].std()
enfj

# 두 표준편차 차이 절대값 출력
print(np.abs(enfj - infp))

-  양이 적을때는 교차검증을 한다
- k-fold 방법

- 실기 2회 작업형1
보스턴 데이터 범죄율 컬럼 top10 중 10번째 범죄율 값으로 1~10위의 범죄율 값을 변경 후 AGE 변수 80이상의 범죄율 평균 산출

 



################ 5 회 작업형2 실기 ###################

 
- 자동차 가격 예측
- 예측값 : price, 평가 : RMSE
- 데이터 : train.csv, test.csv
- 제출형식 : pd.read_csv('result.csv')

import pandas as pd

train = pd.read_csv("train_csv")
test = pd.read_csv("test.csv")

#데이터 크기 확인
train.shape, test.shape

#샘플 확인
display(train.head(3))
display(test.head(3))

# 값을 확인하면, price가 train에는 있지만, test에는 없음
# 기초통계값 확인

train.info()
train.describe()

# 명목변수의 개수를 확인한다
train.describe(include='0')

# 특정변수 히스토 그려보기
train['price'].hist()

# null인값의 개수를 구하여라
display(train.isnull().sum())

#특정변수들만, train과 test 데이터를 나눈다

cols= ['year', 'mileage','tax', 'mpg', 'engineSize']
train = train[cols]
test = test[cols]

# train 데이터, test 데이터를 8:2로 구분하여 나누시오
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, y_train, test_size=0.2, random_state =2022)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape
 
((3007,5), (752,5), (3007,), (752,))


# RamdomForestRegressor 사용하기
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)

# 이부분은 이해가 안됨
from sklearn.metrics import mean_squared_error
 def rmse(y_true, y_pred):
       return mean_squared_error(y_true, y_pred)**0.5
       # return np.sqrt(mean_squared_error(y_ture, y_pred))

# 이것이 4가지 변수를 통해 가격을 예측한 것인가?
rmse(y_val, pred)
1529.7544

# 결과값 출력하기
# 제출형식 : pd.read_csv('result.csv')
# 아래 답이 좀 이해가 안된다

pred = rf.predict(test)
result = pd.DataFrame({
        'pred': pred
})
result.to_csv("result.csv", index=False) #index는 불필요하기 때문에

#만약, 정수형으로 나오게 하고 싶다면
pred2 = pred.astype(int)
rmse(y.pred2)

 



####### 작업형 3 샘플 문제 ###############

 
## 120명 치료 전후의 혈압 저장
# 해당 치료가 효과가 있는지 t-검정을 통해 탑하고자한다
# 치료 후 혈압 - 치료 전 협압 >= 0 : 귀무 가설
# 치료 전 혈압 - 치료 전 혈압 < 0 : 대립 가설

# (a) 표본 평균을 구하시오
# ( 반올림하여 소수 둘째 자리까지 계산)

import panda as pd
df = pd.read_csv("data/blood_pressure.csv")

df['diff'] = df['bp_after'] - df['bp_before']
d_mean = round(df['diff'].mean(),2)
print(d_mean)

# (b) 위의 가설을 검정하기 위한 검정통계량을 구하시오
(반올림하여 소수 둘째자리까지 계산)
# 왜 greater를 써야하는지 이해가 안됨
from scipy import stats
result = stats.ttest_rel(df['bp_before'], df['bp_after'], alternative = 'greater')
print(result)
print(round(result.statistic. 2))

#(c) 위의 통계량에 대한 p-값을 구하고(반올림하여 소수 넷째자리까지 계산)
유의수준 0.05 하에서 가설검정의 결과를(채택/기각) 중 하나를 선택하시오
print(round(result.pvalue,4))



######## 작업형2 ###############################


문제 : 성별예측모델
고객 3,500명에 대한 학습용 데이터(y_train.csv, X_train.csv)를 이용하여
성별예측 모형을 만든 후, 이를 평가용 데이터(X_test.csv)에 적용하여
얻은 2,482명 고객의 성별 예측값(남자일 확률)을 다음과 같은 형식의 CSV 파일로
생성하시오(제출한 모델이 성능은 ROC-AUC 평가지표에 따라 채점)
- 수험번호.csv 파일로 제출하시오

백화점 고객의 1년간 구매 데이터
(가) 제공 데이터 목록
1. y_train.csv : 고객의 성별 데이터(학습용), CSV 형식의 파일
2. X_train.csv, X_test.csv : 고객의 상품구매 속성(학습용 및 평가용) CSV 형식의 파일


#라이브러리
import panda as pd

#데이터 불러오기
X=   pd.read_csv("data/X_train.csv")
y =  pd.read_csv("data/y_train.csv")
test =  pd.read_csv("data/X_test.csv")


#EDA
print(X.isnull().sum())
print(test.isnull().sum())
print(X.info())

#데이터전처리
X= X.fillna(0)         #x값 중 null이 있다면 0으로 채워주세요
test = test.fillna(0) #

X = X.drop(['cust_id'], axis=1)
cust_id = test.pop('cust_id')

#피처 엔지니어링
from sklearn.preprocessing import LabelEncoder
cols = ['주구매상품', '주구매지점']
for col in cols:
 le = LabelEncoder()
 x[col] = le.fit_transform(X[col])
 test[col] = le.fit_transform(test[col])


# 모델링 & 하이퍼파라미터
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=2022)
model.fit(X, y['gender'])
predictions = model.predict_proba(test)

#csv
output = pd.DataFrame({'cust_id: cust_id, 'gender' : predictions[:,1]})
#prinf(output.head())
output.to_csv("0000.csv", index=False)
 
 

반응형