머신러닝&딥러닝

머신러닝 & 딥러닝 기초 17편 | 데이터 그룹화와 집계(Groupby, Pivot Table)

SecLogs YJ 2026. 3. 16. 00:13
목차

1. 그룹화와 집계란(Grouping & Aggregation)
2. pandas groupby()
  2-1 예제 데이터 생성
  2-2 그룹화 기본 사용법
  2-3 여러 집계 함수 적용
3. 피벗 테이블(Pivot Table)
 3-1 피벗 테이블 개념
 3-2 피벗 테이블 생성
4. 데이터 비교 분석
  4-1 기술 통계 비교
  4-2 시각화 비교
  4-3 상관관계 분석
  4-4 차이 분석

 

1. 그룹화와 집계란(Grouping & Aggregation)

데이터 분석에서는 데이터를 특정 기준으로 묶어 요약하는 작업이 자주 수행된다.

이 과정을 그룹화(Grouping)와 집계(Aggregation)라고 한다.

 

예를 들어,

  • 부서별 평균 급여
  • 카테고리별 매출 합계
  • 지역별 판매량

과 같은 분석을 수행할 때 사용된다.

 

즉, 데이터를 특정 기준으로 분류한 후, 각 그룹에 대해 통계 계산을 수행하는 과정이다.

 


2. pandas groupby()

pandas에서는 groupby() 함수를 이용하여 그룹화를 수행할 수 있다.

 

2-1 예제 데이터 생성

이번 예제에서는 온라인 쇼핑몰 판매 데이터를 사용한다.

 

예제 1) 데이터 생성 예시

import pandas as pd

data = {
    'Product': ['Laptop', 'Laptop', 'Phone', 'Phone', 'Tablet', 'Tablet'],
    'Category': ['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Electronics', 'Electronics'],
    'Region': ['Seoul', 'Busan', 'Seoul', 'Busan', 'Seoul', 'Busan'],
    'Sales': [1200, 1000, 800, 750, 600, 650]
}

df = pd.DataFrame(data)

print(df)

 

 

예제 1) 출력 결과

  Product     Category Region  Sales
0  Laptop  Electronics  Seoul   1200
1  Laptop  Electronics  Busan   1000
2   Phone  Electronics  Seoul    800
3   Phone  Electronics  Busan    750
4  Tablet  Electronics  Seoul    600
5  Tablet  Electronics  Busan    650


2-2 그룹화 기본 사용법

지역별 총 판매량을 계산해 보자.

 

이 예제에서는 지역(Region)을 기준으로 데이터를 그룹화하고, 각 지역의 총 판매량(Sales)을 계산한다.

 

예제 2) 그룹화 예제

grouped = df.groupby('Region')['Sales'].sum()

print(grouped)

 

  • groupby('Region') : Region 칼럼을 기준으로 데이터를 그룹화하는 함수
  • ['Sales'] : Sales 칼럼만 선택하겠다
  • .sum() : 각 그룹의 값을 모두 더하는 집계 함수

 

예제 2) 출력 결과

출력 결과 각 지역의 총 판매량이 출력된다.

이 데이터를 통해 서울 지역의 판매량이 부산보다 높다는 것을 확인할 수 있다.

Region
Busan    2400
Seoul    2600
Name: Sales, dtype: int64

 

 

2-3 여러 집계 함수 적용

여러 집계 연산도 동시에 수행할 수 있다.

 

예제 3) 여러 집계 연산 예시

df.groupby('Region')['Sales'].agg(['sum','mean','max'])

 

예제 3) 출력 결과

	sum	mean		max
Region			
Busan	2400	800.000000	1000
Seoul	2600	866.666667	1200

 

이를 통해 총 판매량, 평균 판매량, 최대 판매량을 한 번에 확인할 수 있다.

 

3. 피벗 테이블(Pivot Table)

피벗 테이블(Pivot Table)은 데이터를 행과 열 기준으로 재구성하여 요약하는 기능이다.

 

3-1 피벗 테이블 개념

같은 데이터를 사용하여 피벗 테이블을 만들어 보자

 

예제 1) 데이터 생성 예시

import pandas as pd

data = {
    'Product': ['Laptop', 'Laptop', 'Phone', 'Phone', 'Tablet', 'Tablet'],
    'Category': ['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Electronics', 'Electronics'],
    'Region': ['Seoul', 'Busan', 'Seoul', 'Busan', 'Seoul', 'Busan'],
    'Sales': [1200, 1000, 800, 750, 600, 650]
}

df = pd.DataFrame(data)

print(df)

 

 

예제 1) 출력 결과

  Product     Category Region  Sales
0  Laptop  Electronics  Seoul   1200
1  Laptop  Electronics  Busan   1000
2   Phone  Electronics  Seoul    800
3   Phone  Electronics  Busan    750
4  Tablet  Electronics  Seoul    600
5  Tablet  Electronics  Busan    650

 

