2025년 8월 15일 금요일

회귀분석 참고 web

https://meticulousdev.tistory.com/entry/%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80-%EB%B6%84%EC%84%9D%EC%97%90%EC%84%9C-%EC%8B%A0%EB%A2%B0-%EA%B5%AC%EA%B0%84Confidence-Interval%EA%B3%BC-%EC%98%88%EC%B8%A1-%EA%B5%AC%EA%B0%84Prediction-Interval


https://heoni00.github.io/categories/bigboon

2025년 8월 14일 목요일

[Python] Pandas Dataframe의 groupby & agg 메서드 (+ Dictinary 자료형 활용)

 groupby 메서드는 dataframe의 데이터를 그룹화해주고 agg 메서드는 그룹화된 데이터에 대해 집계함수를 적용해주는 메서드이다. 


집계 함수 종류는

mean (평균), sum (합계), count (개수), max (최대값), min (최소값), std (표준편차), var (분산)이 있다. 


일반적인 용법은

df.groupby('column_name').agg(agg_func)

여기서 column_name이 그룹화할 기준 컬럼이 되고 agg_func이 집계함수가 된다.


예시)

import pandas as pd


data = {

'category' : ['A', 'A', 'B', 'B', 'C', 'C'],

'value1' : [1,2,3,4,5,6],

'value2': [10,20,30,40,50,60]

}

df = pd.DataFrame(data)


grouped_df = df.groupby('category').agg({'value1':'mean', 'value2':'sum'})

print(grouped_df)


output:

category    value1    value2

A                1.5            30

B                3.5            70

C                5.5            110


groupby 메서드 & agg 메서드를 사용하여 'category' 컬럼을 기준으로 그룹화하고, 'value1', 'value2' 컬럼에 대해 각각 평균과 합계를 계산한 결과이다.


agg 매서드에 딕셔너리를 전달하면 각 컬럼에 대한 집계함수를 구할 수 있다.


예시 2) lambda 함수 활용

grouped_df = df.groupby('category').agg(lambda x : x.max() - x.min())

print(grouped_df)


이렇게 lambda함수를 활용하여 사용자 정의 집계 함수를 적용할 수도 있다. 


예시 3) 딕셔너리 unpacking

** 인자는 딕셔너리의 각 element를 전달할 때 사용한다. 즉 dictionary의 element들을 각각 분리하여 전달한다.


agg_dict = {'value1' : 'mean', 'value2' : 'sum'}

grouped_df = df.groupby('category').agg(**agg_dict)


이 때 위 예시에서 
grouped_df = df.groupby('category').agg({'value1':'mean', 'value2':'sum'})
이렇게 직접 agg매서드 내에 딕셔너리를 전달할 때는 dictionary로 전달이 가능하나

agg_dict처럼 dictionary를 변수로 받아 전달하는 경우 **를 붙여 dictionary unpack이 필요하다.
아닌 경우 아래와 같은 에러가 나타나게 되는데


TypeError: agg() missing 1 required positional argument: 'func'

이 에러는 agg매서드가 agg_dict딕셔너리를 함수로 인식하지 못하고, 대신 func라는 인자를 요구하게 된다. (... 잘은 이해는 안돼지만 그렇다고 한다).


예시 4) 딕셔너리 for문으로 정의하기

elements = ['value1', 'value2']

agg_dict = {col : 'mean' for col in elements}

딕셔너리 활용 예시인데 모든 column에 대한 집계함수를 mean으로 받고자 하면 위와같이 for문을 이용하여 dictionary를 정의할 수 있다.

이후

grouped_df = df.groupby('category').agg(**agg_dict)

하면 집계함수를 구할 수 있다.