빅데이터 공부

[빅데이터분석기사 실기] 제2유형

왕초보코딩러 2023. 12. 18. 03:30
728x90

빅데이터 분석 과정

1. 필요 패키지 임포트

2. 데이터 불러오기

3. 데이터 살펴보기

4. 데이터 전처리

5. 데이터 나누기

6. 데이터 분석 수행

7. 성능평가 및 시각화

 


1. 필요 패키지 임포트

import numpy as np
import pandas as pd
import sklearn

빅분기 실기에서는 그래프가 안되는 것으로 알고 있습니다(아닐지도..)


2. 데이터 불러오기

df = pd.read_csv("경로")

3. 데이터 살펴보기

데이터를 탐색한다.

 

 

-데이터 프레임의 구성

df.head()

 

 

-데이터 프레임 행, 열 수

df.shape

 

 

-데이터 프레임 컬럼 당 null값, 타입

df.info()

 

 

-데이터 프레임 기술 통계

#숫자형만
df.describe()

#오브젝트형도 함께
df.describe(include='all')

 


4. 데이터 전처리1 - 데이터 정제(결측값, 이상값)

 

결측값 확인 : isnull().sum()

df.isnull().sum()

각 컬럼의 결측값 수를 보여준다

 

결측값이 있는 행 제거 : dropna()

# 데이터프레임 전체에서 결측값이 있는 행 모두 제거
new_df = df.dropna(axis=0)

# 데이터프레임 지정 컬럼에서 결측값이 있는 행 제거
new_df = df.dropna(subset='컬럼', axis=0)

열 삭제 시 axis=1

 

결측값을 대체 : fillna()

-평균값 대체 mean()

dm = df['컬럼'].mean()

#방법1
df['컬럼'] = df['컬럼'].fillna(dm)
#방법2
df['컬럼'].fillna(dm, inplace=True)

 

 

-중앙값 대체 median()

dm = df['컬럼'].median()

#방법1
df['컬럼'] = df['컬럼'].fillna(dm)
#방법2
df['컬럼'].fillna(dm, inplace=True)

 

 

-최빈값으로 대체 mode()[0]

dm = df['컬럼'].mode()[0]

#방법1
df['컬럼'] = df['컬럼'].fillna(dm)
#방법2
df['컬럼'].fillna(dm, inplace=True)

 

 

-인접값으로 대체 method = 'ffill' / 'bfill'

#위의 값으로 대체
df['컬럼'].fillna(method='ffill', inplace=True)

#아래의 값으로 대체
df['컬럼'].fillna(method='bfill', inplace=True)

 

 

-그룹별 평균값으로 대체

grouped = df.groupby('그룹화할 컬럼')['집계함수를 적용할 컬럼']

df['컬럼'].fillna(grouped.transform('mean'), inplace=True)

 


이상값 확인 : IQR

-그래프로 확인 : plot(kind = 'box')

df.plot(kind='box')

박스플롯으로 확인

 

-이상값 제거 : drop()

q1 = df['컬럼'].quantile(0.25)
q3 = df['컬럼'].quantile(0.75)
iqr = q3 - q1

condition = (df['컬럼'] < q1 - 1.5 * iqr) | (df['컬럼'] > q3 + 1.5 * iqr)
df.drop(df.loc[condition].index, inplace = True)

 

 

https://beneagain.tistory.com/52

 

Pandas DataFrame : del / drop 행, 열 삭제, 특정행 삭제

https://benn.tistory.com/27 [데이터 분석] 파이썬 Pandas 행, 열 삭제 이번 글에서는 유명한 Iris 데이터셋을 사용하여 판다스를 사용해 원하지 않는 데이터를 삭제하는 방법을 정리해봤습니다. 먼저 판다

beneagain.tistory.com

 

-이상값 처리

q1 = df['컬럼'].quantile(0.25)
q3 = df['컬럼'].quantile(0.75)
iqr = q3 - q1

condition = (df['컬럼'] < q1 - 1.5 * iqr) | (df['컬럼'] > q3 + 1.5 * iqr)
df.loc[condition, '컬럼'] = 대체할 값

 

 

https://velog.io/@stand_hyo/Data-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-%EC%9D%B4%EC%83%81%EC%B9%98Outlier%EC%99%80-%EA%B2%B0%EC%B8%A1%EC%B9%98Missing-Value-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

 

[Data] 데이터 전처리 - '이상치(Outlier)와 결측치(Missing Value) 처리하기

다양한 데이터를 접하면서 가장 고민이 되는 부분이 해당 데이터의 '이상치'와 '결측치'를 어떻게 처리하는지이기 때문에 이제부터 다양한 처리 방법에 대해 알아보자!

velog.io

 


4. 데이터 전처리2 - 데이터 변환

(데이터 인코딩, 단위 환산, 자료형 변환, 표준화, 정규화, 파생변수 생성)

 

데이터 인코딩

: 사람이 인지할 수 있는 형태의 데이터를 컴퓨터가 인지할 수 있는 수로 변환

