HiÐΞClassic

Entrepot NFT floor price (ICP)

SHOGAKU
a year ago
Entrepot NFT floor price (ICP)データ取得取得したデータ確認フロア価格に変更保存Bar Chart Race作成

Google Colaboratory で実施した例です

Google Colaboratory → https://colab.research.google.com/?hl=ja#


Entrepot NFT floor price (ICP)


データ取得

!rm -r nfts_data
!git clone https://github.com/lukasvozda/nfts_data.git
!pip install -r nfts_data/requirements.txt

from ic.agent import *
from ic.identity import *
from ic.client import *
from ic.candid import Types, encode, decode

# Inicialisation
client = Client(url = "https://ic0.app")
iden = Identity()
agent= Agent(iden, client)

# Endpoint that we want to pull data from
function_to_call = 'transactions'

# List of NFTs canisters we want to pull data from
# You can find it on Entrepot clicking on NFTs 
canisters = [
    {
        'name': 'Poked bots',
        'id': 'bzsui-sqaaa-aaaah-qce2a-cai'
    },
    {
        'name': 'OG MEDALS',
        'id': 'rw623-hyaaa-aaaah-qctcq-cai'
    },
    {
        'name': 'ICPuppies',
        'id': '5movr-diaaa-aaaak-aaftq-cai'
    },
    {
        'name': 'Dfinity Space Apes',
        'id': '3mttv-dqaaa-aaaah-qcn6q-cai'
    },
    {
        'name': 'IC Dinos',
        'id': 'yrdz3-2yaaa-aaaah-qcvpa-cai'
    },
    {
        'name': 'ICPCS',
        'id': 'j3dqa-byaaa-aaaah-qcwfa-cai'
    },
    {
        'name': 'D-City',
        'id': 'gtb2b-tiaaa-aaaah-qcxca-cai'
    },
    {
        'name': 'Meme Cake',
        'id': 'txr2a-fqaaa-aaaah-qcmkq-cai'
    },
    {
        'name': 'Pineapple Punks',
        'id': 'skjpp-haaaa-aaaae-qac7q-cai'
    },
    {
        'name': 'BTC Flower',
        'id': 'pk6rk-6aaaa-aaaae-qaazq-cai'
    },
    {
        'name': 'ETH Flower',
        'id': 'dhiaa-ryaaa-aaaae-qabva-cai'
    },
    {
        'name': 'ICP Flower',
        'id': '4ggk4-mqaaa-aaaae-qad6q-cai'
    },
    {
        'name': 'Motoko',
        'id': 'oeee4-qaaaa-aaaak-qaaeq-cai'
    },
    {
        'name': 'Motoko Mechs',
        'id': 'ugdkf-taaaa-aaaak-acoia-cai'
    },
    {
        'name': 'Cubetopia Islands',
        'id': '3vdxu-laaaa-aaaah-abqxa-cai'
    },

    {
        'name': 'ICKitties',
        'id': 'rw7qm-eiaaa-aaaak-aaiqq-cai'
    },
    {
        'name': 'Cubetopia Islands',
        'id': '3vdxu-laaaa-aaaah-abqxa-cai'
    },
    {
        'name': 'Poked Bots Mutant Army',
        'id': 'jv55j-riaaa-aaaal-abvnq-cai'
    },
    {
        'name': 'ICPunks',
        'id': 'bxdf4-baaaa-aaaah-qaruq-cai'
    },
    
    {
        'name': 'Pet bots',
        'id': 't2mog-myaaa-aaaal-aas7q-cai'
    },
    {
        'name': 'IC BUCKS',
        'id': '6wih6-siaaa-aaaah-qczva-cai'
    },
    {
        'name': 'MoonWalkers',
        'id': 'er7d4-6iaaa-aaaaj-qac2q-cai'
    },
    
    {
        'name': 'Finterest',
        'id': '4fcza-biaaa-aaaah-abi4q-cai'
    },  
    {
        'name': 'ICmojis',
        'id': 'gevsk-tqaaa-aaaah-qaoca-cai'
    },  

    {
        'name': 'ICTuTs',
        'id': 'ahl3d-xqaaa-aaaaj-qacca-cai'
    },
    {
        'name': 'Starverse',
        'id': 'nbg4r-saaaa-aaaah-qap7a-cai'
    },

    {
        'name': 'ICP.DOG',
        'id': '3bqt5-gyaaa-aaaah-qcvha-cai'
    },
    {
        'name': 'ICApes',
        'id': 'zvycl-fyaaa-aaaah-qckmq-cai'
    },
    {
        'name': 'Boxy Dude',
        'id': 's36wu-5qaaa-aaaah-qcyzq-cai'
    },
    {
        'name': 'ICPets',
        'id': 'unssi-hiaaa-aaaah-qcmya-cai'
    },
    {
        'name': 'Pet bots',
        'id': 't2mog-myaaa-aaaal-aas7q-cai'
    },
    {
        'name': 'CrowdFund NFT',
        'id': '2glp2-eqaaa-aaaak-aajoa-cai'
    },
    {
        'name': 'Astronauts',
        'id': 'sr4qi-vaaaa-aaaah-qcaaq-cai'
    },   


]

