본문 바로가기
파이썬과 주식

4. 주가 데이터에 이동 평균 추가하기 feat. 판다스 Pandas

by 에쓰지 2022. 6. 15.
※ 늦게라도 "코딩"을 배워봐야겠다는 사람이 있다면 혹시라도 도움이 될까 해서 그 동안 알게 된 내용을 공유하려고 합니다.  저는 50대이고 코딩시작은 2021년 11월 부터입니다. 이제 코딩이란 것을 시작한 지 6개월 정도 되었습니다. 

지난 회차에 파이썬 Python의 개요, 기본이라고 하는 자료형 Data Type과 변수에 대해 간단히 알아 봤습니다.

2022.06.09 - [파이썬과 주식] - 3. 파이썬 Python 개요 - 자료형(Data Type)

 

3. 파이썬 Python 개요 - 자료형(Data Type)

※ 늦게라고 "코딩"이란 것을 배워봐야 겠다는 사람이 있다면 혹시라도 도움이 될까해서 나의 경험담을 적어보려 합니다. 지난 회차에 파이썬 코드를 이용한 주가 데이터 다운로드 받는 것을 알

pmxsg.tistory.com

 

이번 회차에는 다운로드 받은 주가 데이터에 이동평균을 추가하는 법을 알아 보고자 합니다.

 위 그래프는 네이버 주식창에 차트부문에서 볼 수 있는 이동평균 그래프 입니다.  이동평균은 주가분석할 때 주가의 흐름을 예측할 때 유용하게 사용하는 방법입니다. 

위 그래프는 궁극적으로 만들어 보고자 하는 목표입니다. 그래프를 만들기 전에 이동평균을 구하는 법을 먼저 알아보고자 합니다.


1. 이동 평균 구하는 코드

 

지난 회차에 했던 주가 데이터를 다운로드 하는 법에 코드를 추가해서 이동평균을 구해보고자 합니다.

2022.06.03 - [파이썬과 주식] - 2. 주가 데이터 다운로드 받기 ( 엑셀 / CSV )

 

2. 주가 데이터 다운로드 받기 ( 엑셀 / CSV )

※ 늦게라도 "코딩"이란 것을 배워봐야겠다는 사람이 있다면 혹시라도 도움이 될까 해서 나의 경험담을 적어보려 합니다. 지난회차에 파이썬 Python을 사용할 환경설정을 위해서 아나콘다 Anaconda

pmxsg.tistory.com

지난 회차 파이썬 코드로 주가 데이터 다운로드 받을 때 썼던 4 가지 라이브러리 중에 "FinanceDataReader" 를 이용하려고 합니다.

import FinanceDataReader as fdr
df = fdr.DataReader('005930','2021-06-03','2022-06-03')
df.to_excel("삼성전자3.xlsx")
df.to_csv("삼성전자3.csv")

파이썬에는 이동평균을 쉽게 구할 수 있는 방법이 있습니다.

보다 구체적으로는 "판다스 Pandas" 라는 파이썬의 라이브러리의 코드를 이용하면 쉽게 구할 수 있습니다.

▶ rolling( ) 함수 : 이동기술 통계량을 계산할 수 있는 도구입니다. 괄호 안에 계산하고자 하는 기간을 넣어주면 됩니다. 이번 코드에서는 5일,20일,60일,120일을 각각 구해보고자 합니다.

mean ( ) 함수 : 평균을 구하는 함수 입니다.

위 두 함수를 이용한 이동평균을 구하는 코드는 아래와 같습니다.

import FinanceDataReader as fdr
df = fdr.DataReader('005930','2021-06-03','2022-06-03')
df['5일_이동평균']=df['Close'].rolling(5).mean()
df['20일_이동평균']=df['Close'].rolling(20).mean()
df['60일_이동평균']=df['Close'].rolling(60).mean()
df['120일_이동평균']=df['Close'].rolling(120).mean()
df.to_excel("삼성전자_이동평균.xlsx")
df.to_csv("삼성전자_이동평균.csv")
df

삼성전자_이동평균.csv
0.02MB
삼성전자_이동평균.xlsx
0.02MB


2. 판다스 Pandas

 

 

판다스 Pandas를 위키백과에서 찾아보면,

" 데이터 조작 및 분석을 위한 Python 프로그래밍 언어 용으로 작성된 소프트웨어 라이브러리입니다. 특히 숫자 테이블과 시계열 을 조작하기 위한 데이터 구조 와 연산을 제공합니다." 라고 설명하고 있습니다.

파이썬을 사용하신다면 자주 이용하게 될 라이브러리 중에 하나 입니다. 주가 데이터 다운로드 코드들 역시 판다스를 기본으로 만들어진 것 입니다. 그런 탓에 판다스의 기본적인 부분에 대해서 정리해 보고자 합니다.


