지난 시간까지 한 일
: 데이터를 어떻게 수집할까!!
- 인터넷을 통해서 수집!!! → API, 웹 사이트 etc
- 특정 파일로 존재
⇒ 수집한 데이터들을 바탕으로 어떻게 활용할지에 대해서 오늘 공부할 것
데이터 수집하고 체크
→ 결측치 잘 확인해야함
- 공식 : NaN ⇒ 공식적인 결측값
- 기타 : nan, “”, None ⇒ 이런 값들이 이상하게 있을 수 있음
- 빵꾸난 데이터가 있다면
- EDA 처리할 때는 그렇게 큰 이슈는 아님
- → but ML 모델에서는 꼭 처리를 해야함
- 처리 방법 1 ) 누락 된 것을 지우자
- 경우에 따라서 샘플의 수가 줄어들 수 있음
- 경우에 따라서 속서의 수가 줄어들 수 있음
- 처리 방법 2 ) 누락된 것을 채우자
- fillna
- 어떻게 채울까에 대한 정답은 없음
- 분석자가 주관적으로 처리해야하는 영역
- 1개의 대표값을 사용하는 경우 → 평균, 중앙값
- 유사한 데이터를 보고 추정하는 경우
- 기존 데이터를 바탕으로 모델링을 통해 추정
- fillna
- 처리 방법 1 ) 누락 된 것을 지우자
데이터 분석 프로세스 ⇒ 항상 why 달고다녀야함
- 숫자라고 하는 객관성을 가장한 엄청난 주관성을 가짐
- 분석자의 끌고가는 논리가 매우 중요함
drop
- 특정한 줄(가로, 세로)를 지울 때
- → 기준 ⇒ 내가 만든 틀 (가로 인덱스, 컬럼명)
dropna
- 명시적인 NaN인 값으로 지울 때
- → 기준 ⇒ 값
from numpy import nan as NA
import pandas as pd
# 이 데이터는 설문 문항이 3개인 설문 결과!!!
# ==> 4명한테 설문지를 돌리고 받았다!!!
data = pd.DataFrame(
data =[
[ 1, 6.5, 3],
[1, NA,NA],
[NA,NA,NA],
[NA,6.5,3]
]
)
data
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0
'''
data.dropna()
# --> 가로 줄에 대해서 (샘플단위 기준) "모든 속성/컬럼"이 살아있는 경우만 살림
# [모든 설문 문항에 응답한 경우만 인정하겠다]
#장점 : 샘플이 모든 속성들을 다 가지고 있다
#단점 : 샘플의 수가 확 줄어들 수 있음
'''
0 1 2
0 1.0 6.5 3.0
'''
data
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0
'''
data.dropna(axis = 1)
'''
0
1
2
3
'''
dropna
- axis
- 가로줄/세로줄 기준으로 “모든값”이 있는지 체크
- 기준은 공식적인 NaN으로 된 애들이 기준
-
- how
- all
- 완전히 모든 그 줄의 데이터가 NaN인 경우만 삭제하자
- all
- how
-
- tresh
- 정상적인 데이터가 살아있는 기준 수
- tresh
data.dropna(axis = 0, how = "all")
# 가로줄 입장에서 모든 세로 속성에 대한 것이 NaN인 것들을 삭제
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
3 NaN 6.5 3.0
'''
data.dropna(axis=0, thresh = 1)
#--> 가로줄 기준
#--> 그 가로줄에서 모든 세로(컬럼)값이 정상적인 값이 1개 이상이면 샘플로 살리자
#=> 여러 문항 중 1문항이라도 답하신 분들은 샘플로 인정하겠다
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
3 NaN 6.5 3.0
'''
data.dropna(axis=0, thresh = 2)
#-> 가로줄 기준으로
#-> 정상적인 값 2개 이상 제출한 가로줄은 살리자
# => 2개 답한 사람부터 샘플로 인정
'''
0 1 2
0 1.0 6.5 3.0
3 NaN 6.5 3.0
'''
채우자 : fillna → NaN 명시적인 친구들은 어떻게 채울까
⇒ *** ML 내에서는 nan 값이 있으면 안 됨 → 에러남
data
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3.0
'''
data.fillna(99)
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 99.0 99.0
2 99.0 99.0 99.0
3 99.0 6.5 3.0
'''
data.fillna( 0)
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 0.0 0.0
2 0.0 0.0 0.0
3 0.0 6.5 3.0
'''
→ 1번 컬럼에 대해서 누락된 값이 있다면 : 0으로 채우자(예 : 속도) → 2번 컬럼에 대해서 누락된 값이 있다면 : 99로 채우자(예 : 무응답)
# 컬럼별로 결측치를 다르게 채워주세요~~~
# ==> dict 기반
data.fillna( {0:0, 1:99})
'''
0 1 2
0 1.0 6.5 3.0
1 1.0 99.0 NaN
2 0.0 99.0 NaN
3 0.0 6.5 3.0
'''
<aside>
정리
결측 데이터 처리
- 지우자
- drop, dropna etc…
- 채우자
- fillna ( 어떤 값(분석자의 몫) )
++전체 데이터를 돌아가면서 처리할 수도 있음 Gap 구하는 스타일로
+++ lambda + apply 이용하는 방식도
</aside>
'데이터분석 > Pandas' 카테고리의 다른 글
| [Python] Pandas 14 _ groupby (3) | 2025.08.25 |
|---|---|
| [Python] Pandas 13 _ pivot (1) | 2025.08.25 |
| Selenium 02 _ dart_selenium (0) | 2025.08.22 |
| Selenium 01 _ selenium 설치 및 실행 (0) | 2025.08.22 |
| [Python] Pandas 11 _ pandas_m&a (5) | 2025.08.21 |