Crypto Week

Explorez la rareté NFT par Python. La rareté d’un NFT est déterminée par… | de Paul Anekpattanakij | Coinmons | avril 2022

La rareté d’un NFT est déterminée par la fréquence à laquelle les traits et caractéristiques qui le composent apparaissent dans la collection donnée

Dans notre exemple, nous récupérons la liste des NFT dans la VOX Walking Dead Collection.

Vous pouvez trouver l’adresse contractuelle de la collection en cliquant sur le lien etherscan dans Opensea.io de la collection sélectionnée. Vous serez redirigé vers la page Smart Contract sur etherscan.io.

Explorez la rareté NFT par Python. La rareté d'un NFT est déterminée par… | de Paul Anekpattanakij | Coinmons | avril 2022
Page de collecte des NFT sur Opensea.io
Détails du contrat intelligent sur etherscan.io
Lire la section Contrat dans etherscan.io

À partir de la page du contrat, vous devez accéder à la section Lire le contrat et rechercher l’URI du jeton pour connaître l’URI de chaque jeton. Dans ce cas, nous pouvons savoir que l’URI de chaque jeton sera https://www.collectvox.com/metadata/twd/ suivi du numéro de jeton, et lorsque nous ouvrirons l’URI, nous trouverons ce fichier de métadonnées qui est dans la norme ERC-721.

{
"name": "Michonne #0",
"description": "VOX are unique collectibles, with provably randomized traits. Own, trade, play and earn with your unique NFT character.",
"external_url": "https://www.collectvox.com/series/twd/0",
"image": "ipfs://QmPCuiXr5fAb5Lfh6DBEw56sKrozz3nbgrNtdKPzx3brri/image.png",
"model": "ipfs://QmPCuiXr5fAb5Lfh6DBEw56sKrozz3nbgrNtdKPzx3brri/model.fbx",
"hash": "acdf90addff5ee65dd153a394d764411385295416cae4a40f31bdbfe7a2d17919960445b37776551bcdbd3cbd82eb1b07ff990fa9577d93797241e6a6609ad78",
"attributes": [
{
"trait_type": "Hair",
"value": "Michonne's Seasmichonne's Braids With Beadson Eight Dreads"
},
.........
{
"trait_type": "Belt Color",
"value": "Orka Black",
"colors": [
{
"name": "color",
"value": "#272220"
},
{
"name": "color",
"value": "#888888"
}
]
}
]
}

La rareté de chaque NFT sera déterminée par les traits que chaque NFT possède en soi. S’il a un trait unique ou rare, la rareté est peut-être élevée.

Maintenant que nous avons déjà toutes les informations dont nous avons besoin, nous pouvons commencer à travailler sur notre code Python pour explorer la rareté de nos NFT.

Dans l’exemple, je travaillais sur un cahier Python dans Anaconda, mais n’hésitez pas à utiliser d’autres outils avec lesquels vous êtes à l’aise.

# importing lib , please install pandas if you have not installed yet.
import os, glob, json, requests
import pandas as pd
#https://www.collectvox.com/metadata/twd/8610
url = 'https://www.collectvox.com/metadata/twd/'
# base on https://blog.gala.games/introducing-amcs-the-walking-dead-vox-49df7fd7e836, it indicate that VOX has 8,888 items in total
# then we create a loop to gathering the metadata file for all NFTs in this collection.
for i in range(0,8888) :
r = requests.get(url + str(i), allow_redirects=True)
open('./vox/vox' + str(i) + ".txt", 'wb').write(r.content)

Nous avons déjà obtenu les données hors ligne pour notre exploration de données. Pour simplifier le code pour le processus de manipulation des données, nous utiliserons pandas lib qui est la bibliothèque standard pour les tâches d’ingénieur de données/science des données.

Nous allons parcourir tous les fichiers du dossier et les lire dans la trame de données pandas, et concaténer toutes les trames de données pour en faire une trame de données.

Lors de la lecture du fichier, à partir du fichier de métadonnées ci-dessus, nous verrons qu’il est au format JSON, nous pouvons donc utiliser json.loads pour le charger en type dictionnaire et nous avons constaté que les traits sont stockés dans les « attributs » comme le liste, nous devons d’abord la normaliser, avant de poursuivre le traitement.

# Define relative path to folder containing the text files
files_folder = "./vox/"
data_list = []
# Create a dataframe list from loaded file
for file_name in glob.glob(os.path.join(files_folder ,"*.txt")) :
with open(file_name,'r', encoding="utf8") as f:
data = json.loads(f.read())
df_nested_list = pd.json_normalize(data, record_path =['attributes'],meta=['name', 'image'])
data_list.append(df_nested_list)
concat_df = pd.concat(data_list)
# Drop unused column
new_df = concat_df.drop(['colors','image'],axis=1)
display(new_df)
Échantillon de données du téléchargement vers la trame de données Pandas avec des données d’attributs de normalisation

Mais les données seront difficiles à utiliser si elles sont au format normalisé, alors nous devons transformer l’attribut en colonnes en utilisant un tableau croisé dynamique.

# Find the unique trait list in this collection
trait_list = new_df.trait_type.unique()
nft_list = new_df.pivot_table(values='value', index=['name'],columns= 'trait_type', aggfunc=lambda x: ' '.join(x))
Résultat du tableau croisé dynamique

Nous aurons le tableau pour montrer la relation entre NFT et chaque trait possible dans la colonne, et le nom du trait dans chaque cellule. Cependant, nous ne savons toujours pas à quel point il est rare, nous devons alors résumer le nombre de duplications de chaque trait, puis mapper ce nombre sur notre base de données.

# count the number of duplicate traits
trait_count_series = new_df.groupby(['trait_type','value']).size()
# mapping the number of duplicate with trait name in in dataframe
for index in trait_count_series.index :
nft_list.loc[nft_list[index[0]] == index[1], index[0]] = trait_count_series.loc[index]
nft_list = nft_list.fillna(0)

Enfin, exportez notre résultat vers un fichier CSV pour un suivi hors ligne facilement ou pour l’envoyer à notre communauté d’amis NFT.

nft_list.to_csv('vox_stat_count.csv')

Hourra, nous avons le fichier CSV pour suivre notre rareté NFT maintenant, chaque nombre dans la cellule montrera combien de traits en double sur ce NFT, moins de nombre, plus de rareté sur ce NFT.

J’espère que vous apprécierez le commerce avec des informations sur le marché NFT.

Réf : Vous pouvez télécharger le notebook pour cet article sur https://github.com/anekpattanakij/nft-rarity-finding-python

Rejoignez Coinmonks Telegram Channel et Youtube Channel pour en savoir plus sur le trading et l’investissement cryptographiques

Source medium.com

Quitter la version mobile