:데이터를 하나하나 뜯어본다.
:데이터 -> 탐색과정 -> matoplib로 시각화.
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값 유의)
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)