Data Engineering/python

EP17 | 고급 Python 활용 #6 | Pandas를 활용한 고급 데이터 분석

ygtoken 2025. 3. 19. 23:01
728x90

이 글에서 다루는 개념

Pandas는 대용량 데이터를 효율적으로 처리할 수 있는 강력한 라이브러리입니다.
이번 글에서는 다음 내용을 학습합니다.

  • 그룹화(GroupBy) 및 집계(Aggregation) 연산
  • 피벗 테이블(Pivot Table) 활용
  • 데이터 병합(Merge)과 결합(Concat)
  • 데이터 시각화(Matplotlib 연동)

1️⃣ 그룹화(groupby()) 및 집계(agg())

📌 그룹화(GroupBy)란?

  • 특정 열을 기준으로 데이터를 그룹화하여 요약하는 기능
  • mean(), sum(), count() 등의 집계 함수와 함께 사용
import pandas as pd

data = {
    "Category": ["A", "B", "A", "B", "A", "B"],
    "Sales": [100, 200, 150, 300, 120, 250]
}

df = pd.DataFrame(data)

# 카테고리별 총합 계산
grouped = df.groupby("Category").sum()
print(grouped)

 

📌 출력 결과

          Sales
Category       
A           370
B           750

🔹 여러 개의 집계 함수 적용 (agg())

grouped = df.groupby("Category").agg({"Sales": ["sum", "mean", "max"]})
print(grouped)

 

📌 출력 결과

          Sales              
            sum   mean  max
Category                   
A          370  123.3  150
B          750  250.0  300

2️⃣ 피벗 테이블(pivot_table()) 활용

📌 피벗 테이블이란?

  • 엑셀의 피벗 테이블과 유사
  • 특정 열을 기준으로 데이터를 요약하여 출력
data = {
    "Date": ["2024-03-01", "2024-03-01", "2024-03-02", "2024-03-02"],
    "Category": ["A", "B", "A", "B"],
    "Sales": [100, 200, 150, 250]
}

df = pd.DataFrame(data)

# 피벗 테이블 생성
pivot = df.pivot_table(index="Date", columns="Category", values="Sales", aggfunc="sum")
print(pivot)

 

📌 출력 결과

Category        A      B
Date                   
2024-03-01  100.0  200.0
2024-03-02  150.0  250.0

3️⃣ 데이터 병합(merge())과 결합(concat())

📌 두 개의 데이터프레임 병합 (merge())

  • SQL의 JOIN 연산과 유사한 방식으로 데이터프레임 병합 가능
df1 = pd.DataFrame({"ID": [1, 2, 3], "Name": ["Alice", "Bob", "Charlie"]})
df2 = pd.DataFrame({"ID": [1, 2, 3], "Score": [85, 90, 95]})

merged = pd.merge(df1, df2, on="ID")  # ID 기준으로 병합
print(merged)

 

📌 출력 결과

   ID    Name  Score
0   1   Alice     85
1   2     Bob     90
2   3  Charlie     95

📌 데이터프레임 수직 결합 (concat())

df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})

concatenated = pd.concat([df1, df2], ignore_index=True)
print(concatenated)

 

📌 출력 결과

   A  B
0  1  3
1  2  4
2  5  7
3  6  8

4️⃣ 데이터 시각화 (matplotlib 연동)

📌 Pandas는 matplotlib과 연동하여 데이터를 쉽게 시각화할 수 있음

📌 설치 (matplotlib가 없을 경우)

pip install matplotlib
import matplotlib.pyplot as plt

# 데이터프레임 생성
df = pd.DataFrame({"Category": ["A", "B", "C"], "Sales": [100, 200, 150]})

# 바 차트 시각화
df.plot(kind="bar", x="Category", y="Sales", legend=False)
plt.title("Sales by Category")
plt.ylabel("Sales")
plt.show()

 

📌 출력 결과

  • 카테고리별 매출을 바 차트(막대 그래프)로 표시

📌 실전 문제: Pandas 고급 데이터 분석 연습하기


문제 1: 그룹화(groupby())를 사용하여 카테고리별 평균 매출 계산하기

📌 데이터프레임에서 Category를 기준으로 평균 매출을 구하세요.

import pandas as pd

data = {
    "Category": ["A", "B", "A", "B", "A", "B"],
    "Sales": [100, 200, 150, 300, 120, 250]
}

df = pd.DataFrame(data)
# 🔽 여기에 코드 작성
grouped = df.groupby("Category").mean()
print(grouped)

문제 2: pivot_table()을 사용하여 날짜별 카테고리별 매출 요약하기

📌 각 날짜별 카테고리(A, B)별 매출을 합산하여 피벗 테이블로 표현하세요.

# 🔽 여기에 코드 작성
pivot = df.pivot_table(index="Date", columns="Category", values="Sales", aggfunc="sum")
print(pivot)

문제 3: merge()를 사용하여 두 개의 데이터프레임 병합하기

📌 학생 ID를 기준으로 이름과 점수를 병합하세요.

df1 = pd.DataFrame({"ID": [1, 2, 3], "Name": ["Alice", "Bob", "Charlie"]})
df2 = pd.DataFrame({"ID": [1, 2, 3], "Score": [85, 90, 95]})
# 🔽 여기에 코드 작성
merged = pd.merge(df1, df2, on="ID")
print(merged)

문제 4: matplotlib을 사용하여 데이터 시각화

📌 카테고리별 매출 데이터를 막대 그래프로 표현하세요.

import matplotlib.pyplot as plt
# 🔽 여기에 코드 작성
import matplotlib.pyplot as plt

df = pd.DataFrame({"Category": ["A", "B", "C"], "Sales": [100, 200, 150]})

df.plot(kind="bar", x="Category", y="Sales", legend=False)
plt.title("Sales by Category")
plt.ylabel("Sales")
plt.show()

 

728x90