728x90
반응형
- 데이터 클린징의 이해
- 표본 편향 오류
- 품질 좋은 데이터를 확보 [데이터 품질 관리]
- 데이터 클린징
- 편향 없이 명확하고 깨끗한 데이터를 확보하는 작업 [데이터 분석 순서 : 백업 -> 보기 -> 결측데이터 처리]
- 결측 데이터
- 결측 데이터 확인
- 결측 데이터 대체/제거 [평균 대체법]
- 결측 데이터 반영 확인
- 이상 데이터
- 이상 데이터 확인
- 이상 데이터 대체/제거
- 이상 데이터 처리 확인
- 중복 데이터
- 중복 데이터 확인
- 중복 데이터 처리(유일한 1개 키만 남기고 나머지 중복 제거
- DataFrame.drop_duplicates()
- 중복 데이터 처리 확인
- 결측 데이터
- 편향 없이 명확하고 깨끗한 데이터를 확보하는 작업 [데이터 분석 순서 : 백업 -> 보기 -> 결측데이터 처리]
- 결측 데이터
isnull() : 결측 데이터이면 True 값을 반환, 유효한 데이터면 False를 반환
notnull() :유효한데이터가존재하면 True를 반환, 누락 데이터이면 False- 데이터 누락값을 의미한다
- 변수가 왜곡될 가능성 제거
- NaN / None
- 제거
- 대체
- 결측 데이터 확인
#결측값 개수
df.isnull().sum()
#행 단위 결측값 개수
df.isnull().sum(1)
#행 단위 실젯값 개수
df.notnull().sum(1)
- 결측 데이터 개수 확인
import pandas as pd
file_path = 'C:/data/bicycle.csv'
df = pd.read_csv(file_path engine='python')
df
#결측 데이터 확인
df.isnull()
df.notnull()
- 결측 데이터 제거
df.dropna(axis=0) : 행 삭제
df.dropna(axis=1) : 열 삭제
df.dropna()
#결측 데이터가 있는 전체 행 제거
df_drop_allow = df.dropna(axis=0)
df_drop_allow
#결측 데이터가 있는 전체 열 제거
df_drop_allcolumn = df.dropna(axis=1)
df_drop_allcolumn
#특정 행 또는 열 결측치 제거, 대여소번호 컬럼 제거(비교 확인)
df[대여소번호'].dropna()
#결측값이 들어있는 행 전체 삭제: 하단 df.dropna(axis=0)와 동일
df[['대여소번호', '대여거치대', '이용시간']].dropna()
df[['대여소번호', '대여거치대', '이용시간']].dropna(axis=0)
#결측값이 들어있는 열 전체 삭제
df[['대여소번호', '대여거치대', '이용시간']].dropna(axis=1)
- 결측 데이터 대체
df.fillna(0) : 특정 값으로 대체
df.fillna(' ') : 특정 문자열로 대체
df.fillna(df.mean()) : 변수별 평균으로 대체 [각각 변수의 평균으로 대체, 중위값도 확인]
#결측값을 특정 값(0)으로 대체
df_1= df.fillna(0)
df_1
#특정 컬럼 결측값을 특정 값(0)으로 대체
df_2= df.대여소번호.fillna(0)
df_2
#결측값을 문자열('missing')로 대체
df_3=df.fillna('missing')
df_3
#각 컬럼의 평균을 구해서 대응하는 컬럼의 결측값을 대체하는 방법으로 가장 많이 사용합니다.
df_4=df.fillna(df.mean())
df_4
#특정 항모구 평균 구하기(이용거리 평균)
df_5=df.mean()['이용거리']
df_5
#특정 항목 평균으로 대체
df_6=df.fillna(df.mean()['이용거리'])
df_6
##특정 항목 평균으로 대체
df_7=df.이용거리.fillna(df.mean()['이용거리'])
df_7
- 결측 데이터 처리 주의
- Null의 의미
- 0 : -1과 1사이의 정수
- null : 미지의 값, 확정되지않은 결측 값
- 자료형
- Null은 연산 시 유의 사항
- sum(), cumsum() 함수 계산시 NaN은 '0'으로 처리
- 평균 및 표준편차 연산시 NaN은 분석 대상에서 제외
- 컬럼간 연산시 NaN이 존재하면 NaN으로 반환
- 결측치 제거를 위해 행 및 열의 전체삭제는 왜곡의 위험성 존재
- Null의 의미
- 이상 데이터
- 정상에서 벗어난 데이터
- 이상 데이터 확인
import pandas as pd
#파일 결로는 찾고 변수 file_path에 저장
file_path = 'C:/data/bicycle_out.csv'
#read_csv() 함수로 데이터프레임 변환
df= pd.read_csv(file_path, engine='python')
df
#이상값이 있는 4번째 행 제거
df1= df.drop(4, 0)
df1
- 이상 데이터 시각화 [연속형만 확인가능]
- 박스플롯을 이용해 확인 및 제거
- 박스플롯의 구성
- 중앙값
- 박스
- 수염
- 이상치
- 박스플롯의 구성
- 사분위수를 이용해 제거
- 박스플롯을 이용해 확인 및 제거
#고급 시각화 박스플롯 참조
#이용시간 이상치 시각화
import matplotlib as mpl
import matplotlib.plylab as plt
plt.boxplot(df['나이'])
plt.show()
- 이상 데이터 처리 방법
- 단순 삭제
- 다른 값으로 대체
- 변수화
- 리샘플링
- 케이스 분리 분석
- 중복 데이터
- duplicated()함수를 이용
- drop_duplicates()를 이용해 중복 데이터 삭제
- 중복 데이터 확인
import pandas as pd
file_path= 'C:\data\bicycle_dp.csv'
df= pd.read_csv(file_path)
df
#duplicated() 메소드로 중복 데이터 찾기
#dataFrame.duplicated()는 True, False의 boolean 형태의 series 반환
df.duplicaed(['이용거리'])
df.duplicated(['이용거리', '나이'])
- 중복 시작과 끝 확인
#중복이 있으면 처음이나 끝에 무엇을 남길지 확인합니다.
#keep='first'가 default이며,
#중복값이 있으면 첫 번째 값을 duplicated 여부를 False로 반환, 나머지 중복 값에 대해서는 True를 반환
#keep='last'는 중복값이 있으면 첫 번째 값을 duplicated 여부를 True로 반환, 나머지 중복값에 대해서는 False를 반환
df.duplicated(['이용거리'], keep='last')
#keep=False는 처음이나 끝 값인지 여부는 고려를 안 하고 중복이면 무조건 True를 반환
df.duplicated(['이용거리'], keep=False)
- 중복 데이터 제거
#drop_duplicated()는 중복값을 keep='first', 'last', False argument에 따라 유일한 1개의 key 값만 남기고 나머지는 중복 제거
df.drop_duplicates(['이용거리'], keep='first')
df.drop_duplicates(['이용거리'], keep='last')
df.drop_duplicates(['이용거리'], keep=False)
728x90
반응형
'Computer Engineering > Big Data Analytics Using Python' 카테고리의 다른 글
[빅데이터 분석 프로젝트] 마크다운으로 팁 데이터 분석 보고서 작성하기 -Part 1 (0) | 2021.04.06 |
---|---|
[빅데이터 분석 프로젝트] 마크다운으로 타이타닉 탑승객의 생존률 보고서 작성하기 -Part 1 (0) | 2021.03.16 |
[빅데이터 분석] 4. 데이터 보기 (0) | 2021.03.15 |
[빅데이터 분석] 3. 데이터 준비 (0) | 2021.03.13 |
[빅데이터 분석] 2. 파이썬 주요 문법 정리 (0) | 2021.03.13 |