정확성 (Accuracy): 데이터가 정확해야 함
1. beer.csv
%matplotlib inline
import pandas as pd
df = pd.read_csv('data/beer.csv', index_col=0)
df.head()
df.plot(kind='box', y='abv')
박스플롯을 생성해본 결과
이상점이 3개가 보인다.
'abv'의 Q1(25%) Q3(75%)지점을 구해본다.
describe()
- 수치형 변수들의 통계량을 보여준다.
df['abv'].describe()
count 2190.000000
mean 0.060186
std 0.117010
min 0.032000
25% 0.050000
50% 0.055000
75% 0.065000
max 5.500000
Name: abv, dtype: float64
# Q1 = 25%
df['abv'].quantile(0.25)
0.05
# Q3 = 75%
df['abv'].quantile(0.75)
0.065
q1 = df['abv'].quantile(0.25)
q3 = df['abv'].quantile(0.75)
iqr = q3 - q1
25% 지점보다 밑에 있거나,
75% 지점보다 위에 있다면
이상점이다.
condition = (df['abv'] < q1 - 1.5 * iqr) | (df['abv'] > q3 + 1.5 * iqr)
df[condition]
위의 박스플롯에서 보였던 이상점 3개가 출력되었다.
2250인덱스의 abv값은 입력실수 이므로 데이터를 수정해준다.
이상값 데이터 수정
df.loc[2250,'abv'] = 0.055
df.loc[2250]
abv 0.055
ibu 40.0
id 145
name Silverback Pale Ale
style American Pale Ale (APA)
brewery_id 424
ounces 12.0
Name: 2250, dtype: object
이상점을 다시 출력해보면
condition = (df['abv'] < q1 - 1.5 * iqr) | (df['abv'] > q3 + 1.5 * iqr)
df[condition]
2개로 줄었음을 알 수있다.
남은 2개의 이상점은 맥주가 아닌 것들이 잘못입력된것으로 보인다.
따라서 삭제하도록 한다.
이상점의 인덱스를 출력
df[condition].index
Index([963, 1856], dtype='int64')
이상점 삭제
df.drop(df[condition].index, inplace=True)
df
이상점을 다시 확인해본다.
condition = (df['abv'] < q1 - 1.5 * iqr) | (df['abv'] > q3 + 1.5 * iqr)
df[condition]
이상점이 출력되지 않는다.
박스플롯 생성
df.plot(kind='box', y='abv')
2. exam_outlier.csv
df = pd.read_csv('data/exam_outlier.csv')
df
산점도 출력
df.plot(kind='scatter', x='reading score', y='writing score')
학생들의 읽기 점수와 쓰기 점수가 어떤 연관성이 있는지 확인해보았다.
700에 있는 이상점이 하나있다.
상관계수 출력
df.corr(numeric_only=True)
이상점 찾기
df['writing score'] > 100
0 False
1 False
2 False
3 False
4 False
...
995 False
996 False
997 False
998 False
999 False
Name: writing score, Length: 1000, dtype: bool
쓰기 점수를 인덱싱해본다.
df[df['writing score'] > 100]
51번째 인덱스가 이상점이다.
이상점 제거
df.drop(51, inplace=True)
df.plot(kind='scatter', x='reading score', y='writing score')
상관계수 출력
읽기와 쓰기의 상관계수가
0.58 -> 0.94로 올라갔다.
하지만 그래프를 보면 하나의 점이 동 떨어져 있는 것을 알 수있다.
# 쓰기는 90이 넘고 앍가눈 40이 안넘는 학생
condition = (df['writing score'] > 90) & (df['reading score'] < 40)
df[condition]
이상점 제거
df.drop(373, inplace=True)
df
df.plot(kind='scatter', x='reading score', y='writing score')
그래프는 오른쪽위로 일직선에 가까움을 볼 수있다.
따라서 양의 상관관계이다.
상관관계를 출력해보면
df.corr(numeric_only=True)
읽기와 쓰기는 0.95로 1에 매우 가까워 강한 양의 상관관계를 알 수있다.
'데이터 분석 > Data_cleansing' 카테고리의 다른 글
데이터 클리닝(유일성) (0) | 2024.06.04 |
---|---|
데이터 클리닝(완결성) (0) | 2024.06.04 |
데이터 정제 (0) | 2024.06.04 |