지난 회차에 반복문을 사용하여 주가를 한꺼번에 다운로드 받은 데이터에 이동평균을 더하고 그래프를 그리는 코드를 알아봤습니다.
2022.09.06 - [파이썬과 주식] - 10. 파이썬 반복문을 이용한 주가 데이터 한꺼번에 다운로드 (2)
이번 회차에는 반복문을 이용하여 주가 비교 하는 법을 알아보겠습니다.
주가를 비교할 종목은 지난 회차에 썼던 SK이노베이션, 현대모비스, SK 등 세 종목을 사용하겠습니다.
stocks = { "sk이노베이션" : "096770", "현대모비스":"012330","SK":"034730" }
1. 판다스 DataFrame
판다스 DataFrame에 대해서는 지난 회차 "주가데이터에 이동평균 추가하기"에서 알아봤습니다.
2022.06.15 - [파이썬과 주식] - 4. 주가 데이터에 이동 평균 추가하기 feat. 판다스 Pandas
데이터 프레임은 행과 열로 이루어진 표 형태입니다.(1) DataFrame 생성하기생성하는 법은 "DataFrame( )" 으로 데이터프레임을 선언합니다.
사용법은
변수 = pandas.DataFrame( )
형식으로 사용합니다.
import pandas as pd
data = pd.DataFrame()
"data" 란 이름의 데이터프레임을 생성하였습니다.
(2) 열(Column) 추가하기
열을 추가하는 방법은
데이터프레임이름["열(Column) 이름"] = "값"
형태로 기존에 없었던 이름을 대괄호[ ] 안에 넣고 들어갈 내용을 등호( = )로 이어주면 됩니다.
import FinanceDataReader as fdr
df = fdr.DataReader('034730','2021-01-01','2022-08-31')
df
"SK"의 주가 데이터를 데이터 프레임으로 다운로드 받았습니다.
앞에 만들었던 "data" 란 데이터 프레임에 SK 주가데이터 중 종가(Close) 부분을 SK라는 이름으로 추가하겠습니다.
import FinanceDataReader as fdr
import pandas as pd
data = pd.DataFrame()
df = fdr.DataReader('034730','2021-01-01','2022-08-31')
data['SK'] = df['Close']
data
2. 반복문 For
반복문을 이용해서, SK이노베이션 종가와 현대모비스 종가를 위 데이터 프레임 data 안에 넣어보겠습니다.
import FinanceDataReader as fdr
import pandas as pd
stocks = { "SK이노베이션" : "096770", "현대모비스":"012330","SK":"034730" }
data = pd.DataFrame()
for i in stocks:
code = stocks[i]
df = fdr.DataReader(code,'2021-01-01','2022-08-31')
data[i] = df["Close"]
data
반복문의 변수 i 는 딕셔너리 stocks 안에 key값을 순차적으로 반환합니다. 즉, SK이노베이션, 현대모비스,SK 순으로 실행합니다.
stocks[i] 는 각각의 value인 "096770","012330","034730"을 반환합니다.data[i]에는 "SK이노베이션, 현대모비스,SK " 라는 이름의 열(Column)이 생성되고, 각각에는 df['Close'] 의 값인 종가가 들어가게 됩니다.
3. 그래프 그리기
import FinanceDataReader as fdr
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic'
matplotlib.rcParams['font.size'] = 15
matplotlib.rcParams['axes.unicode_minus'] = False
stocks = {"SK이노베이션":"096770","현대모비스":"012330","SK":"034730"}
data=pd.DataFrame()
for i in stocks:
code = stocks[i]
df = fdr.DataReader(code,'2021-01-01','2022-08-31')
data[i] = df["Close"]
data.to_csv("주가비교.csv")
plt.figure(figsize=(15,10))
plt.xticks(rotation=45)
plt.plot(data["SK이노베이션"], label="SK이노베이션", color='#CD5C5C')
plt.plot(data["현대모비스"], label="현대모비스")
plt.plot(data["SK"], label="SK")
plt.xlabel('20210401~20220419', color='#CD5C5C', loc='right') #left, center, right
plt.ylabel('단위: 원', color='#CD5C5C', loc='top') # top, center, bottom
plt.legend()
plt.title("주가 비교", color='green')
plt.grid(axis='y',linestyle='--',color='purple')
plt.savefig("주가비교.png",dpi=100)
4. subplots ( )
subplots( ) 함수는 여러 개의 그래프를 하나의 그림 안에 나타낼 때 사용합니다.
subplot( ) 과 subplots( ) 둘 다 여러 개의 그래프를 하나의 그림 안에 그리는 함수 이지만, 사용법이 약간 다릅니다. 여기서는 subplots( ) 를 사용하여 그래프를 그려보겠습니다.
사용법은,
import matplotlib.pyplot as plt
fig,ax = plt.subplots(nrows=2, ncols =2)
plt.subplots(rows , cols) : 만들고자하는 갯수를 앞에는 줄, 뒤에는 열 순으로 넣어주면 됩니다.
import matplotlib.pyplot as plt
fig,ax = plt.subplots(3,1)
nrows, ncols 없이 순서대로 숫자만 넣어줘도 됩니다.
subplots( ) 함수는 두 개의 값을 생성합니다. 하나는 figure 값으로 전체를 나타내는 그림이고, 또 하나는 부분(축)을 의미하는 axes 값입니다. 각각 fig, ax로 받습니다. 이름을 중요하지 않고 순서가 중요합니다. 앞쪽이 figure, 뒤쪽이 axes 입니다.
축을 공유하는 법 : sharex, sharey
import matplotlib.pyplot as plt
fig,ax = plt.subplots(nrows=2, ncols =2, sharey=True)
y축 공유는 sharey = True ,
import matplotlib.pyplot as plt
fig,ax = plt.subplots(nrows=2, ncols =2, sharey=True, sharex=True)
x축 공유는 sharex =True
import matplotlib.pyplot as plt
fig,ax = plt.subplots(3,1,sharex=True)
x축 공유는 sharex =True
앞선 SK이노베이션, 현대모비스,SK 종가를 따로 분리해서 그래프를 그려보겠습니다.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("주가비교.csv")
df.set_index('Date',inplace=True)
fig,(ax1,ax2,ax3) = plt.subplots(3,1,sharex=True)
df.plot(y='SK이노베이션', ax=ax1)
df.plot(y="현대모비스", ax=ax2)
df.plot(y='SK',ax=ax3)
'파이썬과 주식' 카테고리의 다른 글
10. 파이썬 반복문을 이용한 주가 데이터 한꺼번에 다운로드 (2) (1) | 2022.09.06 |
---|---|
9. 파이썬 반복문을 이용하여 여러 종목 주가 데이터 받기(1) (1) | 2022.09.01 |
8. 주가 데이터 분석하기 feat. Pandas-describe( ),resample( ) (0) | 2022.07.29 |
7. 주가 데이터 그래프 그리기(2) feat. Matplotlib (0) | 2022.07.16 |
6. 주가 데이터 그래프 그리기 (1) feat. Matplotlib (0) | 2022.07.11 |
댓글