openpyxl은 파이썬(Python) 환경에서 엑셀 파일을 자유롭게 다룰 수 있게 해주는 대표적인 라이브러리입니다. 이 라이브러리를 활용하면 엑셀 파일의 읽기·쓰기는 물론, 산술 연산과 데이터 처리, 그리고 차트(그래프) 작성까지 프로그래밍 방식으로 수행할 수 있습니다.
openpyxl 설치하기
openpyxl은 파이썬 기본 패키지에 포함되어 있지 않으므로, 먼저 pip를 통해 설치해야 합니다.
pip install openpyxl
버블 차트(Bubble Chart)란?
버블 차트는 일반 산점도(scatter plot)를 확장한 형태로, 각 데이터 점을 원(거품)의 크기로 표현하여 세 가지 변수(X값, Y값, 크기)를 동시에 시각화할 수 있는 차트입니다. openpyxl의 openpyxl.chart 서브모듈에는 차트 생성에 필요한 BubbleChart, Reference, Series 등의 클래스가 포함되어 있습니다.
예제 코드
아래 코드는 새 워크북을 생성하고, 제품 수·매출액·시장 점유율 데이터를 입력한 뒤, 이를 바탕으로 버블 차트를 만들어 엑셀 시트에 삽입하는 전체 과정을 보여줍니다.
# openpyxl 모듈 임포트
import openpyxl
# openpyxl.chart 서브모듈에서 BubbleChart, Reference, Series 클래스 임포트
from openpyxl.chart import BubbleChart, Reference, Series
# Workbook() 함수를 호출해 새로운 빈 워크북 객체 생성
wb = openpyxl.Workbook()
# active 속성을 통해 활성 시트 가져오기
sheet = wb.active
rows = [
("Number of Products", "Sales in USD", "Market share"),
(14, 12200, 15),
(20, 60000, 33),
(18, 24400, 10),
(22, 32000, 42),
]
# 각 행의 내용을 활성 시트의 1열, 2열, 3열에 순서대로 기록
for row in rows:
sheet.append(row)
# BubbleChart 클래스 객체 생성
chart = BubbleChart()
# 차트에 사용할 데이터 참조(Reference) 정의
xvalues = Reference(sheet, min_col=1, min_row=2, max_row=5)
yvalues = Reference(sheet, min_col=2, min_row=2, max_row=5)
size = Reference(sheet, min_col=3, min_row=2, max_row=5)
# 첫 번째 데이터 시리즈 생성
series = Series(values=yvalues, xvalues=xvalues, zvalues=size, title="2013")
# 차트 객체에 시리즈 추가
chart.series.append(series)
# 차트 제목 설정
chart.title = "BUBBLE-CHART"
# x축 제목 설정
chart.x_axis.title = "X_AXIS"
# y축 제목 설정
chart.y_axis.title = "Y_AXIS"
# 차트를 시트에 추가 (차트의 왼쪽 상단 모서리가 E2 셀에 고정됨)
sheet.add_chart(chart, "E2")
# 파일 저장
wb.save("bubbleChart.xlsx")
코드 단계별 설명
1. 워크북 및 시트 준비
openpyxl.Workbook() 함수를 호출하면 새로운 빈 워크북이 생성되고, wb.active 속성을 통해 현재 활성화된 시트를 얻을 수 있습니다.
2. 데이터 입력
rows 리스트에는 헤더 행과 실제 데이터 행이 담겨 있습니다. sheet.append() 메서드를 사용하면 각 행이 시트의 1열, 2열, 3열에 순서대로 기록됩니다.
3. 데이터 참조(Reference) 정의
Reference 클래스는 차트가 사용할 셀 범위를 지정합니다. 이 예제에서는 1열을 X축 값(제품 수), 2열을 Y축 값(매출액), 3열을 거품의 크기(시장 점유율)로 지정했습니다.
4. 시리즈 생성 및 차트 구성
Series 객체는 values(Y값), xvalues(X값), zvalues(거품 크기)를 하나로 묶어 하나의 데이터 계열을 정의합니다. 이 시리즈를 차트에 추가한 후, 차트 제목과 X축·Y축 제목을 설정합니다.
5. 차트 삽입 및 파일 저장
sheet.add_chart(chart, "E2")를 호출하면 차트의 왼쪽 상단 모서리가 E2 셀 위치에 고정되어 시트에 배치됩니다. 마지막으로 wb.save()를 호출해 "bubbleChart.xlsx" 파일로 저장합니다.
실행 결과
코드를 실행하면 현재 작업 디렉터리에 "bubbleChart.xlsx" 파일이 생성됩니다. 해당 파일을 열면 입력된 데이터 표와 함께 E2 셀 위치부터 시작하는 버블 차트를 확인할 수 있습니다. X축은 제품 수, Y축은 매출액(USD)을 나타내며, 각 거품의 크기는 시장 점유율을 의미합니다.