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

6. 주가 데이터 그래프 그리기 (1) feat. Matplotlib

by 에쓰지 2022. 7. 11.
※ 늦게라도 " 코딩"을 배워야 겠다는 사람이 있다면 혹시라도 도움이 될까해서 그동안 알게 된 내용을 공유하려고 합니다.

지난 회차에 파이썬의 판다스 라이브러리에 loc,iloc를 이용하여 데이터를 행 기준으로 찾는 방법을 알아 봤습니다.

2022.06.22 - [파이썬과 주식] - 5. 주가 데이터 선택하기 feat. 판다스 Pandas ( loc, iloc )

 

5. 주가 데이터 선택하기 feat. 판다스 Pandas ( loc, iloc )

※ 늦게라도 "코딩"을 배워야겠다는 사람이 있다면 혹시라도 도움이 될까해서 그동안 알게 된 내용을 공유하려고 합니다. 지난 회차에 파이썬의 판다스 라이브러리를 이용하여 기본으로 다운로

pmxsg.tistory.com

이번 회차에는 지금까지 만들었던 코드를 이용해 얻은 주가데이터의 그래프를 그려 보겠습니다.

주가 데이터를 분석하는 가장 기본적인 도구가 그래프라 할 수 있습니다.

데이터 시각화(Data Visualization)는 데이터 분석 결과를 쉽게 이해할 수 있도록 시각적으로 표현하고 전달되는 과정을 말한다. 데이커 시각화의 목적은 도표(Graph)라는 수단을 통해 정보를 명확하고 효과적으로 전달하는 것이다.

파이썬 라이브러리 중에 그래프를 그릴 때 자주 언급되는 것들은 Matplotlib, Seaborn, Plotly 등이 있습니다.

Matplotlib :  Python 프로그래밍 언어 및 수학적 확장 NumPy 라이브러리를 활용한 플로팅 라이브러리입니다.

Seaborn : Seaborn은 Matplotlib을 기반으로 다양한 색상 테마와 통계용 차트 등의 기능을 추가한 시각화 패키지이다. 기본적인 시각화 기능은 Matplotlib 패키지에 의존하며 통계 기능은 Statsmodels 패키지에 의존한다. 

Plotly :  퀘벡주 몬트리올  본사를 두고 온라인 데이터 분석  시각화 도구를 개발하는 기술 컴퓨팅 회사입니다. Plotly는 개인 및 공동 작업을 위한 온라인 그래프 작성, 분석 및 통계 도구와 Python , R , MATLAB , Perl , Julia , Arduino  REST 용 과학 그래프 라이브러리를 제공 합니다.

이 중에 Matplotlib을 이용해서 그래프를 그려보고자 합니다. 

위 그래프는 네이버 주식창에서 차트 파트에 있는 주가변동내역,이동평균,거래량을 한꺼번에 보여주는 그래프 입니다.  이 그래프를 코드를 통해서 만들어 보겠습니다.

우선 Matplotlib 라이브러리 기본적인 사용법을 먼저 알아 보겠습니다.


1. 선 그래프 ( Plot )

 

주가변동과 이동평균 그래프는 선 그래프를 사용하겠습니다.

그럼 선 그래프를 그리는 방법을 알아보겠습니다.

import matplotlib.pyplot as plt

x=[1,2,3]
y=[3,4,7]
plt.plot(x,y)

먼저, Matplotlib을 사용하려면 첫 줄에 " import matplotlib.pyplot as plt " 라고 맵플로립 라이브러리는 " plt" 라는 이름을 사용하겠다고 알려줍니다.

선 그래프를 그리는 함수는 plot( ) 입니다. 괄호 안에 x축에 들어갈 데이터와 y축에 들어갈 데이터를 차례로 넣어주면 됩니다. 위 코드를 실행하면 아래의 그래프가 나타납니다.

변수 x,y 에 각각 [1,2,3 ] 과 [3,4,7]을 담아놓았는데, 변수 없이 코드를 쓴다면,

plt.plot([1,2,3],[3,4,7])

이런 형태가 됩니다.

