인공지능을 위한 파이썬 라이브러리 5-4 [完]
데이터 전처리 : 결측치 탐지와 다양한 처리 방법
데이터 분석에서 결측치는 흔해 발생하며 , 이를 올바르게 처리하는것이 중요하다.
판다스는 결측치를 쉽게 탐지하고 처리할수 있는 다양한 기능을 제공한다.
결측치는 어떻게 채우느냐가 중요하며,
결측치 유형
- 무작위적 결측치 .
- 결측치 발생이 다른변수와 관련이 없는경우.
- 결측치의 발생이 특정 변수와 관련이 있는경우.
이렇게 3가지가 존재한다
isna() 와 isnull로 결측치 탐지

예시 데이터 프레임을 생성하고 실행할시 민수의 나이와 지수의 직업이 NaN 과 None 으로 표시된다.
이후 df.isna()를 실행시키면
결측치가 있는 곳은 True로 표시된다.
Nan과 None의 차이점은
nan = 수치적인 데이터. none 파이썬 코드에서 값이 없는걸 의미할때 라고 생각하면 편하다.

sum() 을 사용해서 결측치 갯수를 확인할수있는데 .
True=1인걸 활용해서 df.isna().sum() 을 실행시키면 True 값이 각 컬럼에 몇개가 있는지 실행되며,
그 갯수가 결측치의 갯수와 동일 한것을 확인할수있다.
결측치 처리방법
결측치 제거
결측치가 포함된 행이나 열을 삭제 할수있다. dropna() 함수를 사용한다.

dropna()를 사용하면 결측치가 들어간 열이 삭제 된걸 확인할수있고, dropna(axis=0)이나 =1을 사용하게 되면
행이나 열 원하는 걸 삭제 할수있다.

결측치 대체(채우기)
결측치를 특정 값으로 대체할수있다 함수는 fillan()를 사용한다.


원하는값을 따로 따로 수행하는 것도 가능하다.
결측치 보간
결측치를 주변 값들을 기반으로 보간할수있따. interpolate() 함수를 사용한다.

행의 순서에 따라 어느정도 값이 정리 되어있고 이 값에 따라 결측치를 추측할수 있을때 사용가능하다.
(예 : 문자열로 되어있는 이름등은 사용이 어렵다)
고급 결측치 처리 방법
특정 조건을 기반으로 결측치를 처리 할수있다. 예를 들어, 다른열의 값을 기준으로 결측치를 채우는방식.

loc를 통해 직업이 학생과 동일한 열에 한하여, 나이를 20살로 채운다.
apply() 를 사용한 사용자 정의 함수 적용
apply()는 각행 열에 대해서 함수를 반복적으로 적용해주는 함수이며
apply() 함수를 사용하면 결측치를 처리하는 사용자 정의 함수를 적용할수 있다.

fill_misiing_age라는 함수에
결측치가 있다면 그 값을 18로 바꿔주는 명령어를 집어넣어준다.
이후 df안의 나이란에 apply 함수를 집어넣어주면
다음과 같이 민수의 나이가 18살로 바뀌어있는걸 확인할수잇다.
데이터 전처리 : 이상치 탐지 및 처리
이상치는 데이터의 일반적인 패턴에서 벗어난 값이다.
결측치는 정의가 어느정도 명확하고 탐지하기 쉽지만
이상치는 탐지하기 어렵다.
이상치를 탐지는 방법에는 기술 통계 , 시각화 , IQR(사분위수 범위 )를 사용한 방법이 있다.
기술 통계 기반 이상치 탐지
describe() 함수를 사용하여 데이터의 기본 통계량을 확인하고 이상치를 의심해볼수 있다.

다음과 같은 데이터 프레임에 describe() 함수를 사용해서,
평균과 표준편차가 큰차이를 보이는 경우 , 또는 최대값이 비상적으로 높은 경우 이상치를 의심해볼수있다.
시각화를 사용한 이상치 탐지
박스플롯(boxplot)과 히스토그램을 사용하면 데이터의 분포를 시각적으로 확인할수있어,
이상치를 탐지하는데 용이하다.


박스 플롯의 이상치는 통상적으로 박스의 위아래에 위치한 점으로 표시된다.
IQR을 사용한 이상치 탐지
IQR은 1사분위수(Q1)과 3사분위수(Q3)의 차이로, 이범위를 벗어나는 데이터를 이상차로 간주 할수있다.

120이라는 값이 IQR 범위를 벗어나므로 이상치로 탐지 된다.
IQR은 좋은 방법이긴 하지만 절대적이지 않다.
이상치 처리 방법

IQR을 통해 이상치를 탐지하고 이후 데이터프레임에서 제거 할수있고,

