문제1유형
#기초 : 데이터마님 (https://www.datamanim.com)
데이터 분석 시험 ▶1.빅데이터 분석기사 실기(PYTHON) ▶1.2 데이터 전처리 100문제
#연습 : 1.6 기출문제 및 모의고사 ▶ 기출변형(2회~6회) 1유형만 풀면서 이해하기.
#마무리 : 인프런강의 섹션12~섹션16 기출문제 1유형만 실전처럼 혼자 풀고. 해설 듣고 이해하기. <중요>
문제2유형
#연습 : 작업시나리오 외우고, 회귀/분류모델을 쓸지만 구분할 줄 알면 됨.
#마무리 : 인프런강의 섹션12~섹션16 기출문제 2유형만 실전처럼 혼자 풀고. 해설 듣고 이해하기. <중요>
문제3유형
#기초 : 섹션 7, 8, 9 학습
#연습 : 1.6 기출문제 및 모의고사 ▶ 기출변형(2회~6회) 1유형만 풀면서 이해하기.
#마무리 : 섹션16 기출 3유형 머리 속에 집어넣기
문제2유형 작업시나리오
* 빅분기 실기 유형2 코드 작성 순서 (유튜브채널: 코딩 대한민국)
제목: 시험의 당락을 좌우하는 유형 2번 답코드가 저절로 암기 되는 영상
https://youtu.be/fQf_oOkV_SY?si=v7I6LYFqfnUtEIOo
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/audit/x_train.csv')
y_train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/audit/y_train.csv')
test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/audit/x_test.csv')
y_test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/audit/y_test.csv')
# print(train.isnull().sum())
# print(test.isnull().sum())
# print(y_train.isnull().sum())
# print(y_test.isnull().sum())
# print(train.info())
# print(test.info())
# print(y_train.info())
# print(train.isnull().sum())
# print(test.isnull().sum())
# 널처리를 drop 하는데,
# train 과 y_train 행 수가 틀릴 수 있으니
# 우선 train과 y_train을 열로 합친 후 결측치(null)을 제거
train = pd.concat([train,y_train['Risk']], axis=1)
test = pd.concat([test,y_test['Risk']], axis=1)
train = train.dropna()
test = test.dropna()
test_id = test['ID'].copy()
# 결측치제거한 train에서 y_train을 분리.
y_train = train[['ID','Risk']].copy()
y_test = test[['ID','Risk']].copy()
# y_train 컬럼을 train 데이터셋에서 삭제
train = train.drop(['Risk'], axis=1)
test = test.drop(['Risk'], axis=1)
# 스케일링을 위한 컬럼구분
ocols = train.select_dtypes(include='object').columns.tolist()
ncols = train.select_dtypes(exclude='object').columns.tolist()
# print(train.describe(include='object'))
# print("="*100)
# print(test.describe(include='object'))
# print(allt.info())
LOCATION_ID
===============
트레인
===============
count 619
unique 42
top 8
freq 68
===============
테스트
===============
count 155
unique 34
top 8
freq 17
# train과 test의 object에서 unique 값이 서로 다르므로, train과 test값을 합침.
allt = pd.concat([train,test],axis=0)
oallt = allt[ocols].copy()
oallt = pd.get_dummies(oallt)
# 원핫인코딩 값을 다시 train 과 test로 나눔
otrain = oallt.iloc[:train.shape[0],:]
otest = oallt.iloc[train.shape[0]:,:]
# print(type(otrain))
ntrain = train[ncols].copy()
ntest = test[ncols].copy()
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler()
ntrain[ncols] = mm.fit_transform(ntrain[ncols])
ntest[ncols] = mm.transform(ntest[ncols])
# 스케일링이 모두 마친 데이터셋을 다시 하나로 합침.
train = pd.concat([otrain,ntrain],axis=1)
test = pd.concat([otest,ntest],axis=1)
# print(y_test['Risk'].value_counts())
# 분류예측
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(train, y_train['Risk'])
pred = model.predict(test)
# print(pred)
ans = pd.DataFrame({
"ID": test_id,
"pred": pred
})
print(ans)
3유형 검정 및 분석 키워드 정리
단일표본 t 검정
from scipy import stats
stats.ttest_1samp ( 집단, 비교값, alternative )
stats.wilcoxon( 집단 - 비교값, alternative )
대응표본(쌍체) paired t 검정
stats.ttest_rel( 전, 후 , alternative )
stats.wilcoxon( diff, alternative )
독립표본 t 검정
stats.ttest_ind( 집단1, 집단2, equal_var = True, alternative ) # 등분산( levene ) 검정, False
정규성X
stats.ranksums( 집단1, 집단2, alternative ) # 윌콕슨 순위합 검정
stats.mannwhitneyu( 집단1, 집단2, alternative ) # 만휘트니유 검정
분산분석 ANOVA : 3개이상 집단의 평균이 궁금?
일원 분산분석
stats.f_oneway( 집단1, 집단2, 집단3 )
stats.kruskal( 집단1, 집단2, 집단3 )
이원 분산분석
df_melt = df.melt()
from statsmodels.formula import api
model = api.ols( '종속 ~ C(독립1) + C(독립2) + C(독립1):C(독립2)', data=df_melt).fit()
# C로 감싼건 범주형데이터라서.
model = api.ols( '종속 ~ C(독립1) * C(독립2)', data=df ).fit()
from statsmodels.stats import anova
anova.anova_lm( model )
사후검증까진.... 안함.
카이제곱
적합도 검정 : 빈도수로 값을 변경 해야함.
from scipy import stats
stats.chisquare( 관찰값, 기대값, alternative )
독립성 검정 : pd.crosstab ( index=컬럼, columns=컬럼, values=컬럼, aggfunc=sum )
from scipy import stats
stats.chi2_contingency( 크로스탭 )
상관분석
from scipy import stats
stats.pearsonr( x, y )
다중회귀 분석
from statsmodels.formula import api
model = api.ols( '종속 ~ 독립1 + 독립2', data = df ).fit()
model.summary()
예측, 신뢰
newdata = pd.DataFrame({ '컬럼' : [예측값] })
pred = model.get_prediction( newdata )
pred.summary_frame( alpha=0.05 ) # 95% 신뢰구간
# 신뢰구간 : mean_ci_lower ~ mean_ci_upper
# 예측구간 : obs_ci_lower ~ obs_ci_upper
로지스틱 회귀
from statsmodels.formula import api
model = api.logit( '종속 ~ C(독립1) + 독립2 + 독립3', data=df ).fit()
model.summary()
오즈비
import numpy as np
np.exp( model.params['독립변수'] )