목차
[Python] 코스피 1년 차트 그리기 : 진행 과정
이번 포스트에서는 지난 1년간의 코스피 차트를 그려볼 예정입니다. 이번 프로젝트를 진행하기 위해 아래와 같은 과정이 필요합니다.
- 코스피 1년 동안의 차트 데이터 수집
- 판다스를 이용해서 차트 데이터를 테이블로 정리하기
- 정리된 테이블 중 비교를 원하는 데이터를 가져오기
- 그래프로 만들기
- 데이터 분석하기
1번 과정은 Web Scrawling을 통해서 가능합니다. 웹 스크롤링의 방법은 아래 링크를 참조하시면 됩니다.
https://scribblinganything.tistory.com/372
하지만 이전 과정에서 네이버 금융이 아닌 야후 파이낸스에서 CSV로 쉽게 받아오는 방법에 대해 알아 보았습니다. 야후 파이낸스에서 KOSPI 검색 후 차트 정보를 확인해보시면 CSV 파일을 받을 수 있는 링크가 있습니다.
혹시 그래도 이해가 안되신다면 아래 링크를 통해 확인하시면 됩니다.
https://scribblinganything.tistory.com/374
[Python] 코스피 1년 차트 그리기: 내용 분석하기
차트 분석과 차트 그리기를 위해서는 Pandas와 Matplotlib 이라는 라이브러리가 필요합니다. 없으시다면 "pip install 모듈명" 명령어로 설치하시면 됩니다.
판다스에서 제공하는 read_csv 함수를 통해서 읽을 파일을불러오고 테이블에 넣어서 확인하고 싶은 데이터만 불러서 확인해보겠습니다.
코드>>
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('kospi.csv')
print(df)
print(df["High"].describe())
print(df["Low"].describe())
결과>>
Date Open High Low Close Adj Close Volume
0 2020-10-28 2324.179932 2345.459961 2316.469971 2345.260010 2345.260010 705200
1 2020-10-29 2312.340088 2330.169922 2299.909912 2326.669922 2326.669922 509100
2 2020-10-30 2319.560059 2320.199951 2266.929932 2267.149902 2267.149902 795600
3 2020-11-02 2276.610107 2302.639893 2267.949951 2300.159912 2300.159912 678500
4 2020-11-03 2315.810059 2344.770020 2315.300049 2343.310059 2343.310059 887400
.. ... ... ... ... ... ... ...
242 2021-10-21 3012.280029 3025.879883 3002.739990 3007.330078 3007.330078 887000
243 2021-10-22 3005.360107 3018.699951 2996.260010 3006.159912 3006.159912 695000
244 2021-10-25 3001.100098 3025.270020 2983.290039 3020.540039 3020.540039 791500
245 2021-10-26 3039.820068 3051.649902 3030.530029 3049.080078 3049.080078 564100
246 2021-10-27 3045.830078 3049.020020 3019.000000 3025.489990 3025.489990 607875
[247 rows x 7 columns]
count 247.000000
mean 3063.837847
std 235.246708
min 2302.639893
25% 3025.574951
50% 3145.810059
75% 3214.344971
max 3316.080078
Name: High, dtype: float64
count 247.000000
mean 3024.246762
std 235.873980
min 2266.929932
25% 2981.599976
50% 3106.969971
75% 3183.654908
max 3295.439941
Name: Low, dtype: float64
코드설명>>
1~2번 라인: pandas와 matplotlib 라이브러리를 import 합니다.
4번 라인: read_csv() 함수로 야후 금융(Yahoo Finance)에서 받은 kospi.csv 파일을 불러 옵니다.
6번 라인: 판다스 테이블 값을 읽지만 일반 print 문의 경우 데이터가 많을 때 위/아래 5줄씩 불러 옵니다.
7번 라인: "High" 열의 데이터만 가져와서 describe 함수를 사용해서 해당 열의 내용을 분석합니다. (개수, 표준편차, 평균, 최소, 최대, 25/50/75% 값)
8번 라인: "Low" 열의 데이터만 가져와서 describe 함수를 사용해서 해당 열의 내용을 분석합니다.
Pandas에서 Column의 값을 추출할때는 딕셔너리(Dictionary)에 키 값을 넣는 것처럼 사용하면 됩니다. Row(행)의 값을 가져올 때는 loc(), iloc() 함수를 사용하면 됩니다.
[Python] 코스피 1년 차트 그리기: 그래프 그리기
우선 High 열의 값으로만 그래프를 그려 보겠습니다.
코드>>
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('kospi.csv')
print(df)
print(df["High"].describe())
print(df["Low"].describe())
df["High"].plot()
plt.show()
결과>>
코드 설명>>
10~11번 라인: matplotlib의 plot과 show 함수로 그래프를 쉽게 그렸습니다. matplotlib 사용법에 대해 조금 더 상세히 알고 싶으시면 아래 링크를 참조 하시면 됩니다.
https://scribblinganything.tistory.com/category/%ED%8C%8C%EC%9D%B4%EC%8D%AC%28Python%29/matplotlib
이번에는 High열과 Low 열의 결과를 한 화면에 두개의 그래프로 표현 해보겠습니다.
코드>>
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('kospi.csv')
print(df)
print(df["High"].describe())
print(df["Low"].describe())
fig, ax1 = plt.subplots()
ax1.plot(df["High"], color="red")
ax1.tick_params(axis='y', labelcolor="red")
ax2 = ax1.twinx() #한 그래프에 두번째 plot 넣기
ax2.plot(df["Low"], color="blue")
ax2.tick_params(axis='y', labelcolor="blue")
plt.show()
결과>>
마지막으로 히스토그램(histogram)으로 코스피(Kospi) 값을 표현해보겠습니다.
히스토그램으로 표현하면 코스피 수치가 어디에 편중되어 있는지를 시각적으로 보기 편합니다.
코드>>
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('kospi.csv')
print(df)
print(df["High"].describe())
print(df["Low"].describe())
df["High"].plot(kind = 'hist')
plt.show()
결과>>
'파이썬(Python) > pandas' 카테고리의 다른 글
[Python]Pandas에서 CSV 파일 읽기 에러 해결 (0) | 2022.02.23 |
---|---|
[Python] Pandas 이동평균 함수 사용법 (Rolling) (2) | 2021.11.10 |
[Python] 코스피, 코스닥 값 불러와서 분석하기(pandas) (0) | 2021.10.28 |
[Python] Pandas DataFrames이란? 선언, 데이터 찾기, 정렬하기 예제(find, sort) (0) | 2021.10.26 |
[Python] Pandas로 네이버 금융 재무분석 항목 가져오기(에러해결 추가) (0) | 2021.10.23 |