중앙 값으로 대체 할수도 있다.
데이터 전처리 : 데이터 정규화와 표준화 (비선형 변환 포함)
데이터 정규화
정규화는 데이터의 범위를 0과1 사이로 변환하는 과정이다.
이는 서로 다른 범위를 가진 데이터를 동일한 스케일로 맞추어 비교하기 쉽게 만드는 과정이다.
Min-Max 정규화
가장 일반적인 정규화 방법으로 , 각 데이터를 최소값을 0 , 최대값을 1로 변환한다,

이 방식으로 각 열의 모든 데이터가 0에서 1사이의 값으로 변환 되었다.
데이터 표준화
데이터를 평균이 0, 표준편차가 1이 되도록 변환하는 과정이다 . 이는 정규 분포를 가정한 많은 분석 기법에 유리하다.
Z-점수 표준화
Z-점수 표준화는 데이터에서 평균을 빼고 표준편차로 나누어 , 모든 데이터가 표준 정규분포를 따르도록 만든다.

각 열의 데이터가 평균 0 , 표준편차가 1이 되도록 변환 되었으나 ,
표본이 적게되면 1과 차이가 조금 날수있다 .
많은 표본을 가지면 1과 가까워 진다.
비선형 변환
데이터의 비정상적인 분포를 정규 분포에 가깝게 만들때 사용한다.
로그로 값을 덮어주거나 제곱근으로 변환해주는것이 대표적이다.
로그(Log) 변환
로그 변환은 양의 데이터에서 주로 사용되며 ,데이터의 분포를 좁히는데 유용하다.
(지수 분포를 가진 데이터를 다룰때 효과적)

제곱근 변환
제곱근 변환은 데이터의 분포를 평탄하게 만들기 위한 또 다른 방법
특히 포아송 분포를 가진 데이터에서 사용한다.

박스-콕스 변환
박스-콕스 변환은 다양한 형태의 데이터 분포를 정규 분포에 가깝게 변환하기 위해 사용한다.
이 방법은 양수 데이터에서만 사용 가능하다.

로버스트스케일러
중앙 값과 IQR 방법을 사용해서 데이터를 스케일링 하는방법
이상치에 잘 동작하는 IQR 방법을 사용하기에 이상치에 덜 민감하다.
데이터 전처리 : 인코딩
인코딩은 범주형 데이터를 수치형 데이터로 변환하는 과정이다.
많은 머신러닝 모델은 수치형 데이터만 처리 할 수 있기 때문에,
범주형 데이터를 인코딩하는것이 필수적이다.
레이블 인코딩
레이블 인코딩은 범주형 데이터를 순서가 있는 순자로 변환한다. 각 범주에 고유한 숫자가 할당된다.
사용시 주의점으로는 범주형 데이터에 순서가 있을때 적합하다.
순서가 없는 데이터에 사용하면 , 모델이 이값을 크기로 인식해 잘못된 결과가 나올수 있기 때문이다.

사과는 0 ,바나나는 1 , 오렌지는 2로 인코딩되었다.
원-핫 인코딩
각 범주를 이진 벡터로 변환한다 . 각 범주는 고유한 열을 가지며 , 해당하는 열에는 1 나머지는 0이 할당된다.
원-핫 인코딩의 장점으로는 범주형 데이터에 순서가 없을때 사용하기 좋다.
모델이 범주간의 순서나 관계를 인식하지 않고 각 범주를 독립적으로 처리해주기 때문이다.

prefix는 열 앞에 붙여주는 이름이라고 생각하면 편하다.
위 예시에서는 바나나,사과,오렌지 각각 독립된 열로 변환되었고 , 해당하는 위치에 1이 표시된다.
차원 축소 인코딩
범주형 데이터가 많을때 유용하다. 각 범주를 데이터셋 내에서의 출현 빈도로 인코딩한다.

사과와 바나나는 각각 2회 , 오렌지는 1회 출현하여 해당 빈도로 인코딩되었다.
이방법은 범주형 데이터의 빈도가 매우 중요한 경우에 적합하며, 범주의 고유성을 잃을수 있으므로 주의해야한다.
순서형 인코딩
순서가 있는 범주형 데이터를 그 순서에 따라 숫자로 변환하는 방식.

낮음은 1, 중간은 2, 높음은 3으로 인코딩 되었다.
임베딩
딥러닝에서 주로 사용되며 , 범주형 데이터를 벡터 공간에 매핑하여 변환한다.
이는 특히 고차원 범주형 데이터에 유용하다.
'나의개발일지(TIL)' 카테고리의 다른 글
| [스파르타 내일배움캠프]8일차 -머신러닝 (0) | 2024.10.14 |
|---|---|
| [스파르타 내일배움캠프]7일차 -파이썬 라이브러리 (0) | 2024.10.11 |
| [스파르타 내일배움캠프]5일차 -파이썬 라이브러리 (2) | 2024.10.07 |
| [스파르타 내일배움캠프]4일차 -파이썬 라이브러리 (0) | 2024.10.04 |
| [스파르타 내일배움캠프]3일차 -인공지능을 위한 파이썬 (6) | 2024.10.02 |