# 기본데이터
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를 기준으로 위아래가 이상치가 아니라 평균-이상치 의 최소 , 최대의 범위에서 구해야한다는점이다!!
'자격증 > [빅분기] 빅데이터분석기사' 카테고리의 다른 글
[작업형3] 단일표본검정, 대응표본검정은 df['']를쓰고 독립표본검정은 데이터프레임으로 왜 안받을까? (0) | 2024.11.26 |
---|---|
[기출] 작업형 1 (0) | 2024.11.21 |
[작업형3] 이원 분산 분석 실습 + 심화 (0) | 2024.11.19 |
[작업형2] roc_acu_score 에러. (0) | 2024.11.18 |
[작업형3] 일원분산분석 실습 + 심화실습 (0) | 2024.11.17 |