Acdong
Learn by doing
Acdong
전체 방문자
오늘
어제
  • 분류 전체보기
    • Economy
      • Saving Money
    • Self-improvement
    • Thoughts
    • Machine learning
      • Deep Learning
      • Chatbot
      • NLP
    • MLops
      • AWS
      • Container
      • Serving
    • Computer Vision
    • Data Science
      • ADsP
      • R
    • Project
    • Python
      • Data Structure & Algorithm
    • C,C++
    • API
      • ElasticSearch
    • Error Note
    • Network
    • RDBMS
      • SQL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • [GitHub]

인기 글

태그

  • pandas
  • 데이터 전처리
  • 기계학습
  • R그래프
  • 이미지 전처리
  • 포인터
  • 다중공선성
  • Python
  • 머신러닝
  • plot()
  • Numpy
  • 어텐션
  • c포인터
  • R
  • 존댓말 반말 분류
  • nlp
  • sbert
  • 회귀계수
  • R시각화
  • SentenceTransformer

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Acdong

Learn by doing

[데이터 전처리] . 결측치 처리하기 ( Missing Values )
Machine learning

[데이터 전처리] . 결측치 처리하기 ( Missing Values )

2020. 10. 23. 15:57
728x90

데이터가 없을 때 할 수 있는 전략

  • 데이터가 없으면 없는 행을 날려버린다. ( 간단하쥬 )

  • 데이터가 없는 최소 개수를 정해서 날려버린다. ( ex 결측치가 3개이상인 행은 날려버린다.)

  • 데이터가 거의 없는 변수는 변수자체를 날려버린다.

  • 최빈값, 평균값 , 중앙값으로 비어있는 데이터를 채운다.

  • 머신러닝기법으로 예측해서 채워넣는다 ( 이 부분은 추 후에 다루도록 하겠습니다. )

샘플데이터

결측치를 확인하는 방법

df.isnull().sum()

first_name 칼럼에 1개 , last_name 칼럼에 1개 등등... 결측치가 있다.

 


첫 번째 방법.

결측치가 하나로 있으면 그 행을 날려버리기.

dropna() : 결측치가 있는 행은 삭제해주는 함수

df_no_missing = df.dropna()
df_no_missing

* dropna() 함수는 원본데이터를 바꾸지 않고 원본데이터를 복사해서 결측치를 제거한 값을 보여주기 때문에

위처럼 새로운 변수로 반환값을 받아주거나 원본데이터의 덮어씌우기를 해줘야 합니다.

 


두 번째 방법.

결측치가 있는 최소개수를 정해서 행을 날려버린다.

  • dropna( ) 의 인자로는 axis , how , thresh 가 있는데
  • axis : 기준 축을 정해주는 것으로 axis = 1 로 설정할 경우 칼럼기준으로 결측치를 삭제한다. 열기준
  • how : 어떤 결측치를 삭제할 건지를 조건을 설정해주고
            how = 'all' 을 해줄경우 행의 모든내용이 비어있는 경우에만 삭제한다.
  • thresh : threshold 는 역치(경계) 라는 뜻이고
             thresh = 3 이라고 할 경우 4개이상의 결측치가 있는 행만 제거합니다.
df_cleaned = df.dropna(how='all') #모든데이터가 nan 인 행을 지워라
df_cleaned

모든 행이 nan 인 행만 제거합니다.

#데이터가 최소4개 이상 없을 때 drop
df.dropna(thresh=3) #threshold 는 역치(경계값)이라는 뜻


세 번째

데이터가 거의 없는 변수(열)을 날려 버린다.

df['location'] = np.nan

모든 값이 결측치인 행을 추가한다.

#column 기준으로 삭제
df.dropna(axis=1,how='all')

location 행이 삭제됨.


네 번째

대체 값으로 채워준다.

#0으로 채우기
df.fillna(0)

 결측치를 모두 0으로 채운다.

 

평균값 , 중위값으로 채워 넣기

#평균값, 중위값 , 최빈값(가장 많은 빈도수)
print(df["preTestScore"].mean())
print(df["postTestScore"].median())
print(df["postTestScore"].mode())

최빈값은 빈도수가 각각 다 1이라 3개 다 등장

#평균값 집어 넣기
df["preTestScore"].fillna(df["preTestScore"].mean(),inplace=True)
df

fillna( ) 함수의 평균값을 넣어주면 결측치를 평균값으로 대체한다.

 

inplace=True 는 원본데이터를 바꾸겠다는 뜻

df = df["preTestScore"].fillna(df["preTestScore"].mean()) 과 같은 뜻이다.

 

GroupBy를 통하여 성별로 평균값 대체하기

#성별로 나눠서 평균값을 집어 넣기
df["postTestScore"].fillna(df.groupby("sex")["postTestScore"].transform("mean"),inplace=True)
df

결측치가 없는 데이터만 확인하기

#age와 sex가 모두 notnull인 경우에만 표시해라
df[df['age'].notnull() & df['sex'].notnull()]

반응형
저작자표시 비영리 (새창열림)

'Machine learning' 카테고리의 다른 글

[데이터 전처리] . 데이터 구간화 ( Data binning )  (0) 2020.10.23
[데이터 전처리] . 이산형 데이터 처리하기 ( OneHotEncoding )  (0) 2020.10.23
[기계학습] KNN ( K-Nearest neighborhood ) k-최근접 이웃  (0) 2020.07.09
[기계학습] 나이브 베이즈 분류 - Naive bayes classifier  (0) 2020.07.07
[기계학습]PCA (Principal Conponents Analysis) 주성분 분석  (0) 2020.07.02
    'Machine learning' 카테고리의 다른 글
    • [데이터 전처리] . 데이터 구간화 ( Data binning )
    • [데이터 전처리] . 이산형 데이터 처리하기 ( OneHotEncoding )
    • [기계학습] KNN ( K-Nearest neighborhood ) k-최근접 이웃
    • [기계학습] 나이브 베이즈 분류 - Naive bayes classifier
    Acdong
    Acdong
    E-mail : alswhddh@naver.com / 자연어처리와 MLops 를 연구하고 있는 스타트업 개발자입니다.

    티스토리툴바