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 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)
|
일별 종목별 분봉 데이터의 파일 목록을 확인하면 다음과 같다.
1 2 3 4 5 6 7 8 9
| ls_chart = list.files(path = path_unzip, pattern = "m", full.names = TRUE) ls_chart
|
각 파일을 하나씩 불러와 합치는 코드는 다음과 같다.
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)
|
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
|
각 파일을 하나씩 불러와 합치는 코드는 다음과 같다.
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
|
각 파일을 하나씩 불러와 합치는 코드는 다음과 같다.
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 |