데이터분석/학습기록지

빅데이터분석기사 추가학습

Null to One 2025. 6. 18. 16:04

빅데이터분석기사 샘플문항이 바뀐 것 같은데, 공부했던 교재에 없는 내용들을 활용하는 문제들이 보여 관련 내용을 정리하려 합니다.

 

1. F-통계량

F-통계량은 일반적으로 두 표본집단의 표본분산의 비로 구할 수 있습니다. 어느 한 모집단에서 추출한 두 집단의 표본분산을 각각 s1, s2라고 합시다. 이때 두 분산의 비 s2/s1이 F-통계량에 해당합니다.

다시 말해, 두 표본집단의 변동성의 비율에 해당하는 개념입니다. 

 

2. 합동분산추정량

합동분산추정량을 구하기 위해서 각 표본의 자유도를 계산해야 합니다. 자유도는 각 표본의 샘플 개수에서 1을 빼주면 구할 수 있습니다.

합동분산추정량을 구하는 공식은 아래와 같습니다.

좌변의 s2p가 합동분산추정량이고, 분자는 표본집단1의 자유도*표본집단1의 분산 + 표본집단2의 자유도*표본집단2의 분산에 해당합니다. 분모는 표본집단 1과 표본집단 2의 자유도를 더한 값입니다.

 

 

3. Transform 함수

9회 기출복원을 보니 작업형 1-3에서 결측치를 채우는 과정에서 Transform 함수를 모른다면 노가다로 일일이 채워야 하는 부분이 있었습니다. 그나마 기출의 결측치는 숫자가 적었기에 망정이지, 만약 결측치가 수십 개에서 수백 개가 된다면, 그걸 비효율적으로 일일이 채울 수는 없는 노릇입니다.

따라서 Transform 함수를 활용하여 간편하게 결측치를 대체할 수 있습니다.

df = pd.DataFrame({
    '부서': ['A', 'A', 'B', 'B'],
    '점수': [80, 90, 70, 60]
})

df.groupby('부서')['점수'].mean()

예를 들기 위해, 위와 같은 데이터 프레임을 만들어주고 groupby 연산을 취해줍니다.

그 결과는 부서 A와 B에 대해, 각각의 평균점수인 85, 65가 나오게 됩니다.

만약 여기에 Transform 연산을 적용해준다면, 그 결과는 조금 달라지게 됩니다. 조금 더 자세히 말하자면, Transform 함수를 적용시 기존의 df와 동일한 길이, 동일한 인덱스를 유지하여 결과를 반환해줍니다. 같은 그룹에 속하는 행에는 해당 그룹의 평균값을 그대로 할당하는 방식이죠.

이런 식의 결과를 얻게 됩니다.

이 사실을 활용한다면 기출에서의 결측치도 조금 더 효율적인 방식으로 할당 가능할 것입니다.

 

근속연수의 결측치들에 대하여 같은 부서, 직급에 속한 이들의 근속연수의 평균값으로, 소숫점을 버리고 대체하라는 것이 문제에서의 요구 처리 방식이었는데요, 여기에 transform을 적용한다면 다음과 같이 해볼 수 있겠습니다.

 

group_mean = df(['부서', '직급'])['근속연수'].transform(

               lambda x: x.fillna(int(x.mean()))

)

df['근속연수'] = df['근속연수'].fillna(group_mean)

 

이렇게 하면 일일이 df.iloc이나 df.loc으로 노가다 작업을 하지 않아도 됩니다. 물론 문제 푸는 와중에 방법이 기억안난다면 어쩔 수 없이 일일이 해야겠지만 말이죠.

 

4. pivot_table

melt의 경우 wide frame을 long frame 형태의 데이터로 바꾸어주는 과정이었습니다. pivot_table은 어느 정도 melt와 반대 느낌의 작업을 수행해주는 함수라고 생각해보면 편합니다.

이런 식으로 기존의 long format을 wide format으로 바꿔주는 과정에서 index, columns, 그리고 들어갈 값을 지정해줄 수 있습니다. 스샷에는 없지만 aggfunc를 설정하여 value에 해당하는 실적을 어떻게 계산할지 정해줄 수 있습니다. 평균을 내고 싶으면 aggfunc='mean' 이렇게 설정해주면 됩니다.