( 1 ) 데이터 프레임 DataFrame

지난 회차에 주식 데이터를 아래의 코드로 다운로드 받았습니다.

import FinanceDataReader as fdr
df = fdr.DataReader('005930','2021-06-03','2022-06-03')

다운로드 된 자료는 "df" 라는 이름의 변수에 저장했습니다. 이 변수의 type 을 찍어보면,

"DataFrame" 이라고 나옵니다.

데이터 프레임이란 한마디로 자료가 들어 있는 표를 의미합니다.

이 데이터 프레임은 248행과 6열로 자료가 입력되어 있는 것입니다.

행은 날짜로, 열 column 은 Open, High, Low, Close, Volume , Change 로 구성되어 있습니다.


( 2 ) 데이터 프레임 컬럼 이름 바꾸기

컬럼 이름을 바꿀 수 있습니다.

df.rename(columns={"Close":"종가","Volume":"거래량"}, inplace = True)
df

Close, Volume을 종가, 거래량으로 바꿀 때 필요한 함수는 "rename" 입니다."columns = " 속성값을 딕셔너리 형태로  { "이전이름" : "새이름" } 형식으로 입력하면 됩니다. 2개 이상 바꾸려면 구분은 쉼표(,)로 하면 됩니다.  "inplace" 속성은 데이터프레임에 변경사항을 바로 적용시키라는 것입니다. 값으로 True를 주면 됩니다.


( 3 ) 데이터 프레임 컬럼 column 추가하기

이 데이터 프레임에는 자료를 추가할 수도 있습니다.

df['5일_이동평균']=df['Close'].rolling(5).mean()

[ ] 에 기존에 없었던 이름의 column을 넣고 그 내용을 추가하면 맨 마지막에 해당 column이 생성됩니다.


insert 함수를 이용하면 원하는 곳에 컬럼을 만들 수 있습니다.

df.insert(5,'등락',df['종가'].diff())

insert ( 원하는 위치 인덱스 , 컬럼이름, 컬럼 값 ) 형식으로 추가하면 됩니다.인덱스는 open 부터 0 으로 시작합니다. 등락의 위치는 6번째이지만 index는 5 가 됩니다.


 ( 4 ) 데이터 프레임 컬럼 2개이상 불러오기

Data 중에서 원하는 column만 선택하거나 순서 변경 가능합니다.Data 컬럼을 만들다보면 크기가 커지고 필요없는 것들도 있고 순서도 바꾸고 싶을 때가 있습니다. 원하는 데이터 컬럼만 골라서 저장할 수도 있습니다.종가, 등락 , 5일 이동평균, 거래량 순으로 4개의 컬럼만 불러오겠습니다.

df[['종가','등락','5일_이동평균','거래량']]

2개 이상의 컬럼을 가져올 때는 '리스트' 형태가 되기 때문에 [ ]를 하나 더 사용하여야 합니다.

[ ]를 안해서 에러가 나는 경우가 종종 있습니다.


3. 최신 버전

 

지금까지 알아봤던 내용들을 적용해서 코드를 정리해 보겠습니다.

import FinanceDataReader as fdr
df = fdr.DataReader('005930','2021-06-03','2022-06-03')
df.rename(columns={"Close":"종가","Volume":"거래량"},inplace = True)
df.insert(5,'등락',df['종가'].diff())
df['5일_이동평균']=df['종가'].rolling(5).mean()
df['20일_이동평균']=df['종가'].rolling(20).mean()
df['60일_이동평균']=df['종가'].rolling(60).mean()
df['120일_이동평균']=df['종가'].rolling(120).mean()
df = df[['종가','등락','거래량','5일_이동평균','20일_이동평균','60일_이동평균','120일_이동평균']]
df.to_excel("삼성전자_V1.xlsx")
df.to_csv("삼성전자_V1.csv")
df

삼성전자_V1.csv
0.02MB
삼성전자_V1.xlsx
0.02MB

코드는 위에서 부터 순차적으로 작용하기 때문에 저장된 내용은 모든 작업이 종료된 '종가','등락','거래량','5일_이동평균','20일_이동평균','60일_이동평균','120일_이동평균' 등 7개의 컬럼으로 되어 있습니다.



위의 작업들은 첫 코드로 다운로드 받은 파일을 엑셀에서 작업을 해도 됩니다. 

다만, 코딩의 장점은 한 번 만들어 놓은 코드는 반복해서 사용가능하고, 종목코드, 시작일, 종료일만 바꾸면 손쉽게 추가 작업없이 수정된 데이터를  얻을 수 있습니다. 

제가 생각하는 코딩의 가장 큰 장점은 "반복을 하는 데 지치지 않는다"는 것 같습니다.

댓글