본문 바로가기
IT&게임/빅데이터분석기사(빅분기)

빅데이터 분석기사 - 1유형 예제문제 학습하기(결측치)

by 푸루루 2024. 6. 2.
728x90
반응형

문제1

  • f1컬럼의 결측치는 중앙 값으로 대체하고
  • 나머지 결측치가 있는 데이터(행)을 모두 제거하고,
  • 앞에서부터 70% 데이터 중 views 컬럼의 3사분위 수에서 1사분위 수를 뺀 값을 구하시오
  • (단, 데이터 70% 지점은 정수형(int) 변환)

 

👍결측치를 확인하는 방법 ➡️ df.isnull().sum()

👍 결측치 처리 후 확인 개수 확인하기 ➡️ print(df.shape)

👍 결측치가 있는 행 모두 삭제하기 ➡️ df.dropna()

👍 사분위수 구하기  ➡️ df.quantile(.25)

👍 데이터의 70% 선택하기 ➡️ df = df[:len(df)*0.7]

 

# your code
import pandas as pd 
import numpy as np

df = pd.read_csv("members.csv")

# 결측치를 확인하는 방법
df.isnull().sum() 

# f1 컬럼의 결측치는 중앙값으로 대체한다.
# df.info() 
df["f1"] = df["f1"].fillna(df["f1"].median())


# 나머지 결측치가 있는 데이터 행을 모두 제거해 보자
print(df.shape)
df = df.dropna()
print(df.shape) # 앞뒤로 두면 결측치의 개수를 체크하자 


# 앞에서 부터 70%의 데이터를 선택함 
df = df[:int(len(df)*0.7)]

Q1 =df["views"].quantile(.25) #1분위수 
Q3 = df["views"].quantile(.75) #3분위수 

print(Q3-Q1)

 

문제2

  • 주어진 데이터에서 결측치가 30%이상 되는 컬럼을 찾고 해당 컬럼에 결측치가 있는 데이터(행)를 삭제 함.
  • 그리고 30% 미만, 20% 이상인 결측치가 있는 컬럼은 최빈값으로 값을 대체하고
  • 'f3'컬럼의 'gold' 값을 가진 데이터 수를 출력하세요!

👍 특정 결측치를 삭제하기 ➡️ df.dropna(subset="column")

👍 최빈값 구하기 ➡️ df.mode()[0]

👍 결측치를 다른 값으로 대체하기 ➡️ df.fillna("something")

 

# your code
import pandas as pd
import numpy as np

df=pd.read_csv("members.csv")


print(df.isnull().sum()) # na 값을 보여줌 
len(df)*0.3 # f1삭제, f3최빈값 

df.shape
df=df.dropna(subset=['f1']) #특정 컬럼을 쓸때는 subset
df.shape

df['f3']= df['f3'].fillna(df['f3'].mode()[0]) #최빈값에는 [0] 해줘야해 ! 

#조건절을 넣어 길이를 세어보자 
condition = df['f3'] == 'gold'
print(len(df[condition])) # 특히 시험은 print 문으로 써줘야함

 

문제3

  • views 컬럼에 결측치가 있는 데이터(행)을 삭제하고,
  • f3 컬럼의 결측치는 0, silver는 1, gold는 2, vip는 3 으로 변환한 후 총 합을 정수형으로 출력하시오

👍 결측치를 replace를 활용해서 채우기 ➡️ df["column"] = df[column].replace(np.nan,0

 

# your code
import pandas as pd 
import numpy as np

df=pd.read_csv("members.csv")

#결측치의 개수를 알아보는 함수 , isnull 뒤에는 sum함수를 같이 써줘야함 
# print(df.isnull().sum())

print(df.shape)
df=df.dropna(subset="views")
print(df.shape) # 개수가 4개 줄었다. 

#----------------------------------------------------------

# replace로 풀기 
df['f3']= df['f3'].replace(np.nan,0).replace('silver',0) #변경전/변경후

# map을 활용한 방법, dict를 사용해야해
dict_list={np.nan:0, 'silver':1, 'gold':2, 'vip':3}
df['f3'] =df['f3'].map(dict_list)

# 조건을 활용하는 방법
sum(df['f3'] == 'silver')*1 +sum(df['f3']=='gold')
728x90

댓글