見出し画像

TheGraphとGraphQLを使用したDecentraland Marketplaceの売上の調査

NFTは最近大流行しています。それとも彼らですか?



ゲームDecentraland内のウェアラブルアイテムの販売を調査して調べたいと思いました。



Decentralandは、ブロックチェーンベースの仮想世界であり、プレイヤーは土地を購入し、シーンを作成し、仮想イベントを開催し、ピアツーピアマーケットプレイス内でウェアラブル商品を売買できます。



特に、ウェアラブル商品を販売する市場がどれほど人気が​​あるのか​​興味がありました。



ウェアラブルアイテムは、ゲーム内のアバターをドレスアップして市場でこのように見せることができるアイテムです。

画像1

幸い、Decentralandは、TheGraph.comのGraphQLAPIを介してマーケットプレイスに関するデータにアクセスするための便利な方法を提供します。



このAPIを使用すると、アイテムの内容、購入者、価格、時期に関する情報にアクセスできます。



データにアクセスするための最初のステップは、TheGraph.comの遊び場環境を使用して、返すデータのフォーマットを把握することです。



APIプレイグラウンド


プレイグランドは次のようになり、以下にラベルを付けた3つのウィンドウがあります。

画像2

最初のウィンドウ(ラベル1)はクエリエディターであり、データを返す方法に基づいてクエリを構造化します。



2番目のウィンドウ(ラベル2)は、クエリの結果を表示できる出力ペインです。



3番目のウィンドウ(ラベル3)は、要求できるフィールドとそのデータ型へのリファレンスガイドです。



デフォルトでは、クエリは100個のアイテムを返します。これは、包括的なデータセットを収集する場合に少し制約があります。



これを回避するには、次の結果を取得するための開始点として最後の値を入力することにより、繰り返しクエリを実行する方法を見つける必要がありました。これを行うには、更新日に基づいてクエリを並べ替え、updatedAt_gtパラメーターを使用して更新日の開始点を動的に入力します。



私のGraphQLクエリは最終的に次のようになりました。


{
orders (first: 1000 orderBy: updatedAt, orderDirection: asc where: { status:sold category:wearable updatedAt_gt:1}) {

category
nftAddress
price

status
id
updatedAt
blockNumber
nft {
owner {
id
}
name
tokenURI

owner {
id
}
}

}

}

GraphQLでのフィルタリングやウィンドウ処理の詳細については説明しませんが、クエリをフォーマットするための優れたリファレンスとして役立つリンクを以下にいくつか示します。



このページでTheGraphのクエリに関する特定の構文例を表示し、ここでGraphQLクエリ言語を学ぶことができます。



Pythonを入力してください



クエリをフォーマットしたら、Pythonを利用して結果を反復処理し、さらに分析するためにそれらをpandasデータフレームに結合します。



これを行うには、GraphQL.orgWebサイトの公式ドキュメントに従ってGrapheneライブラリをインストールすると便利です。



以下は、インポートする必要のあるライブラリと、Pythonを使用してDecentralandAPIエンドポイントをクエリするために必要なセットアップ手順です。



import requests
import json
from gql import gql, Client
import pandas as pd
import time

from gql.transport.requests import RequestsHTTPTransport
# Select your transport with a defined url endpoint
transport = RequestsHTTPTransport(url="https://api.thegraph.com/subgraphs/name/decentraland/marketplace")
# Create a GraphQL client using the defined transport
client = Client(transport=transport, fetch_schema_from_transport=True)

私のような仲間の初心者への注意点の1つは、GraphQLクエリ形式が中括弧({})に重いことです。これは、動的変数を渡したいときにいくつかの問題を引き起こします。\ nエラーを回避するために、すべての中括弧を2倍にし、文字列内の日付変数に「{0}」の構文を使用する必要がありました。


私のクエリ文字列は最終的に次のようになりました。




mystring = """
{{
 orders (first: 1000 orderBy: updatedAt, orderDirection: asc where: {{ status:sold category:wearable updatedAt_gt:"{0}"}}) {{


   category
   nftAddress
   price
    
   status
   id
   updatedAt
   blockNumber
   nft {{
     owner {{
       id
     }}
     name
     tokenURI
    
     owner {{
       id
     }}
   }}
  
 }}

}}"""

次のステップは、最初の1000の売り上げを照会するループを設定し、最初の1000の売り上げの最後の販売日を、次の1000の売り上げを取得するための開始点として渡すことでした。完全なクエリループは次のようになります。



df = pd.DataFrame()

#update parameter used in mystring to start querying the database at the earliest update date of sale. The update 
#date is specified in epoch date and needs to be converted to datetime for human consumption.
update = 1

while True:
   
   #query the data using GraphQL python library.
   query = gql(mystring.format(update))
   result = client.execute(query)
   
   #if there is no data returned it means you reached the end and should stop querying.
   if len(client.execute(query)['orders']) <= 1:
       break
  
   else:
       #Create a temporary dataframe to later append to the final dataframe that compiles all 1000-row dataframes.
       df1 = pd.DataFrame()
       df1 = pd.DataFrame(result['orders'])
       #unfold a subdict into a series of columns.
       df1 = df1.join(df1['nft'].apply(pd.Series)) 
   
       #append your temp dataframe to your master dataset.
       df = df.append(df1)
       
       #Pass into the API the max date from your dataset to fetch the next 1000 records.
       update = df['updatedAt'].max()

#reformat the update date in human-readable datetime format.
df['updatedAt_dt'] = df['updatedAt'].apply(lambda x: time.strftime('%Y-%m-%d', time.localtime(int(x))) )

データの調査


データがデータフレームに完全にロードされたら、データを探索できます。
月別売上高を見ると、2020年2月のゲーム発売前後で売上高が最も高かったものの、その後は減少傾向にあることがわかります。現在、月間約100件の販売があります。

画像3

平均販売価格はどうですか?


APIの価格フィールドが引用されている内容の説明が見つからなかったため、価格がネイティブトークン通貨であるMANAで指定されていると少し仮定しています。



月ごとに販売された商品の平均価格をプロットしました。これを書いている時点では、1 MANAは約30セントの価値があったので、2021年2月に販売されたウェアラブルの平均価格は600〜1200ドルの間でした。

画像4

おそらく通貨の高騰と商品の高値が売上高を減少させている理由です。



2020年2月から2021年2月までの私のデータの総売上高は8,435でした。販売されたユニークな製品の総数は281で、そのうち231が複数の売上を記録しました。



販売された上位15製品は次のとおりです。

画像5

結論


Decentralandは間違いなく開発のパイオニア段階にあり、ウェアラブル販売の成長を促進するためにやるべきことがあります。おそらく、アイテムの価格を下げることで、月間売上高の成長を促進することができます。



あなたがブロックチェーンとデータの愛好家であり、DecentralandまたはNFT全般について他の結論に達した場合は、コメントであなたから聞いてみたいと思います。



この記事が気に入ったらサポートをしてみませんか?