완결성 (Complteness)
필수적 데이터는 모두 채워져있어야 함
결측값(NaN, Not a Number) 확인, 채워져있어야 할 값의 누락을 확인
결측값이 존재하는게 의미가 있을 수 있음
아래와 같이 결측값을 제거함으로 완결성을 이룸
import pandas as pd
df = pd.read_csv('nan.csv', index_col=0)
df.isnull().sum() #결측 값 true/false 확인, 결측값 개수 파악
df.dropna(inplace=True) #결측값 포함 된 행 제거, 기존 테이블 수정 True
#결측값 포함 된 열 제거, 기존 테이블 수정 True
df.dropna(axis='columns', inplace=True)
df.fillna(0) #결측값 다른 값인 0으로 대체
df.fillna(df.mean()) #결측값 평균 값으로 대체
df.fillna(df.median()) #결측값 중간 값으로 대체
유일성 (Uniqueness)
불필요한 중복 데이터가 존재하면 안됨
아래와 같이 중복 데이터를 제거함으로 유일성을 이룸
import pandas as pd
df = pd.read_csv('dust.csv', index_col=0)
df.index.value_counts() #각 값이 나오는 횟수로 중복을 확인
df.loc['07월 31일'] #상세 확인
df.drop_duplicates(inplace=True) #중복 행 제거, 기존 테이블 수정 True
df = df.T.drop_duplicates().T #행과 열 자리 변경, 중복 컬럼 제거, 다시 행과 열 자리 변경 후 저장
#컬럼명은 동일하지만 값이 동일하여 중복으로 판단되는 컬럼 중복 제거
통일성 (Conformity)
데이터가 동일한 형식으로 저장되어야 함
정확성 (Accuracy)
데이터가 정확해야 함
데이터를 수집하는 단계에서 기준이 잘 못되면 부정확해질 수 있음
이상점 (Outlier)
다른 값과 심하게 떨어진 값으로 값의 정상 유무를 판단
이상이 있는 데이터라면 제거하거나 수정
이상이 없다면 분석에 방해가 되면 제거, 의미 있다면 보존
import pandas as pd
df = pd.read_csv('beer.csv', index_col=0)
df.plot(kind='box', y='abv') #이상점을 확인하기 위한 플롯 그래프
df['abv'].describe() #각 지점 확인
q1 = df['abv'].quantile(0.25) #25%지점 가져오기
q3 = df['abv'].quantile(0.75) #75%지점 가져오기
iqr = q3 - q1 #iqr 구하기
outlier = (df['abv'] < q1 -1.5 * iqr) | (df['abv'] > q3 + 1.5 *iqr) #기본 이상점 찾기
df[outlier] #인덱싱하여 데이터 확인
df.loc[2250, 'abv'] = 0.055 #오류 데이터 수치 수정
df.loc[2250] #정상 수정여부 확인
outlier = (df['abv'] < q1 -1.5 * iqr) | (df['abv'] > q3 + 1.5 *iqr) #수정 후 이상점 재확인
df[outlier] #인덱싱하여 데이터 확인
df[outlier].index #인덱스 확인
df.drop(df[outlier].index, inplace=True) #오류 데이터 제거, 기존 테이블 수정 True
outlier = (df['abv'] < q1 -1.5 * iqr) | (df['abv'] > q3 + 1.5 *iqr) #수정 후 이상점 재확인
df[outlier] #인덱싱하여 데이터 확인
관계적 이상점 (Relational Outlier)
두 변수의 관계를 고려했을 때 이상한 데이터
import pandas as pd
df = pd.read_csv('exam_.csv')
df.plot(kind='scatter', x='reading score', y='writing score')
df.corr() #상관계수 출력하여 관계 확인
df[df['writing score'] > 100] #점수이상 확인
df.drop(51, inplace=True)
df.plot(kind='scatter', x='reading score', y='writing score')
df.corr() #상관계수 출력하여 관계 확인
outlier = (df['writing score'] > 90)&(df['reading score'] < 40) #점수이상 확인
df[outlier]
df.drop(373, inplace=True)
df.plot(kind='scatter', x='reading score', y='writing score')
df.corr() #상관계수 출력하여 관계 확인
반응형
'학습 log (이론) > python' 카테고리의 다른 글
'파이썬 사용법' 흝어보기 (0) | 2020.07.22 |
---|---|
'웹 크롤링' 기본 (0) | 2020.03.15 |
'데이터 분석' (0) | 2020.03.05 |
'통계 분석' (0) | 2020.03.04 |
'Seaborn' (0) | 2020.03.04 |