레이블 인코딩, 원핫 인코딩

 

-레이블 인코딩1 : replace(), map()

df['인코딩할 컬럼'].replace({'컬럼데이터1':0, '컬럼데이터2':1, '컬럼데이터3':2}, inplace=True)

df['인코딩할 컬럼'] = df['인코딩할 컬럼'].map({'컬럼데이터1':0, '컬럼데이터2':1, '컬럼데이터3':2})

컬럼데이터가 별로 없을 때 사용할 수 있다.

 

 

-레이블 인코딩1 : 싸이킷런의 LabelEncoder()

from sklearn.preprocessing import LabelEncoder

le=LabelEncoder()
df['인코딩할 컬럼'] = le.fit_transform(df['인코딩할 컬럼'])

 

 

-원 핫 인코딩 : pd.get_dummies()

df = pd.get_dummies(df, columns=['인코딩할 컬럼1', '인코딩할 컬럼2'])

 

https://mizykk.tistory.com/13

 

[Python] pd.get_dummies() :: One-Hot Encoding / 원핫인코딩

머신러닝에서 문자로 된 데이터는 모델링이 되지 않는 경우가 있다. 대표적으로 회귀분석은 숫자로 이루어진 데이터만 입력을 해야한다. 문자를 숫자로 바꾸어 주는 방법 중 하나로 One-Hot Encodin

mizykk.tistory.com

 

 

-표준화 : 싸이킷런의 MinMaxScaler()

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df['컬럼'] = scaler.fit_transform(df[['컬럼']])

 

 

-정규화 : 싸이킷런의 StandardScaler()

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df['컬럼'] = scaler.fit_transform(df[['컬럼']])

 

 

데이터셋이 학습과 테스트로 이미 나뉘어져 있다면 fit()과 transform()을 각각 해야 한다

fit(): 변환 방법 학습

transform(): 데이터 변환

학습용 데이터셋에 : fit_transform()

테스트 데이터셋에 : transform()

X_train['컬럼'] = scaler.fit_transform(X_train[['컬럼']])
X_test['컬럼'] = scaler.transform(X_test[['컬럼']])

 

https://moruxz.tistory.com/108

 

[ML] fit_transform()과 transform()

1. fit_transform()과 transform()의 차이 2. train 데이터에 fit_transform()이 아니라 transform()을 사용한다면? 3. train데이터와 test데이터를 나누기 전에 one hot encoding 해도 될까? 4. pd.get_dummies()와 sklearn의 OneHotEn

moruxz.tistory.com

 

https://deepinsight.tistory.com/165

 

[scikit-learn] transform()과 fit_transform()의 차이는 무엇일까?

왜 scikit-learn에서 모델을 학습할 때, train dataset에서만 .fit_transform()메서드를 사용하는 건가요? TL;DR 안녕하세요 steve-lee입니다. 실용 머신러닝 A to Z 첫번 째 시간은 scikit-learn에서 자주 사용하는 tra

deepinsight.tistory.com


5. 데이터 나누기 - 싸이킷런의 train_test_split()

전처리를 마친 데이터를 학습용 데이터셋과 테스트용 데이터셋으로 분리한다.

혹은 검증을 위해 학습용 데이터셋을 학습용과 검증용으로 분리한다.

 

-학습용, 테스트용 데이터 분리 

from sklearn.model_selection import train_test_split

X= df[['컬럼1', '컬럼2', '컬럼3']] #피처 넣기
y= df[['타겟변수']] 

# X 데이터프레임의 20%는 테스트용, 80%는 학습용 
X_train, X_test, y_train, y_test = (X, y, test_size = 0.2, random_state = 10, stratify = y)

test_size 데이터셋 중 테스트 데이터셋 비율을 써준다.

random_state 테스트 데이터셋을 어떻게 고를지 설정. 정수를 써준다.

매번 똑같은 데이터셋이 생김
파라미터 없으면, 누를 때마다 랜덤한 데이터셋 생성됨

stratify 데이터 분포가 원래 데이터 분포와 동일하게 분리

 

 

-학습용, 검증용 데이터 분리(학습 데이터를 나눠야 할 때) 

from sklearn.model_selection import train_test_split

x_tr, x_vl, y_tr, y_vl = train_test_split(X_train, y_train, test_size=0.2, random_state=10)

6. 데이터 분석 수행

지도학습에서 문제가 출제됩니다.

 

지도학습 데이터 분석 기법
1. 분류 모형-의사결정나무, KNN, 서포트벡터머신, 랜덤포레스트, 로지스틱 회귀분석
2. 회귀 모형-선형회귀분석,  랜덤포레스트, 의사결정나무

-지도학습 알고리즘 선택

분류 의사결정나무 from sklearn.tree
import DecisionTreeClassifier
KNN from sklearn.neighbors
import KNeighborsClassifier
서포트벡터머신(SVM) from sklearn.svm import SVC
로지스틱 회귀분석 from sklearn.linear_model
import LogisticRegression
랜덤포레스트 from sklearn.ensemble
import RandomForestClassifier
회귀(예측) 선형회귀분석 from sklearn.linear_model
import LinearRegression
랜덤포레스트 from sklearn.ensemble
import RandomForestRegressor
의사결정나무 from sklearn.tree
import DecisionTreeRegressor

 

 

