본문 바로가기
📝 자격증/빅데이터 분석기사

[빅분기 실기 준비] T1-1. 이상치를 찾아라 (IQR활용) - 작업형1

by b5ingbo2ng 2024. 6. 7.

데이터에서 IQR을 활용해 Fare컬럼의 이상치를 찾고, 이상치 데이터의 여성 수를 구하시오

강의 영상 : https://youtu.be/ipBW5D_UJEo
데이터 위치 "../input/titanic/train.csv"

 

이상치(Outlier)란,

의도하지 않게 잘못 입력한 경우나 의도하지 않게 입력 되었으나 분석 목적에 부합하지 않아 제거해야 하는 경우

의도하지 않은 현상이지만 분석에 포함해야 하는 경우

의도된 이상값(Fraud, 불량)인 경우

 

기출 표현 :  데이터 정제 과정에서 처리해야 하는 값으로, 데이터가 정상의 범주에서 벗어난 값을 의미

 


 

IQR = Q3 - Q1

 

[이상치 범위]

Q3 + ( 1.5 * IQR )보다 큰 값

Q1 - ( 1.5 * IQR )보다 작은 값

 

📍최종 나의 코드

# 라이브러리 및 데이터 불러오기
import pandas as pd 
df=pd.read_csv("../input/titanic/train.csv")
df.head()

# 간단한 탐색적 데이터 분석 (EDA)
df['Fare'].describe()

# IQR 구하기
upper = df['Fare'].quantile(0.75) 
bottom = df['Fare'].quantile(0.25)
iqr = upper-bottom
print(iqr)

top = upper + 1.5 * iqr
bot = bottom - 1.5 * iqr
print(top, bot)

# 이상치 데이터 구하기
# 이상인가, 초과인가 헷갈린다.
df[(df['Fare']>=top)|(df['Fare']<=bot)]['Fare']

# 이상치 데이터에서 여성 수 구하기, 출력하기 print()
idx = df[(df['Fare']>=top)|(df['Fare']<=bot)]['Fare'].index
temp = df.iloc[idx]
print(len(temp[temp['Sex']=='female']))

 

 

📍해답

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np
df = pd.read_csv('../input/titanic/train.csv')

# 간단한 탐색적 데이터 분석 (EDA)
print(df.shape)
print(df.isnull().sum())
df.head()

# IQR 구하기
Q1 = df['Fare'].quantile(.25)
Q3 = df['Fare'].quantile(.75)

# numpy 활용시
# Q1 = np.percentile(df['Fare'], 25)
# Q3 = np.percentile(df['Fare'], 75)

IQR = Q3 - Q1
Q1 - 1.5 * IQR, Q3 + 1.5 * IQR

# 이상치 데이터 구하기
outdata1 = df[df['Fare']<(Q1 - 1.5 * IQR)]
outdata2 = df[df['Fare']>(Q3 + 1.5 * IQR)]
len(outdata1), len(outdata2)

# 이상치 데이터에서 여성 수 구하기, 출력하기 print()
print(sum(outdata2['Sex'] == 'female'))

 

📍해답이랑 비교했을 때 아쉬웠던 점

  • 변수명 지정에 1사분위수는 Q1, 3사분위수는 Q3으로 지정할걸
  • 이상치 구할 때, 이상/이하가 아니라 초과/미만이더라