1. 캐글(Kaggle)
- 구글에서 운영하는 전 세계 데이터 사이언티스트들이 다양한 데이터를 분석하고 토론할 수 있도록 제공하는 커뮤니티
- 데이터 분석 및 머신러닝, 딥러닝 대회를 개최
- 많은 데이터셋, 파이썬 자료, R 자료 등 ...
2. 데이콘(Dacon)
- 국내 최초 AI 해커톤 플랫폼
- 전문 인력 채용과 학습을 할 수 있는 여러가지 AI 자료들을 제공
3. 타이타닉 데이터
import numpy as np
import pandas as pd
- 아이리스 데이터와 마찬가지로 타이타닉 데이터셋도 데이터프레임으로 구성해주기 위해 pandas를 import 해줍니다
- 그리고 데이터량이 많기 때문에 성능을 높여주기 위해 numpy를 import를 해줍니다
- numpy는 일반 list의 데이터를 읽는거 보다 훨씬 더 빠르게 읽어준는 역할을 합니다
df = pd.read_csv('https://bit.ly/fc-ml-titanic')
df
4. 데이터 전처리
- 데이터 정제 작업을 뜻함
- 필요없는 데이터를 삭제하고, null 값이 있는 행을 처리하고, 정규화/표준화 등의 많은 작업들을 포함
- 머신러닝, 딥러닝 실무에서 전처리가 50% 이상의 중요도를 차지함
4-1. 독립변수와 종속변수 나누기
feature = ['Pclass', 'Sex', 'Age', 'Fare'] # 독립변수
label = ['Survived'] # 종속변수
- 타이타닉 데이터셋의 생존률을 확인해보도록 하겠습니다
- 먼저 확인하고자 하는 Survived 컬럼을 종속변수로 설정해줍니다
- 이후 종속변수의 결과에 영향을 미쳤을만한 컬럼들을 독립변수로 설정해 줍니다
4-2. 결측지 처리
df.info()
df.isnull().mean()
- 분석하고자 하는 과정에서 필요없는 데이터 또는 오류가 있는 데이터를 파악해줍니다
- info()를 통해 전처리에 Dtype을 확인하고 mean()을 통해서는 컬럼에 NaN 값이 얼마만큼 존재하는지 확인할 수 있습니다
4-3. 라벨 인코딩(Label Encoding)
- 문자(Categorical)를 수치(Numerical)로 변환
# 평균 나이를 구해서 데이터를 삽입
df.loc[df["Age"].isnull(), "Age"] = df["Age"].mean()
또는
df["Age"] = df["Age"].fillna(df["Age"].mean())
# df["Age"].isnull() : 컬럼에 있는 null 값을 확인하는 코드
# fillna() : null 값을 다른 값으로 넣어주는 함수
# mean() : 해당 대상의 평균을 구해주는 함수
- 위의 mean() 으로 확인해 봤을때 독립변수 중 하나인 Age에 결측값이 있는것을 확인할 수 있습니다
- 따라서 NaN으로 구성되어있는 결측값에 Age의 평균값을 넣어 줍니다
# 남자는 1, 여자는 0 으로 라벨 인코딩
def convert_sex(data):
if data == 'male':
return 1
elif data == 'female':
return 0
df['Sex'] = df['Sex'].apply(convert_sex)
# apply() : 데이터 프레임에서 각 열과 행에 함수를 적용하고 값을 반환하는 함수
- 위의 info() 로 확인해 봤을때 독립변수 중 하나인 Sex는 object 형태로 구성되어 있는것을 확인할 수 있습니다
- 데이터 분석을 위한 학습은 object 형식을 수행하지 못하기 때문에 라벨인코딩을 통해 남자는 1, 여자는 0으로 바꿔줍니다
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
embarked = le.fit_transform(df['Embarked'])
embarked
# LabelEncoder() : value 값을 변경할때 키값의 알파벳 순서대로 0부터 지정하며 NaN 값은 가장 마지막에 지정
# fit_transform() : LabelEncoder()와 함께 사용하여 특정한 대상의 value 값을 변경
- LabelEncoder() 함수를 import 해준 뒤 LabelEncoder() 와 fit_transform() 를 통해 value 값을 변경해줍니다
4-4. 원 핫 인코딩(One Hot Encoding)
- 독립적인 데이터는 별도의 컬럼으로 분리하고 각각 컬럼에 해당 값에만 1, 나머지는 0값으로 갖게 하는 방법
df['Embarked_num'] = LabelEncoder().fit_transform(df['Embarked'])
pd.get_dummies(df['Embarked']) # NaN 컬럼도 설정하고 싶으면 dummy_na=True 를 추가해 주면 됩니다
- 먼저 원 핫 인코딩을 진행하기 위해 LabelEncoder() 를 적용한 컬럼을 하나 만들어 줍니다
- 이후 get_dummies() 를 통해 pd형태로 데이터를 확인해봅니다
df = pd.get_dummies(df, columns=['Embarked'])
- 그리고 데이터 프레임에 df['Embarked'] 키값들을 컬럼으로 추가해줍니다
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df[feature], df[label], test_size=0.2, random_state=2023)
X_train.shape, y_train.shape
X_test.shape, y_test.shape
- 이제 독립변수와 종속변수 모두 전처리를 마무리했기 때문에 학습을 시켜주고 결과를 확인해줍니다
'수업 복습 > 머신러닝과 딥러닝' 카테고리의 다른 글
의사 결정 나무 (0) | 2024.01.03 |
---|---|
선형 회귀 (1) | 2023.12.29 |
아이리스 데이터셋(Iris DataSet) (1) | 2023.12.29 |
사이킷런(Scikit-learn) (1) | 2023.12.27 |
머신러닝(Machine Learning) (0) | 2023.12.27 |