3-2 피벗 테이블 생성

예제 2) 피벗 테이블 생성

 

이 예제에서는 '제품별 판매량은 지역마다 얼마나 다른가'에 대해 알아보고자 한다.

pivot = pd.pivot_table(
    df,
    values='Sales',
    index='Product',
    columns='Region',
    aggfunc='sum'
)

print(pivot)

 

  • pd.pivot_table() : 데이터를 행과 열 기준으로 재구성하여 요약하는 함수
  • 기본 구조 : 
pd.pivot_table(데이터프레임,
               values=분석할 값,
               index=행 기준,
               columns=열 기준,
               aggfunc=집계 함수)

 

  • df : 피벗 테이블을 생성할 원본 데이터프레임
  • values='Sales' : values는 분석할 데이터 값으로, 이 예제에서는 Sales 데이터를 기반으로 분석한다.
  • index='Product' : index는 행(row)에 표시할 기준으로, 이 예제에서는 Product를 기준으로 행이 생성된다.
  • columns='Region' : coumns는 열(column)에 표시할 기준으로, 이 예제에서는 Region을 기준으로 열이 생성된다.
  • aggfunc='sum' : aggfunc는 집계 함수로, 여기서는 sum을 사용하여 각 그룹의 판매량 합계를 계산한다.

 

예제 2) 출력 결과

Region   Busan  Seoul
Product              
Laptop    1000   1200
Phone      750    800
Tablet     650    600

 

이 결과를 통해, 제품별/지역별 판매량을 비교할 수 있다.

 

4. 데이터 비교 분석

데이터 분석에서는 두 개의 데이터 집합을 비교하는 작업이 중요하다.

이를 통해, 변화 추세, 차이, 관계를 확인할 수 있다.

4-1 기술 통계 비교

기술 통계는 데이터의 기본적인 특징을 숫자로 요약하는 방법이다.

예를 들어, 다음과 같은 정보를 확인할 수 있다.

  • 평균
  • 최소값
  • 최대값
  • 표준편차
  • 중앙값

이를 통해 두 데이터 집합의 전체적인 특성을 비교할 수 있다.

 

sales_2023 = pd.Series([100,150,200,250])
sales_2024 = pd.Series([120,170,210,300])

print(sales_2023.describe())
print(sales_2024.describe())
  • describe() : 기본 통계 정보를 계산하는 함수로, 다음 값을 계산한다.
항목 의미
count  데이터 개수
mean 평균
std 표준편차
min 최소값
25% 1사분위수
50% 중앙값
75% 3사분위수
max 최대값

 

4-2 시각화 비교

숫자로 비교하는 것보다 그래프로 비교하면 데이터 패턴을 더 쉽게 이해할 수 있다.

 

여기서는 분기별 매출 변화를 비교한다.

import matplotlib.pyplot as plt

quarter = ['Q1','Q2','Q3','Q4']
sales1 = [100,150,200,250]
sales2 = [120,170,210,300]

plt.plot(quarter, sales1, marker='o', label='2023')
plt.plot(quarter, sales2, marker='o', label='2024')

plt.title("연도별 매출 비교")
plt.xlabel("분기")
plt.ylabel("매출")

plt.legend()

plt.show()

 

  • quarter : 분기정보
  • sales1, sales 2 : 2023/2024 매출 정보
  • plt.plot() : 선 그래프를 그리는 함수

 

4-3 상관관계 분석

두 변수 간 관계를 확인하기 위해 상관계수(correlation)를 사용할 수 있다.

 

예를 들어, '공부시간이 많을수록 시험점수가 높다'는 관계가 있으면 양의 상관관계라고 한다.

 

상관계수 범위

  • 1 : 완전한 양의 상관관계
  • 0 : 관계없음
  • -1 : 완전한 음의 관계

 

예제

import numpy as np

data1 = [100,150,200,250]
data2 = [120,170,210,300]

correlation = np.corrcoef(data1, data2)[0,1]

print(correlation)

 

  • np.corrcoef() : 두 데이터의 상관계수 행렬을 계산한다.
  • [0,1] : 상관계수 행렬에서 data1과 data2 관계만 가져온다.
  • 예) 결과가 0.98인 경우, 두 데이터가 매우 강한 양의 상관관계를 가짐을 의미한다.
    • 즉, data1이 증가하면 data2도 증가한다는 패턴이 있다는 의미이다.

 

4-4 차이 분석

차이 분석은 두 데이터 간 변화량을 계산하는 방법이다.

 

예시

difference = [b-a for a,b in zip(data1,data2)]

print(difference)

 

  • zip() : 두 데이터를 짝지어주는 함수

예시

data1 = [100,150,200,250]
data2 = [120,170,210,300]

 

zip 결과

(100,120)
(150,170)
(200,210)
(250,300)

👉 머신러닝 & 딥러닝 기초 18편 | 상관관계와 회귀 분석