아래 내용은 '부트캠프에서 진행한 내용 + 개인적으로 공부한 내용'입니다. 캠프에서 진행한 내용과 다를 수 있습니다.
- 이 부트캠프를 하면서 공모전도 나가고 자체 프로젝트로 진행할 것이다. 둘의 차이는 뭘까?
- 공모전
- 입상이 목적
- 대회의 취지를 잘 살펴봐야 한다.
- 데이터를 준다 -> 데이터 수집 작업 필요 없음
- KDT 프로젝트
- 훨씬 어려움
- 여러 데이터베이스를 구축해보는 경험
- 관계형 조인을 걸어서 압축하는 형태로
- 데이터 수집을 직접 해야 함.
- 데이터 수집에만 2주 정도 소요됨
- 8월에 프로젝트하니 6월 중반에 이미 데이터 수집이 완료되어야 한다
오늘의 목표
오늘의 목표는 대시보드 만들기이다.
여러 라이브러리들이 소개될텐데 하나 하나 문법을 치진 않을 것이다.
너무 많아서 개인적으로 나중에 따로 공부해야 한다.
이런 라이브러리가 있음을 알아가는데 의의를 두자.
대시보드 개발이란
대시보드 개발은 단순히 "그래프를 그리는 것"이 아니라
- 데이터를 한눈에 이해할 수 있도록 구조화
- 목적에 맞게 지표(KPI)를 배치
- 사용자가 의사결정을 빠르게 할 수 있도록 시각화
하는 작업이다.
이때 어디에 쓰는 대시보드인지에 따라 도구 선택이 달라진다.
대시보드 도구의 큰 분류
대시보드 개발 도구는 크게 3가지 계열로 나눌 수 있다.
1. 오픈소스 기반 웹 대시보드 (개발자 친화)
- Streamlit
- Gradio
- 특징:
- Python 코드로 웹 대시보드를 직접 개발
- 데이터 분석 -> 시각화 -> 웹 배포를 하나의 흐름으로 처리
- ML 모델 결과 시각화, 프로토타입 제작에 매우 강함
- 언제 쓰는지
- 개발자/데이터 엔지니어/ML엔지니어
- 서비스처럼 보이는 대시보드를 만들어야 할 때
- 회사 내부 툴, 데모용 웹, 포트폴리오를 만들 때
2. BI툴 (비개발자 친화, 협업 필수)
- Tableau
- Power BI
- Looker Studio
- 특징 :
- 코딩 없이도 강력한 대시보드 제작 가능
- 실무에서 가장 많이 쓰임
- 데이터 연결 -> 차트 -> 필터 -> 대시보드까지 매우 빠름
- 현업 분석가가 되고 싶으면 BI툴은 반드시 하나 이상 경험하면 좋음
- 도구별 포지션 :
- Tableau: 전통적인 데이터 분석/BI 최강자
- Power BI: MS 생태계(Excel, Azure) 친화적
- Looker Studio:
- Google Analytics와 연계
- 마케팅 / 퍼포먼스 분석 쪽에서 압도적
3. 자동화 & 연동 도구
- Google App Script
- 특징 :
- Google에서 만든 JavaScript 기반 언어
- Google Sheets / Docs / Gmail / GA와 연동
- 반복 업무 자동화, 데이터 수집·가공에 특화
- 대시보드 그 자체보다는 파이프라인 보조 도구 역할
- 언제 쓰는지
- 마케팅 리포트 자동 생성
- 매일/매주 데이터 정리
- 사내 운영 자동화
시각화 라이브러리 공부
- 대표적으로 matplotlib와 plotly가 있다.
- 짧은 시간에 둘 다 공부하긴 힘들다. 목적에 맞게 선택해서 공부하자
matplotlib + seaborn (분석용 시각화 세트)
- matplotlib: 시각화의 뼈대 (low-level)
- seaborn: 통계 기반 고급 시각화 (high-level)
- seaborn은 내부적으로 matplotlib 위에서 동작함. 따라서 둘은 같이 공부해야한다.
- 차트를 이미지로 사용하고 싶을 때 이 조합을 사용함
- 보고서(PDF,PPT,논문 등)
- 분석 결과 정리
- 리포트용 그래프
- 즉, 정적인 이미지, 해석이 중요한 분석 결과, 정확한 통계적 의미가 중요한 상황에 사용
- 이 데이터에서 무엇을 해석할 수 있는지가 중요한 사람이 사용
- 데이터 분석가 or 연구/리포트 중심 업무
- 단점
- 시중에 책이 많지 않다. 공식문서+예제 중심으로 학습.
Plotly (개발 & 웹 배포용 시각화)
- 웹에서 움직이는 차트를 만들기 위한 라이브러리
- 마우스 hover
- 확대/축소
- 필터링
- 클릭 이벤트
- JavaScript 기반 (웹 친화적)
- Python / R 모두 지원
- 시중에 책, 자료가 비교적 풍부
- Streamlit 과 잘 맞음
- 대시보드를 웹으로 배포해야할 때 사용
- 사용자가 직접 데이터를 조작하게 할 때
- 서비스형 대시보드, 내부 관리 페이지 만들 때
누구에게 무엇이 필요?
- 분석가 → matplotlib + seaborn
- 웹 서비스 → plotly + streamlit
- 현업 리포트 → Tableau / Power BI
- 마케팅 → Looker Studio + GA
어떻게 공부?
- 문법 암기x -> AI가 코드 짜줌
- 이 차트는 왜 이 상황에서 쓰는가? 이 시각화가 어떤 판단을 돕는가? 를 생각하면서 사용.
- 대시보드 도구는 실력이 아니라 용도 선택의 문제이다.
각각을 이용해서 대시보드 만들어보자.
라이브러리 설치
requirements.txt 파일에 다음을 작성.
numpy
pandas
jupyterlab
matplotlib
seaborn
openpyxl
xlrd
plotly
yfinance
streamlit>=1.23.0
altair>=5

