콘텐츠로 이동

6장: Python으로 데이터 시각화하기

숫자를 그림으로 — Claude Code로 차트 만들기


목차

  1. 데이터 시각화란?
  2. 어떤 도구를 쓰나요?
  3. 환경 준비
  4. 기본 차트 4종
  5. pandas로 데이터 다루기
  6. 실전: 주식 데이터 시각화
  7. 인터랙티브 차트 (Plotly)
  8. 차트 저장하기

1. 데이터 시각화란?

한 줄 정의

숫자와 데이터를 그림(차트)으로 바꿔서 한눈에 보이게 만드는 것

왜 필요한가요?

숫자로만 보면:
005930: 87200, 88100, 85600, 91000, 89400, 93200, 91800

차트로 보면:
94000 ┤                                    ●
92000 ┤                               ●────╯
90000 ┤         ●                ●────╯
88000 ┤    ●────╯
86000 ┤────╯
      └─────────────────────────────────────
       월   화   수   목   금   월   화

→ 한 번 하락 후 강한 반등이 한눈에 보임

어디에 쓰나요?

분야 활용 예
주식·투자 주가 변화, 종목 비교, 섹터 비중
업무·보고서 매출 추이, 부서별 실적
데이터 분석 패턴 발견, 이상값 탐지
일상 운동 기록, 지출 분석

2. 어떤 도구를 쓰나요?

Python 시각화 라이브러리 3종

matplotlib   →  가장 기본. 모든 차트의 기초
    ↓
pandas       →  엑셀처럼 데이터를 다루고, 바로 차트로
    ↓
plotly       →  마우스로 조작하는 인터랙티브 차트

비교표

라이브러리 난이도 특징 언제 쓰나
matplotlib ★★☆ 세밀한 제어 가능 기본 차트, 저장용
pandas ★☆☆ 데이터 정리 + 시각화 한 번에 CSV·엑셀 데이터 다룰 때
plotly ★★☆ 마우스로 확대·축소 가능 웹에 올리거나 인터랙티브하게

3. 환경 준비

패키지 설치

터미널에서 실행:

pip install matplotlib pandas plotly

프로젝트 폴더 만들기

mkdir data-viz
cd data-viz
claude

Claude Code에 준비 요청

data-viz 폴더에서 Python 데이터 시각화 연습을 시작할거야.
빈 파일 3개 만들어줘:
- basic_charts.py   (기본 차트 연습)
- stock_chart.py    (주식 데이터 시각화)
- interactive.py    (plotly 인터랙티브 차트)

4. 기본 차트 4종

4-1. 선 그래프 (Line Chart)

언제: 시간에 따른 변화를 볼 때 (주가, 매출 추이 등)

Claude Code에 요청:

basic_charts.py에 선 그래프를 그려줘.
삼성전자 주가 데이터 (임의 생성):
날짜: 5월 1일 ~ 5월 10일 (평일만)
주가: 87200, 88100, 85600, 91000, 89400, 93200, 91800

matplotlib으로 그려줘.
제목은 "삼성전자 5월 주가", X축은 날짜, Y축은 주가(원).

결과 예시:

삼성전자 5월 주가
94000 ┤                                    ●
92000 ┤                               ●────╯
90000 ┤         ●                ●────╯
88000 ┤    ●────╯
86000 ┤────╯
      └─────────────────────────────────────
       5/1  5/2  5/3  5/4  5/5  5/8  5/9

4-2. 막대 그래프 (Bar Chart)

언제: 여러 항목을 비교할 때 (종목별 수익률, 카테고리별 건수 등)

Claude Code에 요청:

basic_charts.py에 막대 그래프를 추가해줘.
백테스트 결과 D+7 수익률 데이터:

종목: SK하이닉스, 한미반도체, 두산에너빌리티, 레인보우로보틱스, 대한광통신
수익률(%): 12.4, 14.7, 14.6, 9.0, 14.5

막대 색은 양수면 빨간색, 제목은 "뉴스봇 백테스트 D+7 수익률"

결과 예시:

뉴스봇 백테스트 D+7 수익률
15% ┤  ████  ████  ████        ████
12% ┤  ████  ████  ████  ████  ████
 9% ┤  ████  ████  ████  ████  ████
 0% ┼──────────────────────────────
    SK하이 한미반  두산  레인보  대한광

4-3. 원형 그래프 (Pie Chart)

언제: 전체에서 각 항목의 비율을 볼 때 (포트폴리오 비중 등)

Claude Code에 요청:

