# 코드잇 데이터 사이언티스트 강의 듣는 중
<이상치 outlier 찾기>
--> 데이터에서 동떨어진 값을 의미하는 데 주로 박스플롯 기준.
Q1- 1.5 IQR ~ Q3 + 1.5 IQR 범위를 벗어나는 경우를 이상치라고 함.
1) .quantile() --> 사분위수 구하기
- 사분위수를 구해서 그것을 변수로 설정
q1 = airbnb_df['price'].quantile(0.25)
q3 = airbnb_df['price'].quantile(0.75)
iqr= q3 - q1
lower_limit = q1 - 1.5 * iqr
upper_limit = q3 + 1.5 * iqr
2) 조건식으로 사용함.
#각각
airbnb_df[airbnb_df['price'] < lower_limit]
airbnb_df[airbnb_df['price'] > upper_limit]
#걍 합쳐서 한 번에 보이기
airbnb_df[(airbnb_df['price'] < lower_limit) | (airbnb_df['price'] > upper_limit)]
<이상치 처리하기>
1) 아무것도 하지 않기
- 실제 값이 아주 작거나 아주 클 수도 있기 때문
- 오히려 이 값들을 제외하는 것이 데이터를 편향되게 만드는 것일 수도 있음.
2) 이상치를 다른 값으로 채우기
- Q3 + 1.5 IQR보다 크면 이 값으로,
- Q1 - 1.5 IQR보다 작으면 이 값으로 바꿔줌.
--> 이상치가 데이터에 미치는 영향력을 줄여줄 수 있음.
3) 이상치 삭제하기
- 가장 직관적이고 간단함.
- 오류 때문이거나, 그 데이터를 삭제해도 큰 영향이 없을 때 이 방법을 사용함.
- 데이터 양이 줄어들지만, 이상치를 제외한 데이터의 경향을 더 쉽게 분석할 수 있음.
1) .drop()
- 해당 값을 지울 수도 있지만
2) 인덱싱으로 포함되는 값만 남길 수도 있음.
con1 = airbnb_df['price'] >= lower_limit
con2 = airbnb_df['price'] <= upper_limit
airbnb_df[con1 & con2]
--> 앞서 값을 구할 때 lower와 upper limit을 구했기 때문에 그 값을 활용하면 쉽게 인덱싱을 할 수 있음.
+...계속 커널 깨끗히 하고, 또 중복치 값을 원래의 값에 넣어줬다는 것을 확인 못해서
이상치 제거 벡터의 수가 안 맞아서, 코드 한 줄 씩 치면서 디버깅했음... ㅎㅎ..
<예시>
ver1 -> 조건식을 걍 쓰고 ~으로 인덱싱 해주기.
q1 = cellphone_df['price'].quantile(0.25)
q3 = cellphone_df['price'].quantile(0.75)
iqr = q3 - q1
lower_limit = q1 - 1.5 * iqr
upper_limit = q3 + 1.5 * iqr
con1 = cellphone_df['price'] < lower_limit
con2 = cellphone_df['price'] > upper_limit
cellphone_df = cellphone_df[~(con1 | con2)]
cellphone_df
ver2 -> drop 써보기
- drop으로 해보려고 했는데 자꾸 안 되서.. 결국 지피티가 알려줬음.
- 변수에 .index를 넣고, 그 값을 drop 해야 함.
- .index를 넣지 않으면 에러 뜸.
# IQR 계산
iqr = q3 - q1
# 이상치 기준 계산
lower_limit = q1 - 1.5 * iqr
upper_limit = q3 + 1.5 * iqr
# 이상치 조건 정의
con1 = cellphone_df['price'] < lower_limit
con2 = cellphone_df['price'] > upper_limit
# 이상치 조건을 만족하는 인덱스 찾기
outlier_indices = cellphone_df[con1 | con2].index
# 이상치 인덱스를 사용하여 행 삭제
cellphone_df = cellphone_df.drop(outlier_indices)
'Data Science > Pandas' 카테고리의 다른 글
[데이터 전처리] 새로운 값 계산하기, 정규화, 표준화, 과학적 표기법 (0) | 2024.06.20 |
---|---|
[데이터 전처리] 대소문자 처리하기, 문자열 분리하기, 문자 제거하기 (0) | 2024.06.17 |
[데이터 전처리] 중복값 duplicate value 찾기, 처리하기 (0) | 2024.06.17 |
[데이터 전처리] 결측값 missing value 찾기, 처리하기 (0) | 2024.06.17 |
[Pandas] 엑셀xlsx , csv파일로 내보내기 (0) | 2024.06.15 |