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

[기출2] 풀이 코드

by 바다의 공간 2024. 11. 20.

# 기본데이터 

import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p1/members.csv")
df

 


 

문제1 주어진 데이터셋(members.csv)의 'views' 컬럼 상위 10개 데이터를 상위 10번째 값으로 대체한 후 'age'컬럼에서 80 이상인 데이터의 'views' 컬럼 평균값 구하기

풀이 방향

1. views컬럼 상위 10개 데이터 -> 상위 10번째 값 대체

-> 이걸 하기 위해서는 sort_values()를 사용하고 ascending=False를 해야합니다.

 

왜 상위를 하려면 ascending =Fasle를 해야되냐면 

생각을 해보자구요?! 그냥 sort_values를 하게되면 오름차순이 기본이 되니까 가장 낮은 숫자가 첫 줄에뜨겠죠?

그러면 상위10개 데이터가 아니라 하위 10개의 데이터가 되는거겠죠?

그래서 ! ascending=False를 해야합니다.

df = df.sort_values('views', ascending=False)
df.head(10)

# 'views' 컬럼 상위 10개 데이터를 상위 10번째 값으로 대체
df.iloc[:10, -1] = 9690 

df.head(12)

# 'age'컬럼에서 80 이상인 데이터의 'views' 컬럼 평균값 구하기
# 5674.04347826087 강사님 답

cond = df['age']>=80
print(df[cond]['views'].mean())

 

 

 

 

 문제2 주어진 데이터셋(members.csv)의 앞에서부터 순서대로 80% 데이터만 활용해 'f1'컬럼 결측치를 중앙값으로 채우기 전 후의 표준편차를 구하고, 두 표준편차 차이 계산하기 (단, 표본표준편차 기준, 두 표준편차 차이는 절대값으로 계산) 

풀이과정

여기서는 먼저 순서대로 80%을 어떻게 범위설정을 하느냐가 문제였는데

shape를 해보니 100개로 예쁘게 되어있길래 그냥 :80까지만 썼다.

그렇지만 컬럼이 많은 경우에는 80%를 정확하게 구해야하기때문에 어떻게 나눠야하는지를 확실하게 알아둬야할것같다.

 

표준편차는 std()로 중앙값 채우기 전과 후를 따로따로 변수를 지정해주어야합니다.

 

# 앞에서부터 순서대로 80% 데이터만 활용
df = df[:80]

# 'f1'컬럼 결측치를 중앙값으로 채우기 전 std
#20.574853076621935
a = df['f1'].median()
# print(a)
# 중앙값 68

std_1 = df['f1'].std()
# print(std_1)

# 'f1'컬럼 결측치를 중앙값으로 채운 후  std
# 17.010788646613275
df['f1']=df['f1'].fillna(a)
std_2 = df['f1'].std()
print(std_2)

# 두 표준편차 차이 계산하기 (단, 표본표준편차 기준, 두 표준편차 차이는 절대값으로 계산)
#3.56406443000866
#3.564064430008667
print(std_1 - std_2)

 

문제3 주어진 데이터셋(members.csv)의 'age'컬럼의 이상치를 모두 더하시오! 단, 평균으로부터 '표준편차*1.5'를 벗어나는 영역을 이상치라고 판단함

문제해결방향

 

이상치를 IQR로만 생각했었는데 그러는것이 아니라 이상치의 영역을 확실히 준다는것을 알아야한다!

그래서 나는 M과 S로 각각 나누고 이상치 기준을 E로 잡았다.

 

이렇게 하면 약 45가 나오게 되는데 45를 기준으로 위아래가 이상치가 아니라 평균-이상치 의 최소 , 최대의 범위에서 구해야한다는점이다!!