주가 변동을 선 그래프에 적용한다면, x축 데이터에는 "날짜"가 y축 데이터에는 "종가" 를 적용시키면 됩니다.아래는 지난 회차까지 만들어진 코드입니다.

import FinanceDataReader as fdr
df = fdr.DataReader('005930','2021-01-01','2022-06-27')
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일_이동평균']]
df1 = df["2021-6-25":"2022-06-27"]
df1.to_csv("삼성전자_V2.csv")
df1.to_excel("삼성전자_V2.xlsx")

이 코드로 만들어진 "삼성전자_V2.csv" 파일을 불러들여서 선 그래프를 그려 보겠습니다.

먼저 csv 파일을 불러오려면 판다스 라이브러리를 이용해서 불러 들일 수 있습니다.

import pandas as pd
df = pd.read_csv("삼성전자_V2.csv")
df

불러들인 파일은 df 라는 데이터프레임 형태로 나타납니다.

x축 데이터인 "Date" 열(Column)의 내용을 확인해 보겠습니다.

지난 회차에서 알아봤듯이 열(Column)의 내용을 불러올 때는 데이터프레임["(Column)"]의 형태를 취하면 됩니다. 

같은 방법으로 y축 데이터인 "종가"열(Column)의 내용을 확인해 보겠습니다.

이제 위 예제에서 사용했던 plot( ) 함수를 이용해서 선 그래프를 그려 보겠습니다.

