etc) 주식 - 분봉 데이터 읽어오기(R/Py)

etc) 주식 - 분봉 데이터 읽어오기(R/Py)

R과 Python을 활용하여 주가 분봉 데이터를 읽어오는 예제를 알아본다.

본 포스팅은 etc) 주식 - 2021년 8월 4주차 분봉 데이터 포스팅의 데이터를 사용하여 실습한다.

stock_kr_daily_m_210823_210827.zip 다운받기 [클릭]

R

다음은 압축파일을 압축파일명과 같은 폴더에 푸는 코드이다.

1
2
3
4
library("data.table")
path_zip = list.files(pattern = "stock_kr_daily_m_.*?\\.zip$")[1]
path_unzip = strsplit(path_zip, split = "\\.")[[1]][1]
unzip(zipfile = path_zip, exdir = path_unzip)

일별 종목별 요약 데이터의 파일 목록을 확인하면 다음과 같다.

1
2
3
4
5
6
7
8
9
ls_list = list.files(path = path_unzip,
pattern = "list",
full.names = TRUE)
ls_list
## [1] "stock_kr_daily_m_210823_210827/stock_list_kr_20210823.csv"
## [2] "stock_kr_daily_m_210823_210827/stock_list_kr_20210824.csv"
## [3] "stock_kr_daily_m_210823_210827/stock_list_kr_20210825.csv"
## [4] "stock_kr_daily_m_210823_210827/stock_list_kr_20210826.csv"
## [5] "stock_kr_daily_m_210823_210827/stock_list_kr_20210827.csv"

각 파일을 하나씩 불러와 합치는 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
df_list = data.frame()
for(n in 1:length(ls_list)){
df_list_sub = fread(ls_list[n], encoding = "UTF-8", data.table = FALSE)
df_list = rbind(df_list, df_list_sub)
}
head(df_list, 2)
## stock_cd state_cd stock_nm price vs_y vs_y_sign vs_y_rate cum_cnt
## 1 136510 57 쎄미시스코 35950 3450 2 10.62 602642
## 2 183300 55 코미코 80300 7700 2 10.61 144989
## cum_price sel_q sel_p buy_p buy_q con_ul_days con_ll_days con_up_days
## 1 21113179150 1535 36000 35950 74 0 0 1
## 2 11184596300 362 80300 80200 49 0 0 1
## con_dn_days con_st_days biz_kr theme_kr_1 theme_kr_2
## 1 2 0 기계.장비 플렉서블 디스플레이 OLED
## 2 1 0 반도체 반도체/반도체장비
## theme_cd_1 theme_cd_2 call_cnt
## 1 43 195 1985
## 2 4 NA 1985

일별 종목별 분봉 데이터의 파일 목록을 확인하면 다음과 같다.

1
2
3
4
5
6
7
8
9
ls_chart = list.files(path = path_unzip,
pattern = "m",
full.names = TRUE)
ls_chart
## [1] "stock_kr_daily_m_210823_210827/stock_m_20210823.csv"
## [2] "stock_kr_daily_m_210823_210827/stock_m_20210824.csv"
## [3] "stock_kr_daily_m_210823_210827/stock_m_20210825.csv"
## [4] "stock_kr_daily_m_210823_210827/stock_m_20210826.csv"
## [5] "stock_kr_daily_m_210823_210827/stock_m_20210827.csv"

각 파일을 하나씩 불러와 합치는 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
df_chart = data.frame()
for(n in 1:length(ls_list)){
df_chart_sub = fread(ls_chart[n], encoding = "UTF-8", data.table = FALSE)
df_chart = rbind(df_chart, df_chart_sub)
}
head(df_chart, 2)
## stock_cd cont_time price p_start p_max p_min cum_cnt cont_cnt
## 1 136510 150000 35700 35800 35800 35650 561437 369
## 2 136510 145900 35800 35950 35950 35800 561068 730

Python

다음은 압축파일을 압축파일명과 같은 폴더에 푸는 코드이다.

1
2
3
4
5
6
7
import os
import zipfile
import pandas as pd

path_zip = [path for path in os.listdir() if (path[:17] == "stock_kr_daily_m_") & (path[-3:] == "zip")][0]
path_unzip = path_zip.split(sep = ".")[0]
zipfile.ZipFile(path_zip).extractall(path_unzip)

일별 종목별 요약 데이터의 파일 목록을 확인하면 다음과 같다.

1
2
3
4
5
6
7
ls_list = [path for path in os.listdir(path_unzip) if path[6:10] == "list"]
ls_list
## ['stock_list_kr_20210823.csv',
## 'stock_list_kr_20210824.csv',
## 'stock_list_kr_20210825.csv',
## 'stock_list_kr_20210826.csv',
## 'stock_list_kr_20210827.csv']

각 파일을 하나씩 불러와 합치는 코드는 다음과 같다.

1
2
3
4
5
6
7
df_list = pd.DataFrame()
for n in range(len(ls_list)):
df_list_sub = pd.read_csv(path_unzip + "/" + ls_list[n])
df_list = pd.concat([df_list, df_list_sub])

df_list = df_list.reset_index(drop = True)
df_list.head(2)
stock_cd state_cd stock_nm price vs_y ... theme_kr_1 theme_kr_2 theme_cd_1 theme_cd_2 call_cnt
0 136510 57 쎄미시스코 35950 3450 ... 플렉서블 디스플레이 OLED 43.0 195.0 1985
1 183300 55 코미코 80300 7700 ... 반도체/반도체장비 NaN 4.0 NaN 1985

일별 종목별 분봉 데이터의 파일 목록을 확인하면 다음과 같다.

1
2
3
4
5
6
7
ls_chart = [path for path in os.listdir(path_unzip) if path[6:7] == "m"]
ls_chart
## ['stock_m_20210823.csv',
## 'stock_m_20210824.csv',
## 'stock_m_20210825.csv',
## 'stock_m_20210826.csv',
## 'stock_m_20210827.csv']

각 파일을 하나씩 불러와 합치는 코드는 다음과 같다.

1
2
3
4
5
6
7
df_chart = pd.DataFrame()
for n in range(len(ls_chart)):
df_chart_sub = pd.read_csv(path_unzip + "/" + ls_chart[n])
df_chart = pd.concat([df_chart, df_chart_sub])

df_chart = df_chart.reset_index(drop = True)
df_chart.head(2)
stock_cd cont_time price p_start p_max p_min cum_cnt cont_cnt
0 136510 150000 35700 35800 35800 35650 561437 369
1 136510 145900 35800 35950 35950 35800 561068 730
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×