{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# SRUP Experiment – Combined Results Analysis (Annex)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this secrtion of the analysis we'll be doing a comparison between experiment 1 & experiment 0...\n", "Experiment zero substituted device D5 with a Raspberry Pi 4 – in order to compare the performance of the faster CPU for both MQTT & SRUP data.\n", "\n", "We're looking to generate six data points here – experiment S1 combined results for MQTT & SRUP, the average of devices D1-D4 for S0 (MQTT & SRUP); and the results for the RPi4 in S0 for both protocols." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "DEVICES = 5" ] }, { "cell_type": "code", "execution_count": 3, "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", "
12345
Experiment
02.3522482.3326282.3396362.3457832.051284
\n", "
" ], "text/plain": [ " 1 2 3 4 5\n", "Experiment \n", "0 2.352248 2.332628 2.339636 2.345783 2.051284" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mqtt_s0_df = pd.read_csv(\"mqtt_summary_four.csv\")\n", "mqtt_s0_df.set_index(\"Experiment\", inplace=True)\n", "mqtt_s0_df.head()" ] }, { "cell_type": "code", "execution_count": 4, "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", "
12345
Experiment
058.41119258.77621758.5669658.55074849.8274
\n", "
" ], "text/plain": [ " 1 2 3 4 5\n", "Experiment \n", "0 58.411192 58.776217 58.56696 58.550748 49.8274" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "srup_s0_df = pd.read_csv(\"srup_summary_four.csv\")\n", "srup_s0_df.set_index(\"Experiment\", inplace=True)\n", "srup_s0_df.head()" ] }, { "cell_type": "code", "execution_count": 5, "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", "
12345
Experiment
12.328482.2872172.367922.2590362.295755
\n", "
" ], "text/plain": [ " 1 2 3 4 5\n", "Experiment \n", "1 2.32848 2.287217 2.36792 2.259036 2.295755" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mqtt_s1_df = pd.read_csv(\"mqtt_summary.csv\", skiprows=lambda x: x not in [0,1])\n", "mqtt_s1_df.set_index(\"Experiment\", inplace=True)\n", "mqtt_s1_df.head()" ] }, { "cell_type": "code", "execution_count": 6, "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", "
12345
Experiment
158.7789458.45522158.53685658.48790857.941856
\n", "
" ], "text/plain": [ " 1 2 3 4 5\n", "Experiment \n", "1 58.77894 58.455221 58.536856 58.487908 57.941856" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "srup_s1_df = pd.read_csv(\"srup_summary.csv\", skiprows=lambda x: x not in [0,1])\n", "srup_s1_df.set_index(\"Experiment\", inplace=True)\n", "srup_s1_df.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MQTT S1 Average = 2.3076815775100403 ms\n", "MQTT S0 (Pi3B+) Average = 2.34257378313253 ms\n", "MQTT S0 (Pi4) = 2.0512840000000008 ms\n", "SRUP S1 Average = 58.44015617670683 ms\n", "SRUP S0 (Pi3B+) Average = 58.57627921686747 ms\n", "SRUP S0 (Pi4) = 49.8274 ms\n" ] } ], "source": [ "mqtt_s1_ave=mqtt_s1_df.mean(axis=1).iloc[0]\n", "print (\"MQTT S1 Average = {} ms\".format(mqtt_s1_ave))\n", "\n", "mqtt_s0_pi3_ave=mqtt_s0_df.iloc[:,0:4].mean(axis=1).iloc[0]\n", "print (\"MQTT S0 (Pi3B+) Average = {} ms\".format(mqtt_s0_pi3_ave))\n", "\n", "mqtt_s0_pi4_ave=mqtt_s0_df.iloc[:,4:5].mean(axis=1).iloc[0]\n", "print (\"MQTT S0 (Pi4) = {} ms\".format(mqtt_s0_pi4_ave))\n", "\n", "srup_s1_ave=srup_s1_df.mean(axis=1).iloc[0]\n", "print (\"SRUP S1 Average = {} ms\".format(srup_s1_ave))\n", "\n", "srup_s0_pi3_ave=srup_s0_df.iloc[:,0:4].mean(axis=1).iloc[0]\n", "print (\"SRUP S0 (Pi3B+) Average = {} ms\".format(srup_s0_pi3_ave))\n", "\n", "srup_s0_pi4_ave=srup_s0_df.iloc[:,4:5].mean(axis=1).iloc[0]\n", "print (\"SRUP S0 (Pi4) = {} ms\".format(srup_s0_pi4_ave))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Graphing\n", "Now we have our six data-points, we'll assemble them into a new data-frame, and then plot the results.\n", "Since experiments S0 & S1 use the same conditions – we won't distingush them in these graphs – but we will plots the Pi3 S0 alongside the S1 as a control (they should be approximately identical)." ] }, { "cell_type": "code", "execution_count": 8, "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", "
Pi3 S1 AveragePi3 S0 AveragePi4 S0 Average
Protocol
MQTT2.3076822.3425742.051284
SRUP58.44015658.57627949.827400
\n", "
" ], "text/plain": [ " Pi3 S1 Average Pi3 S0 Average Pi4 S0 Average\n", "Protocol \n", "MQTT 2.307682 2.342574 2.051284\n", "SRUP 58.440156 58.576279 49.827400" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = {'Protocol': ['MQTT','SRUP'],\n", " 'Pi3 S1 Average': [mqtt_s1_ave, srup_s1_ave],\n", " 'Pi3 S0 Average': [mqtt_s0_pi3_ave, srup_s0_pi3_ave],\n", " 'Pi4 S0 Average': [mqtt_s0_pi4_ave, srup_s0_pi4_ave]\n", " }\n", "combined_34_df=pd.DataFrame(data)\n", "combined_34_df.set_index('Protocol', inplace=True)\n", "combined_34_df.head()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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JUmSJCnDMjH8snXr1qlt27YNXYYkSZIkNYipU6e+n1LatrplmQh1bdu2ZcqUmp5iLkmSJEmbtohYWNMyh19KkiRJUoYZ6iRJkiQpwwx1kiRJkpRhmbinrjpffPEFb7/9Np999llDlyLVm2bNmtGmTRuaNm3a0KVIkiTpKyKzoe7tt99m6623pm3btkREQ5cjlVxKiWXLlvH222/Trl27hi5HkiRJXxGZHX752Wef8fWvf91Ap81GRPD1r3/d3mlJkiStIbOhDjDQabPjNS9JkqS1ZTrUSZIkSdLmLrP31K2t7WWPb9T2FvziqDrXady4MR07dqSyspJ27dpx7733ss0222y0GlZ/6Xrr1q03Wpt1eeaZZzjmmGNo164dn3/+OSeeeCJXXnkld9xxB+Xl5Zx++ulrrH/HHXcwYsQIGjduTPPmzbnzzjtp3779Ou0uXryYs88+m/HjxwPw/PPPc/HFF7N8+XIALr74Ys4555xqaxo3bhyzZs3isssuq7HuRYsWccEFF/C73/1ug4774IMP5sYbb6Rbt27rzF+8eDHNmjVjiy224K677qJz584btI9LLrmEI488kkMPPXSDtpckSZKqU9KeuojYJiJ+FxGvRcSrEdEjIr4WEX+OiDn5n61KWUMplZWVUVFRwYwZM/ja177GiBEjGrqkKpWVlbVO16Znz55UVFQwZcoUfvOb3/DSSy9x7rnnrhPoAE4++WSmT59ORUUFQ4cO5eKLL662zZtvvpmzzz4bgHfffZeTTz6ZO+64g9dee43nn3+e//mf/+Hxx9cN5pWVlfTr16/WQAewww47bHCgq8t9993Hyy+/zA9/+EN+/OMfb3A7559/Pr/4xS82YmWSJElS6Ydf/jfwREppT2Af4FXgMuDJlNJuwJP56czr0aMH77zzDgCTJk2iR48edOnShe985zu8/vrrAMycOZP999+fzp0706lTJ+bMmcOCBQvYc889OeWUU9hrr7044YQT+OSTT6ravf766+nYsSP7778/c+fOBWDp0qV873vfY7/99mO//fbjr3/9KwDDhg3jtNNO48ADD+S0005bZ7pXr15UVFRUtX3QQQfx8ssv13hMW221FV27dmXu3LkMGzaMG2+8cZ11WrRoUfV+xYoVNd7zNXbsWPr06QPAiBEjGDhwIPvuuy8ArVu35vrrr68KPAMHDuTcc8+le/fuDB06lJEjRzJ48GAA3njjDQ444AA6duzIT37yE5o3bw7AggUL2HvvvQEYOXIkxx9/PH369GG33XZj6NChVXX84Ac/oFu3bnTo0IErr7yyxmOvTuFnvPb52HvvvVmwYAELFixgr7324uyzz6ZDhw707t2bTz/9FIBvfetbLFu2jHfffXe99itJkiTVpmShLiJaAr2AuwFSSv9MKf0DOAYYlV9tFHBsqWqoLytXruTJJ5+kX79+AOy5554899xzTJs2jZ///OdcfvnlQG6o4pAhQ6p6wdq0aQPA66+/zg9/+ENeffVVWrRowe23317VdsuWLZk+fTqDBw/mwgsvBGDIkCFcdNFFTJ48mbFjx3LWWWdVrT9r1iwmTJjAmDFj1pk+88wzGTlyJACzZ8/ms88+Y5999qnxuJYtW8bEiRPp0KFDrcc/YsQIdtllF4YOHcrw4cPXWT5//nxatWrFlltuCeTCbdeuXddYp1u3bsycObNq+u233+Zvf/sbN9988xrrDRkyhCFDhjB9+vSq81ediooKHnzwQaZPn86DDz7IW2+9BcA111zDlClTeOWVV3j22Wd55ZVXaj22Qk888QTHHntsnevNmTOH8847j5kzZ7LNNtswduzYqmX77rtvVQiXJEmSNoZS9tS1A5YCv46IaRHxvxGxFbBdSmlxfp13ge2q2zgizomIKRExZenSpSUsc8N9+umndO7cme23354lS5Zw+OGHA/Dhhx/Sv39/9t57by666KKqsNKjRw+uvfZarrvuOhYuXEhZWRkAO+20EwceeCAAp556Ks8//3zVPk466aSqny+88AIAEyZMYPDgwXTu3Jl+/fqxfPlyPv74YwD69etX1e7a0/3792f8+PF88cUX3HPPPQwcOLDa43ruuefo0qULvXv35rLLLqsz1J133nm88cYbXHfddVx99dXrLF+8eDHbbrtt7SdzLf3796dx48brzH/hhRfo378/kBv6WZPDDjuMli1b0qxZM9q3b8/ChQsBeOihh9h3333p0qULM2fOZNasWXXWcsopp9CuXTuuueYazjvvvDrXb9euXdV9d127dmXBggVVy77xjW+waNGiOtuQJEmSilXKUNcE2Bf4VUqpC7CCtYZappQSkKrbOKV0Z0qpW0qp2/oGgvqy+p66hQsXklKquqfupz/9KYcccggzZszgscceq/pesZNPPplx48ZRVlbGkUceyVNPPQWs+5j6wunq3q9atYqJEydSUVFBRUUF77zzTtUwxK222mqNtgqny8vLOfzww3n00Ud56KGHOOWUU6o9rp49ezJt2jSmTp3KueeeW/T5OPHEE3nkkUfWmV9WVrbGd6u1b9+eqVOnrrHO1KlT1wiPax/H+lrdKwi5B9pUVlYyf/58brzxRp588kleeeUVjjrqqKK+8+2+++5j3rx5DBgwgPPPPx+AJk2asGrVqqp1Ctupbt+F6xWGbkmSJOnLKmWoext4O6X0Yn76d+RC3pKI+CZA/ud7JayhXpSXlzN8+HBuuukmKisr+fDDD9lxxx0BqoY7AsybN49vf/vbXHDBBRxzzDFVQ//efPPNql64+++/n4MOOqhqmwcffLDqZ48ePQDo3bs3t956a9U6hffJ1eWss87iggsuYL/99qNVqy//jJo5c+ZUvX/88cfZbbfd1lln9913X6O36rzzzmPkyJFVdS9btoxLL710jXvfanLAAQdUDWd84IEH1qvW5cuXs9VWW9GyZUuWLFnCH/7wh6K3jQiuuuoqJk6cyGuvvUbbtm156aWXAHjppZeYP39+Ue3Mnj276t4/SZIkaWMo2VcapJTejYi3ImKPlNLrwGHArPxrAPCL/M9HN8b+ivkKglLq0qULnTp1YsyYMQwdOpQBAwZw9dVXc9RR/6rroYce4t5776Vp06Zsv/32XH755Sxfvpw99tiDESNGMGjQINq3b88PfvCDqm0++OADOnXqxJZbbll1n9zw4cM577zz6NSpE5WVlfTq1Ys77rijqDq7du1KixYtOOOMMzbKcd92221MmDCBpk2b0qpVK0aNGrXOOltttRW77LILc+fOZdddd+Wb3/wmv/nNbzj77LP56KOPSClx4YUXcvTRR9e5v1tuuYVTTz2Va665hj59+tCyZcuia91nn33o0qULe+655xpDXotVVlbGj370I2644QZuu+02Ro8eTYcOHejevTu77757ndt/8cUXzJ07d52vTZAkSZK+jMiNgCxR4xGdgf8FtgDmAWeQ6x18CNgZWAh8P6X099ra6datW5oyZcoa81599VX22muvElRdvxYsWEDfvn2ZMWNGvexv0aJFHHzwwbz22ms0alR/3z3/8MMPM3Xq1GrvuVsfn3zyCWVlZUQEDzzwAGPGjOHRRzfK3wVK7uGHH+all17iqquu+lLtbCrXviRJkooXEVNTStX2DpT0y8dTShVAdTs+rJT7VfVGjx7NFVdcwc0331yvgQ7guOOOY9myZV+6nalTpzJ48GBSSmyzzTbcc889G6G6+lFZWcmPfvSjhi5DkiRJm5iS9tRtLJtyT520vrz2JUmSNj+19dTVb3eNJEmSJGmjMtRJkiRJUoYZ6iRJkiQpwwx1kiRJkpRhJX36Zb0aVvz3lRXX3od1rtK4cWM6duxIZWUl7dq1495772WbbbbZaCW0bduWKVOm0Lp1643WZl2eeeYZjjnmGNq1a8fnn3/OiSeeyJVXXskdd9xBeXk5p59++hrr33HHHYwYMYLGjRvTvHlz7rzzTtq3b79Ou4sXL+bss89m/PjxAEyaNIlLLrmEJUuWUF5eTteuXRk+fDjl5eVfqv6azllN9W+IgQMH0rdvX0444YR15j/77LO0bNmSlBI333wzhx22YQ96ve222ygvL2fQoEFful5JkiRt2jadUNcAysrKqKioAGDAgAGMGDGCK664omGLyqusrKRJkyY1TtemZ8+ejB8/nhUrVtC5c2eOPvpozj333GrXPfnkk6uWjRs3josvvpgnnnhinfVuvvlmzj77bACWLFlC//79eeCBB+jRowcAv/vd7/joo4++dKirSU31b2w33HADJ5xwAk8//TTnnHMOc+bM2aB2Bg0axIEHHmiok6Svso39B2WtvyL+CC9tDgx1G0mPHj145ZVXgFwv1JAhQ/jss88oKyvj17/+NXvssQczZ87kjDPO4J///CerVq1i7NixNG3alD59+tC1a1deeuklOnTowOjRo6vCzfXXX88f/vAHysrKuP/++9l1111ZunQp5557Lm+++SYAt9xyCwceeCDDhg3jjTfeYN68eey8887ssccea0y/8847DB8+nM6dOwNw0EEHMWLECPbZZ59qj2mrrbaia9euzJ07l3HjxtG8eXMuueSSNdZp0aJF1fsVK1YQEdW2NXbs2KovHh8xYgQDBgyoCnRAVa/X3//+dwYNGsS8efMoLy/nzjvvpFOnTgwbNoz58+czb9483nzzTX75y18yceJE/vCHP7Djjjvy2GOP0bRp0xrP2bBhw6rqP/jgg+nevTtPP/00//jHP7j77rvp2bMnK1eu5LLLLuOZZ57h888/57zzzuM///M/SSlx/vnn8+c//5mddtqJLbbYoqjr4Z133gFg5MiRTJkyhdtuuw2Avn37VtXRvHlzhgwZwvjx4ykrK+PRRx9lu+22o7y8nLZt2zJp0iT233//OvcnafPT9rLHG7qEzd6CZg1dgSTleE/dRrBy5UqefPJJ+vXrB8Cee+7Jc889x7Rp0/j5z3/O5ZdfDuSGAA4ZMoSKigqmTJlCmzZtAHj99df54Q9/yKuvvkqLFi24/fbbq9pu2bIl06dPZ/DgwVx44YUADBkyhIsuuojJkyczduxYzjrrrKr1Z82axYQJExgzZsw602eeeSYjR44EYPbs2Xz22Wc1BjqAZcuWMXHiRDp06FDr8Y8YMYJddtmFoUOHMnz48HWWz58/n1atWrHlllsCMGPGDLp27VptW1deeSVdunThlVde4dprr11juOQbb7zBU089xbhx4zj11FM55JBDmD59OmVlZTz++L9+uanunK2tsrKSSZMmccstt/Czn/0MgLvvvpuWLVsyefJkJk+ezF133cX8+fN5+OGHef3115k1axajR4/mb3/7W63nA+CJJ57g2GOPrXO9FStWcMABB/Dyyy/Tq1cv7rrrrqpl3bp147nnnquzDUmSJG3eDHVfwqeffkrnzp3ZfvvtWbJkCYcffjgAH374If3792fvvffmoosuYubMmUCu9+baa6/luuuuY+HChZSVlQGw0047ceCBBwJw6qmn8vzzz1ft46STTqr6+cILLwAwYcIEBg8eTOfOnenXrx/Lly/n448/BqBfv35V7a493b9/f8aPH88XX3zBPffcw8CBA6s9rueee44uXbrQu3dvLrvssjpD3Xnnnccbb7zBddddV9UbV2jx4sVsu+22tZ/MvOeff57TTjsNgEMPPZRly5axfPlyAI444giaNm1Kx44dWblyJX369AGgY8eOLFiwoKqN6s7Z2o4//ngAunbtWrXtn/70J0aPHk3nzp3p3r07y5YtY86cOfzlL3/hpJNOonHjxuywww4ceuihNdb/4x//mN13352TTz6ZSy+9tM7j3WKLLejbt+86tQB84xvfYNGiRXW2IUmSpM2boe5LWH1P3cKFC0kpMWLECAB++tOfcsghhzBjxgwee+wxPvvsMyB3/9m4ceMoKyvjyCOP5KmnngJYZ8hi4XR171etWsXEiROpqKigoqKCd955h+bNmwO5IZOFCqfLy8s5/PDDefTRR3nooYc45ZRTqj2unj17Mm3aNKZOnbpe96KdeOKJPPLII+vMLysrqzoHAB06dGDq1KlFt7va6p6+Ro0a0bRp06rz0ahRIyorK6vWq+n8VddW48aNq7ZNKXHrrbdWndf58+fTu3fv9arxhhtuYPbs2Vx33XVV98M1adKEVatWVa1TeC4Kj6OwltXrFQZ0SZIkqTqGuo2gvLyc4cOHc9NNN1FZWcmHH37IjjvuCFA13BFg3rx5fPvb3+aCCy7gmGOOqboH780336zqUbr//vs56KCDqrZ58MEHq36uvgetd+/e3HrrrVXrrH5YSzHOOussLrjgAvbbbz9atWq1QcdbqPBBII8//ji77bbbOuvsvvvua/RADR48mFGjRvHiiy9Wzfv973/PkiVL6NmzJ/fddx+QexJn69at17hvrxjVnbNifPe73+VXv/oVX3zxBZAborpixQp69erFgw8+yMqVK1m8eDFPP/10nW0NHjyYVatW8cc//pG2bdtSUVHBqlWreOutt5g0aVJR9cyePZu999676PolSZK0edp0HpTSwE8/6tKlC506dWLMmDEMHTqUAQMGcPXVV3PUUUdVrfPQQw9x77330rRpU7bffnsuv/xyli9fzh577MGIESMYNGgQ7du35wc/+EHVNh988AGdOnViyy23rLpPbvjw4Zx33nl06tSJyspKevXqxR133FFUnV27dqVFixacccYZG+W4b7vtNiZMmEDTpk1p1aoVo0aNWmedrbbail122YW5c+ey6667st122/HAAw9wySWX8N5779GoUSN69epFnz59GDZsGIMGDaJTp06Ul5dX215dqjtnxTjrrLNYsGAB++67Lykltt12Wx555BGOO+44nnrqKdq3b8/OO+9cVFCMCH7yk59w/fXXM2HCBNq1a0f79u3Za6+92HfffYuq569//SvDhg0run5JkiRtniKl1NA11Klbt25pypQpa8x79dVX2WuvvRqooo1nwYIF9O3blxkzZtTL/hYtWsTBBx/Ma6+9RqNG9ddR+/DDDzN16tRq77nTuqZNm8bNN9/Mvffeu86yTeXal/Tl+PTLhreg2ckNXYL8SgNtRiJiakqpW3XLHH65GRk9ejTdu3fnmmuuqddAB3DcccfRtm3bet1nlr3//vtcddVVDV2GJEmSMmDTGX6ZUW3btq23XrrTTz99ja8IqG+FX72g2q1+kqokSZJUF3vqJEmSJCnDDHWSJEmSlGGGOkmSJEnKMEOdJEmSJGXYJvOglI6jOm7U9qYPmF7nOo0bN6Zjx45UVlbSrl077r33XrbZZpuNVkPbtm2ZMmUKrVu33mht1uWZZ57hmGOOoV27dnz++eeceOKJXHnlldxxxx2Ul5fX+KCVsWPHcsIJJzB58mS6dVv3SauLFy/m7LPPZvz48QBMmjSJSy65hCVLllBeXk7Xrl0ZPnw45eXlX6r+ms5ZXfWvj4EDB9K3b19OOOGEdeY/++yztGzZkpQSN998M4cddtgG7eO2226jvLycQYMGfel6JUmStGnbZEJdQygrK6OiogKAAQMGMGLECK644oqGLSqvsrKSJk2a1Dhdm549ezJ+/HhWrFhB586dOfroozn33HNrXP+jjz7iv//7v+nevXuN69x8882cffbZACxZsoT+/fvzwAMPVH2R9+9+9zs++uijLx3qalJb/RvTDTfcwAknnMDTTz/NOeecw5w5czaonUGDBnHggQca6iRJklQnh19uJD169OCdd94Bcr1QPXr0oEuXLnznO9/h9ddfB2DmzJnsv//+dO7cmU6dOjFnzhwWLFjAnnvuySmnnMJee+3FCSecwCeffFLV7vXXX0/Hjh3Zf//9mTt3LgBLly7le9/7Hvvttx/77bcff/3rXwEYNmwYp512GgceeCCnnXbaOtO9evWqCqEABx10EC+//HKNx7TVVlvRtWtX5s6dy7Bhw7jxxhurXe+nP/0pl156Kc2aNauxrbFjx9KnTx8ARowYwYABA6oCHcAJJ5zAdtttx9///neOPfZYOnXqxAEHHMArr7xSdWwDBgygZ8+efOtb3+L3v/89Q4cOpWPHjvTp04cvvvii1nNWWP/BBx/MpZdeyv7778/uu+/Oc889B8DKlSv58Y9/zH777UenTp34n//5HwBSSgwePJg99tiDf//3f+e9996r8ThXK7weRo4cyeDBg6uW9e3bl2eeeQaA5s2bc8UVV7DPPvtwwAEHsGTJEgDKy8tp27YtkyZNqnNfkiRJ2rwZ6jaClStX8uSTT9KvXz8A9txzT5577jmmTZvGz3/+cy6//HIgNwRwyJAhVFRUMGXKFNq0aQPA66+/zg9/+ENeffVVWrRowe23317VdsuWLZk+fTqDBw/mwgsvBGDIkCFcdNFFTJ48mbFjx67x/W+zZs1iwoQJjBkzZp3pM888k5EjRwIwe/ZsPvvsM/bZZ58aj2vZsmVMnDiRDh061LjOSy+9xFtvvcVRRx1V4zrz58+nVatWbLnllgDMmDGDrl27VrvulVdeSZcuXXjllVe49tpr1xgu+cYbb/DUU08xbtw4Tj31VA455BCmT59OWVkZjz/+eK3nbG2VlZVMmjSJW265hZ/97GcA3H333bRs2ZLJkyczefJk7rrrLubPn8/DDz/M66+/zqxZsxg9ejR/+9vfajzW1Z544gmOPfbYOtdbsWIFBxxwAC+//DK9evXirrvuqlrWrVu3qsApSZIk1cRQ9yV8+umndO7cme23354lS5ZUfWH0hx9+SP/+/dl777256KKLmDlzJpDrvbn22mu57rrrWLhwIWVlZQDstNNOHHjggQCceuqpPP/881X7OOmkk6p+vvDCCwBMmDCBwYMH07lzZ/r168fy5cv5+OOPAejXr19Vu2tP9+/fn/Hjx/PFF19wzz33MHDgwGqP67nnnqNLly707t2byy67rMZQt2rVKi6++GJuuummWs/T4sWL2XbbbWtdZ7Xnn3+e0047DYBDDz2UZcuWsXz5cgCOOOIImjZtSseOHVm5cmVVz1/Hjh1ZsGBBVRvVnbO1HX/88QB07dq1ats//elPjB49ms6dO9O9e3eWLVvGnDlz+Mtf/sJJJ51E48aN2WGHHTj00ENrrP/HP/4xu+++OyeffDKXXnppnce7xRZb0Ldv33VqAfjGN77BokWL6mxDkiRJmzdD3Zew+p66hQsXklJixIgRQG444iGHHMKMGTN47LHH+OyzzwA4+eSTGTduHGVlZRx55JE89dRTAETEGu0WTlf3ftWqVUycOJGKigoqKip45513aN68OZAbMlmocLq8vJzDDz+cRx99lIceeohTTjml2uPq2bMn06ZNY+rUqXXeSzdjxgwOPvhg2rZty8SJE+nXrx9TpkxZ5zytPgcAHTp0YOrUqTW2W5PVPX2NGjWiadOmVeejUaNGVFZWVq1X0/mrrq3GjRtXbZtS4tZbb606r/Pnz6d3797rVeMNN9zA7Nmzue6666ruh2vSpAmrVq2qWqfwXBQeR2Etq9crDOiSJElSdQx1G0F5eTnDhw/npptuorKykg8//JAdd9wRoGq4I8C8efP49re/zQUXXMAxxxxTdb/Ym2++WdWjdP/993PQQQdVbfPggw9W/Vx9D1rv3r259dZbq9YpvE+uLmeddRYXXHAB++23H61atdqg412tZcuWvP/++yxYsIAFCxZwwAEHMG7cuHWefrn77ruv0QM1ePBgRo0axYsvvlg17/e//z1LliyhZ8+e3HfffUDuSZytW7emRYsW61VXdeesGN/97nf51a9+VXV/3uzZs1mxYgW9evXiwQcfZOXKlSxevJinn366zrYGDx7MqlWr+OMf/0jbtm2pqKhg1apVvPXWW0XfJzd79mz23nvvouuXJEnS5mmTefplMV9BUEpdunShU6dOjBkzhqFDhzJgwACuvvrqNe41e+ihh7j33ntp2rQp22+/PZdffjnLly9njz32YMSIEQwaNIj27dvzgx/8oGqbDz74gE6dOrHllltW3Sc3fPhwzjvvPDp16kRlZSW9evXijjvuKKrOrl270qJFC84444yNewJqsdVWW7HLLrswd+5cdt11V7bbbjseeOABLrnkEt577z0aNWpEr1696NOnD8OGDWPQoEF06tSJ8vJyRo0atd77q+6cFeOss85iwYIF7LvvvqSU2HbbbXnkkUc47rjjeOqpp2jfvj0777xzUUExIvjJT37C9ddfz4QJE2jXrh3t27dnr732Yt999y2qnr/+9a8MGzas6PolSZK0eYqUUkPXUKdu3bqltYf0vfrqq+y1114NVNHGs2DBAvr27cuMGTPqZX+LFi3i4IMP5rXXXqNRo/rrqH344YeZOnUqV199db3tM8umTZvGzTffzL333rvOsk3l2pf05bS97PG6V1JJLWh2ckOXoGEfNnQFUr2JiKkppXW/EBqHX25WRo8eTffu3bnmmmvqNdABHHfccbRt27Ze95ll77//PldddVVDlyFJkqQM2GSGX2ZV27Zt662X7vTTT1/jKwLqW+FXL6h2q5+kKkmSJNUl0z11WRg6Km1MXvOSJElaW2ZDXbNmzVi2bJm/5GqzkVJi2bJlNGvWrKFLkSRJ0ldIZodftmnThrfffpulS5c2dClSvWnWrBlt2rRp6DIkSZL0FZLZUNe0aVPatWvX0GVIkiRJUoPK7PBLSZIkSZKhTpIkSZIyzVAnSZIkSRlmqJMkSZKkDDPUSZIkSVKGGeokSZIkKcMMdZIkSZKUYYY6SZIkScowQ50kSZIkZZihTpIk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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax=combined_34_df.plot(kind='bar', figsize=(15,10), width=0.8)\n", "ax.legend(['Raspberry Pi 3 (Original Run)', 'Raspberry Pi 3 (Combined Run)', 'Raspberry Pi 4 (Combined Run)'])\n", "plt.ylabel(\"Mean Duration (ms)\")\n", "plt.xticks(rotation=0, horizontalalignment=\"center\")\n", "plt.title('Mean network & processing delay for Experiment One')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean change in processing overhead for SRUP Pi3 - Pi4 = 8.680817696787152 ms\n" ] } ], "source": [ "print(\"Mean change in processing overhead for SRUP Pi3 - Pi4 = {} ms\".format(((srup_s1_ave + srup_s0_pi3_ave) / 2) - srup_s0_pi4_ave))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean change in processing overhead for MQTT Pi3 - Pi4 = 0.2738436803212845 ms\n" ] } ], "source": [ "print(\"Mean change in processing overhead for MQTT Pi3 - Pi4 = {} ms\".format(((mqtt_s1_ave + mqtt_s0_pi3_ave) / 2) - mqtt_s0_pi4_ave))" ] } ], "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.7" } }, "nbformat": 4, "nbformat_minor": 2 }