{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## License\n", "\n", "Copyright 2020 Google LLC\n", "\n", "Licensed under the the Apache License v2.0 with LLVM Exceptions (the \"License\");\n", "you may not use this file except in compliance with the License.\n", "You may obtain a copy of the License at\n", "\n", "https://llvm.org/LICENSE.txt\n", "\n", "Unless required by applicable law or agreed to in writing, software\n", "distributed under the License is distributed on an \"AS IS\" BASIS,\n", "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "See the License for the specific language governing permissions and\n", "limitations under the License." ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [], "source": [ "import requests\n", "import os\n", "import logging\n", "import argparse\n", "import json\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "cache_file = \"cache.json\"\n", "token = f'Bearer {os.getenv(\"BUILDKITE_API_TOKEN\")}'\n", "builds = []" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loaded 9938 entries\n" ] } ], "source": [ "if os.path.exists(cache_file):\n", " with open(cache_file) as f:\n", " builds = json.load(f)\n", " print(f'loaded {len(builds)} entries') " ] }, { "cell_type": "code", "execution_count": 170, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loading page 1\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4227 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4974 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4226 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4972 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4225 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4971 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4224 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4970 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4223 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4222 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4969 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4968 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4221 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4967 is running skipping\n", "https://buildkite.com/llvm-project/llvm-master-build/builds/320 is running skipping\n", "https://buildkite.com/llvm-project/premerge-checks/builds/4220 is running skipping\n", "https://buildkite.com/llvm-project/diff-checks/builds/4963 is running skipping\n", "loading page 2\n", "loading page 3\n", "found existing job fd1b3754-6375-4d58-8c83-8a66b0c5b5fa\n", "10294 jobs in total\n", "saved 10294 entries\n" ] } ], "source": [ "# load new jobs from Buildkite API\n", "if True:\n", " existing = set()\n", " for j in builds:\n", " existing.add(j['id'])\n", "\n", " # uncomment to reset\n", "# builds = []\n", "# existing = set()\n", " page = 1\n", " stop = False\n", " while not stop:\n", " print('loading page', page)\n", " re = requests.get('https://api.buildkite.com/v2/organizations/llvm-project/builds',\n", " params={'page': page},\n", " headers={'Authorization': token})\n", " if re.status_code != 200:\n", " print('response status', re.status_code, re)\n", " break\n", " x = re.json()\n", " if x == []:\n", " print('empty response')\n", " break\n", " for j in x:\n", " if j['id'] in existing:\n", " print('found existing job', j['id'])\n", " stop = True\n", " break\n", " # TODO: skip running jobs \n", " if (j['state'] == 'running') or (j['state'] == 'scheduled'):\n", " print(j['web_url'], 'is', j['state'], 'skipping')\n", " continue\n", " builds.append(j)\n", " page += 1\n", " print(len(builds), 'jobs in total') \n", " with open(cache_file, 'w') as f:\n", " json.dump(builds, f)\n", " print(f'saved {len(builds)} entries')" ] }, { "cell_type": "code", "execution_count": 171, "metadata": {}, "outputs": [], "source": [ "d = {\n", " 'id': [],\n", " 'number': [],\n", " 'pipeline': [],\n", "}\n", "\n", "jobs = {\n", " 'pipeline': [],\n", " 'name': [],\n", " 'step_key': [],\n", " 'state': [],\n", " 'exit_status': [],\n", " 'agent_id': [],\n", " 'agent_name': [],\n", " 'runnable_at': [],\n", " 'started_at': [],\n", " 'wait_duration': [],\n", " 'finished_at': [],\n", " 'run_duration': [],\n", "}\n", "\n", "sec = np.timedelta64(1, 's')\n", "for b in builds:\n", " d['id'].append(b['id'])\n", " d['number'].append(b['number'])\n", " d['pipeline'].append(b['pipeline']['slug'])\n", " for x in b['jobs']:\n", " if x['state'] in ['waiting_failed', 'canceled', 'skipped', 'broken']:\n", " continue\n", " try:\n", " jobs['pipeline'].append(b['pipeline']['slug'])\n", " jobs['name'].append(x['name'])\n", " jobs['step_key'].append(x['step_key'] if 'step_key' in x else '')\n", " jobs['state'].append(x['state'] )\n", " jobs['exit_status'].append(x['exit_status'] if 'exit_status' in x else -1)\n", " jobs['agent_id'].append(x['agent']['id'] if 'agent' in x else '')\n", " jobs['agent_name'].append(x['agent']['name'] if 'agent' in x else '')\n", " runnable = np.datetime64(x['runnable_at'].replace('Z', ''))\n", " started = np.datetime64(x['started_at'].replace('Z', ''))\n", " finished = np.datetime64(x['finished_at'].replace('Z', ''))\n", " jobs['runnable_at'].append(runnable)\n", " jobs['started_at'].append(started)\n", " jobs['wait_duration'].append((started - runnable) / sec)\n", " jobs['finished_at'].append(finished)\n", " jobs['run_duration'].append((finished - started) / sec)\n", " except Exception as e:\n", " print(x)\n", " raise e \n", "jobs = pd.DataFrame(jobs)" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['premerge-checks', 'diff-checks', 'llvm-master-build',\n", " 'cleanup-branches', 'llvm-releases'], dtype=object)" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jobs.pipeline.unique()" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pipelinenamestep_keystateexit_statusagent_idagent_namerunnable_atstarted_atwait_durationfinished_atrun_duration
0premerge-checks:seedling: setupNonepassed05725b783-8dbd-4f2a-868b-43672fda1517premerge-debian-79cddc6ddb-xcdj8-22020-07-16 12:50:042020-07-16 12:50:08.6734.6732020-07-16 12:50:25.25916.586
1premerge-checks:linux: build and test linuxlinuxfailed-15725b783-8dbd-4f2a-868b-43672fda1517premerge-debian-79cddc6ddb-xcdj8-22020-07-16 12:50:252020-07-16 12:50:28.6683.6682020-07-16 12:59:19.455530.787
2premerge-checks:windows: build and test windowswindowspassed0f4f2789e-50aa-4dfb-88e9-267df8227508w642020-07-16 12:50:252020-07-16 12:50:29.6454.6452020-07-16 13:04:03.301813.656
3premerge-checks:spiral_note_pad: reportNonepassed0152a7c38-8e6c-438b-8123-fafb92ff2afdpremerge-debian-79cddc6ddb-snd9j-22020-07-16 13:04:032020-07-16 13:04:12.2669.2662020-07-16 13:04:23.55011.284
4diff-checks:seedling: setupNonepassed05725b783-8dbd-4f2a-868b-43672fda1517premerge-debian-79cddc6ddb-xcdj8-22020-07-16 12:49:182020-07-16 12:49:18.6630.6632020-07-16 12:49:20.1041.441
.......................................
31143llvm-releasesninja allNonefailed11346c13a-6aca-49cb-b76f-9c248c2e53eb2b3f2bb62dfe-12019-11-07 17:04:112019-11-07 17:04:18.8987.8982019-11-07 17:04:23.2964.398
31144llvm-releasesNonefailed90091346c13a-6aca-49cb-b76f-9c248c2e53eb2b3f2bb62dfe-12019-11-07 16:59:152019-11-07 16:59:16.7701.7702019-11-07 17:02:41.360204.590
31145llvm-releasesNonefailed90091346c13a-6aca-49cb-b76f-9c248c2e53eb2b3f2bb62dfe-12019-11-07 16:59:152019-11-07 17:02:41.760206.7602019-11-07 17:02:46.1474.387
31146llvm-releasesNonefailed11346c13a-6aca-49cb-b76f-9c248c2e53eb2b3f2bb62dfe-12019-11-07 16:00:462019-11-07 16:57:53.5963427.5962019-11-07 16:58:07.71214.116
31147llvm-releasesNonefailed11346c13a-6aca-49cb-b76f-9c248c2e53eb2b3f2bb62dfe-12019-11-07 16:00:462019-11-07 16:58:08.3383442.3382019-11-07 16:58:16.7898.451
\n", "

31148 rows × 12 columns

\n", "
" ], "text/plain": [ " pipeline name step_key state \\\n", "0 premerge-checks :seedling: setup None passed \n", "1 premerge-checks :linux: build and test linux linux failed \n", "2 premerge-checks :windows: build and test windows windows passed \n", "3 premerge-checks :spiral_note_pad: report None passed \n", "4 diff-checks :seedling: setup None passed \n", "... ... ... ... ... \n", "31143 llvm-releases ninja all None failed \n", "31144 llvm-releases None failed \n", "31145 llvm-releases None failed \n", "31146 llvm-releases None failed \n", "31147 llvm-releases None failed \n", "\n", " exit_status agent_id \\\n", "0 0 5725b783-8dbd-4f2a-868b-43672fda1517 \n", "1 -1 5725b783-8dbd-4f2a-868b-43672fda1517 \n", "2 0 f4f2789e-50aa-4dfb-88e9-267df8227508 \n", "3 0 152a7c38-8e6c-438b-8123-fafb92ff2afd \n", "4 0 5725b783-8dbd-4f2a-868b-43672fda1517 \n", "... ... ... \n", "31143 1 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n", "31144 9009 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n", "31145 9009 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n", "31146 1 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n", "31147 1 1346c13a-6aca-49cb-b76f-9c248c2e53eb \n", "\n", " agent_name runnable_at \\\n", "0 premerge-debian-79cddc6ddb-xcdj8-2 2020-07-16 12:50:04 \n", "1 premerge-debian-79cddc6ddb-xcdj8-2 2020-07-16 12:50:25 \n", "2 w64 2020-07-16 12:50:25 \n", "3 premerge-debian-79cddc6ddb-snd9j-2 2020-07-16 13:04:03 \n", "4 premerge-debian-79cddc6ddb-xcdj8-2 2020-07-16 12:49:18 \n", "... ... ... \n", "31143 2b3f2bb62dfe-1 2019-11-07 17:04:11 \n", "31144 2b3f2bb62dfe-1 2019-11-07 16:59:15 \n", "31145 2b3f2bb62dfe-1 2019-11-07 16:59:15 \n", "31146 2b3f2bb62dfe-1 2019-11-07 16:00:46 \n", "31147 2b3f2bb62dfe-1 2019-11-07 16:00:46 \n", "\n", " started_at wait_duration finished_at \\\n", "0 2020-07-16 12:50:08.673 4.673 2020-07-16 12:50:25.259 \n", "1 2020-07-16 12:50:28.668 3.668 2020-07-16 12:59:19.455 \n", "2 2020-07-16 12:50:29.645 4.645 2020-07-16 13:04:03.301 \n", "3 2020-07-16 13:04:12.266 9.266 2020-07-16 13:04:23.550 \n", "4 2020-07-16 12:49:18.663 0.663 2020-07-16 12:49:20.104 \n", "... ... ... ... \n", "31143 2019-11-07 17:04:18.898 7.898 2019-11-07 17:04:23.296 \n", "31144 2019-11-07 16:59:16.770 1.770 2019-11-07 17:02:41.360 \n", "31145 2019-11-07 17:02:41.760 206.760 2019-11-07 17:02:46.147 \n", "31146 2019-11-07 16:57:53.596 3427.596 2019-11-07 16:58:07.712 \n", "31147 2019-11-07 16:58:08.338 3442.338 2019-11-07 16:58:16.789 \n", "\n", " run_duration \n", "0 16.586 \n", "1 530.787 \n", "2 813.656 \n", "3 11.284 \n", "4 1.441 \n", "... ... \n", "31143 4.398 \n", "31144 204.590 \n", "31145 4.387 \n", "31146 14.116 \n", "31147 8.451 \n", "\n", "[31148 rows x 12 columns]" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jobs" ] }, { "cell_type": "code", "execution_count": 172, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/google/home/goncharov/etc/merge-checks/venv/lib/python3.7/site-packages/ipykernel_launcher.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " \"\"\"Entry point for launching an IPython kernel.\n" ] } ], "source": [ "ds = jobs[jobs['pipeline'] == 'premerge-checks'][jobs['step_key'] == 'windows'][jobs['state']=='passed'][~jobs['agent_name'].str.startswith('buildkite-')]" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pipelinenamestep_keystateexit_statusagent_idagent_namerunnable_atstarted_atwait_durationfinished_atrun_duration
2premerge-checks:windows: build and test windowswindowspassed0f4f2789e-50aa-4dfb-88e9-267df8227508w642020-07-16 12:50:252020-07-16 12:50:29.6454.6452020-07-16 13:04:03.301813.656
9premerge-checks:windows: build and test windowswindowspassed01ee7462f-3202-4272-a755-7e2850e59af4w32020-07-16 12:41:562020-07-16 12:42:00.1714.1712020-07-16 12:57:31.825931.654
16premerge-checks:windows: build and test windowswindowspassed0cae1cf3a-a836-4ae3-93ff-448f5c58a7a9w-no-ssd2020-07-16 12:39:042020-07-16 12:39:05.8591.8592020-07-16 12:56:56.2941070.435
23premerge-checks:windows: build and test windowswindowspassed0c1698c80-18e9-420f-a61c-37843b65313fw22020-07-16 12:21:572020-07-16 12:22:02.3355.3352020-07-16 12:55:54.6952032.360
30premerge-checks:windows: build and test windowswindowspassed0cae1cf3a-a836-4ae3-93ff-448f5c58a7a9w-no-ssd2020-07-16 12:15:462020-07-16 12:15:55.7779.7772020-07-16 12:33:55.8391080.062
.......................................
25194premerge-checks:windows: build and test windowswindowspassed0d7a4e418-c12e-4a55-ad5c-3803f03f0782w12020-06-17 10:13:402020-06-17 10:13:45.3085.3082020-06-17 10:41:51.7161686.408
25223premerge-checks:windows: build and test windowswindowspassed0d7a4e418-c12e-4a55-ad5c-3803f03f0782w12020-06-17 08:35:442020-06-17 08:35:54.79310.7932020-06-17 09:58:01.6334926.840
25234premerge-checks:windows: build and test windowswindowspassed0bd675275-3c9b-47ce-8fc3-73d6c3f8d089w22020-06-17 08:07:442020-06-17 08:16:26.374522.3742020-06-17 08:56:29.4202403.046
25238premerge-checks:windows: build and test windowswindowspassed0283e8832-4e87-49c6-93ce-5d7d7e521344w52020-06-17 08:04:012020-06-17 08:04:05.9984.9982020-06-17 09:29:55.5535149.555
25242premerge-checks:windows: build and test windowswindowspassed0af60fa17-98d6-4cfe-8b93-f9f5d9572069w72020-06-17 08:04:022020-06-17 08:07:10.312188.3122020-06-17 08:50:11.2492580.937
\n", "

2560 rows × 12 columns

\n", "
" ], "text/plain": [ " pipeline name step_key state \\\n", "2 premerge-checks :windows: build and test windows windows passed \n", "9 premerge-checks :windows: build and test windows windows passed \n", "16 premerge-checks :windows: build and test windows windows passed \n", "23 premerge-checks :windows: build and test windows windows passed \n", "30 premerge-checks :windows: build and test windows windows passed \n", "... ... ... ... ... \n", "25194 premerge-checks :windows: build and test windows windows passed \n", "25223 premerge-checks :windows: build and test windows windows passed \n", "25234 premerge-checks :windows: build and test windows windows passed \n", "25238 premerge-checks :windows: build and test windows windows passed \n", "25242 premerge-checks :windows: build and test windows windows passed \n", "\n", " exit_status agent_id agent_name \\\n", "2 0 f4f2789e-50aa-4dfb-88e9-267df8227508 w64 \n", "9 0 1ee7462f-3202-4272-a755-7e2850e59af4 w3 \n", "16 0 cae1cf3a-a836-4ae3-93ff-448f5c58a7a9 w-no-ssd \n", "23 0 c1698c80-18e9-420f-a61c-37843b65313f w2 \n", "30 0 cae1cf3a-a836-4ae3-93ff-448f5c58a7a9 w-no-ssd \n", "... ... ... ... \n", "25194 0 d7a4e418-c12e-4a55-ad5c-3803f03f0782 w1 \n", "25223 0 d7a4e418-c12e-4a55-ad5c-3803f03f0782 w1 \n", "25234 0 bd675275-3c9b-47ce-8fc3-73d6c3f8d089 w2 \n", "25238 0 283e8832-4e87-49c6-93ce-5d7d7e521344 w5 \n", "25242 0 af60fa17-98d6-4cfe-8b93-f9f5d9572069 w7 \n", "\n", " runnable_at started_at wait_duration \\\n", "2 2020-07-16 12:50:25 2020-07-16 12:50:29.645 4.645 \n", "9 2020-07-16 12:41:56 2020-07-16 12:42:00.171 4.171 \n", "16 2020-07-16 12:39:04 2020-07-16 12:39:05.859 1.859 \n", "23 2020-07-16 12:21:57 2020-07-16 12:22:02.335 5.335 \n", "30 2020-07-16 12:15:46 2020-07-16 12:15:55.777 9.777 \n", "... ... ... ... \n", "25194 2020-06-17 10:13:40 2020-06-17 10:13:45.308 5.308 \n", "25223 2020-06-17 08:35:44 2020-06-17 08:35:54.793 10.793 \n", "25234 2020-06-17 08:07:44 2020-06-17 08:16:26.374 522.374 \n", "25238 2020-06-17 08:04:01 2020-06-17 08:04:05.998 4.998 \n", "25242 2020-06-17 08:04:02 2020-06-17 08:07:10.312 188.312 \n", "\n", " finished_at run_duration \n", "2 2020-07-16 13:04:03.301 813.656 \n", "9 2020-07-16 12:57:31.825 931.654 \n", "16 2020-07-16 12:56:56.294 1070.435 \n", "23 2020-07-16 12:55:54.695 2032.360 \n", "30 2020-07-16 12:33:55.839 1080.062 \n", "... ... ... \n", "25194 2020-06-17 10:41:51.716 1686.408 \n", "25223 2020-06-17 09:58:01.633 4926.840 \n", "25234 2020-06-17 08:56:29.420 2403.046 \n", "25238 2020-06-17 09:29:55.553 5149.555 \n", "25242 2020-06-17 08:50:11.249 2580.937 \n", "\n", "[2560 rows x 12 columns]" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds" ] }, { "cell_type": "code", "execution_count": 173, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 173, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ " fig, ax = plt.subplots(figsize=(10,10)) # size of the plot (width, height)\n", "\n", " sns.violinplot(\n", " ax=ax,\n", " x='run_duration',\n", " y='agent_name',\n", " split=True,\n", " data=ds)" ] }, { "cell_type": "code", "execution_count": 174, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
medianmeanstdcount_nonzero
run_durationrun_durationrun_durationrun_duration
agent_name
wr2253.15802358.4526671063.64382515.0
w-no-ssd2205.65602384.878086903.300255327.0
w72183.60102105.768773838.87218622.0
wh64-12171.93052030.448714458.93894114.0
w12167.87302337.174326946.209905276.0
w52120.64752298.384057864.067277350.0
w42085.15552259.117868894.307199340.0
w32052.33552205.881979901.605416374.0
w22003.34852215.764024909.803217334.0
w61928.49302096.736796870.648539367.0
wh64-21802.34651843.380400269.78764810.0
w641689.11101598.434884397.997104275.0
\n", "
" ], "text/plain": [ " median mean std count_nonzero\n", " run_duration run_duration run_duration run_duration\n", "agent_name \n", "wr 2253.1580 2358.452667 1063.643825 15.0\n", "w-no-ssd 2205.6560 2384.878086 903.300255 327.0\n", "w7 2183.6010 2105.768773 838.872186 22.0\n", "wh64-1 2171.9305 2030.448714 458.938941 14.0\n", "w1 2167.8730 2337.174326 946.209905 276.0\n", "w5 2120.6475 2298.384057 864.067277 350.0\n", "w4 2085.1555 2259.117868 894.307199 340.0\n", "w3 2052.3355 2205.881979 901.605416 374.0\n", "w2 2003.3485 2215.764024 909.803217 334.0\n", "w6 1928.4930 2096.736796 870.648539 367.0\n", "wh64-2 1802.3465 1843.380400 269.787648 10.0\n", "w64 1689.1110 1598.434884 397.997104 275.0" ] }, "execution_count": 174, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = pd.pivot_table(ds, values=['run_duration'], index=['agent_name'],\n", " aggfunc=[np.median, np.mean, np.std, np.count_nonzero])\n", "t = t.reindex(t.sort_values(by=('median', 'run_duration'), ascending=False).index)\n", "t" ] } ], "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.7.5rc1" } }, "nbformat": 4, "nbformat_minor": 4 }