2021-10-07 13:06:21 +00:00
{
"cells": [
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 1,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import sqlite3\n",
"import numpy as np\n",
"from matplotlib.pyplot import figure\n",
"\n",
"import warnings # current version of seaborn generates a bunch of warnings that we'll ignore\n",
"warnings.filterwarnings(\"ignore\")\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"sns.set(style=\"white\", color_codes=True)"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 2,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"conTXs = sqlite3.connect('../../../../../../datasets/nfts.sqlite')"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 3,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"transfers = pd.read_sql_query(\"SELECT * FROM transfers\", conTXs)"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 4,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"num_df = (transfers[[\"transaction_value\", \"timestamp\"]].apply(pd.to_numeric, errors='coerce'))\n",
"num_df[\"timestamp\"] = pd.to_datetime(num_df.timestamp, unit='s', errors='coerce')\n",
"num_df.set_index(\"timestamp\")\n",
"num_df = num_df.resample(\"1440min\", label='right', on='timestamp').sum()\n"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 5,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'NFT transfers value over time')"
]
},
2021-10-07 16:57:01 +00:00
"execution_count": 5,
2021-10-07 13:06:21 +00:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAAGECAYAAAAvLAbBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABgRUlEQVR4nO3dd3hUVf4G8Hf6pEx6SEJJ6EQ6UgREEEHpVVhdESuia1ndRX+gsoq4uOq661pRV11dV9fVFVGUtRBEKdJRhNBLCqTXyfS5c35/TGaSkEnDzNw7+H6ex0eYmdx77r2Ib775nnNUQggBIiIiIiJqQC33AIiIiIiIlIhBmYiIiIgoAAZlIiIiIqIAGJSJiIiIiAJgUCYiIiIiCoBBmYiIiIgoAAZlIlKU/Px89OnTBx9++GGD19944w0sW7YMALBmzRoMHToUs2bNavBPVlYWfvvb3/p/36dPH8yYMQOzZs3CwoULG53rxRdfxIYNG4J+TZIk4Te/+Q0mTZqEf/3rX0E/X0t27NiB6dOnyz2M81L/mT333HNYu3atvAMioguaVu4BEBGdS61W46mnnsKwYcPQrVu3gJ8ZNmwYXn311UavT5gwwf/rPn364O2330ZCQkLAY+zYsQM9e/Zsn0E3o6ioCFu2bMEPP/wAjUYT9PNdyOo/s3vvvVfm0RDRhY5BmYgUx2g04uabb8aSJUvw/vvvQ6/Xt/s53n33XRw4cABPP/00NBoNsrKyUFlZiby8PFx++eWYN28eVq5cCavViuLiYmRmZuJvf/sbDAYDBgwYgMWLF2Pr1q0oLi7GDTfcgJtuugklJSVYunQpKioqAADjxo3DokWLsGjRIrjdbsydOxcvvPACXC4XVq1ahcrKSkiShIULF2LevHnYsWMHVq1ahcjISFitVrz77rt4+OGHkZOTA7VajX79+mHlypVQq+t+GLhlyxY89dRTWLduHQCguroaEyZMwIYNG7B37168+uqrcDqdKC8vx+zZs3Hfffc1uA/Lli1Dr169cOuttzb6fVFREVauXImCggK4XC5MmzYNd9xxR6N7WVhYiBUrVuDMmTMQQmD27NlYtGgR/vrXv6KmpgaPPPIIAOC7777DCy+8gA8//BB79+7FM888A5vNBpVKhXvuuQfjx4/HmjVr8N///hc2mw3R0dF45513mn1mvrEOGDAAN910EzZt2oSamho88MAD+OKLL3D06FF06NABr7zyCiIjI3HixImA956IKCChYGazWUybNk3k5eU1+7mvv/5azJw5U8yYMUP85je/EZWVlUIIIXbv3i3mzp0rZs6cKW644QaRn58fimET0c+Ql5cnBg8eLCRJEtddd5148sknhRBCvP7662Lp0qVCCCE++ugjcfHFF4uZM2f6//nDH/7Q6Fi9e/cWZWVlTZ7r+uuvF//73/+EEEIsXbpU3Hjjjf73nnzySbF27VohhBBOp1NMnz5dfPHFF/7jvvPOO0IIIX766SfRv39/YbfbxYsvvugfh8ViEffdd5+orq72X5MQQrhcLjF16lRx4MABIYQQ1dXVYsqUKWLfvn1i+/btIjMz0/931ccffyxuueUWIYQQbrdbPPzww+L06dMNrsHj8Yjx48eL/fv3CyGEePfdd8WSJUuEx+MR119/vTh16pQQQojCwkJx0UUXibKyMrF9+3Yxbdo0/3W//vrr/uPV//3ChQtFVlaWEEIIu90uFi5cKD7//PNG93HBggXizTff9F/PjBkzxGeffSZyc3PFJZdcIhwOhxBCiHvvvVd88MEHorKyUlx11VX+v9sLCwvF2LFjxZkzZ8RHH30khg8fLsxmc6uemW+svXv3Fm+//bYQQohXX31VDBkyRBQWFgpJksScOXPEp59+2uy9JyIKRLEV5R9//BHLly/H6dOnm/1cTU0NVqxYgY8++ggpKSl47rnn8MILL2D58uV44IEH8PLLLyMzMxP//e9/8cc//hGrV68OzQUQ0c+iVqvx5z//GXPmzMGYMWMavd9U68XPMXToUP+vH3jgAWzduhV///vfcfr0aRQXF8Nqtfrf97V49OvXD06nE1arFZdddhkWL16MgoICjB49GkuWLIHJZEJVVZX/606fPo3c3Fw89NBD/tfsdjuys7PRo0cPpKWloVOnTv7xPPvss1i4cCFGjx6NG2+8ERkZGQ3GrFKpMG/ePHz88ccYMGAA1qxZgwceeAAqlQqvvPIKNm3ahM8++wwnTpyAEAI2m61V98JqtWLXrl2oqqrCc88953/t8OHDmDp1aoPP7d27F2+++SYAwGQyYe7cufjuu+8wbdo0ZGZmYuPGjRg1ahS+//57rFq1Crt370ZJSQnuuuuuBtdx5MgRAN6Wmejo6FaNs75JkyYBANLT09G7d2+kpKQAADp37oyqqqpm7/3gwYPbfD4iuvApNih/8MEHePTRR/F///d//tfWrl2Lt99+Gx6PB/369cOjjz4Kl8uFFStW+P9C7NOnD9atWwen04l7770XmZmZ/teVMImGiFqvY8eOWLFiBZYuXYrZs2cH/XyRkZH+X//+97+HJEmYMmUKLr/8chQUFEAI4X/fYDAA8AY8ABBCYODAgcjKysL333+P7du3Y/78+XjppZfQoUMH/9dJkoSYmBh88skn/tdKS0thMpnwww8/NBhDly5d8PXXX2PHjh3Yvn07br75ZixfvhyTJ09uMO6rr74as2fPxvz582E2m3HJJZfAarVizpw5mDhxIoYNG4arr74aGzZsaHANvvHXf83lcgEAPB4PhBB4//33ERERAQAoLy/3X7eP73PnvuZ2uwEA8+fPx9q1a1FWVoYrr7wSUVFRkCQJPXr0aDBhs6ioCAkJCVi3bl2De9AWOp0u4K99mrv3RESBKHbVi1WrVmHYsGH+3x87dgwffPAB3n//fXzyySdITEzEG2+8gfj4eEycOBGAtzLw2muvYeLEidDr9Zg1axYA71/aL774ov9zRBQ+pkyZgrFjx+Ltt99u92NrNBp/oDvXli1bcNddd2Hq1KlQqVT48ccfIUlSs8d75pln8PLLL2PixIl4+OGH0bNnz0Y/FevWrRsMBoM/rBUUFGD69Ok4cOBAo+O99957ePDBBzFmzBg88MADGDNmDI4dO9bocykpKRg0aBAeeeQRf79tTk4OampqcN999+GKK67Azp074XQ64fF4GnxtfHy8/9zl5eXYvXs3ACA6OhqDBw/GP/7xDwDe3udf//rXyMrKavD10dHRGDRoEN59910AgNlsxtq1azF69GgAwJVXXomDBw/igw8+wK9+9SsAwODBg5GTk4Ndu3YBAA4dOoRJkyahuLi42fsLNP/MWtKWe09EBCi4onyuHTt2ICcnx/8XrcvlQt++ff3vm81m3HnnncjMzMScOXP8rzudTixbtgxutxu33357yMdNRD/f8uXLsWfPnnY/7vjx4/HUU0/5q6j1/e53v8Ndd92F2NhYREREYPjw4cjNzW32eDfeeCOWLVuG6dOnQ6/Xo0+fPpg+fXqDAKjX6/Hyyy9j1apVeP311+F2u3Hvvfdi6NCh2LFjR4PjzZ49Gzt37sTUqVMRERGBjh074oYbbgh47vnz5+Pee+/1t5f16dMHl19+OaZMmYKYmBikp6ejZ8+eyMnJaTA5cuHChbj//vsxadIkdO7cGSNGjPC/98wzz+Dxxx/HjBkz4HQ6MX36dMycObPRuZ955hmsXLkSa9asgdPpxIwZMzB37lz/9U6dOhXbtm3DwIEDAQAJCQl4/vnn8fTTT8PhcEAIgaefftrfctKc5p5ZS5q790REgajEuT8zU5grrrgC//znP5GVlYW8vDwsX74cAGCxWPw/RisuLsatt96KkSNH4qGHHvL/KNRiseA3v/kN4uLi8MwzzwRl5jwRERERXZgU23pxrksuuQRff/01ysrKIITAihUr8Pbbb0OSJNxxxx2YMmUKHn74YX9IBryTcTIyMvDcc88xJBMRERFRm4RN60VmZibuvvtu3HjjjfB4PLjooouwePFibNy4EdnZ2ZAkCV9++SUAoH///liwYAGysrLQs2dP/ySgDh0
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Set the width and height of the figure\n",
"plt.figure(figsize=(12,6))\n",
"# Line chart showing the number of visitors to each museum over time\n",
"ax = sns.lineplot(data=num_df, x=\"timestamp\", y=\"transaction_value\")\n",
"ax.set(xlabel='timestamp', ylabel='Total value')\n",
"plt.title(\"NFT transfers value over time\")\n",
"# Add title"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 6,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of unique addresses: 6765\n"
]
}
],
"source": [
"print(\"number of unique addresses:\", transfers[\"nft_address\"].nunique())"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 7,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"# num_df = (transfers[[\"nft_address\", \"transaction_value\", \"timestamp\"]"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 8,
2021-10-07 13:06:21 +00:00
"metadata": {},
2021-10-07 13:12:23 +00:00
"outputs": [],
2021-10-07 13:06:21 +00:00
"source": [
"#create data frame where group together from_addresses and count size of each group (how many TX each address did in total)\n",
"from_series = transfers[\"from_address\"].groupby(transfers[\"from_address\"]).size()\n",
"#create data frame where group together from_addresses and count size of each group (how many TX each address did in total)\n",
2021-10-07 13:12:23 +00:00
"to_series = transfers[\"to_address\"].groupby(transfers[\"to_address\"]).size()"
2021-10-07 13:06:21 +00:00
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 9,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"df = pd.DataFrame()\n",
"df = df.join(to_series.rename(\"to_count\"), how='outer')\n",
2021-10-07 13:12:23 +00:00
"df = df.join(from_series.rename('from_count'), how='outer')"
2021-10-07 13:06:21 +00:00
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 10,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 1728x1728 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1728x360 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(24,24))\n",
"fig, axs = plt.subplots(1, 2)\n",
"fig.set_size_inches(24, 5, forward=True)\n",
"fig.suptitle('Numbers of NFT transactions per address')\n",
"axs[0].hist(df[\"from_count\"], density=False, alpha=0.75, log=True, bins=20, color='orange')\n",
"axs[0].set_title(\"NFTs Sent from an address\")\n",
"axs[1].hist(df[\"to_count\"], density=False, alpha=0.75, log=True, bins=20)\n",
"axs[1].set_title(\"NFTs received to an address\")\n",
"plt.setp(axs[0], xlabel='Number of transactions out', ylabel='Number of addresses')\n",
"plt.setp(axs[1], xlabel='Number of transactions in', ylabel='Number of addresses')\n",
"print(\"\")"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 11,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"df_small=df[df[\"to_count\"]<10]\n",
"df_small=df_small[df_small[\"from_count\"]<10]"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 12,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 1728x1728 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABX8AAAFjCAYAAABliXgFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABnn0lEQVR4nO3deVhV5f7+8RvYgAMOUeBAZk5pzgOVOEBa4gCIYzkkpZVm5pSaqJhiznHUHFDr9C2zzNAUhwgyTU2xHCpNUzMTcwpwDpRps35/+HOfEBEn2LB5v67L62I/a9j3s9jnnM/5sPaz7AzDMAQAAAAAAAAAsCn21g4AAAAAAAAAALj/aP4CAAAAAAAAgA2i+QsAAAAAAAAANojmLwAAAAAAAADYIJq/AAAAAAAAAGCDaP4CAAAAAAAAgA2i+QsAAIqk1q1bKzAwUBkZGVnGk5OTVbNmTf3444958r7BwcEaMmRInpz7frhy5YoGDBigevXqqVevXtm2r1q1SjVr1lR0dHS2bTNmzFCfPn0sr2vWrHnTf61bt9bJkydz3H79380cOnRIP/zww/2bcD66MXvNmjX13XffWTFRwZHbf+7y+j+XAAAAtspk7QAAAADWcujQIX388cd65ZVXrB2lwPj2228VGxurzz//XO7u7jnuN3nyZDVv3lylSpW65flmzpypZs2aZRlzcHBQmTJltG3bNsvY+PHjVaxYMY0bN+6W53v99dfVr18/NW3a9DZmU7DcmH3btm0qU6aMlVMBAADAlnHnLwAAKLI8PDw0f/58nTx50tpRCox//vlHDz30kOrWrZtj87dEiRIym836z3/+k+v5SpcuLTc3tyz/XF1d5eDgkGXMyclJxYoVyzJm667PGwAAAMgrNH8BAECR1adPH1WsWFETJ0685T4zZszIMvbvr+sHBwdr2rRpGjNmjBo2bKjWrVtry5YtioyM1NNPPy1PT0+NHz9ehmFYjr969apGjBih+vXrq3Xr1lqxYkWW80dGRqpt27Zq0KCBOnfurM2bN1u2BQcHa+TIkerevbuefPJJxcbGavfu3erWrZvq16+vFi1aaObMmTKbzTedj2EY+vTTT9W2bVvVq1dPgYGB2rJliyRp3rx5mjRpkk6fPq2aNWtq1apVNz2Hk5OTgoODtXz5cv388885Xrv7rU+fPjp16pTeeecd9enTx7J0RHh4uJ588km9+uqrkqS1a9cqICBAdevWVePGjTVw4ECdPXtWkvTjjz/qqaeeUmRkpFq3bq369evr1VdftWzPyMjQO++8o+bNm6t+/frq2bOn9u3bZ8nw/fff67nnnlP9+vXVoEEDBQUF6dixY5bthw4d0ksvvaRGjRrJx8dHixcvvml2KevnKC0tTfPnz1fr1q1Vr1499ezZU3v37s0y97lz52rgwIGqX7++fHx8snxu7uQzEBwcrLffflsjRoxQgwYN1KZNG61ZsybLPnf6GbzR2bNnNWLECDVt2lR169bVs88+q5UrV1q2X716VePGjVOTJk3UsmVLff3111mOz21769atNXPmTD399NN6+umndenSJSUmJmro0KFq1KiRWrRooXHjxumff/6xHPPFF1+oTZs2qlu3rtq1a6fIyEjLtm+//Vb+/v6qV6+eWrdurf/+9783vXYAAACFDc1fAABQZDk6OmrSpEnatm2bvvrqq7s+z2effaZq1app7dq1qlevnkaMGKFVq1Zp8eLFCg0N1ZdffqlNmzZZ9t+6daseeOABrV69Wv369dOECRP0008/SbrWXJwyZYqGDh2qdevW6fnnn9eQIUOyNFnXr1+v3r17a8mSJWrYsKEGDRqkpk2bKioqSu+++65WrFiRY+P2/fff13vvvachQ4Zo7dq1evbZZzVw4EAdOnRI/fr105tvvqny5ctr27Zt6tChQ45zDgwMlJeXl95++22lp6ff9bW7E/PmzVP58uX15ptvat68eZbxrVu3KiIiQm+99ZZ++uknjR07Vi+//LJiYmK0YMECHTx4UIsWLbLs/88//+iLL77QvHnztGTJEu3fv9+y/dNPP9XGjRu1YMECffXVV3r00Uc1ZMgQGYahkydPauDAgWrXrp2++uorLVmyRJcuXdLMmTMlSefPn9eLL74od3d3rVixQpMmTdL777+vlStX5pj9usmTJ2vFihWaMGGCIiMjVaNGDfXt21cJCQmWfT744AO1bNlSX331ldq0aaPQ0FCdPXtWZrP5jj4D0rW1m11cXLRq1Sr17t1bwcHBlvWI7/Qz2KhRo2znf+utt3T+/Hl9/PHH+uqrr9S6dWtNnDjR0mQPDQ3Vnj179MEHH2j+/Pn65JNPshyf23ZJlus6b948lSlTRoMHD5Z0rcm7cOFC/fXXXxo+fLgk6bffftPEiRM1YsQIxcTEKCgoSMHBwYqLi9O5c+c0bNgwPf/884qOjtZbb72lOXPmaMeOHTlePwAAgMKCNX8BAECR5unpqe7du2vq1Klq2bKlHBwc7vgcVapUsawb3KVLF0VHR2vMmDGWB5eFh4frjz/+0DPPPCNJqlq1qsaNGyc7OztVq1ZNP/74o5YtW6bGjRtr8eLFevnlly2N10ceeUQHDhzQRx99ZGmyValSRZ06dZIkXbx4UZcuXdJDDz0kDw8PPfzww/rwww/14IMPZstpGIY++ugjvfbaa/Lz85MkDR48WHv37tUHH3yg//znPypZsqRlSYbchIaGyt/fX//3f/+nAQMG3HSfoUOHZrumX331lSpWrHgbVzarsmXLysHBQSVLllTZsmWVlJQkSQoKCtKjjz4qSTpw4IDeeecdy/Xx8PDQM888oyNHjljOYzabFRwcrDp16kiSOnbsaLnL9uTJk3J2dlbFihXl7u6uMWPG6LffflNmZqYyMjI0evRoy527lSpVUmBgoJYtWyZJ+vrrr+Xo6KjJkyfLyclJ1atX14QJE2QymbJl/7fLly9r5cqVmjVrlnx8fCRJEydO1J49e/TZZ59ZGphPPfWU5SF8w4YN09KlS3Xo0CHVrVv3tj8D13l4eGjChAmyt7dXtWrVtHPnTi1fvlxNmza948/gzTz99NNq1aqVKlWqJEkaOHCglixZori4OBUrVkzr16/X/Pnz1bhxY0nSpEmT9Pzzz0uSkpKSbrn9uvbt26tevXqSpB9++EGHDx/WJ598YllKIywsTN7e3jpy5IhOnTolOzs7VahQQR4eHurVq5cqV64sV1dXnTx5Uunp6XJ3d5eHh4c8PDz00EMPWT5TAAAAhRnNXwAAUOSNHDlSmzZt0rvvvqvg4OA7Pv56g0uSihUrlm3M2dlZaWlpltf169eXnZ2d5XWdOnUsX2s/cuSI9u7da1kuQJLS09NVpUqVm75f2bJlFRQUpGnTpumDDz6Qt7e3OnTooPr162fLef78eV24cEENGzbMMt6kSRNFR0ff6bT1yCOPaNCgQQoPD1f79u1vuk9ISIieeuqpLGO3epDc3Xj44YctP9epU0clS5bUggULdPToUR09elRHjhxRkyZNshxTuXJly88uLi6Wu5d79uyp6OhoPf3002rQoIFatWqlrl27ysHBQY8++qiKFy+uDz74QEeOHNGxY8d08OBBy3z++OMP1axZM8s6vh07dsw1f1xcnMxmc5Y7aO3t7dWoUaMsTet/NyNdXFwkXVum4k4+A9c1atRI9vb/+xJg/fr1tW7dOkl3/hm8mV69eik6Oloff/yx4uLi9Ntvv0m61nj/888/lZ6ertq1a1v2r1u3riVPbttvluGPP/7Q1atXs33Wrp/Px8dH9evX13PPPaeqVavq6aefVufOnVW6dGk9/vjj8vX11ZAhQ+Th4SEfHx917NhRDz300C3nCAAAUBjQ/AUAAEVemTJlNHbsWI0YMUJt2rS55b4ZGRnZxkym7CXVv5u7N7qxiZWZmSlHR0dJ15pjI0aMUKtWrXJ8j+sN5uvGjh2rXr166bvvvtPmzZvVv39/DRo0SG+88UaW/ZydnW+aJzMzU5mZmTnmvZV+/fpp/fr1mjBhgmrVqpVtu5ubW5ZGa1749/WIjY3VgAED1KFDB3l
"text/plain": [
"<Figure size 1728x360 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(24,24))\n",
"fig, axs = plt.subplots(1, 2)\n",
"fig.set_size_inches(24, 5, forward=True)\n",
"fig.suptitle('Numbers of NFT transactions per address')\n",
"axs[0].hist(df_small[\"from_count\"], density=False, alpha=0.75, log=False, bins=9, color='orange')\n",
"axs[0].set_title(\"NFTs Sent from an address\")\n",
"axs[1].hist(df_small[\"to_count\"], density=False, alpha=0.75, log=False, bins=9)\n",
"axs[1].set_title(\"NFTs received to an address\")\n",
"plt.setp(axs[0], xlabel='Number of transactions out', ylabel='Number of addresses')\n",
"plt.setp(axs[1], xlabel='Number of transactions in', ylabel='Number of addresses')\n",
"print(\"\")"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 13,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"whales_tx=df[df[\"from_count\"]>60000]\n",
"whales_rx=df[df[\"to_count\"]>60000]"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 14,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>to_count</th>\n",
" <th>from_count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0x0000000000000000000000000000000000000000</th>\n",
" <td>119978.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0xC69b4c6fFDBaF843A0d0588c99E3C67f27069BEa</th>\n",
" <td>74608.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0xcDA72070E455bb31C7690a170224Ce43623d0B6f</th>\n",
" <td>76645.0</td>\n",
" <td>36116.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" to_count from_count\n",
"0x0000000000000000000000000000000000000000 119978.0 NaN\n",
"0xC69b4c6fFDBaF843A0d0588c99E3C67f27069BEa 74608.0 1.0\n",
"0xcDA72070E455bb31C7690a170224Ce43623d0B6f 76645.0 36116.0"
]
},
2021-10-07 16:57:01 +00:00
"execution_count": 14,
2021-10-07 13:06:21 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"whales_rx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Whales RX info:\n",
"0x0000000000000000000000000000000000000000 - burn address\n",
"\n",
"[0xC69b4c6fFDBaF843A0d0588c99E3C67f27069BEa](https://etherscan.io/address/0xC69b4c6fFDBaF843A0d0588c99E3C67f27069BEa) / [creator](https://etherscan.io/address/0xC69b4c6fFDBaF843A0d0588c99E3C67f27069BEa) / info: `ENS: ETH Registrar Controller `\n",
"\n",
"[0xcDA72070E455bb31C7690a170224Ce43623d0B6f](https://etherscan.io/address/0xcDA72070E455bb31C7690a170224Ce43623d0B6f) / [creator](https://etherscan.io/address/0x95271d54d6e0d88b3825f89a766f97b8b7e8af82) / info: https://foundation.app"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 15,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>to_count</th>\n",
" <th>from_count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5</th>\n",
" <td>2.0</td>\n",
" <td>140875.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0x327305A797d92a39cEe1a225D7E2A1cC42B1a8fA</th>\n",
" <td>NaN</td>\n",
" <td>106620.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" to_count from_count\n",
"0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5 2.0 140875.0\n",
"0x327305A797d92a39cEe1a225D7E2A1cC42B1a8fA NaN 106620.0"
]
},
2021-10-07 16:57:01 +00:00
"execution_count": 15,
2021-10-07 13:06:21 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"whales_tx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Whales TX info:\n",
"\n",
2021-10-07 13:13:21 +00:00
"[0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5](https://etherscan.io/address/0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5) / [creator](https://etherscan.io/address/0x4fe4e666be5752f1fdd210f4ab5de2cc26e3e0e8) / info: `ENS: ETH Registrar Controller`\n",
2021-10-07 13:06:21 +00:00
"\n",
2021-10-07 13:13:21 +00:00
"[0x327305A797d92a39cEe1a225D7E2A1cC42B1a8fA](https://etherscan.io/address/0x327305A797d92a39cEe1a225D7E2A1cC42B1a8fA) not a contract! / info: `???`"
2021-10-07 13:06:21 +00:00
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 16,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 1728x1728 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABXAAAAFjCAYAAACUgiOIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABVH0lEQVR4nO3dd3yN9///8WeWGaMqSWt+zGgRs609oqgRo2aNKC2tqlhFUtSe1WpJ1Wi/NUqtEqufUFRbo5QqpSja2JIQK4Ss9+8PP+cjkjhBT3KcPO63m9st1zjXeV3vc8n18nSd63IyxhgBAAAAAAAAAOyOc0YXAAAAAAAAAABIGQEuAAAAAAAAANgpAlwAAAAAAAAAsFMEuAAAAAAAAABgpwhwAQAAAAAAAMBOEeACAAAAAAAAgJ0iwAUAAE8sX19ftWzZUvHx8Unm37hxQ97e3tq1a5dN3jcwMFABAQE22fa/4ebNm3rrrbdUvnx5derUKdnylStXytvbW6GhocmWTZ48WV27drVMe3t7p/jH19dXZ86cSXX53T8pOXLkiH755Zd/b4fT0f21e3t764cffsjAiuyHtb93tv57CQAA4KhcM7oAAACAx3HkyBHNmzdPb775ZkaXYjc2bdqkHTt26JtvvpGnp2eq640bN041a9ZUrly5Hri9KVOmqEaNGknmubi4KE+ePNq2bZtl3ogRI5QtWzYNGzbsgdt755131KNHD1WrVi0Ne2Nf7q9927ZtypMnTwZXBQAAAEfGFbgAAOCJVrBgQQUHB+vMmTMZXYrduH79uvLnz69y5cqlGuDmyJFDCQkJ+uijj6xuL3fu3PLw8EjyJ1++fHJxcUkyL0uWLMqWLVuSeY7u7n4DAAAAtkKACwAAnmhdu3ZVgQIFNGrUqAeuM3ny5CTz7v3qe2BgoCZOnKigoCBVrFhRvr6++vHHHxUSEqJ69eqpatWqGjFihIwxltfHxMRo0KBB8vHxka+vr5YvX55k+yEhIWrcuLEqVKig1q1ba+vWrZZlgYGBeu+999SuXTu9+OKL2rFjh/bs2aO2bdvKx8dHtWrV0pQpU5SQkJDi/hhj9PXXX6tx48YqX768WrZsqR9//FGSNGPGDI0ZM0bnzp2Tt7e3Vq5cmeI2smTJosDAQC1ZskT79u1Ldez+bV27dtXZs2c1duxYde3a1XIbhpkzZ+rFF19Uz549JUlr1qyRn5+fypUrp8qVK6t37966ePGiJGnXrl166aWXFBISIl9fX/n4+Khnz56W5fHx8Ro7dqxq1qwpHx8fvfbaazpw4IClhp9//lnt27eXj4+PKlSoIH9/f/3zzz+W5UeOHNHrr7+uSpUqqW7dupo9e3aKtUtJj6PY2FgFBwfL19dX5cuX12uvvab9+/cn2ffp06erd+/e8vHxUd26dZMcNw9zDAQGBuqDDz7QoEGDVKFCBTVs2FCrV69Oss7DHoP3u3jxogYNGqRq1aqpXLlyevnll7VixQrL8piYGA0bNkxVqlRR7dq19d///jfJ660t9/X11ZQpU1SvXj3Vq1dPV69eVWRkpPr166dKlSqpVq1aGjZsmK5fv255zdKlS9WwYUOVK1dOr7zyikJCQizLNm3apObNm6t8+fLy9fXVF198keLYAQAAPGkIcAEAwBPNzc1NY8aM0bZt27R+/fpH3s6iRYtUokQJrVmzRuXLl9egQYO0cuVKzZ49W6NHj9a3336rLVu2WNb/6aef9NRTT2nVqlXq0aOHRo4cqd9++03SnYBw/Pjx6tevn9auXasOHTooICAgSVC6bt06de7cWfPnz1fFihXVp08fVatWTd99950+/PBDLV++PNXwdc6cOfr0008VEBCgNWvW6OWXX1bv3r115MgR9ejRQwMHDtQzzzyjbdu2qWnTpqnuc8uWLVW9enV98MEHiouLe+SxexgzZszQM888o4EDB2rGjBmW+T/99JOWLVumIUOG6LffftP777+vN954Qxs2bNBnn32mw4cPa9asWZb1r1+/rqVLl2rGjBmaP3++Dh48aFn+9ddfa/Pmzfrss8+0fv16/ec//1FAQICMMTpz5ox69+6tV155RevXr9f8+fN19epVTZkyRZIUFRWlbt26ydPTU8uXL9eYMWM0Z84crVixItXa7xo3bpyWL1+ukSNHKiQkRKVKlVL37t0VERFhWWfu3LmqXbu21q9fr4YNG2r06NG6ePGiEhISHuoYkO7cy9jd3V0rV65U586dFRgYaLk/78Meg5UqVUq2/SFDhigqKkrz5s3T+vXr5evrq1GjRlmC8tGjR2vv3r2aO3eugoODtWDBgiSvt7ZckmVcZ8yYoTx58qhv376S7gS1n3/+uU6dOqUBAwZIkv7880+NGjVKgwYN0oYNG+Tv76/AwECFhYXp0qVL6t+/vzp06KDQ0FANGTJEn3zyiXbu3Jnq+AEAADwpuAcuAAB44lWtWlXt2rXThAkTVLt2bbm4uDz0NooVK2a5j+6rr76q0NBQBQUFWR7GNXPmTB0/flwNGjSQJBUvXlzDhg2Tk5OTSpQooV27dmnx4sWqXLmyZs+erTfeeMMSnhYpUkSHDh3SV199ZQnKihUrplatWkmSrly5oqtXryp//vwqWLCgChUqpC+//FJPP/10sjqNMfrqq6/09ttvq1mzZpKkvn37av/+/Zo7d64++ugj5cyZ03J7A2tGjx6t5s2b6//+7//01ltvpbhOv379ko3p+vXrVaBAgTSMbFJ58+aVi4uLcubMqbx58yo6OlqS5O/vr//85z+SpEOHDmns2LGW8SlYsKAaNGigY8eOWbaTkJCgwMBAlS1bVpLUokULy9WuZ86cUdasWVWgQAF5enoqKChIf/75pxITExUfH6+hQ4darqAtXLiwWrZsqcWLF0uS/vvf/8rNzU3jxo1TlixZVLJkSY0cOVKurq7Jar/XtWvXtGLFCn388ceqW7euJGnUqFHau3evFi1aZAkhX3rpJcuD5fr376+FCxfqyJEjKleuXJqPgbsKFiyokSNHytnZWSVKlNDu3bu1ZMkSVatW7aGPwZTUq1dP9evXV+HChSVJvXv31vz58xUWFqZs2bJp3bp1Cg4OVuXKlSVJY8aMUYcOHSRJ0dHRD1x+V5MmTVS+fHlJ0i+//KKjR49qwYIFlttSTJ06VXXq1NGxY8d09uxZOTk56dlnn1XBggXVqVMnFS1aVPny5dOZM2cUFxcnT09PFSxYUAULFlT+/PktxxQAAMCTjAAXAAA4hPfee09btmzRhx9+qMDAwId+/d2QSpKyZcuWbF7WrFkVGxtrmfbx8ZGTk5NlumzZspaviB87dkz79++3fPVekuLi4lSsWLEU3y9v3rzy9/fXxIkTNXfuXNWpU0dNmzaVj49PsjqjoqJ0+fJlVaxYMcn8KlWqKDQ09GF3W0WKFFGfPn00c+ZMNWnSJMV1hg8frpdeeinJvAc9HO1RFCpUyPJz2bJllTNnTn322Wc6ceKETpw4oWPHjqlKlSpJXlO0aFHLz+7u7pariF977TWFhoaqXr16qlChgurXr682bdrIxcVF//nPf5Q9e3bNnTtXx44d0z///KPDhw9b9uf48ePy9vZOcl/bFi1aWK0/LCxMCQkJSa5kdXZ2VqVKlZIEz/cGiu7u7pLu3PLhYY6BuypVqiRn5/99oc7Hx0dr166V9PDHYEo6deqk0NBQzZs3T2FhYfrzzz8l3QnP//77b8XFxen555+3rF+uXDlLPdaWp1TD8ePHFRMTk+xYu7u9unXrysfHR+3bt1fx4sVVr149tW7dWrlz59Zzzz2nRo0aKSAgQAULFlTdunXVokUL5c+f/4H7CAAA8CQgwAUAAA4hT548ev/99zVo0CA1bNjwgevGx8cnm+fqmrwtujegvd/9QVRiYqLc3Nwk3Qm4Bg0apPr166f6HndD4rvef/99derUST/88IO2bt2qXr16qU+fPnr33XeTrJc1a9YU60lMTFRiYmKq9T5Ijx49tG7dOo0cOVJlypRJttzDwyNJWGoL947Hjh079NZbb6lp06aqWrWq/P39tW7dOh09ejTJa+6
"text/plain": [
"<Figure size 1728x360 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sharks_tx=df[df[\"from_count\"]>20e3]\n",
"sharks_rx=df[df[\"to_count\"]>20e3]\n",
"sharks_tx=sharks_tx[sharks_tx[\"from_count\"]<60e3]\n",
"sharks_rx=sharks_tx[sharks_tx[\"to_count\"]<60e3]\n",
"\n",
"plt.figure(figsize=(24,24))\n",
"fig, axs = plt.subplots(1, 2)\n",
"fig.set_size_inches(24, 5, forward=True)\n",
"fig.suptitle('Numbers of NFT transactions per address')\n",
"axs[0].hist(sharks_tx[\"from_count\"], density=False, alpha=0.75, log=False, bins=100, color='orange')\n",
"axs[0].set_title(\"NFTs Sent from an address\")\n",
"axs[1].hist(sharks_rx[\"to_count\"], density=False, alpha=0.75, log=False, bins=9)\n",
"axs[1].set_title(\"NFTs received to an address\")\n",
"plt.setp(axs[0], xlabel='Number of transactions out', ylabel='Number of addresses')\n",
"plt.setp(axs[1], xlabel='Number of transactions in', ylabel='Number of addresses')\n",
"print(\"\")"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 17,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>to_count</th>\n",
" <th>from_count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0xE052113bd7D7700d623414a0a4585BCaE754E9d5</th>\n",
" <td>9552.0</td>\n",
" <td>31967.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C</th>\n",
" <td>14124.0</td>\n",
" <td>23128.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0xcDA72070E455bb31C7690a170224Ce43623d0B6f</th>\n",
" <td>76645.0</td>\n",
" <td>36116.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" to_count from_count\n",
"0xE052113bd7D7700d623414a0a4585BCaE754E9d5 9552.0 31967.0\n",
"0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C 14124.0 23128.0\n",
"0xcDA72070E455bb31C7690a170224Ce43623d0B6f 76645.0 36116.0"
]
},
2021-10-07 16:57:01 +00:00
"execution_count": 17,
2021-10-07 13:06:21 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sharks_tx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sharks TX info:\n",
"\n",
"[0xE052113bd7D7700d623414a0a4585BCaE754E9d5](https://etherscan.io/address/0xE052113bd7D7700d623414a0a4585BCaE754E9d5) / not a contract! / info: `Nifty Gateway: Omnibus `\n",
"\n",
"[0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C](https://etherscan.io/address/0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C) / not a contract! / info: `CryptoKitties: Sales Auction `\n",
"\n",
"[0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C](https://etherscan.io/address/0xcDA72070E455bb31C7690a170224Ce43623d0B6f) / [creator](https://etherscan.io/address/0x95271d54d6e0d88b3825f89a766f97b8b7e8af82) / info: https://foundation.app"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 18,
2021-10-07 13:06:21 +00:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>to_count</th>\n",
" <th>from_count</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0xE052113bd7D7700d623414a0a4585BCaE754E9d5</th>\n",
" <td>9552.0</td>\n",
" <td>31967.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C</th>\n",
" <td>14124.0</td>\n",
" <td>23128.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" to_count from_count\n",
"0xE052113bd7D7700d623414a0a4585BCaE754E9d5 9552.0 31967.0\n",
"0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C 14124.0 23128.0"
]
},
2021-10-07 16:57:01 +00:00
"execution_count": 18,
2021-10-07 13:06:21 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sharks_rx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sharks RX info:\n",
"\n",
"[0xE052113bd7D7700d623414a0a4585BCaE754E9d5](https://etherscan.io/address/0xE052113bd7D7700d623414a0a4585BCaE754E9d5) / not a contract! / info: `Nifty Gateway: Omnibus `\n",
"\n",
"[0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C](https://etherscan.io/address/0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C) / not a contract! / info: `CryptoKitties: Sales Auction `\n"
]
},
2021-10-07 16:44:21 +00:00
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 19,
2021-10-07 16:44:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"#transfers not transactions\n",
"transactions_per_nft = transfers[\"nft_address\"].groupby(transfers[\"nft_address\"]).size()\n"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 20,
2021-10-07 16:44:21 +00:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 0.000000e+00\n",
"1 0.000000e+00\n",
"2 0.000000e+00\n",
"3 0.000000e+00\n",
"4 0.000000e+00\n",
"5 6.180000e+18\n",
"6 0.000000e+00\n",
"7 0.000000e+00\n",
"8 3.000000e+16\n",
"9 0.000000e+00\n",
"10 0.000000e+00\n",
"11 0.000000e+00\n",
"12 0.000000e+00\n",
"13 0.000000e+00\n",
"14 0.000000e+00\n",
"Name: transaction_value, dtype: float64"
]
},
2021-10-07 16:57:01 +00:00
"execution_count": 20,
2021-10-07 16:44:21 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"transfers[\"transaction_value\"] = pd.to_numeric(transfers[\"transaction_value\"])\n",
"transfers[\"transaction_value\"] = transfers[\"transaction_value\"].fillna(0)\n",
"transfers[\"transaction_value\"].head(15)"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 28,
2021-10-07 16:44:21 +00:00
"metadata": {},
2021-10-07 16:57:01 +00:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>transaction_value</th>\n",
" </tr>\n",
" <tr>\n",
" <th>nft_address</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0x00000000000b7F8E8E8Ad148f9d53303Bfe20796</th>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0x000000000437b3CCE2530936156388Bff5578FC3</th>\n",
" <td>4.175880e+18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0x000000000A42C2791eEc307FFf43Fa5c640e3Ef7</th>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0x000000F36EDb9d436Be73cDBf0DCa7dF3E6F3A50</th>\n",
" <td>0.000000e+00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" transaction_value\n",
"nft_address \n",
"0x00000000000b7F8E8E8Ad148f9d53303Bfe20796 0.000000e+00\n",
"0x000000000437b3CCE2530936156388Bff5578FC3 4.175880e+18\n",
"0x000000000A42C2791eEc307FFf43Fa5c640e3Ef7 0.000000e+00\n",
"0x000000F36EDb9d436Be73cDBf0DCa7dF3E6F3A50 0.000000e+00"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
2021-10-07 16:44:21 +00:00
"source": [
2021-10-07 16:57:01 +00:00
"total_value_per_nft = transfers[[\"nft_address\", \"transaction_value\"]].groupby(transfers[\"nft_address\"]).sum()\n",
2021-10-07 16:44:21 +00:00
"total_value_per_nft.head(4)"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 34,
2021-10-07 16:44:21 +00:00
"metadata": {},
2021-10-07 16:57:01 +00:00
"outputs": [
{
"data": {
"text/plain": [
"nft_address\n",
"0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270 2.296429e+23\n",
"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D 1.588150e+23\n",
"0x60E4d786628Fea6478F785A6d7e704777c86a7c6 7.530649e+22\n",
"Name: transaction_value, dtype: float64"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
2021-10-07 16:44:21 +00:00
"source": [
"most_popular_nfts = transactions_per_nft.sort_values(ascending=False).head(8)\n",
2021-10-07 16:57:01 +00:00
"most_valuable_nfts = total_value_per_nft[\"transaction_value\"].sort_values(ascending=False).head(3)\n",
"most_valuable_nfts"
2021-10-07 16:44:21 +00:00
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 35,
2021-10-07 16:44:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"#get frame with values over time\n",
"num_df = pd.DataFrame()\n",
"#cast to numeric\n",
"num_df = (transfers[[\"transaction_value\", \"timestamp\"]].apply(pd.to_numeric, errors='coerce'))\n",
"#add nft_address column to it\n",
"num_df[\"nft_address\"]=transfers[\"nft_address\"]\n",
"#filter out only ones that are in most_popular_nft variable\n",
"num_df = num_df[num_df.nft_address.isin(list(most_valuable_nfts.index))]\n",
"#convert timestamp in to date time\n",
"num_df[\"timestamp\"] = pd.to_datetime(num_df.timestamp, unit='s', errors='coerce')\n",
"#set index as timestamp\n",
"num_df = num_df.set_index(\"timestamp\")"
]
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 36,
2021-10-07 16:44:21 +00:00
"metadata": {},
"outputs": [],
"source": [
"#group timestamps by day, create column per each nft_address, aggregate transaction value by count and sum\n",
"new_df = num_df.groupby([pd.Grouper(freq='d'), 'nft_address'])['transaction_value'].agg(transaction_value=\"sum\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
2021-10-07 16:57:01 +00:00
"execution_count": 37,
2021-10-07 16:44:21 +00:00
"metadata": {},
2021-10-07 16:57:01 +00:00
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1728x864 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
2021-10-07 16:44:21 +00:00
"source": [
2021-10-07 16:57:01 +00:00
"plt.figure(figsize=(24, 12))\n",
2021-10-07 16:44:21 +00:00
"# new_df.unstack()\n",
2021-10-07 16:57:01 +00:00
"ax = sns.lineplot(data=new_df, x='timestamp', y='transaction_value', hue='nft_address',)"
2021-10-07 16:44:21 +00:00
]
},
2021-10-07 13:06:21 +00:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}