1 . 누락값이란?
데이터에서 누락값은 NaN 혹은 nan 혹은 NAN과 같은 표기를 지니고 있으며, 이는 Not a Number의 약자이기도 하다. 우선적으로 누락값을 numpy 라이브러리에서 불러와보자.
한가지 유의해야할것은 NaN값은 0 혹은 ' '(White Space)과 다른 의미를 지니고 있다. 누락값 NaN은 '데이터 자체'가 없음을 의미한다. 그렇기에 '같다'의 의미 자체가 성립되지 않는 존재이다. 이러한 정의가 가능하기에 누락값은 자기 자신과 비교해도 Boolean Type의 값은 False로 출력된다.
누락값을 확인 할 수 있는 방법은 두가지가 있다.
1 . pandas 라이브러리를 이용
not null 메소드는 누락값이 아닌것에 대한 확인이다.
2 . numpy 라이브러리를 이용
누락값의 존재에 대해 아는것은 좋다. 하지만 왜 누락값, NaN이라는것이 생기는 것인가? NaN이 생기는 이유는 처음부터 데이터를 가져오거나 연결 입력하는 과정에서 오류로 인해 발생할 수 도 있다. 한번 예시를 들의 필자가 다음과 같은 두개의 데이터를 준비하였다고 가정해 보자.
그리고 이 두개의 데이터를 merge메소드를 이용하여 합쳐볼 것이다. merge메소드를 기본적으로 이해하고자 하면 다음과 같이 이해하면 된다. merge는 기본적으로 내부 조인을 실행하게 된다. 내부조인이란 두 데이터 프레임에서 동일한 조건에 맞는 행을 연결하는것을 의미한다. left_on, right_on속성에는 둘이 동일한 조건에 맞는 행을 가지고 있는것에 대한 행 이름을 작성해 준다. 우선 merge 매서드를 사용한 데이터 프레임을 왼쪽(left_on)으로 지정해주고 첫번째 매개변수로 지정해준 데이터프레임을 오른쪽(right_on)으로 지정해 준다.
해당 merge메소드를 해석해 보면 두 데이터 프레임 사이에 동일한 기준으로 가지고 있는 행은 각각 ident, taken 이 되는 것이다. 우선적으로 vistied메소드에서 753값을 가지고 있는 값에 대해 누락값(NaN)을 넣는다고 해주었기에 결론적으로 합친 데이터에도 NaN값이 생기게 된다. 물론 이 방법은 고의로 NaN값을 생기게 된거지만 이를 좀더 생각해보면 동일한 기준값을 가졌지만 예외사항(예를 들면 한 데이터 프레임에 기준값이 하나 더 많다는 등)이 생기면 해당 데이터가 모두 누락값으로 처리된다고 생각해 볼 수 있다.
단순한 데이터 프레임이면 다행이지만 필자처럼 빅데이터를 처리하게 되면 NaN값을 일일히 모두 찾아낸다는것은 끔찍한 일이다. 필자같은 경우에는 무조건 처리하기 전에 각 열별로 NaN값을 분석한 다음에 처리를 한다. 우선 NaN의 개수를 구해보자
우선적으로 .count()메소드를 이용하면 각 열별로 누락값이 아닌 데이터의 개수들을 구할 수 있다. 여기서 더 해줘야 할것은 전에 다루에 보았던 shape()메소드를 이용해 주면 된다. shape()메소드의 반환값은 (행의 개수, 열의 개수)이다. shape()메소드의 반환값에서 행의개수에 대한 인덱싱을 해주고 각 열별로 누락값이 아닌 값의 개수를 빼주면 되는것이다.
다음 사진을 보면 우선 shape메소드의 반환값에서 0번 색인에 대한 인덱싱을 통해 전체 행의 개수인 122값을 얻었다. 그 후 각 행의 누락값이 아닌 값들의 개수를 빼면 각 열의 누락값의 개수가 나오게 되는것이다.
누락값을 세는 방법은 이 이외에도 하나 더 있다. numpy 라이브러리에 count_nonzero()메소드를 이용해 주는 것이다.
count_nonzero()메소드는 배열에서 0이 아닌 값의 개수를 세어준다. isnull()메소드는 앞에서 보았듯이 해당 데이터가 누락값이 맞는지 확인해 주는 메소드이다.만약 isnull()메소드를 데이터 프레임에 대해 실행시켜주면 각 열, 각 데이터마다 비교하여 누락값을 판벽하고 만약 누락값이 맞다면 True 를 반환하게 되는데, True값이 count_nonzero()에 들어가게 되면 count_nonzero(True)가 되어 값으로 인식하고 데이터의 수를 세게 되는것이다.
이번에는 누락값의 정의와 판별법, 누락값의 개수를 세는것에 대해 살펴보았다. 다음 포스트에서는 누락값 대체와 유연하게 처리하여 clean data 만들기에 대해 살펴볼 것이다.
'DataAnalysis > Python Pandas' 카테고리의 다른 글
read_csv utf-8 관련 오류 : UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte (0) | 2019.03.20 |
---|---|
데이터 시각화 : Seaborn 라이브러리 폭넓게 활용해 보기 2 (0) | 2019.03.12 |
데이터 시각화 : Seaborn 라이브러리 폭넓게 활용해 보기 (0) | 2019.03.11 |
데이터 시각화 : Matplotlb 라이브러리 폭넓게 활용해보기 (0) | 2019.03.10 |
판다스 데이터 시각화 - 그래프 그리기, matplotlib : 2 (0) | 2019.03.09 |