자격증/빅데이터분석기사

[1유형] IQR, 결측치, 왜도 첨도, 표준편차, group by

duswn1204 2026. 6. 11. 00:46

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

해답

Q1 = df['Fare'].quantile(0.25)
Q3 = df['Fare'].quantile(0.75)

IQR = Q3 - Q1

outlier = df[(df['Fare'] < Q1 - 1.5 * IQR) | (df['Fare'] > Q3 + 1.5 * IQR)]

print((outlier['Sex'] == 'female').sum())

 

상한 or 하한 둘 중 하나만 고르고 싶을 때

Q1 = df['Fare'].quantile(0.25)
Q3 = df['Fare'].quantile(0.75)

IQR = Q3 - Q1

lower = df[df['Fare'] < (Q1 - 1.5 * IQR)]
upper = df[df['Fare'] > (Q3 + 1.5 * IQR)]

print((upper['Sex'] == 'female').sum())

 


 

문제
주어진 데이터에서 소수점이 포함된 age를 이상치로 간주한다. 이상치 데이터의 값을 올림, 내림, 버림한 후 평균을 계산하고, 세 평균의 합을 출력하시오

해답

# 소수점 데이터 찾기
df[df['age'] % 1 != 0]


# 올림, 내림, 버림 평균값 구하기

ceil = np.ceil(df['age']).mean()
floor = np.floor(df['age']).mean()
trunc = np.trunc(df['age']).mean()

# 평균값 더한 후 출력
print(ceil + floor + trunc)

문제 3
주어진 데이터에서 결측치가 80%이상 되는 컬럼은(변수는) 삭제하고, 80% 미만인 결측치가 있는 컬럼은 'city'별 중앙값으로 값을 대체하고 'f1'컬럼의 평균값을 출력하세요

df.isnull().sum() / df.shape[0]

df = df.drop(['f3'], axis = 1)

s = df[df['city']=='서울']['f1'].median()
k = df[df['city']=='경기']['f1'].median()
b = df[df['city']=='부산']['f1'].median()
d = df[df['city']=='대구']['f1'].median()
s, k, b, d

df['f1'] = df['f1'].fillna(df['city'].map({'서울':s,'경기':k,'부산':b,'대구':d}))

df['f1'] = df['f1'].fillna(df['city'].map({'서울':s,'경기':k,'부산':b,'대구':d}))

문제 4
주어진 데이터 중 train.csv에서 'SalePrice'컬럼의 왜도와 첨도를 구한 값과, 'SalePrice'컬럼을 스케일링(log1p)로 변환한 이후 왜도와 첨도를 구해 모두 더한 다음 소수점 2째자리까지 출력하시오

s = df['SalePrice'].skew()
k = df['SalePrice'].kurt()
print(s)
print(k)

df['SalePrice'] = np.log1p(df['SalePrice'])

s1 = df['SalePrice'].skew()
k1 = df['SalePrice'].kurt()
print(s1)
print(k1)

print(round(s+s1+k+k1,2))

문제 5
주어진 데이터 중 basic1.csv에서 'f4'컬럼 값이 'ENFJ'와 'INFP'인 'f1'의 표준편차 차이를 절대값으로 구하시오

enfj = df[df['f4'] == 'ENFJ']['f1'].std()
enfj

infp = df[df['f4'] == 'INFP']['f1'].std()
infp

print(np.abs(enfj - infp))

문제 6
주어진 데이터 중 basic1.csv에서 'f1'컬럼 결측 데이터를 제거하고, 'city'와 'f2'을 기준으로 묶어 합계를 구하고, 'city가 경기이면서 f2가 0'인 조건에 만족하는 f1 값을 구하시오

df = df.dropna(subset = ['f1'])

df2 = df.groupby(['city','f2']).sum()
df2

print(df2.iloc[0]['f1'])