Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python XlsxWriter 모듈로 엑셀 시트에 주식 차트(High-Low-Close) 그리기

주식 차트란 무엇인가?

주식 차트(Stock Chart)는 일정 기간 동안의 주가 변화를 그래프로 나타낸 가격 차트입니다. 주식 차트에는 다음과 같은 핵심 정보들이 포함됩니다.

  • 종목 심볼(Symbol)과 거래소
  • 차트 표시 기간
  • 가격 변동폭
  • 최근 변동 내역
  • 거래량(Volume)

이 글에서는 Python의 XlsxWriter 모듈을 사용해 엑셀 파일에 High-Low-Close 형태의 주식 차트를 만드는 방법을 단계별로 살펴보겠습니다.

필요한 라이브러리 설치

먼저 XlsxWriter가 설치되어 있지 않다면 아래 명령어로 설치합니다.

pip install XlsxWriter

전체 예제 코드

# datetime 라이브러리에서 datetime 메서드 임포트
from datetime import datetime
# xlsxwriter 라이브러리 임포트
import xlsxwriter

# Workbook()은 생성할 파일명을 필수 인자로 받습니다.
workbook = xlsxwriter.Workbook('chart_stock.xlsx')

# add_worksheet() 메서드로 새 워크시트를 추가합니다.
worksheet = workbook.add_worksheet()

# add_format() 메서드로 셀 서식 객체를 생성합니다.
# 굵은 글씨(bold) 서식 객체 생성
bold = workbook.add_format({'bold': 1})
# 날짜 서식 객체 생성
date_format = workbook.add_format({'num_format': 'dd/mm/yyyy'})

# add_chart() 메서드로 차트 객체를 생성합니다.
# 여기서는 'stock' 유형의 차트 객체를 만듭니다.
chart = workbook.add_chart({'type': 'stock'})

# 차트가 참조할 워크시트 데이터를 정의합니다.
headings = ['Date', 'High', 'Low', 'Close']
data = [
    ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05'],
    [27.2, 25.03, 19.05, 20.34, 18.5],
    [23.49, 19.55, 15.12, 17.84, 16.34],
    [25.45, 23.05, 17.32, 20.45, 17.34],
]

# 'A1' 셀부터 헤더를 굵은 글씨 서식으로 한 행에 작성합니다.
worksheet.write_row('A1', headings, bold)

# 엑셀 시트에 데이터를 채워 넣습니다.
for row in range(5):
    # 문자열 형태의 날짜를 datetime 객체로 변환합니다.
    date = datetime.strptime(data[0][row], "%Y-%m-%d")
    # 해당 셀에 날짜 서식을 적용하며 작성합니다.
    worksheet.write(row + 1, 0, date, date_format)
    # 각 열에 해당하는 데이터를 작성합니다.
    worksheet.write(row + 1, 1, data[1][row])
    worksheet.write(row + 1, 2, data[2][row])
    worksheet.write(row + 1, 3, data[3][row])

# A열부터 D열까지 너비를 11로 설정합니다.
worksheet.set_column('A:D', 11)

# High-Low-Close 각 열에 대해 시리즈(series)를 추가합니다.
# 참고: '='과 Sheet1 사이, Sheet1과 '!' 사이에는 공백이 없어야 하며,
# 공백이 들어가면 경고가 발생합니다.
# categories는 A2:A6, values는 B2:B6 범위의 데이터를 사용합니다.
chart.add_series({
    'categories': '=Sheet1!$A$2:$A$6',
    'values':     '=Sheet1!$B$2:$B$6',
})

# categories는 A2:A6, values는 C2:C6 범위의 데이터를 사용합니다.
chart.add_series({
    'categories': '=Sheet1!$A$2:$A$6',
    'values':     '=Sheet1!$C$2:$C$6',
})

# categories는 A2:A6, values는 D2:D6 범위의 데이터를 사용합니다.
chart.add_series({
    'categories': '=Sheet1!$A$2:$A$6',
    'values':     '=Sheet1!$D$2:$D$6',
})

# 차트 제목을 설정합니다.
chart.set_title({'name': 'High-Low-Close'})
# X축 제목을 설정합니다.
chart.set_x_axis({'name': 'Date'})
# Y축 제목을 설정합니다.
chart.set_y_axis({'name': 'Share price'})

# 차트를 워크시트에 삽입합니다. 차트의 왼쪽 상단 모서리가 E9 셀에 고정됩니다.
worksheet.insert_chart('E9', chart)

# 마지막으로 close() 메서드로 엑셀 파일을 닫습니다.
workbook.close()

코드 단계별 설명

1. 워크북과 워크시트 생성

xlsxwriter.Workbook('chart_stock.xlsx')으로 'chart_stock.xlsx'라는 이름의 엑셀 파일(워크북)을 생성하고, add_worksheet() 메서드로 데이터를 입력할 워크시트를 추가합니다.

2. 셀 서식 정의

add_format() 메서드를 사용해 두 가지 서식을 만듭니다. 하나는 헤더에 적용할 굵은 글씨(bold) 서식이고, 다른 하나는 날짜를 'dd/mm/yyyy' 형식으로 표시할 날짜(num_format) 서식입니다.

3. 데이터 준비 및 입력

Date, High(고가), Low(저가), Close(종가) 네 개의 열로 구성된 데이터를 준비합니다. 문자열로 된 날짜 값은 datetime.strptime()으로 datetime 객체로 변환한 뒤 날짜 서식을 적용하여 작성하고, 나머지 수치 데이터는 반복문을 통해 각 셀에 순서대로 기록합니다.

4. 주식 차트 생성 및 시리즈 추가

add_chart({'type': 'stock'})으로 주식 차트 객체를 만든 후, add_series() 메서드를 사용해 High, Low, Close 각각의 데이터 범위를 시리즈로 추가합니다. 이때 범위 지정자('=Sheet1!$A$2:$A$6')에 공백이 포함되면 오류나 경고가 발생하므로 주의해야 합니다.

5. 차트 꾸미기 및 삽입

set_title(), set_x_axis(), set_y_axis() 메서드로 차트 제목과 축 레이블을 지정하고, insert_chart('E9', chart)를 호출해 차트를 E9 셀 위치에 삽입합니다.

6. 파일 저장 및 종료

workbook.close()를 호출하면 모든 내용이 파일에 기록되고 엑셀 파일이 완성됩니다. 이 단계를 생략하면 파일이 손상될 수 있으므로 반드시 호출해야 합니다.

실행 결과

코드를 실행하면 'chart_stock.xlsx' 파일이 생성되며, 파일을 열면 A열부터 D열까지 날짜와 주가 데이터가 입력되어 있고 E9 셀부터 High-Low-Close 주식 차트가 표시되는 것을 확인할 수 있습니다.