결측치 분석에 앞서 cmd창의 가상공간에서 missingno 패키지를 깔고
import missingno as msno 로 불러온다
그 후, 데이터에 임의로 난값을 추가한 뒤 결측치 분석을 시작하겠다.
#numpy 임포트 # - 산술 연산, 행렬 연산 import numpy as np #난값(NaN, Not a Number) 발생 from numpy import nan as NA
#임의로 난값 추가 df2.iloc[1,1]=NA df2.head()
1,1에 난값 추가
아예 난값이 있는 행과 열을 제거해보겠다.
#결측치 삭제: 행 삭제 df2.dropna().head()
난수가 존재하는 2016-01-02의 행이 통째로 사라진 것을 확인 할 수 있다.
#결측치 삭제: 열 삭제 df2.dropna(axis=1).head()
1시의 전력소비량이 아예 통으로 사라졌다.
하지만, 비어있는 값을 제거하는 대신 다른 값으로 메꿀 수도 있다.
1. 결측치 보간법: NaN 자리를 0으로 채우기
fillna() 함수를 사용하여, 난값에 0을 넣을 수 있다.
#결측치 채우기: 0값으로 채우기 df2.fillna(0).head()
NaN으로 되어있던 2016년 1월 2일 1시의 전력 데이터가 0으로 바뀐것을 확인할 수 있다.
하지만, 실제 결측치가 0일 확률은 거의 없다.
결측치에 이전 값들과 유사한 값이 들어가는 것이 훨씬 가능성 있는 상황이다.
2. 결측치 보간법: NaN 자리에 전 열의 값을 넣기
#결측치 채우기: 보간법. 열 기준, 전날 같은 시간의 전력 소비량으로 대치 df2.fillna(method='ffill').head()
fillna 와, ffill이라는 매개변수를 이용하여 코드를 작성한 후 확인해보면
결측치 자리가 1월 1일의 전력량과 같은 0.60Wh로 채워졌음을 확인할 수 있다.
3. 결측치 보간법: NaN 자리에 전 행의 값을 넣기
#결측치 채우기: 보간법, 행 기준, 같은날 이전 시간의 전력 소비량으로 대치 df2.fillna(method='ffill', axis=1).head()
결측치 자리가 같은날 0시의 값과 동일한 값으로 채워짐을 확인할 수 있다.
4. 결측치 보간법: 선형 보간
#결측치 채우기: 선형 보간 df2.interpolate(method='linear').head()
선형보간이란, 값이 모두 선형으로 되어있다고 가정하여 직선의 특정 값에 해당하는 NaN값을 추측하여 넣는 것이다.
이런 것임ㅇㅇ..
뭐 엄밀히 따지자면 두 값 사이의 평균값이라 할 수도 있겠다.
5. 결측치 보간법: 다항식 보간
#결측치 채우기: 다항식 보간 df2.interpolate(method='polynomial',order=2).head()
선형 보간과 유사하게 2차 다항식을 이용하여 값을 근사할 수 있다.
이번에는 이상치 분석을 해보겠다.
분석을 위해 임의로 이상치를 넣어준다.
#이상치 값을 임의로 추가 df2.iloc[1,2]=-999 df2.head()
눈에 보기 쉽게 완전 이상한 값을 넣어보았다.
전력 소모량인데 -999Wh면 전력을 공급한건가....?
(1,2)의 혼자만 눈에 띄는 값 ㅋㅋㅋㅋㅋ
여기서는 이상치가 눈에 잘 띄지만 정말 Big!Big!!!!!데이터에선 이상한 값이 있어도 잘 찾기 힘들것이다
그럴때 표를 작성하거나 그래프를 그리면 이상치의 위치를 찾을 수 있다.
왜? 표에서 혼자 특이한 통계량을 나타낸다던가 그래프에서 혼자 삐죽 튀어나온 부분이 생길테니께 ㅇㅇ
1. 이상치 찾기: 표 작성
이상치 점검을 위한 describe 함수-> 평균, 최댓값, 최솟값, 표준편차,... 온갖 통계값을 보여준다.
#이상치 점검 df2.describe()
각종 통계값을 다 보니 주변 값들과 훨씬 차이나는 값들이 발견된다.
유일하게 마이너스인 평균과 다른애들은 0.0xx인데 혼자 100이 넘는 표준편차 등.... 누가봐도 이상한 값
이렇게 이상치를 검거(?) 할 수 있다
=> 이상치는 2열에 있음
2. 이상치 찾기: 임계값 이용
#이상치 찾기: 임계값에 의한 방법 np.abs(df2)>100
abs() 는 절대값을 구하는 함수이다.
모든 주어진 값의 절대값을 취했을때, 그 값이 100이 넘을 때만 참이다.
0.xx사이 혼자 존재하는 999만 True 값이다.
2. 이상치 찾기: 임계값 구한 후 NA로 치환
#이상치를 NaN으로 변환 df2[np.abs(df2)>100]=NA df2.head()
전과 동일한 방법으로 절대값을 취해서 이상치를 찾아낼 수 있다.
하지만 이번에는 T/F대신 그 자리를 NA로 치환하면 이상치 자리에 NaN이 들어가게 된다.
(참고로 앞에서 NA는 NaN이라고 정의하였다.)
이상치 자리 (1,2) 가 NaN으로 바뀌었다!
여기까지 결측치와 이상치 분석에 대해 정리해보았다
난 졸리니까 안녕........
'Bigdata > Energy Bigdata' 카테고리의 다른 글
[pandas] 헤어나오기 힘들었던 오류의 늪 그리고 데이터 시각화 (0) | 2020.12.13 |
---|---|
[Pandas] csv파일 가져오는 것 부터 복습/utf-8 encoding error 해결 (0) | 2020.12.12 |
[빅데이터] 연간/월간/시간당 전력 소비 패턴, 전력 소비 프로파일 작성하기 (2) | 2020.10.06 |
[빅데이터] 전력 빅데이터 분석 시작하기/주피터 노트북에서 파이썬 코딩 (0) | 2020.09.22 |
[빅데이터] 아나콘다 파이썬3.7 개발환경 구축/Cmd에서 가상환경 만들기/주피터노트북 시작하기 (0) | 2020.09.22 |
댓글