안녕하세요 햄찌입니다.
최근 DACON 컨테스트에 참여하고 있는데요 베이스코스이다보니 기본 코드를 제공해줘요.
저는 필사하면서 하나씩 공부하고 있는데요. 그 첫번째는 "데이터 결측치"를 확인하는 것입니다.
데이터가 완전하지 않으면 대표값을 얻기 어려울뿐더러 예측하기 위해 모델링을 할 때에도 오류가 나기 쉬우니까요.
114*10 의 데이터셋에서 결측치를 확인하는 법으로 아래 코드가 주어졌는데요
train[train.isna().sum(axis=1) > 0]
아무리 봐도 axis = 1에 대해 이해가 안되었어요. 킹갓제네럴 랑꾼님의 도움을 받아 이해를 할 수 있었는데 내용은 다음과 같습니다.
우선, axis개념을 알기 위해서는 Shape에 대해 알아야합니다
Shape 란, 제일 n차원 데이터셋의 원소를 저차원 (안쪽 괄호)의 원소 개수부터 역순으로 쓴 것입니다.
shape(2,3,4) 는 3차원 데이터 셋(n = 3)에서 1차원 요소 (제일 안쪽 괄호의 원소)는 4개, 2차원 요소 (중간 괄호의 원소)는 3개, 3차원 요소 (바깥 괄호의 원소)는 2개가 되는 것입니다.
예를 들면 이렇게 생겼겠군요!
[1,2,3,,,,,24] 를 (2,3,4)로 reshape하면
[
[[1,2,3,4],[5,6,7,8],[9,10,11,12]], 제일 깊은 괄호의 원소는 4개
[[13,14,15,16],[17,18,19,20],[21,22,23,24]] 다음 깊은 괄호의 원소는 3개
] 바깥 괄호의 원소는 2개
가 되는 것이죠.
여기서 axis의 개념이 등장합니다.
데이터셋.연산자함수(axis = n)으로 사용되는데요, 데이터셋의 n번째 인덱스가 가리키는 차원을 무너뜨려서 연산하여 저차원으로 반환하는 것입니다. 즉, n번째 괄호를 허물고 원소들을 연산하는 것이죠.
아래 예시를 보겠습니다
예) sum(axis = 0 )-> 0번째 인덱스를 무너뜨려서 합친 결과 (3,4)의 데이터셋을 반환
위의 데이터를 기준으로 하면
[[1+13,2+14,3+15,4+16],[5+17,6+18,7+19,8+20],[9+21,10+22,11+23,12+24]]의 결과인
[
[14,16,18,20],[22,24,26,28], [30,32,34,36]
]
이 반환되는 것입니다.
예2) sum(axis = 2) -> 2번째 인덱스를 무너뜨려서 합친 결과 (2,3)의 데이터셋을 반환
위의 데이터를 기준하면
[[1+2+3+4, 5+6+7+8, 9+10+11+12], [13+14+15+16, 17+18+19+20, 21+22+23+24]]의 결과인
[
[10, 26, 42], [58, 68, 90]
]
이 반환됩니다.
그럼 처음으로 돌아가 결측치가 있는 코드를 다시 볼까요?
train[train.isna().sum(axis=1) > 0]
train데이터에 isna()함수를 적용하여 결측치가 있는 원소는 1, 결측치가 없는 원소는 0으로 대치하여 train 데이터셋의 사이즈와 똑같은 데이터셋이 반환됩니다.
이랬던 데이터가
이렇게 바뀌는 거죠 그럼 여기서 sum(axis = 1) 가 더해지면 보통 (행,렬)로 데이터셋을 적용하니까 1번째 index, 즉 열을 없애고 행*1의 데이터셋으로 원소들을 합쳐야 겠죠 -> 결측치인 원소는 True (1), 결측치가 아닌 원소는 False (0) 니까 행을 모두 더하면 (sum) 결측치가 있는 경우에 1 이상의 값을 반환하는 것이에요!!
즉 상기 코드는 "결측치각 있는 row들을 확인하는 방법" 이었습니다!
감사의 인사를 랑꾼님께 전합니다.
'취준일기 + Working' 카테고리의 다른 글
Account Manager 기록 (1) - 새로움에 도전하고 익히기 (1) | 2023.06.17 |
---|---|
구글 코랩 Google Colab쓸 때 구글 드라이브에서 데이터 읽는 법 (0) | 2022.01.02 |
[계획 잘 세우는 법] 만다라트 계획표 양식 | 엑셀 / 아이패드 템플릿 공유 (0) | 2022.01.01 |
[연말결산] 2021년을 보내며 (0) | 2021.12.31 |
운전면허 2종 보통 독학 합격 방법 1편 | 40만원으로 운전면허 취득하기 (2) | 2021.11.16 |
댓글