※ 늦게라도 " 코딩"을 배워야 겠다는 사람이 있다면 혹시라도 도움이 될까해서 그동안 알게 된 내용을 공유하려고 합니다.
지난 회차에 파이썬의 판다스 라이브러리에 loc,iloc를 이용하여 데이터를 행 기준으로 찾는 방법을 알아 봤습니다.
2022.06.22 - [파이썬과 주식] - 5. 주가 데이터 선택하기 feat. 판다스 Pandas ( loc, iloc )
이번 회차에는 지금까지 만들었던 코드를 이용해 얻은 주가데이터의 그래프를 그려 보겠습니다.
주가 데이터를 분석하는 가장 기본적인 도구가 그래프라 할 수 있습니다.
데이터 시각화(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 ( ) 함수로 기본적인 그래프 모양은 나옵니다.
그러나 원하는 모양의 그래프로 만들려면 추가적인 함수들을 사용해서 코드를 추가해야 합니다. 다소 번거로울 수도 있지만, 코드의 장점은 한번 만들어진 코드는 재사용에 유용하다 것을 생각해서 한 번의 고생을 이겨내시기 바랍니다.
다음 회차에는 이동평균과 거래량 그래프를 추가해 보겠습니다.
'파이썬과 주식' 카테고리의 다른 글
8. 주가 데이터 분석하기 feat. Pandas-describe( ),resample( ) (0) | 2022.07.29 |
---|---|
7. 주가 데이터 그래프 그리기(2) feat. Matplotlib (0) | 2022.07.16 |
5. 주가 데이터 선택하기 feat. 판다스 Pandas ( loc, iloc ) (0) | 2022.06.22 |
4. 주가 데이터에 이동 평균 추가하기 feat. 판다스 Pandas (0) | 2022.06.15 |
3. 파이썬 Python 개요 - 자료형(Data Type) (0) | 2022.06.09 |
댓글