결측치 처리 후 이상치까지 처리해야 비로소 클렌징이 끝난다. 이상치는 말그대로 '이상한' 데이터를 '정상적인' 데이터로 바꾸는 것이다. 대표적인 이상치 처리 방법에는, 범주형 변수 이상치 처리와 수치형 변수 이상치 처리가 있다.
이상치 처리 : 범주형 변수 이상치 처리
df['도로형태_대범주'].value_counts()
단일로 37918
교차로 32242
기타 4056
주차장 246
미분류 23
Name: 도로형태_대범주, dtype: int64
'도로형태_대범주' 컬럼의 value count를 조회해보면 다음과 같다. 얼핏보기엔 이상한 점이 없어보이지만, 기타 항목과 미분류 항목이 겹친다는 느낌을 지울 수 없다. 이런 데이터가 '이상한' 데이터고, 이런 데이터를 '정상적인' 데이터로 바꿔주는 과정이 이상치 처리 과정이다.
my_dict = {'미분류': '기타'}
df['도로형태_대범주'] = df['도로형태_대범주'].replace(my_dict)
df['도로형태_대범주'].value_counts()
단일로 37918
교차로 32242
기타 4079
주차장 246
Name: 도로형태_대범주, dtype: int64
replace()함수는 바꿀 값과 바뀔 값을 입력하면, key:value 형태로 인식해 처리해준다. 그래서 아예 인자를 Dictionary 형태로 넣어줘도 된다. '미분류' 컬럼을 '기타'컬럼으로 바꾸기 위해 Dictionary 타입 객체를 선언해주고, replace()함수를 통해 바꿔주었다.
이상치 처리 : 수치형 변수 이상치 처리
수치형 변수란 주로 숫자로 이루어진 데이터를 말한다. 저번 결측치 처리할 때 예시로 들었던 가해운전자 연령을 보면 이상한 점이 눈에 띈다.
가해운전자 연령의 최소값이 5세, 최대값이 98세이다. 아무리 어린 나이부터 운전을 할 수 있다고 하지만 그래도 5세는 너무 이상하다. 마찬가지로 98세도 많이 이상하다. 해당 데이터들을 바꿔줘야 할 것 같다.
먼저, 이상치에 해당하는 데이터들이 얼마나 많은지 살펴보자
c = df['가해운전자연령']<90
temp = df['가해운전자연령'].where(c, np.nan)
temp.isnull().sum()
18
where() 함수를 통해 가해 운전자 연령이 90세 미만이라면 true, 그렇지 않다면 null를 담은 임시 변수 temp를 만들어주고, temp의 null 수를 카운트 해보았더니 꽤 많이 나왔다. 수치형 변수의 경우 상식적인 범위 밖의 데이터는 전부 이상치로 봐야하기 때문에 대부분 이상치의 수가 많은 편이다. 그래서 일일이 replace 해줄 수 없기 때문에 여기서는 clip함수를 사용한다.
df['가해운전자연령'] = df['가해운전자연령'].clip(lower=20, upper=80)
clip 함수는 인자로 lower과 upper를 받으며, lower에 입력한 값보다 작은 값을 lower의 값으로 모두 바꾸고, upper에 입력한 보다 큰 값을 upper의 값으로 모두 바꾸는 기능을 한다. 해당 함수를 통해 많은 이상치 데이터를 손쉽게 처리할 수 있다.
이상치는 통계된 데이터를 보고 상식적이지 않고 논리적이지 않은 부분을 찾아서 정상적인 데이터로 바꾸는 과정이기 때문에 개인적으로 결측치보다 이상치를 처리할 때 고민하는 시간이 길어지는 느낌이다. 또한 결측치는 명백하게 null인 데이터를 처리하는 문제이기 때문에 처리할 대상 또한 명확한데, 이상치는 내가 집중해서 데이터를 관찰하지 않으면 발견하지 못하고 지나칠 수 있기 때문에 모든 데이터를 면밀히 살펴봐야하는 부분에서 확실히 피로도가 높은 작업이라고 볼 수 있다.
'빅데이터분석👨💻' 카테고리의 다른 글
[Python] 빅데이터 분석 기초 - 객체 병합 함수 (concat, join, merge) (0) | 2023.12.18 |
---|---|
[Python] 빅데이터 분석 기초 - 집계 (Aggregation) (0) | 2023.11.27 |
[Python] 빅데이터 분석 기초 - 필터링 (Filtering) (1) | 2023.11.27 |
[Python] 빅데이터 분석 기초 - 인덱싱 (Indexing) (0) | 2023.11.27 |
[Python] 빅데이터 분석 기초 - 결측치 처리 (Missing Data Handling) (0) | 2023.11.24 |