데이터를 저장하기 전에
데이터를 수집하면 이를 효과적으로 활용해야 합니다. 단일 기업의 분석은 원본 데이터로도 가능하지만, 여러 종목을 비교 분석할 때는 체계적인 저장과 데이터 가공이 필수적입니다.
데이터 처리에서 흔히 발생하는 딜레마가 있습니다. 활용 목적이 명확하지 않거나 다양한 분석이 예상되는 상황에서, 어떻게 데이터를 가공해야 할까요? 특정 목적에 맞춘 가공은 나중에 오히려 제약이 될 수 있습니다.
이러한 이유로 우리는 parquet 포맷을 선택하여 원본 데이터를 그대로 저장하려고 합니다. parquet의 강력한 장점을 최대한 활용할 것입니다. 이번 장에서는 데이터 저장 방법론을 살펴보고, 다음 장에서 실제 데이터 수집을 진행하겠습니다.
parquet?
데이터를 저장하는 방식에는 여러 가지가 있지만, Parquet는 특히 효율적인 저장 방식으로 주목받고 있습니다. CSV나 JSON과 같은 일반적인 형식과 비교했을 때, Parquet는 열 기반 구조를 활용하여 데이터를 저장하기 때문에 특정 열만 필요한 분석에서 뛰어난 성능을 보여줍니다.
Parquet의 주요 장점
•
데이터 압축률이 높아 저장 공간을 효율적으로 사용할 수 있습니다.
•
필요한 열만 선택적으로 읽을 수 있어 분석 속도가 빠릅니다.
•
스키마가 파일에 포함되어 있어 데이터의 구조를 쉽게 파악할 수 있습니다.
특히 금융 데이터와 같이 대용량 데이터를 다룰 때 Parquet 형식은 매우 유용합니다. pandas나 PySpark와 같은 데이터 분석 도구들도 Parquet 형식을 기본적으로 지원하고 있어 활용도가 높습니다.
위와 같은 장점을 가진 parquet 파일들을 더욱 효율적으로 다루기 위해 pyarrow의 dataset 모듈을 활용할 수 있습니다. 이 모듈을 사용하면 폴더 구조로 저장된 여러 parquet 파일들을 하나의 데이터베이스처럼 다룰 수 있어, 일반적인 반복문 없이도 효율적인 데이터 접근이 가능합니다.
dataset 모듈은 지정된 디렉토리 내의 모든 parquet 파일을 통합된 하나의 데이터셋으로 인식합니다. 이를 통해 전체 데이터를 메모리에 로드하지 않고도 필요한 부분만 선택적으로 접근할 수 있으며, 특히 날짜나 종목코드로 구조화된 폴더 구조를 자동으로 인식하여 데이터 처리 효율을 극대화할 수 있습니다.
이는 우리가 수집한 주가 데이터를 분석할 때 매우 유용하게 활용될 수 있습니다. 예를 들어, 2023년 전체 종목의 종가 데이터를 한 번에 비교 분석하고 싶을 때, 각 종목별 파일을 일일이 로드하지 않고도 필요한 종가 데이터만 선택적으로 추출하여 하나의 데이터프레임으로 만들 수 있어 메모리 사용을 최적화할 수 있습니다.
to_parquet
주가 데이터를 Parquet 파일로 저장하는 방법을 단계별로 살펴보겠습니다:
1. 기본적인 저장 방법
pandas DataFrame을 Parquet 파일로 저장할 때는 to_parquet() 메서드를 사용합니다. 가장 기본적인 형태는 다음과 같습니다:
# 삼성전자(005930) 데이터를 저장하는 경우df.to_parquet('data/005930.parquet')
Python
복사
2. 저장 옵션 활용하기
더 효율적인 저장을 위해 압축 옵션을 추가할 수 있습니다:
# snappy 압축 사용 (추천)
samsung_df.to_parquet('data/005930.parquet', compression='snappy')
Python
복사
3. 여러 종목 데이터 저장하기
여러 종목의 데이터를 각각 저장할 때는 다음과 같이 할 수 있습니다:
# 예시: 여러 종목 데이터를 각각 저장
stock_codes = ['005930', '035420', '035720'] # 삼성전자, NAVER, 카카오
for code in stock_codes:
# 해당 종목의 데이터프레임이 stock_df[code]에 있다고 가정
stock_df[code].to_parquet(
f'data/{code}.parquet',
compression='snappy'
)
Python
복사
이렇게 저장하면 data 폴더 안에 다음과 같은 구조가 만들어집니다:
4. 저장된 데이터 확인하기
저장된 Parquet 파일은 다음과 같이 다시 불러올 수 있습니다:
# 단일 종목 데이터 불러오기
samsung_data = pd.read_parquet('data/005930.parquet')
# 여러 종목의 특정 데이터만 선택적으로 불러오기
samsung_close_price = pd.read_parquet(
'data/005930.parquet',
columns=['종가'] # 종가 데이터만 불러오기
)
Python
복사
이런 방식으로 저장하면 다음과 같은 장점이 있습니다
•
각 종목의 데이터가 독립적으로 저장되어 관리가 쉽습니다.
•
필요한 종목의 데이터만 선택적으로 불러올 수 있어 메모리 효율이 좋습니다.
•
snappy 압축을 사용하여 저장 공간을 절약하면서도 빠른 읽기가 가능합니다.
•
CSV와 달리 데이터 타입 정보가 보존되어 정확한 데이터 분석이 가능합니다.
다음 페이지에서는 실제로 전체 종목의 데이터를 저장하는 과정을 살펴보겠습니다.