본문 바로가기
📝 자격증/빅데이터 분석기사

[빅분기 실기 준비] T1 2회 기출유형 Python (결측치 → 중앙값으로 대체, 70% 데이터 추출)

by b5ingbo2ng 2024. 6. 9.
강의 영상 : https://youtu.be/Jh3rJaZlEg0
데이터 위치 "../input/titanic/train.csv"

 

문제 1

  • 데이터셋(basic1.csv)의 'f5' 컬럼을 기준으로 상위 10개의 데이터를 구하고,
  • 'f5'컬럼 10개 중 최소값으로 데이터를 대체한 후,
  • 'age'컬럼에서 80 이상인 데이터의'f5 컬럼 평균값 구하기

 

📍최종 나의 코드

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

# 'f5' 컬럼을 기준으로 상위 10개의 데이터를 구하기
print(df.sort_values('f5', ascending=False).head(10))

# 'age'컬럼에서 80 이상인 데이터의'f5 컬럼 평균값 구하기
df[df['age']>=80]['f5'].mean()

 

  • 'f5'컬럼 10개 중 최소값으로 데이터를 대체한 후, => 상위 10개를, 10개 중의 최솟값으로 변경해라는 뜻
# 최소값 찾기 : 91.297791
min = df['f5'][:10].min()
min 

df.iloc[:10,-1] = min
df.head(10)

 

 


 

문제 2

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

 

📍최종 나의 코드

import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.info()

# 앞에서 순서대로 70% 데이터만 활용
temp = df.iloc[:70]

# 결측치 확인
temp['f1'].isnull().sum()

# 'f1'컬럼 결측치를 중앙값으로 채우기 전후의 표준편차를 구하고 차이 구하기
before = temp['f1'].std()

a = temp['f1'].median()
temp.loc[temp['f1'].isnull(),'f1'] = a
after = temp['f1'].std()

print(before-after)

 

  • 내가 원하는 값으로 변경하고 싶을 때, 원하는 조건에다가 fillna만 하면 값이 수정 안됨.
    • temp[temp['f1'].isnull()]['f1'].fillna(a)  ❌
  • 그냥 컬럼에다가 바로 fillna하는 건 가능
    • temp['f1'].fillna(a) ⭕️
  • 옳은 정답
    • ① temp.loc[temp['f1'].isnull(),'f1'] = a ⭕️
      • loc를 활용해서 원하는 조건의 행, 컬럼명 → 새로 넣고싶은 값 넣기
    • ② data70.fillna(value=med) ⭕️
      • fillna에서 (value=med) 옵션값 활용

 

📍해설

데이터 나누기 방법 1 : iloc 활용

data70 = df.iloc[:70]
data30 = df.iloc[70:]

 

 

데이터 나누기 방법 2 : np.split 활용

data70, data30 = np.split(df, [int(.7*len(df))])

 

 

데이터 나누기 방법 3 : 랜덤으로 샘플링해야할 때 → df.sample(frac=0.7) 활용

data70 = df.sample(frac = 0.7)
data70 = df.drop(data70.index)

index를 drop 하는 이유. 인덱스명이 랜덤으로 선택되면서 더러워져서