x축 데이터에는 df["Date']로 날짜 데이터를 넣고, y축 데이터에는 df["종가"]로 종가 데이터를 넣고 실행시킵니다.

import matplotlib.pyplot as plt

plt.plot(df["Date"],df["종가"])

plt.plot(df["Date"],df["종가"]) 한 줄로 간단한 선 그래프를 만들어 냅니다.

그래프는 만들어졌지만, 뭔가 많이 부족해 보이는 그래프 입니다. 

지금부터 그래프를 하나씩 업그레이드 해보겠습니다.

그래프의 선의 색깔과 굵기를 조정해 보겠습니다.

색깔은 좀 진하게 navy로 하고 굵기도 좀 두껍게 해보겠습니다.

import matplotlib.pyplot as plt

plt.plot(df["Date"],df["종가"], color="navy" , linewidth = 3)

 

 

색깔 조정은  color = "  ",

선 굵기 조정은 linewidth =    , 

연결은 콤마와 등호를 사용해 조정하시면 됩니다.


 

2. 그래프 크기 : figure(figsize) 

 

이번에는 그래프 크기를 조정해 보겠습니다.

그래프 크기를 조정하는 함수는 figure( ) 함수 입니다.

figure 는 그림, 인물, 숫자 등 여러가지로 해석되지만, 여기서는 그림이란 뜻으로 사용합니다.

이 함수안에 figsize 라는 매개변수를 이용하여 크기를 조정합니다.

앞선 주가변동 그래프 크기를 조정하는 코드는 아래와 같습니다.

import matplotlib.pyplot as plt

plt.figure(figsize=(15,10))
plt.plot(df["Date"],df["종가"], color="navy" , linewidth = 3)

 

figsize를 설정하지 않았을 때의 기본값은 ( 6.4, 4.8 ) 입니다. 단위는 인치(inch) 이고 ( 가로, 세로 ) 순으로 넣어서 조정할 수 있습니다. 

figure( ) 함수에는 figsize외에도 그래프의 모양을 조정할 수 있는 많은 매개변수가 있습니다. 앞으로 나올 때마다 하나씩 알아보겠습니다.

3. 한글 폰트 설정 : font

 

matplotlib에서 한글을 사용하려면  미리 한글 설정을 해 놓아야 합니다. 설정을 해놓지 않으면 한글을 사용할 때 깨져서 나옵니다. 

import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic' # 폰트설정
matplotlib.rcParams['font.size'] = 15 # 글자크기
matplotlib.rcParams['axes.unicode_minus'] = False # 마이너스기호(-)가 깨지는 현상 방지

 

matplotlib 을 불러올 때 위 코드를 함께 설정을 해놓으면 한글 폰트 깨짐 현상을 방지할 수 있습니다.

rcParams 는  Runtime Configuration Parameters를 줄인 것인데 번역하면 동적 구성 매개 변수들 이란 뜻입니다. 일종의 사전 설정 작업이라고 보시면 됩니다. 즉 미리 설정을 정해놓으면 따로 코드에 추가하지 않아도 작용한다는 것입니다. 미리 한글 설정을 해놓으면 이후 코드에 매번 폰트 설정을 하지 않아도 적용된다는 것입니다.


4. 제목 설정 : title

이제 그래프 제목을 추가하겠습니다.

제목을 추가하는 함수는 title( ) 입니다.

괄호 안에 "삼성전자 주가" 라는 제목을 넣겠습니다.

import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic' # 폰트설정
matplotlib.rcParams['font.size'] = 15 # 글자크기
matplotlib.rcParams['axes.unicode_minus'] = False 

import matplotlib.pyplot as plt

plt.figure(figsize=(15,10))
plt.plot(df["Date"],df["종가"])
plt.title("삼성전자 주가")

제목의 크기나 색깔, 굵기 등도 조절할 수 있습니다.

plt.title("삼성전자 주가", color = "blue", fontsize = 25, fontweight = "bold")

색깔 조정은  color = "  ",

글자 크기 조정은  fontsize =   ,

글자 굵기 조정은 fontweight = "  " , 

연결은 콤마와 등호를 사용해 조정하시면 됩니다.


5. 축 설정 : ticks,label

X축과 Y축에 간격을 설정 하거나 이름을 넣을 수도 있습니다.

위 그래프에서 X축이 검은색 띠로 나오는 이유는 날짜가 촘촘히 겹쳐보이기 때문입니다.

이것을 조정해 보고자 합니다. 이 때 사용할 수 있는 함수는 xticks ( ) 입니다.

30일 간격으로 적용해 보겠습니다.

import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic' # 폰트설정
matplotlib.rcParams['font.size'] = 15 # 글자크기
matplotlib.rcParams['axes.unicode_minus'] = False 

import matplotlib.pyplot as plt

plt.figure(figsize=(15,10))
plt.plot(df["Date"],df["종가"], color="navy" , linewidth = 3)
plt.title("삼성전자 주가", color = "blue", fontsize = 25, fontweight = "bold")
plt.xticks([1,30,60,90,120,150,180,210,240],rotation = 45 )

간격 설정은 리스트 형태로  대괄호 [ ] 와 쉼표로 표시를 해줍니다.

rotation = 45 : ticks의 기울기를 45도로 하라는 것입니다.

축의 이름을 설정할 때는 label( ) 함수를 사용합니다.

X축의 이름을 " 기간" 이라 하고 Y축의 이름은 "단위 : 원 " 으로 적용해 보겠습니다.

import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic' # 폰트설정
matplotlib.rcParams['font.size'] = 15 # 글자크기
matplotlib.rcParams['axes.unicode_minus'] = False 

import matplotlib.pyplot as plt

plt.figure(figsize=(15,10))
plt.plot(df["Date"],df["종가"], color="navy" , linewidth = 3)
plt.title("삼성전자 주가", color = "blue", fontsize = 25, fontweight = "bold")
plt.xticks([1,30,60,90,120,150,180,210,240],rotation = 45 )
plt.xlabel("기간")
plt.ylabel("단위 : 원")

loc = " " 는 축 이름 위치를 조절 할 수 있습니다. xlabel에서는 left,center,right를 값으로 주어지고, ylabel에서는 top,center,bottom으로 값을 사용할 수 있습니다.

color = " " 축 이름 색깔을 조정할 수 있습니다.



이번 회차는 주가변동 내역 부분의 그래프를 그려봤습니다.

Matplotlib에서 plot ( ) 함수로 기본적인 그래프 모양은 나옵니다. 

그러나 원하는 모양의 그래프로 만들려면 추가적인 함수들을 사용해서 코드를 추가해야 합니다. 다소 번거로울 수도 있지만, 코드의 장점은 한번 만들어진 코드는 재사용에 유용하다 것을 생각해서 한 번의 고생을 이겨내시기 바랍니다. 

다음 회차에는 이동평균과 거래량 그래프를 추가해 보겠습니다.

댓글