EDA

매일 공부(ML)·2021년 10월 9일
0

CS 

목록 보기
10/33

탐색적 데이터분석(EDA)

:데이터를 하나하나 뜯어본다.

:데이터 -> 탐색과정 -> matoplib로 시각화.

EDA과정

1) 데이터 다운로드 받기

2) 데이러 불러오기

2-1) 라이브러리 가져오기

-Numpy: 1차원 또는 2차원 형식의 표 데이터 다룸

import numpy as np

-pandas: 1차원 또는 2차원 형식의 표 데이터 다룸

import pandas as pd

-seaborn:데이터를 그래프등으로 시각화할 때 사용한다.matplotlib의 상위 버전으로 좀 더 고급화된 그래프 그릴 수 있다.

import seaborn as sns

-matplotlib:데이터를 그래프등으로 시각화

import matplotlib.pyplot as plt

2-2) 데이터 불러오기 간략화

i)경로 저장.
csv_path =
os.getenv("HOME") +"/aiffel/pokemon_eda/data/Pokemon.csv"

ii)원본 데이터 변수 냅두기

original_data = pd.read_csv(csv_path)

iii)원본 데이터 복사하기(원본 데이터 훼손 안됨)

pokemon = original_data.copy()

3)빈 데이터(결측치) 확인하기

:데이터셋의 성격에 따라 처리하는 방법이 다름

4)전체 칼럼 이해하기

:칼럼 값은 중복 번호를 가질 수 있다

:칼럼 부르기

print(len(pokemon.columns))
pokemon.columns

5) 칼럼별 속성을 파악하기

-집합(set) 형성 후 길이(len)을 확인하면 중복이 사라지고 유일한 갯수 구함
:len(set(pokemon["#"]))

-속성파악하기
:pokemon.loc[[ , ]]

-파이썬 차집합 함수
:set()-set()

-모든 Type를 types변수에 저장

types = list(set(pokemon["Type 1"]))
print(len(types))
print(types)

-NaN갯수 확인

:pokemon["Type 2"].isna().sum()

-데이터 분포 plot

i) plt 의 subplot -> 두 개의 그래프 한 번에 그리기

ii) sns의 countplot-> 데이터의 개수 표시한다.NaN은 자동으로 제외된다

iii)sort_value -> 높은 것붜 낮은 순으로 정렬

-pd.concat: 특정 단어가 들어가 있는 부분을 합쳐본다

-reset_index(drop=True) : 대체한다!

6) 데이터 전처리하기

i)문자열 데이터 처리를 못하므로 적절한 숫자 데이토 또는 부울 데이터등으로 처리.

ii) 단어를 그룹화시켜서 종류별 나눔

iii)함수 이용

-isalpha(): 이름이 알파벳으로만 이루어졌는지 확인

:다른 문자가 섞여있을 경우 replace()함수를 써서 대체

-정규표현식(RegEx)

:문자열을 처리할 때 사용(특정 조건 검색 및 치환)

:이름에 있는 토큰을 추출하기 위해 토큰화 할 때도 사용

:import re

:findall함수- 패턴을 지정하고 이행.

:반복을 나타내는 기호 "*"

:EX) 토큰화 함수 생

-list 또는 set의 자료형에서 각 요소의 개수를 다룬다
:oollection은 OrderedDict-순서가 있는 딕셔너리, Count-요소 개수 세기

-Counter이해하기

:from collections import Counter

:튜플리스트로 반환

:most_common - 가장 많은 요소와 등장횟수 정렬

-Pandas에서 특정 구문이 포함되어있는 여부 파악하는 법(in 문자열 데이터 셋)

:str.contains함수 사용

for token, _ in most_common:
pokemon[token] = pokemon["Name"].str.contains(token)

pokemon.head(10)

-범주형 데이터 처리

:원-핫 인코딩(One-Hot Encoding)

주어진 카테코리 중 단 하나만 1(True),나머지는 모두 0(False)로 나타냄

7)베이스라인(Baseline)

:처음부터 있었던 컬럼만 이용하다.

:성능 하한선을 제공하여 만든 모델의 방향성 제공.

i) 저장한 원본 데이터 부르기

ii) 문자열 데이터와 target데이터 빼주기

iii)변수 설정 후 넣기.

iv) 훈련 데이터와 학습 데이터 분리하기

:sklearn.model_selection 모듈 안의 train_test_split함수 사용

from sklearn.model_selection import train_test_split

8) 분류 모델 학습 시키기

8-1)의사 결정 트리 이용

i)의사결정 트리 부르기

from sklearn.tree import DecisionTreeClassifier

ii)모델의 랜덤성 제어(학습결과 차이 방지)

model = DecisionTreeClassifier(random_state=25)
model

------------------------------------위의 총 과정은 데이터 탐색 및 정제준비------

------------------------아래는 모델을 훈련데이터로 학습 후 학습 데이터 예측.-----

1.코드

X_train, y_train :학습 데이터

X_test데이터 넣어 -> y_pred인 예측값 생성

from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)

2.오차 행렬

:실제 label class 와 예측 label class의 변화를 가지고 매핑 되는지에 따라 4분면으로 나뉘는 것이다. class의 기준은 Negative 와 Positive로 분류한다.

i)TN: 예측값- Negative = 0 , 실제값 - Negative = 0

ii)FP: 예측값-Positive = 1 , 실제값 - Negative = 0

iii)FN: 예측값-Negative = 0 , 실제값 - Positive = 1

iv)TP : 예측값 - Positive = 1, 실제값 - Positive = 1

3.정확도 외에 다른 척도로 모델 성능 평가

classification_report활용

3-1 코드

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

불균형 데이터에서는 Positive를 잘 잡아내야한다.(Recall값 유의)

  1. Feature Engineering진행

i)칼럼 갯수 알아내기

ii)제외할 칼럼 제외하기

iii) features 갯수 측정

features = [ , , , , , , , , , ]
len(features)

iv)정답데이터 준비

  • 모델에 입력해줄 진짜 데이터 :변수에 진짜 데이터 저장.(숫자 or 부울 데이터로만 구성)

  • 모델에게 제공할 정답 데이터

  • X_train 부터 y_test까지로 분리

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=15)

print(X_train.shape, y_train.shape)
print(X_test.shape, y_test.shape)

profile
성장을 도울 아카이빙 블로그

0개의 댓글