목차
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)
'머신러닝&딥러닝' 카테고리의 다른 글
| 머신러닝 & 딥러닝 기초 19편 | 지도 학습 vs 비지도 학습 정리 (0) | 2026.03.16 |
|---|---|
| 머신러닝 & 딥러닝 기초 18편 | 상관관계와 회귀 분석 (0) | 2026.03.16 |
| 머신러닝 & 딥러닝 기초 16편 | EDA(탐색적 데이터 분석) (0) | 2026.03.15 |
| 머신러닝 & 딥러닝 기초 15편 | EDA(탐색적 데이터 분석)와 주요 시각화 기법 (1) | 2026.03.15 |
| 머신러닝 & 딥러닝 기초 14편 | Seaborn, 히트맵, 박스플롯, 바이올린플롯 (1) | 2026.03.14 |