아래와 같은 코드를 사용하여 주가 데이터를 획득할 수 있습니다.
사용한 라이브러리는 FinanceDataReader입니다.
import FinanceDataReader as fdr
price_df = fdr.DataReader("005930", '2009-09-16', '2018-03-21')
price_df.head()
그리고 005930 코드를 사용하여 삼성전자 주가 데이터를 획득할 수 있습니다.
획득한 데이터의 형태는 DataFrame입니다.
2009년 9월 16일부터 2018년 3월 21일까지의 데이터를 획득할 수 있습니다.
그럼 FinanceDataReader에서 제공해 주는 삼성전자의 전체 데이터를 구하고 싶을 때는 코드만 인자값으로 전달하면 됩니다.
import FinanceDataReader as fdr
price_df = fdr.DataReader("005930")
price_df
결괏값을 보니 1999년 8월 17일 데이터부터 구할 수 있는 것을 확인할 수 있습니다.
그럼 우선 첫 번째 Row값을 Series로 가져오려고 할 때는 어떻게 하면 될 것 같나요?
iloc을 이용하는 방법을 사용하면 됩니다.
price_df.iloc[0]
DataFrame의 0번째 Row값을 Series로 가져온 것을 확인할 수 있습니다.
그럼 DataFrame과 Series 간의 연산을 해보려고 합니다.
(price_df - price_df.iloc[0]).head()
이때 중요한 원칙이 있습니다. DataFrame은 Columns를 기준으로 계산하며 Series는 Index를 기준으로 계산을 합니다.
그럼 price_df의 Columns는 [Open, High, Low, Close, Volume Change]입니다.
그리고 Series의 Index도 [Open, High, Low, Close, Volume Change]입니다.
따라서 계산 시에 문제없이 브로드캐스팅되어 row마다 Series 데이터로 빼준 것을 확인할 수 있습니다.
그럼 이번에는 아래와 같은 연산을 해보면 어떻게 될까요?
(price_df - price_df['Open']).head()
price_df ['Open']은 index가 Date이고 값은 Open 값을 가지고 있는 Series입니다.
따라서 price_df의 Columns와 price_df ['Open']의 index값이 일치하지 않으므로 제대로 된 연산을 할 수 없습니다.
그럼 DataFrame과 DataFrame 간의 계산을 한번 살펴봅시다.
price_df - price_df[['Open', 'Low']].iloc[:2].head()
price_df[['Open', 'Low']]. iloc [:2]는 아래와 같은 DataFrame입니다.
여기서는 해당하는 index와 Columns에 포개어져서 계산이 되고 나머지는 NaN값을 갖게 되는 것을 확인할 수 있습니다.
'백테스트를 위한 파이썬' 카테고리의 다른 글
[파이썬 퀀트] 4.3 데이터 갯수를 기준으로 grouping 하기 - qcut() (0) | 2023.12.22 |
---|
댓글