06. 결측치 제거 및 그룹 합계
# 주어진 데이터 중 basic1.csv에서 'f1'컬럼 결측 데이터를 제거하고,
# 'city'와 'f2'을 기준으로 묶어 합계를 구하고,
# 'city가 경기이면서 f2가 0'인 조건에 만족하는 f1 값을 구하시오
import numpy as np
import pandas as pd
df = pd.read_csv('/kaggle/input/bigdatacertificationkr/basic1.csv')
# 'f1'컬럼 결측치 제거
df_drop = df.dropna(subset = ['f1'])
# 'city'와 'f2' 기준으로 묶어 합계
df2 = df_drop.groupby(['city', 'f2']).sum().reset_index()
# 'city'가 경기이면서 f2가 0인 조건에 만족하는 f1
df2_cond = df2.loc[(['city'] == '경기') & (['f2'] == 0)]['f1']
print(df2_cond)
07. 값 변경 및 2개 이상의 조건
# 'f4'컬럼의 값이 'ESFJ'인 데이터를 'ISFJ'로 대체하고,
# 'city'가 '경기'이면서 'f4'가 'ISFJ'인 데이터 중 'age'컬럼의 최대값을 출력하시오!
import pandas as pd
import numpy as np
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
# 'f4'컬럼의 값이 ESFJ인 데이터를 ISFJ로 대체
# 방법3개
1. df.loc[df['f4'] == 'ESFJ', 'f4'] = 'ISFJ'
2. df['f4'] = df['f4'].replace('ESFJ', 'ISFJ')
3. df['f4'] = df['f4'].replace({'ESFJ':'ISFJ'})
# 'city'가 '경기'이면서 'f4'가 'ISFJ'인 데이터 중 'age'컬럼의 최댓값
df_cond = df.loc[(df['city'] == '경기') & (df['f4'] == 'ISFJ'), 'age'].max()
print(df_cond)
08. 누적합 그리고 보간(결측치 처리)
# 주어진 데이터 셋에서 'f2' 컬럼이 1인 조건에 해당하는 데이터의 'f1'컬럼 누적합을 계산한다.
# 이때 발생하는 누적합 결측치는 바로 뒤의 값을 채우고, 누적합의 평균값을 출력한다.
# (단, 결측치 바로 뒤의 값이 없으면 다음에 나오는 값을 채워넣는다
import pandas as pd
import numpy as np
df = pd.read_csv('/kaggle/input/bigdatacertificationkr/basic1.csv')
df2 = df.loc[df['f2'] == 1, 'f1'].cumsum()
df2 = df2.fillna(method = 'bfill').mean()
print(df2)
09. 수치형 변수 표준화
# 주어진 데이터에서 'f5'컬럼을 표준화(Standardization (Z-score Normalization))하고 그 중앙값을 구하시오
import pandas as pd
import numpy as np
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df['f5'] = scaler.fit_transform(df[['f5']])
print(df['f5'].median())
10. box-cox와 yeo-johnson
import numpy as np
import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.head(5)
# 주어진 데이터에서 20세 이상인 데이터를 추출하고 'f1'컬럼을 결측치를 최빈값으로 채운 후,
df = df[df['age'] >=20]]
df['f1'] = df['f1'].fillna(df['f1'].mode()[0])
# f1 컬럼의 여-존슨과 박스콕스 변환 값을 구하고,
# 두 값의 차이를 절대값으로 구한다음 모두 더해 소수점 둘째 자리까지 출력(반올림)하시오
from sklearn.preprocessing import power_transform
df['yeo'] = power_transform(df[['f1']], standardize = False)
df['boxcox'] = power_transform(df[['f1']], method = 'box-cox', standardize = False)
print(round(np.sum(np.abs(df['yeo'] - df['box-cox'])),2))
boxcox 또다른 방법
from scipy import stats
df['boxcox'] = stats.boxcox(df['f1'])
출처 : 퇴근후딴짓 빅데이터분석기사 실기 kaggle
https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr/data
'빅데이터 분석기사 > 작업형1' 카테고리의 다른 글
작업형1 01-05 (0) | 2025.05.05 |
---|