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

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

by Camel_coding_food 2023. 2. 16.
반응형

투자의 책임은 항상 본인에게.

드디어 완결입니다.

 

게시물마다 내용을 너무 짧게 했는지 생각보다 글이 많아졌네요.

 

비트코인 시가총액과 트렌젝션 양을 구한 코드를 합쳐봅시다.

 

 

import streamlit as st
import pandas as pd
import numpy as np
import requests
import matplotlib.pyplot as plt
import pandas as pd
import datetime

url = "https://api.blockchain.info/charts/n-transactions?format=json&timespan=30days"

response = requests.get(url)
data = response.json()

dates = []
volumes = []	#날짜와 거래량 데이터를 넣을 빈 리스트를 준비합니다.
prices = []
for point in data['values']:
    dates.append(datetime.datetime.fromtimestamp(point['x']).strftime('%Y-%m-%d'))
    volumes.append(point['y'])
    prices.append(point['x'])
    #가져온 데이터 안의 날짜 정보를 %Y-%m-%d형태로 가공하여, 그래프 x축에 사용할 날짜 리스트에 넣습니다

df = pd.DataFrame({'date': dates, 'volume': volumes})
df['volume'] = df['volume'].astype(float)
df['prices'] = df['volume'].astype(float)
df['volume_usd'] = df['volume']*df['prices']


url = "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily"
response = requests.get(url)
data = response.json()

market_cap_data = [(datetime.datetime.fromtimestamp(item[0]/1000).strftime('%Y-%m-%d'), item[1]) for item in data["market_caps"]]
df2 = pd.DataFrame(market_cap_data, columns=['Date', 'Market Cap'])
df2['Market Cap'] = df2['Market Cap'].astype(float)
df2 = df2.groupby('Date').mean().reset_index()
df2['nvt'] = df2['Market Cap']/df['volume_usd']

df2.set_index('Date', inplace=True)
df2['nvt'].plot(kind='line', figsize=(12, 6), color='blue')
plt.xlabel("Date")
plt.ylabel("Transaction Volume (BTC)")
plt.title("Bitcoin On-Chain Transaction Volume")
plt.show()

설명은 생략하겠습니다.

 

전 게시물에서 충분히했죠? 충분했다고 생각합니다.

 

결과를 봅시다.

 

그래프 이름은 귀찮아서 안바꿨습니다. 하하.

현재 Bitcoin NVT지표를 실시간으로 쉽게 볼 수 있는 사이트가 없는듯하여

다른 사이트와 결과를 비교해보는건 아려울 것 같습니다.

 

대부분 유료결제해야하거나, 몇달 전 데이터를 보여주고,

또는 y축 배율이 안맞아 그래프를 알아보기 어렵더군요.

 


이제 Streamlit 웹앱으로 옮겨봅시다.

 

import streamlit as st
import pandas as pd
import numpy as np
import requests
import matplotlib.pyplot as plt
import pandas as pd
import datetime

url = "https://api.blockchain.info/charts/n-transactions?format=json&timespan=30days"

response = requests.get(url)
data = response.json()

dates = []
volumes = []	#날짜와 거래량 데이터를 넣을 빈 리스트를 준비합니다.
prices = []
for point in data['values']:
    dates.append(datetime.datetime.fromtimestamp(point['x']).strftime('%Y-%m-%d'))
    volumes.append(point['y'])
    prices.append(point['x'])
    #가져온 데이터 안의 날짜 정보를 %Y-%m-%d형태로 가공하여, 그래프 x축에 사용할 날짜 리스트에 넣습니다

df = pd.DataFrame({'date': dates, 'volume': volumes})
df['volume'] = df['volume'].astype(float)
df['prices'] = df['volume'].astype(float)
df['volume_usd'] = df['volume']*df['prices']


url = "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily"
response = requests.get(url)
data = response.json()

market_cap_data = [(datetime.datetime.fromtimestamp(item[0]/1000).strftime('%Y-%m-%d'), item[1]) for item in data["market_caps"]]
df2 = pd.DataFrame(market_cap_data, columns=['Date', 'Market Cap'])
df2['Market Cap'] = df2['Market Cap'].astype(float)
df2 = df2.groupby('Date').mean().reset_index()
df2['nvt'] = df2['Market Cap']/df['volume_usd']


st.write("# This is Camel's Blog")

st.line_chart(df2.set_index('Date')['nvt'])

 

결과를 볼까요?

 

터미널에 "streamlit run 파일이름.py"를 입력한 후,

터미널 상에 나오는"221.151.77.197:8501/"에 접속합시다.

이렇게 나오네요.

 

이렇게 프로젝트가 끝났습니다.

 

NVT지수를 구하고, Streamlit을 사용해보는것 만이 이 프로젝트의 목표여서

비교적 간단하게 끝났습니다.

 

만든 코드를 배포하여 외부링크로 접속할 수 있게 하는 방법은

구글에 Streamlit 배포라고 검색하면 다양한 방법이 나옵니다.

 

 


 

요즘 창업을 고민하고 있어 게임 프로그래밍도 한번 공부해볼까 합니다.

 

읽어주셔서 감사합니다.

다양한 주제로 돌아오겠습니다.

반응형

댓글