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

01. IQR 구하기

# 컬럼의 이상치를 찾고 이상치 데이터의 여성 수를 구하기

import numpy as np
import pandas as pd

df = pd.read_csv('')

# IQR
Q3 = df['col'].quantile(0.75)
Q1 = df['col'].quantile(0.25)
IQR = Q3 - Q1

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

# 이상치 데이터의 여성 수 구하기
cond = outler_df['Sex'] == 'female'
cond_df = outlier_df[cond]
print(len(cond_df)

 

 

02. 이상치찾기 (소수점 찾기)

# 주어진 데이터에서 이상치(소수점 나이)를 찾고 올림, 내림, 버림(절사)했을때 3가지 모두 이상치 
# 'age' 평균을 구한 다음 모두 더하여 출력하시오¶

import pandas as pd
import numpy as np

df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

# 소수점 나이찾기
# 각 값에서 1로 나눈 나머지를 구함
outlier = df['age'] %1 != 0
outlier_df = df[outlier]

#올림
ceil = np.ceil(outlier_df['age']).mean()
#내림
floor = np.floor(outlier_df['age']).mean()
#버림
trunc = np.trunc(outlier_df['age']).mean()

print(ceil + floor + trunc)

 

 

03. 결측치 처리(map활용)

 

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

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

# 결측치가 80%넘는 컬럼 찾기
print(df.isnull().sum() / df.shape[0]) #f3삭제
df = df.drop(columns="f3")

# 결측치가 있는 컬럼은 city별 중앙값으로 대체
# 도시확인
print(df[city].unique())

# 도시별 중앙값 변수에 담기
k, d, b, s = df.groupby('city')['f1'].median()

# 결측치 채우기
df['f1'] = df['f1'].fillna(df['city'].map({'경기':k, '대구':d, '부산':b, '서울':s})
print(df['f1'].isnull().sum())

print(df['f1'].mean())

 

 

04. 왜도와 첨도 구하기

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

import numpy as np
import pandas as pd

df = pd.read_csv("../input/house-prices-advanced-regression-techniques/train.csv")

skew = df['SalePrice'].skew()
kurt = df['SalePrice'].kurt()

# log1p스케일링
df[log1p] = np.log1p(df['SalePrice'])

log1p_skew = df['log1p'].skew()
log1p_kurt = df['log1p'].kurt()

print(round(skew + kurt + log1p_skew + log1p_kurt,2))

 

 

05. 조건에 맞는 데이터 표준편차 구하기

 

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

# 라이브러리 및 데이터 불러오기
import numpy as np
import pandas as pd

df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')

enfj = df.loc[df['f4'] == "ENFJ"]['f1'].std()
infp = df.loc[df['f4'] == "INFP"]['f1'].std()

print(abs(enfj - infp))

 

 

 

출처 : 퇴근후딴짓 빅데이터분석기사 실기 kaggle

https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr/data

'빅데이터 분석기사 > 작업형1' 카테고리의 다른 글

작업형1 06 - 10  (0) 2025.05.05