본문 바로가기

빅데이터 분석기사

[빅데이터 분석기사] 작업형 1유형(T6~8) - 값 대체, 누적합

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

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

df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
print(df.shape)  # (100,8)
print(df.head())

# f1컬럼 결측치 제거
df = df[df['f1'].notnull()]  # df = df[~df['f1'].isnull()]
df.shape  # (69,8)

# 그룹 합계 계산
df2 = df.groupby(['city','f2']).sum()
df2

# 조건에 맞는 값 출력
print(df2['f1']['경기'][0])  # print(df2.iloc[0]['f1'])

- notnull 함수 또는 '~' 연산자(NOT)와 isnull 함수를 사용하여 f1 컬럼의 결측치를 제거합니다.

- 그룹으로 합계를 계산하고 인덱싱하여 조건에 만족하는 값을 구합니다.

 

 

 

 

#7. 'f4'컬럼의 값이 'ESFJ'인 데이터를 'ISFJ'로 대체하고, 'city'가 '경기'이면서 'f4'가 'ISFJ'인 데이터 중 'age'컬럼의 최대값을 출력하시오.

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

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

# ESFJ 값을 가진 데이터 확인
df[df['f4'] == 'ESFJ']

# 값 변경하기
df['f4'] = df['f4'].replace('ESFJ', 'ISFJ')  # df.loc[df['f4']=='ESFJ', 'f4'] = 'ISFJ'

# ESFJ 값을 가진 데이터 확인
df[df['f4'] == 'ESFJ']

# 2개의 조건에 맞는 값
df[(df['f4'] == 'ISFJ') & (df['city'] == '경기')]

# 2개의 조건에 맞는 값중 age컬럼의 최대값
df[(df['f4'] == 'ISFJ') & (df['city'] == '경기')]['age'].max()

- replace 함수를 사용하여 값을 변경하거나 인덱싱으로 값을 변경합니다.

- 조건에 맞는 값 중 age컬럼의 최대값을 구합니다.

 

 

 

#8. 주어진 데이터 셋에서 'f2' 컬럼이 1인 조건에 해당하는 데이터의 'f1'컬럼 누적합을 계산한다. 이때 발생하는 누적합 결측치는 바로 뒤의 값을 채우고, 누적합의 평균값을 출력한다. (단, 결측치 바로 뒤의 값이 없으면 다음에 나오는 값을 채워넣는다)

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

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

# 조건에 따른 누적합
df2 = df[df['f2']==1]['f1'].cumsum()
df2

# 결측치 처리 (뒤에 나오는 값으로 채움)
df2 = df2.fillna(method = 'bfill')
df2

# 평균 출력
print(df2.mean())

- cumsum 함수를 사용하여 누적합을 계산합니다.

- fillna 함수를 사용하여 결측치 처리를 한 뒤, 평균을 구합니다.

 

 

+) fillna 함수의 method

pad or ffill: 이전의 유효한 값으로 결측값을 채웁니다.           -> df.fillna(method='ffill')

backfill or bfill: 다음의 유효한 값으로 결측값을 채웁니다.     -> df.fillna(method='bfill')

딕셔너리(dictionary): 열마다 다른 값으로 채웁니다.             -> df.fillna({'A': 0, 'B': 99})

 

 

 


참고 링크

https://www.kaggle.com/code/agileteam/py-t1-6-expected-questions

 

[py] T1-6. 결측치 제거 및 그룹 합계 Expected Questions

Explore and run machine learning code with Kaggle Notebooks | Using data from Big Data Certification KR

www.kaggle.com

https://www.kaggle.com/code/agileteam/py-t1-7-2-expected-questions

 

[py] T1-7. 값 변경 및 2개 이상의 조건 Expected Questions

Explore and run machine learning code with Kaggle Notebooks | Using data from Big Data Certification KR

www.kaggle.com

https://www.kaggle.com/code/agileteam/py-t1-8-expected-questions

 

[py] T1-8. 누적합 그리고 보간(결측치 처리) Expected Questions

Explore and run machine learning code with Kaggle Notebooks | Using data from Big Data Certification KR

www.kaggle.com

 

 

참고 링크에서 직접 문제를 풀어보실 수 있습니다.

 

감사합니다.