본문 바로가기
코딩 공부/python

온체인 데이터를 이용한 지표 웹사이트 쉽게 만들기(1)

by Camel_coding_food 2023. 2. 4.
반응형

 

 

재밌는 밈이 많아서 두개 가져와봤습니다. python은 영어로 뱀의 한 종류인 비단뱀을 뜻하죠?

 

streamlit이라고 들어보신 분 있으신가요?

파이썬에 관심이 많고 프레임워크 공부를 해보신 분들은

접해본 적이 있을지도 모르겠습니다.

 

 

파이썬 라이브러리 중 하나인 streamlit은

데이터 시각화 및 배포를 쉽게해주는 도구 중 하나입니다.

 

데이터 사이언스 앱을 streamlit으로 만들지 않는다하니 놀라는 모습을 보이는 밈이 있을정도로 streamlit은 유명한 라이브러리입니다.

 

 

 

https://docs.streamlit.io/library/get-started/

 

Streamlit Docs

Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions

docs.streamlit.io

(공부를 할때 항상 공식 문서를 통해 배우는 습관을 들입시다.)

 


그냥 웹사이트만 만들면 재미없으니,

특정 암호화폐를 선택하여, 해당암호화폐의 NVT 비율을

볼 수 있는 페이지를 만들어보겠습니다.

 

 

NVT란?

NVT란 암호화폐의 기초가치를 파악하기 위한 지표 중 하나입니다.

 

 

암호화폐에 무슨 기초가치가 있냐고하시는 분들도 계실겁니다.

 

물론 저도 동의하는 바입니다만,

거래 시장 규모가 큰 만큼, 매매를 위한 기준이 필요하여 개발된 것 같습니다.

 

마치 주식 시장의 PER과 비슷합니다.

 

계산식은 아래와 같습니다.

 

출처: academy glassnode

 

옵션 이론가 구하기보단 훨씬 쉽죠?

 

 

해석해보면 선택한 암호화폐의 시가총액을

일일 거래량의 총 가치로 나눈 것입니다.

 

코드를 구현해봅시다.

import requests
import ccxt

url = "https://api.blockchain.info/charts/transactions-per-second?timespan=5days&rollingAverage=8hours&format=json"
#앤드포인트 url 

exchange = ccxt.binance()
symbol = 'BTC/USDT'
response = requests.get(url)
#데이터 파싱

if response.status_code == 200: #상태 코드 인식 후 오류여부 판단
    try:
        data = response.json()
        transactions_per_second = data["values"][-1]["y"]
        transactions_per_day = transactions_per_second * 86_400
        print("Bitcoin on-chain transaction volume: {:,.0f} transactions per day".format(transactions_per_day))

        # convert to dollars
        ticker = exchange.fetch_ticker(symbol)
        price = ticker['last']		#현재가를 가져옵니다.
        transaction_volume_usd = transactions_per_day * price
        print("Bitcoin on-chain transaction volume: ${:,.2f}".format(transaction_volume_usd))
    except ValueError:
        print("Could not parse response as JSON.")
else:
    print("Request failed with status code", response.status_code)

 

 

data["values"][-1]["y"] 부분을 해석하기 위해

URL에 접속해봅시다.

 

이런식으로 나오네요.

 

표본을 한줄 가져와 분석해봅시다.

 

 

"values":[{"x":1674981000,"y":2.1427083333333337},{"x":1674981900,"y":2.1296875000000006}

values 키값 아래에 딕셔너리를 나열한 리스트가 있습니다.

 

 

"status":"ok","name":"Transaction Rate","unit":"Transactions Per Second","period":"minute","description":"The number of Bitcoin transactions added to the mempool per second."

x가 시간이고, y가 초당 온체인 트렌젝션 양인것 같네요.

 

x 값이 900씩 증가하는걸로 봐서

15분마다 트렌젝션 양을 측정하는 것 같습니다.

 

 

즉, data["values"][-1]["y"]는 가장 최근에 측정된 

초당 트렌젝션 양을 가져오는 코드입니다.

 

 

후에는 86_400을 곱해 초당 트렌젝션을

하루동안의 트렌젝션으로 변환해줍니다.

 

 

다음번에는 해당 데이터를 그래프로 streamlit 사이트에 올려보겠습니다.

반응형

댓글