[Python] 빅데이터분석기사 - 유형1 ⑥

순동·2022년 2월 22일
1

📝 26번

데이터셋(basic1.csv)의 앞에서 순서대로 70% 데이터만 활용해서, 'f1'컬럼 결측치를 중앙값으로 채우기 전후의 표준편차를 구하고 두 표준편차 차이 계산하시오.

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic1.csv')

basic = basic.iloc[:70]
basic.isnull().sum()

before_sd = basic['f1'].std()

f1_med = basic_70['f1'].median()
basic['f1'] = basic['f1'].fillna(f1_med)

after_sd = basic['f1'].std()

result = abs(before_sd - after_sd)
print(result)

3.2965018033960725


📝 27번

데이터셋(basic1.csv)의 'age'컬럼의 이상치를 더하시오. (단, 평균으로부터 '표준편차x1.5'를 벗어나는 영역을 이상치라고 판단함)

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic1.csv')
basic.head()

age_mean = basic['age'].mean()
age_sd = basic['age'].std()

outlier = basic[(age_mean - age_sd * 1.5 > basic['age']) | (basic['age'] > age_mean + age_sd * 1.5)]

result = outlier['age'].sum()
print(result)

473.5


📝 28번

자동차 데이터 셋에서 qsec 컬럼을 Min-Max Scale로 변환 후 0.5보다 큰 값을 가지는 레코드(row) 수를 구하시오.

💻 풀이

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler

mtcars = pd.read_csv('data/mtcars.csv')
mtcars.head()

scaler = MinMaxScaler()
mtcars['qsec'] = scaler.fit_transform(mtcars[['qsec']])

result = sum(mtcars['qsec'] > 0.5)
print(result)

9


📝 29번

첫번째 데이터 부터 순서대로 50:50으로 데이터를 나누고,
앞에서 부터 50%의 데이터(이하, A그룹)는'f1'컬럼을 A그룹의 중앙값으로 채우고, 뒤에서부터 50% 데이터(이하, B그룹)는 'f1'컬럼을 B그룹의 최대값으로 채운 후, A그룹과 B그룹의 표준편차 합을 구하시오. (단, 소수점 첫째자리까지 구하시오 (둘째자리에서 반올림))

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic1.csv')
pd.set_option('mode.chained_assignment',  None)

A = basic.iloc[:50]
B = basic.iloc[50:]

basic.isnull().sum() 

A['f1'] = A['f1'].fillna(A['f1'].median())
B['f1'] = B['f1'].fillna(B['f1'].max())

A = A['f1'].std()
B = B['f1'].std()

result = round(A + B, 1)
print(result)

42.0


📝 30번

'f4'컬럼을 기준 내림차순 정렬과 'f5'컬럼기준 오름차순 정렬을 순서대로 다중 조건 정렬하고나서 앞에서부터 10개의 데이터 중 'f5'컬럼의 최소값 찾고, 이 최소값으로 앞에서 부터 10개의 'f5'컬럼 데이터를 변경함. 그리고 'f5'컬럼의 평균값을 계산하시오. 단 소수점 둘째자리까지 출력(셋째자리에서 반올림)

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic1.csv')

basic = basic.sort_values(['f4', 'f5'], ascending=[False, True]).reset_index(drop=True)

basic.iloc[:10, 7] = basic['f5'][:10].min()
result = round(basic['f5'].mean(), 2)
print(result)

53.63


📝 31번

'age' 컬럼의 IQR방식을 이용한 이상치 수와 표준편차x1.5 방식을 이용한 이상치 수 합을 구하시오.

  • IQR방식 : Q1 - 1.5 IQR, Q3 + 1.5 IQR에서 벗어나는 영역을 이상치라고 판단함 (Q1은 데이터의 25%, Q3는 데이터의 75% 지점임)
  • 표준편차1.5방식: 평균으로부터 '표준편차1.5'를 벗어나는 영역을 이상치라고 판단함

💻 풀이

import pandas as pd

basic = pd.read_csv('data/basic1.csv')

Q1 = basic['age'].quantile(0.25)
Q3 = basic['age'].quantile(0.75)
IQR = Q3 - Q1

outlier1 = (Q1 - 1.5 * IQR > basic['age']) | (basic['age'] > Q3 + 1.5 * IQR)

result1 = sum(outlier)  # 0

age_mean = basic['age'].mean()
age_sd = basic['age'].std()

outlier2 = (age_mean - age_sd * 1.5 > basic['age']) | (basic['age'] > age_mean + age_sd * 1.5)

result2 = sum(outlier2)  # 14

result = result1 + result2
print(result)

14

0개의 댓글