Skip to content

Instantly share code, notes, and snippets.

@swcho
Last active November 6, 2020 06:25
Show Gist options
  • Save swcho/50377b016fa1a3211a6a487fe72d018b to your computer and use it in GitHub Desktop.
Save swcho/50377b016fa1a3211a6a487fe72d018b to your computer and use it in GitHub Desktop.
3000 TPS 시뮬레이션
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "3000 TPS 시뮬레이션",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyPk3OW6a5qgbD3do65f9zcM",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/swcho/50377b016fa1a3211a6a487fe72d018b/3000-tps.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "tQf84llzBUbj",
"outputId": "65aa041a-4c5c-4e9d-81bb-060c419b160e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
}
},
"source": [
"from io import StringIO\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"\n",
"csv_str = \"\"\"\n",
"from,to,len,fetchTime,name,reDrawTime\n",
"1604642705073,1604642710456,14662,325,webgl,24\n",
"1604642699678,1604642705072,14320,253,webgl,16\n",
"1604642694290,1604642699677,14110,237,webgl,12\n",
"1604642688893,1604642694289,14324,275,webgl,21\n",
"1604642683493,1604642688892,14363,215,webgl,12\n",
"1604642678094,1604642683492,14463,507,webgl,11\n",
"1604642672701,1604642678093,14370,225,webgl,11\n",
"1604642667297,1604642672700,14426,292,webgl,20\n",
"1604642661870,1604642667296,14496,289,webgl,19\n",
"1604642656497,1604642661869,14688,230,webgl,14\n",
"1604642651147,1604642656496,14814,329,webgl,12\n",
"1604642645791,1604642651146,14556,237,webgl,15\n",
"1604642640390,1604642645790,14683,232,webgl,27\n",
"1604642635009,1604642640389,14443,523,webgl,20\n",
"1604642629599,1604642635008,14275,214,webgl,23\n",
"1604642624196,1604642629598,14465,216,webgl,16\n",
"1604642618799,1604642624195,14342,208,webgl,18\n",
"1604642613370,1604642618798,14428,234,webgl,15\n",
"1604642607978,1604642613369,14374,230,webgl,28\n",
"1604642602549,1604642607977,14315,362,webgl,23\n",
"1604642597104,1604642602548,14417,245,webgl,25\n",
"1604642591704,1604642597103,14193,234,webgl,17\n",
"1604642586285,1604642591703,14426,276,webgl,21\n",
"1604642580885,1604642586284,14396,265,webgl,17\n",
"1604642575485,1604642580884,14429,235,webgl,22\n",
"1604642570085,1604642575484,14599,555,webgl,25\n",
"1604642564707,1604642570084,14537,509,webgl,26\n",
"1604642559294,1604642564706,14682,235,webgl,30\n",
"1604642553944,1604642559292,14454,222,webgl,23\n",
"1604642548576,1604642553943,14579,243,webgl,30\n",
"1604642543203,1604642548575,14515,231,webgl,30\n",
"1604642537835,1604642543202,14602,304,webgl,27\n",
"1604642532433,1604642537834,14815,258,webgl,31\n",
"1604642527094,1604642532432,14522,281,webgl,25\n",
"1604642521677,1604642527093,14511,476,webgl,29\n",
"1604642516303,1604642521676,14480,264,webgl,30\n",
"1604642510930,1604642516302,14500,251,webgl,32\n",
"1604642505584,1604642510929,14495,289,webgl,35\n",
"1604642500216,1604642505583,14423,247,webgl,30\n",
"1604642494896,1604642500215,14379,227,webgl,28\n",
"1604642489521,1604642494895,14653,256,webgl,36\n",
"1604642484176,1604642489520,14749,253,webgl,30\n",
"1604642478789,1604642484175,14586,235,webgl,38\n",
"1604642473380,1604642478788,14529,354,webgl,35\n",
"1604642467947,1604642473379,14603,248,webgl,36\n",
"1604642462565,1604642467945,14667,255,webgl,34\n",
"1604642457168,1604642462564,14579,230,webgl,34\n",
"1604642451797,1604642457167,14435,251,webgl,51\n",
"1604642446439,1604642451796,14429,349,webgl,48\n",
"1604642441070,1604642446438,14478,242,webgl,34\n",
"1604642435690,1604642441069,14523,238,webgl,34\n",
"1604642430288,1604642435688,14486,243,webgl,33\n",
"1604642424877,1604642430287,14628,255,webgl,41\n",
"1604642419498,1604642424876,14695,344,webgl,33\n",
"1604642414128,1604642419497,14871,259,webgl,35\n",
"1604642410457,1604642414127,10208,188,webgl,33\n",
"1604642710457,1604642711456,2802,101,webgl,40\n",
"1604642711457,1604642712456,2730,72,webgl,40\n",
"1604642712457,1604642713456,2698,76,webgl,27\n",
"1604642713457,1604642714456,2730,86,webgl,24\n",
"1604642714457,1604642715456,2674,125,webgl,30\n",
"1604642715457,1604642716456,2682,65,webgl,36\n",
"1604642716458,1604642717456,2679,92,webgl,25\n",
"1604642717457,1604642718456,2671,82,webgl,26\n",
"1604642718457,1604642719454,2758,226,webgl,49\n",
"1604642719457,1604642720456,2681,132,webgl,22\n",
"1604642720457,1604642721456,2706,78,webgl,25\n",
"1604642721457,1604642722456,2713,76,webgl,62\n",
"1604642722457,1604642723456,2710,77,webgl,57\n",
"1604642723457,1604642724456,2708,71,webgl,60\n",
"1604642724457,1604642725456,2760,73,webgl,53\n",
"1604642725457,1604642726456,2737,94,webgl,62\n",
"1604642726458,1604642727455,2699,77,webgl,58\n",
"1604642727457,1604642728456,2705,67,webgl,61\n",
"1604642728457,1604642729456,2764,92,webgl,74\n",
"1604642729458,1604642730456,2710,89,webgl,96\n",
"1604642730457,1604642731456,2734,78,webgl,58\n",
"1604642731457,1604642732456,2708,157,webgl,79\n",
"1604642732457,1604642733456,2671,120,webgl,56\n",
"1604642733457,1604642734456,2663,72,webgl,57\n",
"1604642734457,1604642735456,2687,161,webgl,103\n",
"1604642735457,1604642736456,2722,69,webgl,59\n",
"1604642736457,1604642737456,2713,73,webgl,82\n",
"1604642737457,1604642738456,2708,78,webgl,60\n",
"1604642738457,1604642739456,2655,75,webgl,64\n",
"1604642739457,1604642740456,2681,107,webgl,85\n",
"\"\"\"\n",
"\n",
"csv = StringIO(csv_str)\n",
"df = pd.read_csv(csv)\n",
"df.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"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>from</th>\n",
" <th>to</th>\n",
" <th>len</th>\n",
" <th>name</th>\n",
" <th>reDrawTime</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1601481780000</td>\n",
" <td>1601481840000</td>\n",
" <td>180000</td>\n",
" <td>webgl</td>\n",
" <td>128</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1601481780000</td>\n",
" <td>1601481840000</td>\n",
" <td>180000</td>\n",
" <td>echarts-gl</td>\n",
" <td>2441</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1601481780000</td>\n",
" <td>1601481840000</td>\n",
" <td>180000</td>\n",
" <td>echarts</td>\n",
" <td>1417</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1601481780000</td>\n",
" <td>1601481840000</td>\n",
" <td>180000</td>\n",
" <td>original</td>\n",
" <td>913</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1601481720000</td>\n",
" <td>1601481780000</td>\n",
" <td>180000</td>\n",
" <td>webgl</td>\n",
" <td>148</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" from to len name reDrawTime\n",
"0 1601481780000 1601481840000 180000 webgl 128\n",
"1 1601481780000 1601481840000 180000 echarts-gl 2441\n",
"2 1601481780000 1601481840000 180000 echarts 1417\n",
"3 1601481780000 1601481840000 180000 original 913\n",
"4 1601481720000 1601481780000 180000 webgl 148"
]
},
"metadata": {
"tags": []
},
"execution_count": 18
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "GLv7c5P_FhPG",
"outputId": "9b191c0a-c005-407f-92cf-5ccf3e306b18",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"df_echarts_gl = df.where(df['name'] == 'echarts-gl').dropna().reset_index()['reDrawTime']\n",
"df_echarts_gl = df_echarts_gl.rename('echarts-gl')\n",
"df_echarts_gl.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0 2441.0\n",
"1 2936.0\n",
"2 4623.0\n",
"3 4769.0\n",
"4 4362.0\n",
"Name: echarts-gl, dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 19
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3cMI_ap4G-wK",
"outputId": "ab3c91e2-9501-448a-aa25-f040e7ad353a",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"df_original = df.where(df['name'] == 'original').dropna().reset_index()['reDrawTime']\n",
"df_original = df_original.rename('original')\n",
"df_original.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0 913.0\n",
"1 906.0\n",
"2 904.0\n",
"3 913.0\n",
"4 26.0\n",
"Name: original, dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 20
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "bZf4feWpnjg_",
"outputId": "68fc53c9-1dfa-4723-9b87-2ff49cf0e821",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"df_echarts = df.where(df['name'] == 'echarts').dropna().reset_index()['reDrawTime']\n",
"df_echarts = df_echarts.rename('echarts')\n",
"df_echarts.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0 1417.0\n",
"1 2104.0\n",
"2 2516.0\n",
"3 4097.0\n",
"4 4213.0\n",
"Name: echarts, dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 21
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "v7abGwoto7YE",
"outputId": "5628a9cb-89e4-4cc9-9555-692f9c25e7f8",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"df_webgl = df.where(df['name'] == 'webgl').dropna().reset_index()['reDrawTime']\n",
"df_webgl = df_webgl.rename('webgl')\n",
"df_webgl.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0 128.0\n",
"1 148.0\n",
"2 165.0\n",
"3 223.0\n",
"4 68.0\n",
"Name: webgl, dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 22
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "DHu1BFtjIFT8",
"outputId": "fc9a7edd-7c04-4d23-942c-cbd581800613",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 284
}
},
"source": [
"df_combined = pd.concat([df_original, df_echarts, df_echarts_gl, df_webgl], axis=1)\n",
"df_combined.plot()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd13ad84550>"
]
},
"metadata": {
"tags": []
},
"execution_count": 23
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "EckvUpa-K0mw",
"outputId": "63d17735-4f21-4b9b-8c13-fc23cee2c8bf",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"df_original.describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"count 14.000000\n",
"mean 275.571429\n",
"std 415.752647\n",
"min 20.000000\n",
"25% 20.000000\n",
"50% 23.000000\n",
"75% 685.250000\n",
"max 913.000000\n",
"Name: original, dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 25
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3y5z7htjrkcH",
"outputId": "4df8995d-83b2-412e-f949-2785cb458e17",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
}
},
"source": [
"df.where((df['len'] == 3000) & (df['name'] == 'original')).describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"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>from</th>\n",
" <th>to</th>\n",
" <th>len</th>\n",
" <th>reDrawTime</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1.000000e+01</td>\n",
" <td>1.000000e+01</td>\n",
" <td>10.0</td>\n",
" <td>10.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>22.200000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>3.027650e+03</td>\n",
" <td>3.027650e+03</td>\n",
" <td>0.0</td>\n",
" <td>3.155243</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>20.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>20.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>20.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>23.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>29.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" from to len reDrawTime\n",
"count 1.000000e+01 1.000000e+01 10.0 10.000000\n",
"mean 1.601482e+12 1.601482e+12 3000.0 22.200000\n",
"std 3.027650e+03 3.027650e+03 0.0 3.155243\n",
"min 1.601482e+12 1.601482e+12 3000.0 20.000000\n",
"25% 1.601482e+12 1.601482e+12 3000.0 20.000000\n",
"50% 1.601482e+12 1.601482e+12 3000.0 20.500000\n",
"75% 1.601482e+12 1.601482e+12 3000.0 23.500000\n",
"max 1.601482e+12 1.601482e+12 3000.0 29.000000"
]
},
"metadata": {
"tags": []
},
"execution_count": 32
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "4wau_vtU3JuO",
"outputId": "edbab173-88c1-4933-8b4c-45e91bc9bc52",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
}
},
"source": [
"df.where((df['len'] == 3000) & (df['name'] == 'webgl')).describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"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>from</th>\n",
" <th>to</th>\n",
" <th>len</th>\n",
" <th>reDrawTime</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1.000000e+01</td>\n",
" <td>1.000000e+01</td>\n",
" <td>10.0</td>\n",
" <td>10.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>71.900000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>3.027650e+03</td>\n",
" <td>3.027650e+03</td>\n",
" <td>0.0</td>\n",
" <td>6.707376</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>63.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>66.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>70.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>78.750000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>1.601482e+12</td>\n",
" <td>1.601482e+12</td>\n",
" <td>3000.0</td>\n",
" <td>80.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" from to len reDrawTime\n",
"count 1.000000e+01 1.000000e+01 10.0 10.000000\n",
"mean 1.601482e+12 1.601482e+12 3000.0 71.900000\n",
"std 3.027650e+03 3.027650e+03 0.0 6.707376\n",
"min 1.601482e+12 1.601482e+12 3000.0 63.000000\n",
"25% 1.601482e+12 1.601482e+12 3000.0 66.500000\n",
"50% 1.601482e+12 1.601482e+12 3000.0 70.000000\n",
"75% 1.601482e+12 1.601482e+12 3000.0 78.750000\n",
"max 1.601482e+12 1.601482e+12 3000.0 80.000000"
]
},
"metadata": {
"tags": []
},
"execution_count": 33
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment