이번 포스팅에서는 Streamlit Cloud를 통해 yfinance 패키지를 사용하면서 만난 오류를 소개하고자 합니다. 나스닥, S&P 500 지수의 20일선 그래프를 한 페이지에서 보고 싶어서 시작했는데 오류 해결하는 데 시간을 거의 다 쓴 것 같아요. 참고로 해당 오류는 로컬에서 Streamlit run을 했을 때는 발생하지 않았답니다... 😂
오류 : BrokenPipeError
이 오류는 "BrokenPipeError"이며, 해당 오류는 일반적으로 데이터가 너무 큰 경우, 네트워크 연결이 끊어졌거나 데이터 전송 중 문제가 발생했을 때 발생한다고 합니다. 그래서 데이터를 다운로드 받는 기간을 줄이는 등의 방법을 시도해보았지만 실패했습니다.
import yfinance as yf
# Fetch data
def fetch_data(ticker):
# Retrieve stock data
data = yf.download(ticker, start=start_date, end=end_date)
return data
fetch_data("^IXIC")
해결 방법
결론적으로는 아래 코드로 대체하여 해결할 수 있었습니다. yf.download를 사용하지 않고 yf.Ticker.history를 사용하면 잘 작동하더라구요. period, interval을 원하는 데이터에 맞춰 사용하면 됩니다. (yfinance 깃허브 참고)
import yfinance as yf
# Fetch data
def fetch_data(ticker):
# Retrieve stock data
stock = yf.Ticker(ticker)
history = stock.history(period="1y", interval="1d")
data = pd.DataFrame(history)
return data
fetch_data("^IXIC")