파이썬 SQLite를 이용한 코인가격 데이터베이스 활용 방법
파이썬, SQLite 데이터베이스를 사용하여 Binance 거래소로부터 코인가격 데이터를 수집하고 데이터베이스에 저장해 두었습니다. 이번 포스팅에서는 SQLite 데이터베스에 연결해서 데이터를 불러온 후 데이터를 확인해 보겠습니다. 파이썬 데이터베이스를 사용하는 과정을 이해하는 것이 이번 포스팅의 목적입니다.
글의 순서
파이썬 SQLite 데이터베이스에서 데이터 불러오기 절차
파이썬 코드로 이해하는 데이터베이스 활용 절차
파이썬 SQLite 데이터베이스에서 데이터 불러오기 절차
파이썬 SQLite 데이터베이스에서 데이터를 불러오는 절차를 요약하면 다음과 같습니다.
step1) 데이터베이스 파일의 경로를 설정하고, 데이터베이스에 연결하여 테이블 목록을 확인
step2) 특정 테이블에서 데이터를 불러와 데이터프레임으로 변환
step3) 데이터베이스 연결 종료
이처럼 절차는 간단합니다. 그냥 데이터베이스에 연결해서 데이터를 가져오고 이 데이터에서 원하는 정보를 얻기 위해 판다스 데이터프레임으로 바꾸는 것이 전부입니다. 파이썬 코드를 차근차근 살펴보면 그 절차가 훨씬 쉽게 와 닿을 것입니다.
파이썬 코드로 이해하는 데이터베이스 활용절차
1단계 : 파이썬 패키지 import
필요한 파이썬 패키지를 가져옵니다. os는 파일 경로 작업, pandas는 데이터 처리, sqlite3는 SQLite 데이터베이스 작업, datetime은 날짜와 시간을 변형시키는데 필요한 모듈입니다.
▶os: 파일 경로 작업을 도와주는 라이브러리입니다.
▶pandas as pd: 데이터를 다루기 위한 라이브러리로, pd라는 별칭으로 가져옵니다.
▶sqlite3: 파이썬 SQLite 데이터베이스와 상호 작용하기 위한 라이브러리입니다.
▶from datetime import …: 날짜와 시간을 다루기 위한 모듈입니다.
1 2 3 4 5 |
import os import pandas as pd import sqlite3 from binance.client import Client from datetime import datetime, timezone, timedelta |
2단계 : 데이터베이스 파일 경로 설정
데이터베이스 파일의 경로를 설정합니다. file_path는 디렉터리 경로이고, db_name은 데이터베이스 파일의 전체 경로입니다. file_path와 파일명을 결합하여 만들었습니다. 절대 경로를 나타낼 때, 이렇게 미리 변수화 해놓으면, 코드가 간결해지고, 다음에 다른 파일로 경로를 바꿔야 할 때, 수정하기 편합니다.
1 2 |
file_path = 'C:/_python/' db_name = file_path + 'XRPUSDT_1m_240610_0900~240615_1619_data.db' |
3단계 : 데이터베이스 불러오기 함수 정의
파이썬 SQLite 데이터베이스에서 데이터를 불러오는 함수를 정의합니다. sqlite3.connect(db_name)를 통해 데이터베이스에 연결합니다. SQL 쿼리를 정의하고 실행하여 데이터를 불러옵니다. pandas.read_sql_query를 사용하여 쿼리 결과를 데이터프레임으로 변환합니다. df(데이터프레임)에 저장했다면 데이터베이스 연결을 종료하고, 데이터프레임을 반환합니다.
▶def load_from_db(db_name, table_name): 데이터베이스에서 데이터를 불러오는 함수를 정의합니다. db_name은 데이터베이스 파일 이름이고, table_name은 테이블 이름입니다.
▶conn = sqlite3.connect(db_name): 데이터베이스 파일에 연결합니다.
▶query = f”SELECT * FROM {table_name}”: 테이블의 모든 데이터를 선택하는 SQL 쿼리를 만듭니다.
▶df = pd.read_sql_query(query, conn): SQL 쿼리를 실행하고, 결과를 데이터프레임으로 가져옵니다.
▶conn.close(): 데이터베이스 연결을 종료합니다.
▶return df: 데이터를 담고 있는 데이터프레임을 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 |
def load_from_db(db_name, table_name): # 데이터베이스 연결 conn = sqlite3.connect(db_name) # SQL 쿼리 실행 및 데이터 가져오기 query = f"SELECT * FROM {table_name}" df = pd.read_sql_query(query, conn) # 데이터베이스 연결 종료 conn.close() return df |
4단계 : 데이터베이스 파일 존재 여부 확인
▶os.path.exists(db_name): 데이터베이스 파일이 존재하는지 확인합니다. ▶print(…): 파일이 존재하는지 여부를 출력합니다.
1 2 3 4 |
if os.path.exists(db_name): print(f"Database file {db_name} exists.") else: print(f"Database file {db_name} does not exist.") |
5 단계 : 데이터베이스에 연결하여 테이블 목록 확인
▶conn = sqlite3.connect(db_name): 데이터베이스 파일에 연결합니다. ▶cursor = conn.cursor(): 데이터베이스 커서를 생성합니다. 커서를 사용하여 SQL 명령을 실행할 수 있습니다. ▶cursor.execute(“SELECT name FROM sqlite_master WHERE type=’table’;”): 데이터베이스에 있는 테이블 목록을 가져오는 SQL 쿼리를 실행합니다. ▶tables = cursor.fetchall(): 쿼리 결과를 모두 가져와 tables 리스트에 저장합니다. ▶print(“Tables in the database:”, tables): 데이터베이스에 있는 테이블 목록을 출력합니다. : 코드 안의 # 출력값에서 확인하실 수 있습니다.
1 2 3 4 5 6 7 8 |
conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute("SELECT name FROM sqlite_master WHERE type='table';") tables = cursor.fetchall() print("Tables in the database:", tables) #출력값 #Tables in the database: [('ohlcv',), ('XRPUSDT_1m',)] |
6 단계 : 특정 테이블에서 데이터 불러오기
▶table_name = ‘XRPUSDT_1m’: 사용할 테이블 이름을 정의합니다. ▶df = load_from_db(db_name, table_name): 앞서 정의한 load_from_db 함수를 사용하여 데이터를 불러옵니다. ▶print(“Data in the table:”): 테이블의 데이터를 출력할 준비를 합니다. ▶print(df.head(5)): 데이터프레임의 첫 5개 행을 출력합니다. : 코드 안의 #출력값에서 확인하실 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
table_name = 'XRPUSDT_1m' df = load_from_db(db_name, table_name) print("Data in the table:") print(df.head(5)) #출력값 # time_open Open High Low Close Volume time_close #0 1717977600000 0.4987 0.4987 0.4986 0.4986 51786.0 1717977659999 #1 1717977660000 0.4985 0.4986 0.4983 0.4983 131149.0 1717977719999 #2 1717977720000 0.4983 0.4984 0.4983 0.4984 33267.0 1717977779999 #3 1717977780000 0.4983 0.4984 0.4983 0.4983 11936.0 1717977839999 #4 1717977840000 0.4983 0.4986 0.4983 0.4985 30683.0 1717977899999 |
7 단계 : 데이터베이스 연결 종료
▶conn.close()로 데이터베이스 연결을 종료합니다.
1 |
conn.close() |
마치며 …
지난 포스팅에서 파이썬 SQLite 데이터베이스를 사용하여 Binance 거래소로부터 코인가격 데이터를 수집하고 데이터베이스에 저장해 두었습니다. 이번 포스팅에서는 파이썬 SQLite 데이터베스에 연결해서 데이터를 불러온 후 데이터를 확인해 보았습니다.
파이썬 데이터베이스를 사용하는 과정을 이해하는 것이 이번 포스팅의 목적이었습니다. 이 중에서도 가장 중요한 부분은 데이터를 불러오는 load_from_db 함수입니다. 이 함수를 잘 기억해 두시기 바랍니다.
함께 참고하면 좋은 글
▶ SQLite를 이용한 코인가격 파이썬 데이터베이스 구축
▶ 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
▶ 호크아이 거래량 지표 (HawkEye Volume Indicator) 파이썬 코딩
▶ 알아두면 좋을 컴퓨터 작동원리. 폰 노이만 아키텍처
▶ 판다스 데이터프레임으로 빠르게 데이터 파악하기
▶ 파이썬 데이터 분석 : 판다스 데이터프레임 통계량, 그래프
▶ 파이썬 판다스로 텍스트 파일 읽기 : read_table()
▶ 파이썬 판다스 데이터 분석 : pivot, 엑셀 입력, 출력
▶ 파이썬 판다스로 엑셀 파일의 원하는 부분 골라 읽기
참고자료
▶ sqlite3 – DB-API 2.0 interface for SQLite databases
▶ Wikipedia, Database