Menjelajah Data OpenSea: Temporal Graph (Dynamic Network)

Visualisasi Temporal Graph dari riwayat transaksi Ghozali Everyday.

Tulisan ini adalah kelanjutan dari tulisan saya sebelumnya, Belajar analitika blockchain dari riwayat transaksi Ghozali Everyday. Di tulisan itu, saya membahas bagaimana proses pengambilan data dari log transaksi blockchain. Di tulisan lanjutan ini, saya akan mencoba melakukan pengolahan data yang telah diambil dari BigQuery.

Data blockchain adalah data transaksi, dan karenanya, di dalamnya memuat banyak interaksi: antar alamat dompet digital, alamat ke Kontrak Pintar, juga Kontrak Pintar ke Kontrak Pintar yang lain. Ada banyak pengolahan data (dan analisis) yang bisa dilakukan. Untuk menyebut beberapa: tren transaksi, pemilik NFT dan berapa NFT yang dimiliki, pembeli dan penjual NFT terbanyak, volume pertukaran, serta analisis terhadap interaksi antar aktor di dalam blockchain.

Salah satu alat analisis yang kerap dipakai dalam memeriksa interaksi-interaksi di dalam blockchain adalah Analisis Jejaring Sosial (Social Network Analysis). Dalam SNA, aktor disebut dengan Node (simpul) dan hubungan antar aktor disebut dengan Link (tautan). Beberapa referensi juga menyebut Link sebagai Edge. Dalam grafik, node direpresentasikan sebagai titik dan link direpresentasikan sebagai garis.

Network/Graph: Node direpresentasikan sebagai titik, Link direpresentasikan sebagai garis.

Di tulisan ini, saya mencoba mengolah data transaksi yang diunduh dari BigQuery menjadi sebuah dataset yang kemudian bisa divisualisasikan menjadi Temporal Graph atau Dynamic Network. Temporal atau dinamis berarti memedulikan dimensi waktu di dalam sebuah analisis jejaring sosial. Sehingga, bagaimana keadaan sebuah jejaring sosial di satu titik waktu tertentu, atau memahami bagaimana perubahan struktur jaringan dari waktu ke waktu, bisa dipahami.

Hasil kueri data transaksi NFT Ghozali Everyday dari BigQuery saya unggah di sini dalam format .csv.  Blok terakhir dalam data ini adalah blok 25137298.

GhozaliEverydayTransfer.csv
  • block_timestamp adalah catatan waktu di blok tempat transaksi dicatat ke dalam blockchain.
  • transaction_hash adalah hash transaksi.
  • trf_from adalah alamat dari mana NFT dipindahkan.
  • trf_to adalah alamat ke mana NFT dipindahkan.
  • token_id adalah token ID dari NFT yang dipindahkan.
  • value adalah jumlah token yang dipindahkan.

Sebelum membangun dataset untuk analisis jejaring sosial, ada baiknya kita lakukan sedikit eksplorasi.

Ada berapa banyak transaksi terjadi tiap jam?

  SELECT DATE_TRUNC('hour', block_timestamp) AS hour,
         COUNT(transaction_hash) AS txns
    FROM ghozaliEverydayTransfer
GROUP BY 1
ORDER BY 1;
Kueri: hourly_txns
Tabel hasil kueri: hourly_txns
Plot: hourly_txns

Saya menggunakan DuckDB di notebook Observable untuk melakukan kueri terhadap file .csv ini. Plot tren transaksi per jam dibuat menggunakan Observable Plot, yang sekarang menjadi alat favorit saya untuk visualisasi data.


Membangun dataset Temporal Graph

Jejaring sosial terdiri atas simpul dan ikatan. Untuk menganalisis dinamikanya, perlu tambahan dimensi waktu. Perlu ada dua dataset, untuk nodes dan untuk links.

Dataset pertama, Nodes, dibangun dengan cara melakukan UNION atau append atau penyatuan data alamat asal dengan alamat tujuan. Setelahnya, perlu mengidentifikasi waktu (timestamp) awal kemunculan alamat atau node tersebut (bisa jadi sebuah node muncul ketika dia menerima NFT, bisa jadi juga muncul karena menjadi pengirim NFT). Saya mengidentifikasikan waktu awal karena dalam visualisasi Temporal Graph, saya ingin Nodes muncul ketika ia memiliki ikatan dengan Nodes yang lain (eliminasi isolated nodes).

WITH union_source_target AS (
  SELECT trf_from AS id, 
         block_timestamp
    FROM ghozaliEverydayTransfer
  UNION ALL
  SELECT trf_to AS id, 
         block_timestamp
    FROM ghozaliEverydayTransfer
)
  SELECT id, 
         MIN(block_timestamp) AS start_time 
    FROM union_source_target 
GROUP BY id 
ORDER BY start_time
Kueri Nodes

Dataset kedua, Links, dibangun dengan cara menambahkan satu kolom penanda waktu blok terakhir. Dalam dataset ini, ada dua kolom penanda waktu: start_time dan end_time.

Dua kolom itu yang menjadi patokan rentang waktu kapan hubungan antar node terjadi dan kapan hubungan berakhir. Karena saya ingin melihat perkembangan jaringan dari waktu ke waktu (awal hingga blok terakhir), saya memakai penanda waktu blok terakhir sebagai end_time.

Bobot link dihitung dari berapa jumlah transaksi yang dilakukan oleh kedua alamat secara kumulatif dari waktu ke waktu menggunakan ROW_NUMBER().

WITH final_block AS (
  SELECT MAX(block_timestamp) AS max_block
    FROM ghozaliEverydayTransfer
), start_end_time AS (
  SELECT trf_from AS source,
         trf_to AS target,
         block_timestamp AS start_time,
         max_block AS end_time
    FROM ghozaliEverydayTransfer, final_block
), link_weight AS (
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY source, target ORDER BY start_time) AS weight
FROM start_end_time
)
SELECT * FROM link_weight ORDER BY start_time;
Kueri Links
Diagram kueri Links

Visualisasi Temporal Graph

Ada beberapa cara untuk melakukan analisis jejaring sosial: pengukuran berdasarkan teori graf (sentralitas, kepadatan, diameter, dsb.), menganalisis fitur-fitur dalam jaringan (tingkat pemisahan, deteksi komunitas dalam jaringan), atau visualisasi (membuat algoritma untuk memetakan jaringan).

Dan saya... tidak akan melakukan semua itu. Tulisan ini memiliki peran hanya sampai bagaimana membangun dataset yang bisa dipakai untuk melakukan visualisasi Temporal Network.

Beginilah kira-kira perkembangan jejaring sosial Ghozali Everyday dari waktu ke waktu.

Ada beberapa hal yang tampaknya cukup menarik dan mungkin layak untuk diperiksa lebih lanjut lagi.

Visualisasi menunjukkan ada beberapa alamat yang melakukan cukup banyak pembelian di waktu-waktu awal (direpresentasikan oleh garis/link yang tebal). Dalam graf ketiga, kita juga melihat beberapa alamat yang membeli NFT dari alamat kedua, meskipun masih ada banyak NFT yang bisa dibeli langsung dari alamat Ghozali_Ghozalu (lihat 6 node berwarna merah). Apakah alamat-alamat itu dimiliki oleh satu aktor yang sama? Sekarang jawabnya tentu saja, saya kurang tahu.


Jika ingin melihat sendiri bagaimana dinamika jejaring sosial dari Ghozali Everyday, silakan pencet tombol Play.

Observable Notebook: Ghozali Everyday Temporal Graph

Tak takut lagi ketinggalan

Daftarkan email Anda untuk berlangganan nawala.
[email protected]
Langganan