주식 데이터 조회 페이지 만들기 (with 사이드바)
1. 필요한 라이브러리 다운
import plotly.graph_objects as go
import pandas as pd
import streamlit as st
import yfinance as yf
import matplotlib.pyplot as plt
2. 사이드바에 주식 종목(티커)를 입력 / 시작 ~ 종료 날짜 생성 / 데이터 조회하는 코드
def main():
st.title("주식 데이터")
st.sidebar.title("Stock Chart")
ticker = st.sidebar.text_input("Enter a ticker (e. g. AAPL)", value = "AAPL")
st.sidebar.markdown('Tickers Link : [All Stock Symbols](https://stockanalysis.com/stocks/)')
start_date = st.sidebar.date_input("시작 날짜: ", value = pd.to_datetime("2023-01-01"))
end_date = st.sidebar.date_input("종료 날짜: ", value = pd.to_datetime("2023-07-28"))
#ticker 종목의 시작~종료 날짜 사이의 가격변화를 데이터로 보여줌
data = yf.download(ticker, start= start_date, end= end_date)
st.dataframe(data)
if __name__ == "__main__":
main()
- st.sidebar 를 통해 사이드바를 생성하고 내용을 넣을 수 있음.
- st.sidebar.text_input : 사이드바에 텍스트를 입력할 수 있는 요소를 만듦
- st.sidebar.date_input : 사이드바에 날짜를 입력할 수 있는 요소를 만듦
👉 결과
3. 라디오버튼으로 캔들스틱/라인형 그래프를 볼 수 있게 만들기
(위 함수에 이어지는 코드)
#Line Chart, Candle Stick 선택형으로 만들기
chart_type = st.sidebar.radio("Select Chart Type", ("Candle_Stick", "Line"))
candlestick = go.Candlestick(x=data.index, open=data['Open'], high=data['High'], low=data['Low'], close=data['Close'])
line = go.Scatter(x=data.index, y=data['Close'], mode='lines', name='Close')
if chart_type == "Candle_Stick":
fig = go.Figure(candlestick)
elif chart_type == "Line":
fig = go.Figure(line)
else:
st.error("error")
fig.update_layout(title=f"{ticker} Stock {chart_type} Chart", xaxis_title="Date", yaxis_title="Price")
st.plotly_chart(fig)
👉 결과
4. 최신 날짜부터 조회하고 싶은 행의 개수 지정(사이드바에 숫자 input 영역)
st.markdown("<hr>", unsafe_allow_html=True) #구분선 추가
#숫자를 넣을 수 있는 영역 생성
num_row = st.sidebar.number_input("Number of Rows", min_value= 1, max_value=len(data))
#최근 날짜부터 결과값 보여줌
st.dataframe(data[-num_row:].reset_index().sort_index(ascending = False).set_index("Date"))
👉 결과
[부록] 슬라이더 넣어보기
#방법1
value1 = st.sidebar.slider('숫자 선택(1)', 0, 100)
st.sidebar.write(value1)
#방법2
with st.sidebar:
value2 = st.slider("숫자 선택(2)",0, 100)
st.write(value2)
if __name__ == "__main__":
main()
👉 결과
728x90
'Streamlit' 카테고리의 다른 글
Streamlit 이란? (0) | 2023.07.31 |
---|---|
Streamlit 기본 문법(9) : 사이드바 & selectbox, tab 활용 (0) | 2023.07.28 |
Streamlit 기본 문법(7) : MultiSelect(멀티셀렉트) 위젯 (0) | 2023.07.28 |
Streamlit 기본 문법(6) : selectbox(셀렉트박스) 위젯 (0) | 2023.07.28 |
Streamlit 기본 문법(5) : radio(라디오) 위젯 (0) | 2023.07.28 |