각 라이브러리에 대한 설명은 다음과 같다.
| 라이브러리 | 분류 | 간단 설명 | 주 사용 목적 |
|---|---|---|---|
| numpy | 수치 연산 | 다차원 배열(ndarray) 기반의 고속 수치 계산 라이브러리 | 행렬 연산, 벡터 연산, 수치 계산의 기반 |
| pandas | 데이터 처리 | 표 형태(DataFrame)의 데이터 조작·분석 라이브러리 | 데이터 정제, 분석, 전처리 |
| jupyterlab | 개발 환경 | 노트북 기반의 인터랙티브 개발 환경 | 실습, 분석 과정 정리, 실험 |
| matplotlib | 시각화 | 파이썬 기본 시각화 라이브러리 (저수준) | 정적 그래프, 보고서용 이미지 |
| seaborn | 시각화 | matplotlib 기반 통계 시각화 라이브러리 | 분포, 관계, 통계적 시각화 |
| openpyxl | 파일 입출력 | Excel(.xlsx) 파일 읽기/쓰기 라이브러리 | 엑셀 자동화, 데이터 저장 |
| xlrd | 파일 입출력 | Excel(.xls) 파일 읽기 라이브러리 | 구형 엑셀 파일 로딩 |
| plotly | 시각화 | 인터랙티브 웹 기반 시각화 라이브러리 | 웹 대시보드, 동적 차트 |
| streamlit | 웹 개발 | Python 코드로 웹 대시보드 만드는 프레임워크 | 분석 결과 웹 배포 |
| yfinance | 데이터 수집 | Yahoo Finance 주식/금융 데이터 수집 라이브러리 | 주가 데이터 분석, 금융 실습 |
가상 환경을 만들고 활성화한 뒤 아래 코드를 입력한다.
나는 pip 툴로 uv 패키지를 사용한다.
uv는 패키지 설치 및 관리와 패키지 빌드 및 배포까지 모두 가능한 궁극의 파이썬 종속성/패키지/프로젝트 관리 툴이다.
이 패키지의 가장 좋은 점은 속도이다. pip, virtualenv 등과 비교했을 때 매우 매우 빠르다.
설치와 관련된 내용은 다음 링크를 참고하면 된다.
https://wikidocs.net/238310
04.00. uv - 파이썬 관리에 필요한 단 하나의 툴
uv는 패키지 설치 및 관리와 패키지 빌드 및 배포까지 모두 가능한 궁극의 파이썬 종속성/패키지/프로젝트 관리 툴이다. 기존에 사용되던 `pip`, `pip-tools`, `pi…
wikidocs.net
가상환경을 만들고 활성화 후 라이브러리를 설치하는 코드는 다음과 같다.
-- 가상환경 만들기
uv venv --python 3.14
-- 가상환경 활성화
source .venv/Scripts/activate
-- 라이브러리 설치
pip install -r requirements.txt
그럼 아래와 같이 라이브러리들이 쭉 설치된다.

mat_app.py 파일 만들기
- 파일명은 꼭 mat_app.py로 할 필요는 없다. (맘대로)
- matplotlib + seaborn 을 이용해서 streamlit으로 대시보드를 만들어보자.
- 폴더 안에 mat_app.py로 파이썬 파일 하나를 만든다.

- 그리고 필요한 라이브러리들을 import 한다.
# 라이브러리 import
import streamlit as st
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.font_manager as fm
우선 잘 작동하는지 확인하기 위해 테스트용으로 제목 하나를 입력해보자.
아래 코드를 작성한다.
# 출력 테스트
st.title("Matplotlib 튜토리얼")
작성 후 터미널을 열어서 아래 코드를 입력한다.
(가상환경 활성화 상태에서 입력해야 함)
streamlit 대시보드를 웹에 띄우는 명령어이다.
코드 입력 후에 이메일 작성하라는 문구가 뜰텐데 그냥 엔터 누르면 넘어간다.
-- mat_app.py로 작성한 코드를 streamlit 웹 대시보드로 띄우는 명령어
streamlit run mat_app.py

크롬에서 페이지 하나가 열릴 것이다.

잘 나오는 것을 확인했으면
st.title("Matplotlib 튜토리얼")
코드 앞에 #을 붙여 주석처리하자.(아래에서 제목 따로 만들 거임)
1. 한글 폰트 설정하기
그냥 코드를 작성할 경우, 한글이 깨지는 에러가 있을 수 있다.
한글 폰트를 설정하면 해결된다. 코드는 다음과 같다.
( 코드에 대한 설명을 주석으로 달아놓았다. 더 아래에 주석 없는 버전도 넣어놓겠다.)
# matplotlib의 전역 설정(rcParams)에서 기본 글꼴(font.family)을 설정
# → 모든 matplotlib/seaborn 그래프에서 'Malgun Gothic' 폰트를 기본으로 사용
plt.rcParams['font.family'] = 'Malgun Gothic'
# matplotlib에서 음수 기호(-)를 유니코드 문자 대신 ASCII '-'로 출력
# → 한글 폰트 사용 시 음수 부호가 깨지는 문제 방지
plt.rcParams['axes.unicode_minus'] = False
# seaborn의 테마(theme)를 설정하는 함수 (sns.set()의 최신 대체)
sns.set_theme(
# 어두운 격자 배경 (데이터 분석용으로 가장 많이 사용)
style='darkgrid',
# seaborn 내부에서 matplotlib rcParams를 추가/덮어쓰기
# axes.unicode_minus=False를 다시 지정하여
# seaborn + matplotlib 환경 모두에서 음수 기호 깨짐 방지
rc={'axes.unicode_minus': False}
)
2. 페이지 설정
페이지 레이아웃을 설정해보자.
- 브라우저 탭에 표시될 페이지 제목 설정
- 페이지 레이아웃 설정
- "Matplotlib & Seaborn 튜토리얼"으로 큰 제목적기
# Streamlit 앱의 기본 페이지 설정을 지정하는 함수
st.set_page_config(
# 브라우저 탭(tab)에 표시될 페이지 제목
page_title='Matplotlib & Seaborn 튜토리얼',
# 페이지 레이아웃 설정
# 'wide' : 화면 전체 폭을 사용 (대시보드, 시각화에 적합)
# 'centered' : 가운데 정렬된 기본 레이아웃
layout='wide'
)
# Streamlit 페이지 상단에 가장 큰 제목(h1 수준)을 출력
# → 웹 페이지의 메인 타이틀 역할
st.title("Matplotlib & Seaborn 튜토리얼")

3. 데이터셋 불러오기
seaborn 라이브러리에서 제공하는 'tips' 데이터셋을 불러와서 사용할 것이다.
소제목으로 "데이터셋 미리보기"를 띄워놓고 데이터셋을 Pandas DataFrame으로 상위 5개만 테이블로 보여줄 것이다.
# seaborn 라이브러리에 내장된 'tips' 데이터셋을 불러오기
tips = sns.load_dataset('tips')
# 데이터 미리보기
# Streamlit 페이지에 소제목(subheader)을 출력
# → title보다 작은 제목(h2~h3 수준)
st.subheader("데이터셋 미리보기")
# pandas DataFrame을 Streamlit의 인터랙티브 테이블로 출력
# tips.head() : 데이터프레임의 상위 5개 행을 반환
# → 스크롤, 열 정렬, 열 너비 조절 가능
st.dataframe(tips.head())

이 데이터셋을 이용해 막대그래프를 띄워보자.
- 소제목으로 "1. 기본 막대 그래프" 적기
- x축에 day 열, y축에 total_bill 열 배치
- 표 제목으로 "요일별 평균 지불 금액" 적기
# 기본 막대 그래프 (matplotlib + seaborn 조합)
# → Streamlit에서 시각화를 보여주기 위한 코드 블록
# Streamlit 페이지에 섹션 제목(subheader) 출력
# → 여러 그래프 중 "1번 그래프"임을 명확히 구분
st.subheader("1. 기본 막대 그래프")
# matplotlib는 객체 지향(Object-Oriented) 방식으로 그래프를 그리는 것이 권장됨
# → fig : 전체 그림(캔버스)
# → ax : 실제 그래프가 그려지는 좌표축(Axes)
# figsize=(10,6) : 그래프 크기(가로 10, 세로 6 인치)
fig, ax = plt.subplots(figsize=(10, 6))
# seaborn의 barplot 함수
# data=tips : 사용할 pandas DataFrame
# x='day' : x축에 요일 변수
# y='total_bill' : y축에 평균 계산 대상 변수
# ax=ax : matplotlib의 Axes 객체 위에 그래프를 그림
# → seaborn은 내부적으로 평균값(mean)을 계산하여 막대 그래프를 생성
sns.barplot(
data=tips,
x='day',
y='total_bill',
ax=ax
)
# matplotlib Axes 객체의 제목 설정
# → 해당 그래프 하나에 대한 제목
ax.set_title(
"요일별 평균 지불 금액",
fontname="Malgun Gothic" # 표 위에 네모만 뜰 경우 작성
)
# Streamlit에 matplotlib Figure 객체를 출력
# → Jupyter의 plt.show() 역할
st.pyplot(fig)

구글에 matplotlib, seaborn 치고 사이트 들어가서 보면 설명이 엄청 많다.
AI한테 링크 넣어주고 작업해달라고 하면 잘 해준다.
우리가 보통 떠올리는 이미지들을 거의 다 그릴 수 있다고 보면 된다.
이게 이 모듈의 장점이다.
산점도, 히트맵, 회귀선이 있는 산점도도 넣어보자. (AI한테 짜달라고 해보기)
# 산점도
st.subheader("2. 산점도")
fig1, ax1 = plt.subplots(figsize=(7,5))
sns.scatterplot(
data=tips,
x='total_bill',
y='tip',
hue='day',
size='size',
ax=ax1
)
st.pyplot(fig1)
# 히트맵
st.subheader('3. 히트맵')
# 요일과 시간별 평균 팁 계산
pivot_df = tips.pivot_table(values = 'tip', index='day', columns='time', aggfunc='mean')
fig2, ax2 = plt.subplots(figsize = (7,5))
sns.heatmap(pivot_df, annot=True, fmt='.2f', ax=ax2)
st.pyplot(fig2)
# 회귀선이 있는 산점도
st.subheader('4. 회귀선이 있는 산점도')
fig3, ax3 = plt.subplots(figsize = (7,5))
sns.regplot(data=tips, x='total_bill', y='tip', scatter_kws={'alpha' : 0.5}, ax=ax3)
st.pyplot(fig3, use_container_width=True)



이런식으로 꾸미면 된다.
정리 코드(주석x)
# 파일명 : mat_app.py
# 라이브러리 import
import streamlit as st
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.font_manager as fm
# 출력 테스트
# st.title("Matplotlib 튜토리얼")
# ========================================
# 1. 한글 폰트 설정하기
# ========================================
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False
sns.set_theme(
style='darkgrid',
rc={'axes.unicode_minus': False}
)
# ========================================
# 2. 페이지 설정
# ========================================
st.set_page_config(
page_title='Matplotlib & Seaborn 튜토리얼',
layout='wide'
)
st.title("Matplotlib & Seaborn 튜토리얼")
# ========================================
# 3. 데이터셋 불러오기
# ========================================
tips = sns.load_dataset('tips')
st.subheader("데이터셋 미리보기")
st.dataframe(tips.head())
# 기본 막대 그래프 (matplotlib + seaborn 조합)
st.subheader("1. 기본 막대 그래프")
fig, ax = plt.subplots(figsize=(10, 6))
sns.barplot(
data=tips,
x='day',
y='total_bill',
ax=ax
)
ax.set_title(
"요일별 평균 지불 금액",
fontname="Malgun Gothic" # 표 위에 네모만 뜰 경우 작성
)
st.pyplot(fig)
# 산점도
st.subheader("2. 산점도")
fig1, ax1 = plt.subplots(figsize=(7,5))
sns.scatterplot(
data=tips,
x='total_bill',
y='tip',
hue='day',
size='size',
ax=ax1
)
st.pyplot(fig1)
# 히트맵
st.subheader('3. 히트맵')
pivot_df = tips.pivot_table(values = 'tip', index='day', columns='time', aggfunc='mean')
fig2, ax2 = plt.subplots(figsize = (7,5))
sns.heatmap(pivot_df, annot=True, fmt='.2f', ax=ax2)
st.pyplot(fig2)
# 회귀선이 있는 산점도
st.subheader('4. 회귀선이 있는 산점도')
fig3, ax3 = plt.subplots(figsize = (7,5))
sns.regplot(data=tips, x='total_bill', y='tip', scatter_kws={'alpha' : 0.5}, ax=ax3)
st.pyplot(fig3, use_container_width=True)
이제 plotly로 대시보드를 만들어보자.
현재 대시보드를 닫아야 한다.
터미널 창에 `Ctrl+c` 를 하면 멈춘다.

plotly_app.py 파일 만들기
이번엔 plotly로 만들어보자.
plotly를 잘 쓰려면 html, css 관련 실력도 있으면 좋다.
시중에 공부할 수 있는 교재들 많다.
- 위키독스에 plotly tutorial
https://wikidocs.net/book/8909
Plotly Tutorial - 파이썬 시각화의 끝판왕 마스터하기
# 도서 소개 **이 책은 파이썬의 인터렉티브 시각화의 끝판왕 Plotly 사용법을 소개합니다.** **제가 겪은 시행착오를 기반으로 Plotly 관련 모든 내용을…
wikidocs.net
- 강사님 추천 책 : Plotly로 시작하는 인터랙티브 데이터 시각화 in R & 파이썬
https://product.kyobobook.co.kr/detail/S000211394596
Plotly로 시작하는 인터랙티브 데이터 시각화 in R & 파이썬 | 이기준 - 교보문고
Plotly로 시작하는 인터랙티브 데이터 시각화 in R & 파이썬 | 복잡하고 어려운 데이터를 한눈에 들어오는 그래프와 차트로 만들기이 책은 인터랙티브 시각화 패키지인 Plotly로 시각화하는 방법을
product.kyobobook.co.kr
import할 라이브러리는 다음과 같다.
# 라이브러리 불러오기
import plotly.express as px
import plotly.graph_objects as go
import streamlit as st
import pandas as pd
import seaborn as sns
제목을 작성해준다.
# 제목
st.title("Plotly 튜토리얼")
그리고 streamlit으로 띄워준다.
streamlit run plotly_app.py

seaborn의 tips 데이터셋을 가져온다.
그리고 막대 그래프와 산점도를 그린다.
# tips 데이터셋 불러오기
tips = sns.load_dataset('tips')
# 데이터 미리보기
st.subheader("Tips 데이터셋 미리보기")
st.dataframe(tips.head())
# 기본 막대 그래프
st.subheader("1. 기본 막대 그래프")
fig = px.bar(
tips,
x='day',
y='tip',
title='요일별 지불 금액',
labels={'day': '요일', 'tip': '평균 Tip($)'}
)
st.plotly_chart(fig, use_container_width=True)
# 산점도
st.subheader('산점도')
fig1 = px.scatter(tips,
x='total_bill',
y='tip')
st.plotly_chart(fig1, use_container_width=True)
matplotlib과 다른 점은 그래프 위에 마우스를 올리면 각 점에 대한 정보를 보여준다는 것이다.

- 분석가 희망 : matplotlib + seaborn + 디자인 툴
- 개발자 희망 : html + css + plotly
배워야 하는 코스가 다르다. 본인 진로에 맞게 잘 선택하자.
주식차트 대시보드 만들고 배포하기
Github에 가입되어 있어야 아래 작업들 가능함.
기본적인 Git 명령어들 알아야 함.
이번엔 배포를 해보자.
배포란 URL을 만들어서 외부 사람이 접근이 가능하도록 하는 것이다.
배포 전에 무조건 로컬 PC에서 테스트를 해보아야 한다.
가상 환경 만들고, 라이브러리 설치하고, streamlit run 명령어로 띄워보는 것까지 확인해야한다.
(위에서 했던 작업이다)
app.py라는 주식차트 분석 파일과 기타 파일들은 준비되어 있으니
이 코드를 streamlit으로 배포하는 방법만 알아보자.
배포하려면 Github에 가입되어 있어야 한다. 그리고 repository에 업로드하는 방법(코드)을 알고 있어야 한다.(깃 푸시)
먼저 로컬 PC에서 테스트 해보자.
먼저 stock_tickers.txt라는 파일이 필요하다.
Apple : AAPL
Microsoft : MSFT
Google : GOOGL
Amazon : AMZN
Meta : META
Tesla : TSLA
NVIDIA : NVDA
Netflix : NFLX
Intel : INTC
AMD : AMD
Samsung : 005930.KS
Sony : SONY
Toyota : TM
Coca-Cola : KO
McDonald's : MCD
Disney : DIS
IBM : IBM
Oracle : ORCL
Salesforce : CRM
Adobe : ADBE
그 후 app.py 파일을 만든 후 streamlit에 띄워본다.
# app.py
import streamlit as st
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
from datetime import datetime, timedelta
import matplotlib.font_manager as fm
import platform
import os
# 폰트 파일 경로 설정
font_path = os.path.join('nanum-gothic', 'NanumGothic.ttf')
font_prop = fm.FontProperties(fname=font_path)
# 운영체제에 따른 한글 폰트 설정
if platform.system() == 'Windows':
plt.rcParams['font.family'] = 'Malgun Gothic'
else: # Linux or other systems
# 폰트 매니저에 폰트 추가
fm.fontManager.addfont(font_path)
plt.rcParams['font.family'] = font_prop.get_name()
plt.rcParams['axes.unicode_minus'] = False
sns.set(font=plt.rcParams['font.family'],
rc={'axes.unicode_minus':False},
style='darkgrid')
# 페이지 설정
st.set_page_config(page_title="주식 차트 대시보드", layout="wide")
# 대시보드 제목
st.title("주식 차트 대시보드")
st.title("대시보드코드 업데이트!!!!")
# 티커 파일에서 데이터 로드
@st.cache_data
def load_tickers():
tickers = {}
try:
with open('stock_tickers.txt', 'r') as file:
for line in file:
if ':' in line:
name, ticker = line.strip().split(':')
tickers[name.strip()] = ticker.strip()
except Exception as e:
st.error(f"티커 로딩 오류: {str(e)}")
tickers = {"Apple": "AAPL"} # 기본값
return tickers
# 사이드바 - 사용자 입력
st.sidebar.header("주식 정보")
st.sidebar.header("대시보드코드 업데이트!!!!")
tickers = load_tickers()
selected_company = st.sidebar.selectbox(
"기업 선택",
options=list(tickers.keys()),
index=0
)
ticker = tickers[selected_company]
# 날짜 선택
start_date = st.sidebar.date_input("시작 날짜", datetime.now() - timedelta(days=365))
end_date = st.sidebar.date_input("종료 날짜", datetime.now())
# 주식 데이터 가져오기
@st.cache_data
def load_data(ticker, start_date, end_date):
stock = yf.Ticker(ticker)
df = stock.history(start=start_date, end=end_date)
return df
try:
df = load_data(ticker, start_date, end_date)
# 기본 주식 정보 표시
st.subheader(f"{selected_company} ({ticker}) 주식 정보")
col1, col2, col3 = st.columns(3)
with col1:
st.metric("현재 가격", f"${df['Close'][-1]:.2f}")
with col2:
st.metric("52주 최고가", f"${df['High'].max():.2f}")
with col3:
st.metric("52주 최저가", f"${df['Low'].min():.2f}")
# 다양한 시각화를 위한 탭 생성
tab1, tab2, tab3 = st.tabs(["Matplotlib", "Seaborn", "Plotly"])
# Matplotlib 차트
with tab1:
st.subheader("Matplotlib 차트")
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(df.index, df['Close'], label='종가')
ax.set_title(f"{selected_company} ({ticker}) 주가")
ax.set_xlabel("날짜")
ax.set_ylabel("가격 ($)")
ax.grid(True)
ax.legend()
st.pyplot(fig)
# Seaborn 차트
with tab2:
st.subheader("Seaborn 차트")
fig, ax = plt.subplots(figsize=(12, 6))
sns.lineplot(data=df, x=df.index, y='Close', ax=ax)
ax.set_title(f"{selected_company} ({ticker}) 주가")
ax.set_xlabel("날짜")
ax.set_ylabel("가격 ($)")
ax.grid(True)
st.pyplot(fig)
# Plotly 차트
with tab3:
st.subheader("Plotly 차트")
fig = px.line(df, x=df.index, y='Close',
title=f"{selected_company} ({ticker}) 주가",
labels={'Close': '가격 ($)', 'index': '날짜'})
fig.update_layout(
xaxis_title="날짜",
yaxis_title="가격 ($)",
hovermode="x unified"
)
st.plotly_chart(fig, use_container_width=True)
# 기술적 분석
st.subheader("기술적 분석")
col1, col2 = st.columns(2)
with col1:
# 이동평균선
df['MA20'] = df['Close'].rolling(window=20).mean()
df['MA50'] = df['Close'].rolling(window=50).mean()
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(df.index, df['Close'], label='종가')
ax.plot(df.index, df['MA20'], label='20일 이동평균')
ax.plot(df.index, df['MA50'], label='50일 이동평균')
ax.set_title(f"{selected_company} ({ticker}) 이동평균선")
ax.set_xlabel("날짜")
ax.set_ylabel("가격 ($)")
ax.grid(True)
ax.legend()
st.pyplot(fig)
with col2:
# 거래량 분석
fig, ax = plt.subplots(figsize=(12, 6))
ax.bar(df.index, df['Volume'], alpha=0.5)
ax.set_title(f"{selected_company} ({ticker}) 거래량")
ax.set_xlabel("날짜")
ax.set_ylabel("거래량")
ax.grid(True)
st.pyplot(fig)
except Exception as e:
st.error(f"데이터 로딩 오류: {str(e)}")
streamlit으로 띄우기
streamlit run app.py

잘 되는 것을 확인했으면 이제 배포를 해보자.
Github에 stockdashboard라는 이름으로 repository를 하나 만들자.
그리고 git clone으로 바탕화면에 폴더 생성한다.
그리고 지금까지 한 작업물 또는 stock_tickers.txt, app.py,requirements.txt를 파일에 복사 붙여넣기 한다.
(또는 현재 폴더에서 바로 깃허브 레포지토리에 연결해도 된다. 근데 복잡함...)
그리고 해당 폴더에 아래 글꼴 파일을 넣는다.(압축 풀어야됨, 글꼴 사이트에서도 가능)
아래 사이트에서도 다운로드 가능하다.
https://hangeul.naver.com/font
네이버 글꼴 모음
네이버가 만든 150여종의 글꼴을 한번에 만나보세요
hangeul.naver.com
현재 폴더에 있는 파일과 폴더들은 다음과 같다.

그리고 git push 한다.
git add .
git commit -m "업로드"
git push
가상환경 만들고 필요한 라이브러리들 설치하고(위에서 했던 거)
streamlit run app.py 실행.
그리고 아래 사이트에 접속한다.
Streamlit Community Cloud • Streamlit
Deploy, manage, and share your Streamlit apps — all for free.
streamlit.io
Explore user apps 를 클릭한다.

깃허브 계정으로 로그인한다.
그리고 오른쪽 상단에 Create app을 클릭한다.

Deploy a public app from GitHub를 클릭한다.

그럼 다음과 같은 창이 뜬다.

- Repository : 방금 만든 깃허브 레포지토리의 주소를 복사 붙여넣기하면 된다.
- Branch는 master인지 main인지 잘 보고 설정한다.
- Main file path : 어떤 파일을 대시보드에 띄울지 파일이름 넣기
내용을 넣은 결과는 다음과 같다.

그럼 App URL이 만들어진다.
Deploy 버튼을 누르면 배포 완료!


잘 뜨면 성공이다.
URL 공유도 가능하다.
끝!
'부트캠프 > LG U+ Why not SW Camp 6기' 카테고리의 다른 글
| [LG U+ why not SW camp 6기] Python 데이터분석1-Pandas (0) | 2026.01.30 |
|---|---|
| [LG U+ why not SW camp 6기] Python 데이터분석 1 - NumPy (0) | 2026.01.30 |
| [LG U+ why not SW camp 6기] Python 프로그래밍 기초 (0) | 2026.01.30 |
| [LG U+ why not SW camp 6기] 머신 러닝 & 딥러닝 개요 (0) | 2026.01.29 |
| { 유쾌한 R 통계학 } Ch15. 비모수적 검정 후반부 (4) | 2025.06.18 |
