Last active
November 15, 2022 18:04
-
-
Save bilzard/558f07a7d13f62b4222a92446704cbe5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "9c44e70e-94ae-4e07-b61e-a429bef3e7ad", | |
"metadata": {}, | |
"source": [ | |
"## Series.value_counts() v.s. collections.Counter()\n", | |
"\n", | |
"結論:\n", | |
"Series.value_counts()は大きな配列を少ない回数処理するのに向いている。一方で小さな配列をたくさん処理するのには向いてない。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 131, | |
"id": "131ec980-7451-42d9-a3c5-80e058082894", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"The lab_black extension is already loaded. To reload it, use:\n", | |
" %reload_ext lab_black\n" | |
] | |
} | |
], | |
"source": [ | |
"%load_ext lab_black\n", | |
"\n", | |
"from itertools import product\n", | |
"from functools import wraps\n", | |
"from time import time\n", | |
"from collections import Counter, defaultdict\n", | |
"\n", | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"from tqdm import tqdm" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 144, | |
"id": "8959c96b-e784-4635-b671-0431b49b4f93", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"global_result = defaultdict(list)\n", | |
"\n", | |
"\n", | |
"def timing(f):\n", | |
" @wraps(f)\n", | |
" def wrap(*args, **kw):\n", | |
" ts = time()\n", | |
" result = f(*args, **kw)\n", | |
" te = time()\n", | |
" global_result[(f.__name__, args[0])].append(te - ts)\n", | |
" # print(f\"func:{f.__name__} args:[{args}, {kw}] took: {te - ts:2.4f} sec\")\n", | |
" return result\n", | |
"\n", | |
" return wrap" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 145, | |
"id": "5e637c95-e582-4a3b-b429-234ae0e30a64", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"@timing\n", | |
"def value_count_collections_x(n, sort=False):\n", | |
" x = np.random.randint(0, 1000, (n))\n", | |
" vc = Counter(x)\n", | |
" if sort:\n", | |
" vc = dict(sorted(vc.items(), key=lambda x: x[1], reverse=True))\n", | |
" return vc\n", | |
"\n", | |
"\n", | |
"@timing\n", | |
"def value_count_series_x(n, sort=False):\n", | |
" x = np.random.randint(0, 1000, (n))\n", | |
" vc = pd.Series(x).value_counts(sort=sort)\n", | |
" return vc\n", | |
"\n", | |
"\n", | |
"for _ in range(5):\n", | |
" for n in [10, 100, 1000, 10_000, 100_000, 1_000_000, 10_000_000]:\n", | |
" value_count_collections_x(n)\n", | |
" value_count_series_x(n)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 146, | |
"id": "3abf5524-028a-4802-b507-b89ccd2509bb", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"@timing\n", | |
"def value_count_collections_y(n, sort=False):\n", | |
" y = np.random.randint(0, 1000, (n, 100))\n", | |
" result = []\n", | |
" for y_ in y:\n", | |
" vc = Counter(y_)\n", | |
" if sort:\n", | |
" vc = dict(sorted(vc.items(), key=lambda x: x[1], reverse=True))\n", | |
" return vc\n", | |
"\n", | |
"\n", | |
"@timing\n", | |
"def value_count_series_y(n, sort=False):\n", | |
" y = np.random.randint(0, 1000, (n, 100))\n", | |
" result = []\n", | |
" for y_ in y:\n", | |
" vc = pd.Series(y_).value_counts(sort=sort)\n", | |
" return vc\n", | |
"\n", | |
"\n", | |
"for _ in range(3):\n", | |
" for n in [100, 1000, 10_000, 100_000]:\n", | |
" value_count_collections_y(n)\n", | |
" value_count_series_y(n)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 147, | |
"id": "65b991da-be7b-4b39-a1c2-da38f9544690", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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BuZKWGbOnJnvYOwHUdAYh3tjvltR74GyEBkZSdeuXWnYsCGffvopXl5eWFpa8vvvvzN//vw8v5sHmSGW81gfffRRnvE8Oezt7Qu8/zfffMPo0aPp378/r7/+Om5ubpiZmTF37txcg9mLE2t+x+7nPTpq1Cheeuklrly5QkZGBnv27GHRokW5znn55Zfp06cPGzZs4M8//+Ttt99m7ty5/PXXXzRr1qzA2MpChw4diIyM5JdffmHLli0sWbKE+fPn8+WXXxY59f5///sf3377Ld98802e35ter+eRRx7h008/zfe+9/6BV5QRI0YYxwpJiYjSJ4mQKNdyBsW6ubnlGcBYHAV9MecUYDtz5gx16tQx7s/MzCQqKqpYzzV06FBWrlxJaGgop06dQlGUXN1it27dIjQ0lNmzZzNjxgzj/uI201epUiXPDLbMzEyio6Nz7fP19SU5ObnImNesWUNaWppxO+d1+/r6snfvXrKysgocIF6rVi22bdtGUlJSrlah06dPG4/nxAzkiftBWoyg4N9jSW3cuJGMjAx+/fXXXC1S99OlUatWLU6ePImiKLniO3fuXK7zct7Djo6OJXoPr1+/njp16vDTTz/lep6ZM2fe92Pd637fo8OGDWPKlCl8++23pKWlYWFhkes9n8PX15dXX32VV199lbNnzxIQEMAnn3zCN998k+/j3v15vNfp06dxdXUt8VR/FxcXxowZw5gxY0hOTqZDhw7MmjWr0ETo77//5rXXXuPll19mxIgR+b6+I0eO0LVr11J5b+a0Co0ePZpffvnlgR9P5CZjhES51qNHDxwdHZkzZ06uLoEc169fL/T+Of953vvF3K1bNywtLVm4cGGuloelS5eSkJDAE088UWRs3bp1w8XFhXXr1rFu3TqCgoJydT3ktHTc27JR1CyuHL6+vnnG93z99dd5WleGDBnC7t27+fPPP/M8xu3bt8nOzgagbdu2dOvWzXjLSYSefPJJbty4kecv+7tjf/zxx9HpdHnOmT9/PhqNhl69egGGL3tXV9c8cX/++efFes0FsbOzK7Kswf3I73eTkJDA8uXLi/0YPXr04OrVq/z666/Gfenp6SxevDjXeS1atMDX15ePP/6Y5OTkPI9T1Hs4v1j37t1rnK7+IO73Perq6kqvXr345ptvWLNmDT179sTV1dV4PDU1lfT09Fz38fX1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\n", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"data = []\n", | |
"\n", | |
"for func, n in product(\n", | |
" [\"value_count_collections_x\", \"value_count_series_x\"],\n", | |
" [10, 100, 1000, 10_000, 100_000, 1_000_000, 10_000_000],\n", | |
"):\n", | |
" time_sec = np.array(global_result[(func, n)]).mean()\n", | |
" data.append({\"func\": func, \"n\": n, \"time_sec\": time_sec})\n", | |
"data = pd.DataFrame(data)\n", | |
"_, ax = plt.subplots()\n", | |
"\n", | |
"for func, df in data.groupby(\"func\"):\n", | |
" ax.plot(df[\"n\"], df[\"time_sec\"], label=func, ls=\"solid\", marker=\"x\")\n", | |
"ax.legend()\n", | |
"ax.set(\n", | |
" xlabel=\"N\",\n", | |
" ylabel=\"time_sec\",\n", | |
" title=\"Time to value-count Large arrays of size N\",\n", | |
" xscale=\"log\",\n", | |
" yscale=\"log\",\n", | |
")\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 148, | |
"id": "ec906989-19b0-440d-a974-ee1b5972855c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHLCAYAAAAk8PeNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB/fklEQVR4nO3deVhV1frA8e9hnkFFQBQcEUUTnDVnRXFs8JYN5ni1buJQVA4552ylZmLTTc1Gbzb+JEfEIbM0TVOZFHFGUJFZpnP2748dpxAVRGAf4P08j0+ttffZ+z2w4bzsvd61dIqiKAghhBBCVENmWgcghBBCCKEVSYSEEEIIUW1JIiSEEEKIaksSISGEEEJUW5IICSGEEKLakkRICCGEENWWJEJCCCGEqLYkERJCCCFEtSWJkBBCCCGqLUmERLU3evRoGjRooHUYlc6GDRvQ6XScO3dO61BECTRo0IDRo0drHYYQJkcSIVEl6XS6Ev3bs2eP1qEWERkZybx58yTBqOQWL17M999/X6J9z507Z7wmv/nmmyLb582bh06n4/r16/c8zi+//MK8efNISUkpRcRCVE8WWgcgRHn49NNPC7U3btzIzp07i/Q3b96cjz76CIPBUJHh3VNkZCTz58+nZ8+ecqeqElu8eDFPPPEEjz322H297o033mDo0KHodLr7Pucvv/zC/PnzGT16NC4uLoW2xcTEYGYmf/sKcTtJhESV9NxzzxVq//rrr+zcubNIvxCmJCAggGPHjvHdd98xdOjQMj22tbV1mR6vImRmZmJvb1+k32AwkJubi42NjQZRiapG/jwQ1d7tY4QKHlO89dZbhIaG0qhRI+zs7OjXrx8XL15EURQWLFhAvXr1sLW15dFHHyU5ObnIcbdu3Uq3bt2wt7fH0dGRQYMGcerUqXvGsmHDBp588kkAevXqdcdHeGvXrqVFixZYW1vj6elJcHBwsY9CNm/ejE6nY+/evUW2ffDBB+h0Ok6ePAnAn3/+yejRo2nUqBE2NjZ4eHgwduxYbty4cc9zgPpIct68eUX67zQ+JSUlhZdeegkvLy+sra1p0qQJy5YtK/HduezsbObNm0fTpk2xsbGhTp06DB06lLi4OOM+mZmZvPLKK8Zz+Pr68tZbb6EoinGfgu/3hg0bin0/BY+ozpw5Y7zr4uzszJgxY8jKyir0uszMTD755BPj97Ak43OefvppmjZtyhtvvFEoxpKYN28er732GgANGzY0nrfgEevt34OCMV4HDhwgJCSE2rVrY29vz+OPP861a9eM+40aNQpXV1fy8vKKnLNfv374+vreM679+/fz5JNP4u3tjbW1NV5eXrz88svcunWr0H6jR4/GwcGBuLg4Bg4ciKOjI8OHDwfUr+fEiRP5/PPPjdf+tm3bAHjrrbd4+OGHqVWrFra2trRt25bNmzcXOnaPHj3w9/e/Y3y+vr4EBQUZ21999RVt27bF0dERJycnHnroId555517vkdRuckdISHu4vPPPyc3N5dJkyaRnJzM8uXLGTZsGL1792bPnj1MmzaNM2fO8O677/Lqq6+ybt0642s//fRTRo0aRVBQEMuWLSMrK4v33nuPrl278scff9z1kVf37t2ZPHkyq1ev5vXXX6d58+YAxv/OmzeP+fPnExgYyIsvvkhMTAzvvfcehw8f5sCBA1haWt7xuIMGDcLBwYH//e9/9OjRo9C2TZs20aJFC1q2bAnAzp07OXv2LGPGjMHDw4NTp07x4YcfcurUKX799ddSPbK5XVZWFj169ODy5cu88MILeHt788svvzBjxgwSEhJYtWrVPV+v1+sZPHgw4eHhPP3000yZMoX09HR27tzJyZMnady4MYqi8MgjjxAREcG///1vAgIC2L59O6+99hqXL19m5cqVpY5/2LBhNGzYkCVLlnD06FH++9//4ubmxrJlywD1+z9u3Dg6dOjA888/D0Djxo2LPa65uTmzZs1i5MiR931XaOjQocTGxvLll1+ycuVKXF1dAahdu/Y9Xzdp0iRq1KjB3LlzOXfuHKtWrWLixIls2rQJgBEjRrBx40a2b9/O4MGDja+7evUqu3fvZu7cufc8/tdff01WVhYvvvgitWrV4tChQ7z77rtcunSJr7/+utC++fn5BAUF0bVrV9566y3s7OyM23bv3s3//vc/Jk6ciKurq/Fn6J133uGRRx5h+PDh5Obm8tVXX/Hkk0+yZcsWBg0aZHwP48eP5+TJk8brHODw4cPExsYya9YsQL32n3nmGfr06WP8XkZFRXHgwAGmTJlyz/cpKjFFiGogODhYudvlPmrUKKV+/frGdnx8vAIotWvXVlJSUoz9M2bMUADF399fycvLM/Y/88wzipWVlZKdna0oiqKkp6crLi4uyvjx4wud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\n", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"data = []\n", | |
"\n", | |
"for func, n in product(\n", | |
" [\"value_count_collections_y\", \"value_count_series_y\"],\n", | |
" [100, 10_000, 100_000],\n", | |
"):\n", | |
" time_sec = np.array(global_result[(func, n)]).mean()\n", | |
" data.append({\"func\": func, \"n\": n, \"time_sec\": time_sec})\n", | |
"data = pd.DataFrame(data)\n", | |
"_, ax = plt.subplots()\n", | |
"\n", | |
"for func, df in data.groupby(\"func\"):\n", | |
" ax.plot(df[\"n\"], df[\"time_sec\"], label=func, ls=\"solid\", marker=\"x\")\n", | |
"ax.legend()\n", | |
"ax.set(\n", | |
" xlabel=\"N\",\n", | |
" ylabel=\"time_sec\",\n", | |
" title=\"Time to value-count N tiny arrays\",\n", | |
" xscale=\"log\",\n", | |
" yscale=\"log\",\n", | |
")\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "7f8a3fe2-8b95-4f08-9bac-1c2857a5d893", | |
"metadata": {}, | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"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.10.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment