@25 - 가상화폐 데이터 읽어와서 데이터베이스에 저장하기
1. PC에 데이터베이스 브라우저 설치 (DB Brower for SQLite) : 데이터베이스를 볼 수 있는 프로그램
2. 가상화폐 시세를 확인할 수 있는 라이브러리 (pyupbit) 사용하여 데이터 가져오기
3. 비트코인 데이터베이스 읽어와서 저장
4. 원하는 날짜들의 비트코인 분봉정보 읽어와 저장하기 / 중복 데이터 제거하여 새로운 DB로 만들기
1. PC에 데이터베이스 브라우저 설치
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개가 저장됨
- 데이터베이스에서 원하는 데이터를 불러오는 노하우가 필요하다.
- 이 데이터를 시각화 하는 방법도 빨리 알고 싶다. ^^
최근댓글