basic_charts.py에 원형 그래프를 추가해줘.
가상의 포트폴리오 구성:

종목: SK하이닉스, 두산에너빌리티, 대한광통신, 레인보우로보틱스, 현금
비중(%): 30, 20, 20, 15, 15

제목은 "포트폴리오 구성 비중"
각 항목에 퍼센트 표시해줘.

4-4. 산점도 (Scatter Plot)

언제: 두 데이터가 관계가 있는지 볼 때

Claude Code에 요청:

basic_charts.py에 산점도를 추가해줘.
가상 데이터로 "뉴스 건수 vs 다음날 주가 변동률" 관계를 보여줘.
뉴스 건수: 1~20 (임의 생성)
주가 변동률: 뉴스 건수에 비례하되 노이즈 추가

제목은 "뉴스 건수와 다음날 주가 변동률의 관계"

한 파일에서 모두 보기

Claude Code에 요청:

basic_charts.py에서 4개 차트를 하나의 화면에 나란히 보여줘.
plt.subplot(2, 2, ...)으로 2x2 배치해줘.
전체 제목은 "차트 4종 연습"

결과:

┌──────────────────────────────────┐
│         차트 4종 연습             │
│  ┌──────────┐  ┌──────────┐     │
│  │ 선 그래프 │  │막대그래프 │     │
│  └──────────┘  └──────────┘     │
│  ┌──────────┐  ┌──────────┐     │
│  │원형그래프 │  │  산점도   │     │
│  └──────────┘  └──────────┘     │
└──────────────────────────────────┘

5. pandas로 데이터 다루기

pandas가 뭔가요?

엑셀 = pandas

엑셀에서 하는 일:
- 표(시트)에 데이터 넣기
- 정렬, 필터, 합계 계산
- 차트 만들기

pandas도 똑같이, Python으로!

CSV 파일로 실습

Claude Code에 요청:

sample_stock.csv 파일을 만들어줘.
내용: 삼성전자 2025년 1월 ~ 5월 주가 (임의 생성)
컬럼: 날짜, 시가, 고가, 저가, 종가, 거래량

그 다음 stock_chart.py에서:
1. pandas로 CSV 파일 불러오기
2. 종가 선 그래프 그리기
3. 거래량 막대 그래프 아래에 추가

pandas 기본 명령어 (Claude Code로 배우기)

Claude Code에 요청:

sample_stock.csv를 불러와서 아래를 해줘:
1. 처음 5줄 보기 (head)
2. 기본 통계 (평균, 최대, 최소) 출력
3. 종가가 90000 이상인 날만 필터링
4. 월별 평균 종가 계산
결과를 print로 보여줘.

6. 실전: 주식 데이터 시각화

Toss API + 차트 연결

뉴스봇(5장)에서 가져온 실제 데이터를 차트로 그립니다.

Step 1: 캔들 데이터 가져오기

stock_chart.py에 Toss API로 SK하이닉스(A000660) 최근 30일
캔들 데이터를 가져오는 코드를 써줘.

API: GET https://wts-info-api.tossinvest.com/api/v1/c-chart/kr-s/A000660/day:1
파라미터: count=30, session=all, investMode=krx, useAdjustedRate=true
헤더: Accept: application/json, User-Agent: Mozilla/5.0

가져온 데이터에서 날짜(dt)와 종가(close)를 추출해줘.

Step 2: 실제 데이터 차트

가져온 SK하이닉스 실제 데이터로 차트를 그려줘:
- 종가 선 그래프
- 제목에 오늘 날짜와 "SK하이닉스 30일 주가" 표시
- Y축 숫자 단위: 원 (예: 187,500)

Step 3: 백테스트 결과 시각화

stock_chart.py에 백테스트 결과를 시각화해줘.

종목별 D+3, D+7 수익률 데이터:
종목         D+3   D+7
SK하이닉스   5.2  12.4
한미반도체   8.1  14.7
두산에너빌리티 6.3  14.6
레인보우로보틱스 4.5  9.0
대한광통신   7.8  14.5

D+3와 D+7을 같은 그래프에 나란히 막대로 보여줘.
색: D+3는 주황, D+7는 빨강
제목: "뉴스봇 백테스트 결과 (6개월)"

결과 예시:

뉴스봇 백테스트 결과 (6개월)
16% ┤       ██        ██  ██        ██
14% ┤       ██  ██    ██  ██        ██
12% ┤  ██   ██  ██    ██  ██        ██
 8% ┤  ██   ██  ██    ██  ██  ██    ██
 4% ┤  ██   ██  ██    ██  ██  ██    ██
 0% ┼────────────────────────────────
     SK하이닉스  한미반도체  두산에너  레인보우  대한광통
         ■ D+3  ■ D+7

