반응형

@25 - 가상화폐 데이터 읽어와서 데이터베이스에 저장하기

 

1. PC에 데이터베이스 브라우저 설치 (DB Brower for SQLite) : 데이터베이스를 볼 수 있는 프로그램

2. 가상화폐 시세를 확인할 수 있는 라이브러리 (pyupbit) 사용하여 데이터 가져오기

3. 비트코인 데이터베이스 읽어와서 저장

4. 원하는 날짜들의 비트코인 분봉정보 읽어와 저장하기 / 중복 데이터 제거하여 새로운 DB로 만들기

 


1. PC에 데이터베이스 브라우저 설치

https://sqlitebrowser.org/dl/

 

Downloads - DB Browser for SQLite

(Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.12.2) for Windows: Windows PortableApp Note - If for any reason the standard Windows release does not work (e.g. gives an error), try a nightly build (below). Nightly builds ofte

sqlitebrowser.org

 


2. 가상화폐 정보 가져오기

# 가상화폐 정보 가져올 수 있는 라이브러리
import pyupbit

# 원화 단위로 가져올 수 있는 코인 리스트 출력
coin_lists = pyupbit.get_tickers(fiat='KRW')
print(coin_lists)

# 비트코인과 이더리움 가격을 한화로 출력
price_now = pyupbit.get_current_price(['KRW-BTC', 'KRW-ETH'])
print(price_now)

결과.

- 다양한 가상화폐 정보들과 마지막에 BTC, ETH 가격정보


3. 비트코인 데이터베이스 읽어와서 저장

- DB파일은 coin.db

- DB명은 'BTC2'

import pyupbit
import sqlite3
# 데이터베이스 읽을 때 사용할 라이브러리
import pandas as pd

# 가져 올 가상화폐 데이터
ticker = 'KRW-BTC'	# 비트코인
interval = 'minute1'	# 1분 단위
to = '2022-04-30 23:59'	# 4월 30일 23시 59분 까지
count = 200	# 이전 200개 데이터

# 가상화폐 데이터 가져오기
price_now = pyupbit.get_ohlcv(ticker=ticker, interval=interval, to=to, count=count)

# 데이터베이스 연결, 데이터 저장하기
db_path = r'25_PCdatabase\coin.db'
con = sqlite3.connect(db_path, isolation_level=None)
price_now.to_sql('BTC2', con, if_exists='append')

# 데이터베이스 연결 종료
con.close

# 데이터베이스 연결하고 데이터 가져오기
#con = sqlite3.connect(db_path, isolation_level=None)
readed_df = pd.read_sql("SELECT * FROM 'BTC2'", con, index_col = 'index')
# 출력하기
print(readed_df)

결과.

- DB에 저장된 비트코인 데이터

- 23시 58분까지 저장되었다. ?? 해당 시간 미만으로 나오는 듯

- 200개 데이터 저장



4. 원하는 날짜들의 비트코인 분봉정보 읽어와 저장하기 / 중복 데이터 제거하여 새로운 DB로 만들기

- 'BTC2' 에 원하는 정보를 모두 저장한 뒤

- SELECT DISTINCT * FROM 'BTC2' 를 사용해서 중복정보 제외하고 읽어와

- 'BTC_NEW2' 에 저장한다.

import pyupbit
import sqlite3
import datetime
# 데이터베이스 불러들여오기 위해 필요
import pandas as pd

# 가져 올 데이터의 기간 설정
def date_range(start, end):
    start = datetime.datetime.strptime(start, '%Y-%m-%d')
    start =start + datetime.timedelta(days=1)
    
    end = datetime.datetime.strptime(end, '%Y-%m-%d')
    end = end + datetime.timedelta(days=1)
    
    dates = [(start + datetime.timedelta(days=i)).strftime('%Y-%m-%d') for i in range((end-start).days+1)]
    return dates

dates = date_range('2022-04-29', '2022-04-30')

print(dates)

# 설정한 기간을 최신 날짜부터 데이터 가져오기
for day in reversed(dates):
    
    # '년,월,일' 에 시간 '00:00' 추가
    myDay = day + '\t00:00'
    print(myDay)
    
    ticker = 'KRW-BTC'
    interval = 'minute1'
    to = myDay  # 원하는 날짜의 데이터 가져오기
    count = 1440    # 1440개 = 24시 * 60분 
    price_now = pyupbit.get_ohlcv(ticker=ticker, interval=interval, to=to, count=count)
    
    print(price_now)
    
    # 데이터 베이스에 저장
    db_path = r'25_PCdatabase\coin.db'
    
    con = sqlite3.connect(db_path, isolation_level=None)
    price_now.to_sql('BTC2', con, if_exists='append')
    
    con.close

# 이미 앞에서 한 번 읽어 온 데이터가 있거나 
# 불러 오는 도중 끊겨서 다시 읽어 왔을 경우에
# 중복 제거하고 새 데이터 베이스에 저장

readed_df = pd.read_sql('SELECT DISTINCT * FROM "BTC2"', con, index_col = 'index')
readed_df.to_sql('BTC_NEW2', con, if_exists='replace')

print(readed_df)

결과.

- 4/29 ~ 4/30 까지 데이터 확인

- 4/29일 데이터는 4/30일 0시 이전 데이터로 표시

- 4/30일 데이터는 5/1일 0시 이전 데이터로 표시

- 각 1440개씩

 

- 'BTC2' 에는

- 앞서 실행했던 200개의 데이터 + 4/29일 1440개 + 4/30일 1440개 = 3080개의 데이터가 저장됨

- 이 중 200개의 데이터는 중복되는 데이터임

 

 

- 새롭게 저장되는 BTC_NEW2는

- 200개의 중복이 제외된 2880개가 저장됨


- 데이터베이스에서 원하는 데이터를 불러오는 노하우가 필요하다.

- 이 데이터를 시각화 하는 방법도 빨리 알고 싶다. ^^

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기