# File to write results to
f  = open('result.txt','w')
# Header row
f.write(f"collection,index,token,icp,time_updated,timestamp,seller,buyer")

for c in canisters:
    params = []

    params = encode(params)

    response = agent.query_raw(c["id"], function_to_call, params)

    print("Getting collection:", c["name"])

    trans = response[0]["value"]
    for i,t in enumerate(trans):
        price = str(t['_3364572809']/100000000)
        timestamp = t['_1291635725']
        token = t['_338395897']
        seller = t['_1782082687']
        buyer = t['_3136747827']
        f.write(f"\n{c['name']},{i},{token},{price},,{timestamp},{seller},{buyer}")

f.close()

取得したデータ確認

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


df = pd.read_csv("result.txt", header=0)
df['timestamp'] = pd.to_datetime(df['timestamp'])

sns.scatterplot(x='timestamp', y='icp', hue='collection', legend=True, data=df)
plt.grid(linestyle='dotted')

#レジェンド
#plt.legend(loc='upper left')

#X軸のラベルを変更
import matplotlib.dates as mdates

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%y/%m'))
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=3))
plt.gcf().autofmt_xdate()

#Y軸 Max1000
import matplotlib.pyplot as plt

# Place legend outside of the plot
plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5))

#plt.ylim(0, 1000)

plt.show()
df = df.sort_values(by='timestamp')


フロア価格に変更

日付ごとの最低取引価格をフロア価格とする

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df['day'] = df['timestamp'].dt.date
df_min = df.groupby(['day', 'collection'])['icp'].min()

# ffillメソッドを使用して、前日のデータで空欄を埋める
df_min = df_min.ffill()

# プロットする
sns.scatterplot(x=df_min.index.get_level_values(0), y=df_min, hue=df_min.index.get_level_values(1), legend=True)

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%y/%m'))
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=3))
plt.gcf().autofmt_xdate()

# Place legend outside of the plot
plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5))

plt.grid(linestyle='dotted')

plt.show()


保存

# CSV形式で保存する
df_min.to_csv("min_icp.csv")

Bar Chart Race作成

ピポットテーブルして空欄を埋める作業実施して、グラフ作成

!pip install bar_chart_race

import pandas as pd
import bar_chart_race as bcr

# CSVファイルを読み込む
df = pd.read_csv('min_icp.csv')

# ピボットテーブルを作成する
df = df.pivot_table(index='day', 
    columns='collection',
    values='icp')

# ffillメソッドを使用して、前日のデータで空欄を埋める
df = df.ffill()

# バーグラフを作成する
bcr.bar_chart_race(df=df, n_bars=10)

コメント
いいね
投げ銭
最新順
人気順
SHOGAKU
a year ago
コメント
いいね
投げ銭
最新順
人気順
トピック
アプリ

Astar Network

DFINITY / ICP

NFT

DAO

DeFi

L2

メタバース

BCG

仮想通貨 / クリプト

ブロックチェーン別

プロジェクト

目次
Tweet
ログイン