7. 인터랙티브 차트 (Plotly)

plotly가 뭔가요?

matplotlib 차트:               plotly 차트:
- 정지된 이미지                - 마우스로 확대/축소
- 저장해서 공유               - 웹 브라우저에서 열림
                               - 마우스 올리면 값 표시

기본 사용법

Claude Code에 요청:

interactive.py에 plotly로 SK하이닉스 주가 차트를 그려줘.
데이터는 위에서 만든 sample_stock.csv 사용.

선 그래프로 종가를 표시하고,
마우스를 올리면 날짜와 주가가 보이게 해줘.
제목: "SK하이닉스 인터랙티브 차트"

실행하면 브라우저에서 자동으로 열리게 해줘.

캔들스틱 차트

주식 전용 차트입니다:

Claude Code에 요청:

interactive.py에 캔들스틱 차트를 추가해줘.
sample_stock.csv의 시가, 고가, 저가, 종가를 사용해.
plotly의 go.Candlestick을 써줘.

상승봉: 빨강, 하락봉: 파랑
제목: "SK하이닉스 캔들스틱"

캔들스틱이란:

고가 ─── ┃    ← 위 수염: 그날 최고가
         ┃
상승  ╔═══╗   ← 몸통 위: 종가 (올랐을 때)
 봉   ║   ║
      ╚═══╝   ← 몸통 아래: 시가
         ┃
저가 ─── ┃    ← 아래 수염: 그날 최저가

8. 차트 저장하기

이미지로 저장 (matplotlib)

Claude Code에 요청:

그린 차트들을 이미지로 저장하는 코드를 추가해줘.
- 파일명: chart_오늘날짜.png (예: chart_20260518.png)
- 해상도: 300 DPI (인쇄 품질)
- 저장 폴더: output/

HTML로 저장 (plotly)

Claude Code에 요청:

plotly 차트를 HTML 파일로 저장해줘.
파일명: interactive_chart.html
저장하면 "저장 완료: output/interactive_chart.html" 출력해줘.

HTML 파일은 더블클릭으로 브라우저에서 바로 열 수 있습니다.


실습 미션

미션 1: 나의 관심 종목 차트

Claude Code에 요청:

내가 관심 있는 종목 3개의 최근 30일 주가를
하나의 그래프에 비교해서 보여줘.
Toss API에서 실제 데이터를 가져와.

종목: SK하이닉스(A000660), 두산에너빌리티(A034020), 대한광통신(A010170)
시작 날짜를 100으로 맞춰서 상대적 변화율로 표시해줘.
(= 수익률 비교 차트)

미션 2: 뉴스봇 대시보드

Claude Code에 요청:

뉴스봇 실행 결과를 시각화하는 대시보드를 만들어줘.
2x2 레이아웃:
- 왼쪽 위: 백테스트 D+7 수익률 막대그래프
- 오른쪽 위: 인물별 트리거 횟수 막대그래프
- 왼쪽 아래: 카테고리별 채택 종목 수 원형그래프
- 오른쪽 아래: 종목별 D+3 vs D+7 비교

파일명: dashboard.py
실행하면 화면에 표시하고 dashboard.png로 저장해줘.

핵심 요약

상황 쓸 것 Claude Code 프롬프트 핵심어
시간에 따른 변화 선 그래프 "선 그래프", "plt.plot"
항목 비교 막대 그래프 "막대 그래프", "plt.bar"
비율 표시 원형 그래프 "파이 차트", "plt.pie"
관계 파악 산점도 "산점도", "plt.scatter"
주식 전용 캔들스틱 "캔들스틱", "go.Candlestick"
인터랙티브 plotly "plotly", "브라우저에서 열기"

자주 묻는 질문

Q. 차트가 안 열려요.
A. Claude Code에 "차트 창이 안 뜨는데 파일로 저장해줘"라고 요청하세요.

Q. 한글이 깨져요.
A. Claude Code에 "한글 폰트 설정 추가해줘. Mac이야 / Windows야"라고 알려주세요.

Q. 데이터가 없어서 연습 못 하겠어요.
A. Claude Code에 "임의의 샘플 데이터를 만들어줘"라고 하면 됩니다.

Q. 예쁘게 만들고 싶어요.
A. "seaborn 스타일로 바꿔줘" 또는 "다크 테마로 바꿔줘"라고 요청하세요.