문제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['독립변수'] )

+ Recent posts