확실하게 사용 할 하나를 외워가는 것이 좋습니다. 만약 기억이 안난다면 dir() 을 사용하면 됩니다!!

import sklearn
from sklearn import *

print(dir(sklearn))

##########################
#예시: tree
import sklearn.tree

print(dir(sklearn.tree))

 

-분석을 수행 : fit() , predict()

#예시 의사결정나무
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(random_state = 2022)

model.fit(X_train, y_train)
pred = model.predict(X_test)

model은 위에서 임포트한 알고리즘에 따라 바뀐다.

동일한 분석을 위해 random_state는 넣어줘야 한다


7. 성능평가 - sklearn.metrics

문제에 어떤 것으로 성능평가를 하는지 나와있기 때문에 보고 하면된다

 

-지도학습(분류)의 성능 평가 

#분류 성능
from sklearn.metrics import roc_auc_score

print(roc_auc_score(test_y, pred_y))

accuracy_score(실제 y값, 모델이 예측한 y값)

 

-지도학습(회귀)의 성능 평가

from sklearn.metrics import mean_squared_error, r2_score

print(np.sqrt(mean_squared_error(y_test, y_pred))
print(r2_score(y_test, y_pred))

 

 

모르겠다면 dir() 사용

import sklearn.metrics
print(dir(sklearn.metrics))

 

 

 


<참고>

https://aitzone.tistory.com/29

 

[빅데이터분석기사] 작업 2유형 작성패턴 - 분류문제

빅데이터 분석기사의 2유형은 전체 100점 배점중 40점을 차지하는 한 문제가 나온다. 필답형 문제 (30점)이나 1유형 (30점)을 만점을 받을 자신이 있으면 날려도 되지만, 보통 그렇게 하기 힘든 부분

aitzone.tistory.com

 

https://inform.workhyo.com/entry/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EA%B8%B0%EC%82%AC%EC%9E%91%EC%97%85%ED%98%952-%EC%98%88%EC%8B%9C%EB%AC%B8%EC%A0%9C-%EA%B3%A0%EA%B0%9D%EC%84%B1%EB%B3%84-%EC%98%88%EC%B8%A1%EB%B6%84%EB%A5%98

 

[빅데이터분석기사] 작업형2 예시문제 (분류)

* 퇴근후딴짓 님의 강의를 참고하였습니다.* [ 문제 ] 아래는 백화점 고객의 1년간 구매 데이터이다. (가) 제공데이터 목록 1. y_train.csv : 고객의 성별데이터(학습용), csv형식의 파일 2. X_train.csv, X_te

inform.workhyo.com

 

 

https://www.youtube.com/watch?v=_GIBVt5-khk

 

https://www.youtube.com/watch?v=L6sSKf2sv0k

 

https://it-utopia.tistory.com/entry/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-2%ED%9A%8C-2%EC%9C%A0%ED%98%95-%ED%92%80%EC%9D%B4Python

 

[빅데이터분석기사] 실기 2회 2유형 풀이(Python)

전자상거래 배송 데이터 제품 배송 시간에 맞춰 배송되었는지 예측모델 만들기 학습용 데이터 (X_train, y_train)을 이용하여 배송 예측 모형을 만든 후, 이를 평가용 데이터(X_test)에 적용하여 얻는

it-utopia.tistory.com

 

https://github.com/lovedlim/BigDataCertificationCourses

 

GitHub - lovedlim/BigDataCertificationCourses: 빅데이터 분석기사 실기 준비 자료

빅데이터 분석기사 실기 준비 자료. Contribute to lovedlim/BigDataCertificationCourses development by creating an account on GitHub.

github.com

 

 

저는 7회 시험을 봤습니다!!

다행히 합격 예정입니다!!!!!!!!!!!

 

 

1단계

결측값 확인 후 처리 -> 검증 데이터 분리 -> 여러 모델 가지고 학습 후 평가

2단계

결측값 확인 후 처리 -> 인코딩 -> 검증 데이터 분리 -> 여러 모델 가지고 학습 후 평가

3단계

결측값 확인 후 처리 -> 인코딩(저는 라벨인코딩 했습니다) -> 스케일링 -> 검증 데이터 분리 -> 여러 모델 가지고 학습 후 평가

 

이렇게 하면서

인코딩 부분에서 특정 컬럼 뺐을 때

스케일링 부분에서 특정 컬럼 뺐을 때

하면서 모델 평가가 가장 잘 나온 모델로 선택하여

그 모델로 실제 문제도 학습하고 제출했습니다

 

 

꼭 실습을 따라해보고 모르겠으면 유튜브 강의를 보면 좋을 것 같습니다.

케글도 잘 활용하시고욥!!

모두 화이팅!!!