From acd0c67cb79706b2676b444e182573d970f9d799 Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Mon, 7 Oct 2024 17:18:00 -0400 Subject: [PATCH] ready for review --- demo.ipynb | 326 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 208 insertions(+), 118 deletions(-) diff --git a/demo.ipynb b/demo.ipynb index 3275077..4941f10 100644 --- a/demo.ipynb +++ b/demo.ipynb @@ -62,7 +62,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (441, 4)
student_idclass_yearhw_numbergrade
i64i64i64i64
12177
12274
12375
12478
12590
492585
492687
492788
492890
492984
" + "shape: (441, 4)
student_idclass_yearhw_numbergrade
i64i64i64i64
11189
11290
11388
11484
11594
492573
492683
492786
492881
492981
" ], "text/plain": [ "shape: (441, 4)\n", @@ -71,17 +71,17 @@ "│ --- ┆ --- ┆ --- ┆ --- │\n", "│ i64 ┆ i64 ┆ i64 ┆ i64 │\n", "╞════════════╪════════════╪═══════════╪═══════╡\n", - "│ 1 ┆ 2 ┆ 1 ┆ 77 │\n", - "│ 1 ┆ 2 ┆ 2 ┆ 74 │\n", - "│ 1 ┆ 2 ┆ 3 ┆ 75 │\n", - "│ 1 ┆ 2 ┆ 4 ┆ 78 │\n", - "│ 1 ┆ 2 ┆ 5 ┆ 90 │\n", + "│ 1 ┆ 1 ┆ 1 ┆ 89 │\n", + "│ 1 ┆ 1 ┆ 2 ┆ 90 │\n", + "│ 1 ┆ 1 ┆ 3 ┆ 88 │\n", + "│ 1 ┆ 1 ┆ 4 ┆ 84 │\n", + "│ 1 ┆ 1 ┆ 5 ┆ 94 │\n", "│ … ┆ … ┆ … ┆ … │\n", - "│ 49 ┆ 2 ┆ 5 ┆ 85 │\n", - "│ 49 ┆ 2 ┆ 6 ┆ 87 │\n", - "│ 49 ┆ 2 ┆ 7 ┆ 88 │\n", - "│ 49 ┆ 2 ┆ 8 ┆ 90 │\n", - "│ 49 ┆ 2 ┆ 9 ┆ 84 │\n", + "│ 49 ┆ 2 ┆ 5 ┆ 73 │\n", + "│ 49 ┆ 2 ┆ 6 ┆ 83 │\n", + "│ 49 ┆ 2 ┆ 7 ┆ 86 │\n", + "│ 49 ┆ 2 ┆ 8 ┆ 81 │\n", + "│ 49 ┆ 2 ┆ 9 ┆ 81 │\n", "└────────────┴────────────┴───────────┴───────┘" ] }, @@ -101,7 +101,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Plot function from in https://github.com/opendp/dp-creator-ii/pull/35: remove redundant def here when that is merged." + "TODO: Plot function from in https://github.com/opendp/dp-creator-ii/pull/35... but see farther down in the notebook: This can probably be further simplified." ] }, { @@ -165,7 +165,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (4, 2)
class_yearlen
i64u32
1207
2117
372
445
" + "shape: (4, 2)
class_yearlen
i64u32
1198
2180
345
418
" ], "text/plain": [ "shape: (4, 2)\n", @@ -174,10 +174,10 @@ "│ --- ┆ --- │\n", "│ i64 ┆ u32 │\n", "╞════════════╪═════╡\n", - "│ 1 ┆ 207 │\n", - "│ 2 ┆ 117 │\n", - "│ 3 ┆ 72 │\n", - "│ 4 ┆ 45 │\n", + "│ 1 ┆ 198 │\n", + "│ 2 ┆ 180 │\n", + "│ 3 ┆ 45 │\n", + "│ 4 ┆ 18 │\n", "└────────────┴─────┘" ] }, @@ -198,7 +198,7 @@ "outputs": [ { "data": { - "image/png": "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/MULz1Zjz66+L+rDQ/HdP726be6dH7s46sND8coza6qx5//+gagPD8U3r/9o29yVV38g6sND8dKah6uxFx9/KOrDQ/H1a3+nbe5/W3F51IeH4oVHflCNvfzkY1EfHoq7rrqkbe69n7wy6sNDse5/3V+NbfzJU1EfHoqvfuSitrl//WfXRn14KJ5+4N5q7NUXfxL14aG4/cPvaZv7P27+z1EfHoo1962M3WM7Ys/OHW338elQKxNHe/XVV2Px4sXT9uYAwLGzadOmOOOMM6blWKmAaLVasXnz5ijLMpYsWRKbNm2K/v7+aVkIADB9tm/fHosXL45NmzbF/PnzY8eOHTE4OFh9DHSkUv8GoqurK84444zYvn17RET09/cLCADoYG/eqwcGBqb1uH4KAwBIExAAQNphBcTcuXOjXq+3/TgWANA5jva9OvWPKAEAInyEAQAcBgEBAKQJCAAgTUAAAGmHFRArV66MoaGhmDdvXixbtiyeeeaZ6V4XAHAQa9asicsuuywGBwejVqvFgw8+2PbnZVnGLbfcEqeffnr09fXF8uXLY8OGDW1ztm7dGldddVX09/fHKaecEp/4xCdibGwstY50QHzve9+LG2+8Mer1ejz33HNx7rnnxqWXXhq//OUvs4cCAJJ27twZ5557bqxcufKgf37HHXfE1772tbjnnnti7dq1cfLJJ8ell14au3fvruZcddVV8eKLL8YjjzwSDz30UKxZsyZWrFiRWkf6xziXLVsW559/ftx9990RsXd/jMWLF8cnP/nJ+MIXvpB6cwDg8NVqtVi9enVcfvnlEbH36cPg4GB89rOfjc997nMRETE6OhoLFy6Me++9N6644op46aWXYunSpfHss8/GeeedFxERP/rRj+LDH/5wvPrqqzE4OHhI7516AjExMRHr1q2L5cuX7ztAV1csX748nnrqqcyhAIBptnHjxhgZGWm7Tw8MDMSyZcuq+/RTTz0Vp5xyShUPERHLly+Prq6uWLt27SG/VyogXnvttWg2m7Fw4cK28YULF8bIyEjmUADANHvzXvzr7tMjIyPxzne+s+3Pe3p64tRTT03dy/0UBgCQlgqI0047Lbq7u2PLli1t41u2bIlFixZN68IAgJw378W/7j69aNGiA37wodFoxNatW1P38lRA9Pb2xvve97549NFHq7FWqxWPPvpoXHjhhZlDAQDT7Mwzz4xFixa13ae3b98ea9eure7TF154Ybzxxhuxbt26as5jjz0WrVYrli1bdsjv1ZNd3I033hjXXHNNnHfeeXHBBRfEnXfeGTt37oxrr702eygAIGlsbCxeeeWV6vXGjRvjpz/9aZx66qmxZMmS+MxnPhO33XZbnH322XHmmWfGzTffHIODg9VParz73e+OD37wg3HdddfFPffcE5OTk3HDDTfEFVdcccg/gREREeVhuOuuu8olS5aUvb295QUXXFA+/fTTh3MYACDp8ccfLyPigP+uueaasizLstVqlTfffHO5cOHCcu7cueUll1xS/uxnP2s7xuuvv15eeeWVZVEUZX9/f3nttdeWO3bsSK3Ddt4AQJqfwgAA0gQEAJAmIACANAEBAKQJCAAgTUAAAGkCAgBIExAAQJqAAADSBAQAkCYgAIA0AQEApP1/6mGLK+PbKmsAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhAAAAGdCAYAAABDxkoSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAVlklEQVR4nO3dfYxd9Xng8efOjMceOJ4BRGIzsq1LEWpilaVJwBaZiqyEFfJSumyUtFDKsk6KVbHkpSRVglS4bBclAUWUBqwQd5OQoJamYWWyS9ogCgivEnBYk5CtYYMTuYlddxyBzfht7Jn7sn84Pp5rD8TPMJ4Zz3w+ElLuj5/PPcy5mfPVvZ55Kq1WqxUAAAkd030CAMCpR0AAAGkCAgBIExAAQJqAAADSBAQAkCYgAIA0AQEApHVlNjebzdixY0csXLgwKpXKyTonAGAStVqt2Lt3b/T390dHx+S8d5AKiB07dsTSpUsn5YkBgKm1bdu2WLJkyaQcKxUQCxcuLE+gt7d3Uk4AgFPPzgP1+JstQ8etX3N+Xyw6LXVrYQrs2bMnli5dWt7HJ0PqKh/52KK3t1dAAMxhB7rqsaBoHre+sLc3egXEjDWZf/3AX6IEANIEBACQJiAAgDQBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0vy6MAB+raGRRgzXW+XjfaONaTwbZgIBAcDrGhppxLoXdkfjaD94+xqvAQBe33C91RYPERHHT8FgrhEQAECagAAA0gQEAJAmIACANAEBAKQJCAAgTUAAAGkCAgBIExAAQJqAAADSzMIA4KQ6dhBXT1cl+ro7Z8zxmBgBAcBJM94grs5KxJrlZ07opj/Zx2PifIQBwEkz3iCuRiva3kGYzuMxcQICAEgTEABAmoAAANIEBACQJiAAgDQBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACANAEBAKQJCAAgTUAAAGkCAgBIExAAQJqAAADSBAQAkCYgAIA0AQEApAkIACBNQAAAaQICAEgTEABAmoAAANIEBACQJiAAgDQBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACAtK7pPgEAiIgYGmnEcL1VPu7pqkRfd+eMOR7tBAQA025opBHrXtgdjaP3++isRKxZfuaEbvqTfTyO5yMMAKbdcL3VdrOPiGi0ou0dhOk8HscTEABAmoAAANIEBACQJiAAgDQBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACANAEBAKQJCAAgTUAAAGkCAgBIExAAQJqAAADSBAQAkCYgAIA0AQEApAkIACBNQAAAaQICAEgTEABAmoAAANIEBACQJiAAgDQBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACAtK7pPgEAZo99o80YPFAf87gxq593LhMQAEya9Vv3RKN19PFUvc09Xc87l/kaAzBpxt7EIyKas/x55zIBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACANAEBAKQJCAAgzSwMAGYsQ7JmLgEBwIxlSNbM5VoAMGMZkjVzCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACANAEBAKQJCAAgTUAAAGkCAgBIM0wLgOMMjTRiuH54EIUJmIxHQADQZmikEete2F0OsvJWNePxugCgzXC91TYF0wRMxiMgAIA0AQEApAkIACBNQAAAaQICAEgTEABAmoAAANIEBACQJiAAgDQBAQCkmYUBwJTbN9qMwQP1MY+nZmDX2Oft6apEX3fnCf25scPFsn92thIQAEy59Vv3tM3bmKq3w8c+b2clYs3yM39tCBw7XCzzZ2czH2EAMOXG3owjpm5g19jnbbSi7V2F13LscLHMn53NBAQAkCYgAIA0AQEApAkIACBNQAAAaQICAEgTEABAmoAAANIEBACQJiAAgDSzMACYs44d6mVI1okTEADMWccO9TIk68T5CAOAOcuQrIkTEABAmoAAANIEBACQJiAAgDQBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0szCAJilhkYabb+W2aAoJpOAAJiFhkYase6F3QZFcdL4CANgFhqutwyK4qQSEABAmoAAANIEBACQJiAAgDQBAQCkCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACANAEBAKQJCAAgTUAAAGkCAgBIExAAQJqAAADSBAQAkCYgAIA0AQEApAkIACBNQAAAaQICAEjrmu4TAGDq7BttxuCBevm4p6sSfd2d03hGnKoEBMAcsn7rnmi0jj7urESsWX6miCDNRxgAc8jYeDjyeLjeGn8zvA4BAQCkCQgAIE1AAABpAgIASBMQAECagAAA0gQEAJAmIACA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q+18V1zyziiKIr72dw+Va9946OEoiiLeftHFbef7rstWRVEU8dWvP1Cufes7j0ZRFPFbF1zQdr7v+d0roiiKuPfL68q1R57831EURfzGeee1ne8Hf/8PoiiKuP0Lf1muff///DCKoohz+vvLtR2vvBrXXvefoyiKuOW/fa5c+9Hm/xdFUURfX1/b+X74T26Ioiji5j+/tVx77qV/iaIooiiK+MXOl8tj3/Dxm6IoivjYTZ8s117c/sty73Mv/Uu5fvOf3xpFUcSH/+SGtnPr6+uLoijie8+/UK79xWc/H0VRxNX/6bq2r/s5/f1RFEU8/symcu32L/xlFEURV37oD9r+O879jfOiKIp4YsP3yue7a+2XoyiKeP8VV7R9LX/rgguiKIr41nceLde++vUHoiiKeNdlq9rO96KLV0RRFPGNhx4u1/72W/8jiqKIFZe8s+18f+fSd0VRFLHugQfLtQcf/k4URRH/7m1vbzvfVZe/N4qiiPv++1fLtYcfezKKoojffMtb2l4nv3vlB6Ioirjjr+4t1576/sYoiiKWLlvWdr5/+EfXRlEUUfvcneXas8//3yiKIs5+05vazvfaD/9xFEURn67913Jt4+Yt5fUce75rbvx4FEURn/r0zeXaj7duL/f+bNuO8jw+9mefiaIo4saPf7zt635k75HvEVsGd5307xGrr/5QHNy3t/znrg+8M2oD1XjqqQ0T+h7xrb//ZtQGqvHXa65sO+6XVr8/agPV2PzkI+XaixsejdpANdZe++62vV+54YNRG6jG8//4UOzc1f494t9f/Ntte7/xp9dGbaAaz65/oFz7xY+fjdpANb7wexe37X3w5uujNlCN7z24rlz7t5f+OWoD1fjsuy9o2/vQbR87/HX42j3l2ss//1nUBqpx26Xnte399uc/HbWBavzTl+4o14Z2/mvUBqpRG6jGgVd3l+v/cNdtURuoxj/cdVu5duDV3eXeoZ3/Wq7/05fuiNpANb79+U+3Pd9tl54XtYFqvPzzn5VrT33tnqgNVOOh2z7Wtvez774gagPV+LeX/rlc+96D66I2UI0Hb76+be8Xfu/iqA1U4xc/frZce3b9A1EbqMY3/vTatr13//6lURuoxk9/sKFce/4fH4raQDW+csMH2/auvfbdURuoxosbHi3XNj/5SNQGqvGl1e9v2/vXa66M2kA1fvzYt8u1l77/RNQGqnHPNZe17b3/o1dHbaAam/7ng+Xa1h8+HbWBatz1gXe27f2bP1sdtYFqPPPQ/eXa9s0/jNpANe5439va9v79Lf8lagPV2PDA2ji4b28c+tUsjCP38clQaSWOtn379li6dOmkPTkAMHW2bdsWS5YsmZRjpQKi2WzGjh07otVqxbJly2Lbtm3R29s7KScCAEyePXv2xNKlS2Pbtm2xcOHC2Lt3b/T395cfA71Rqb8D0dHREUuWLIk9e/ZERERvb6+AAIAZ7Mi9uq+vb1KP66cwAIA0AQEApE0oIObPnx+1Wq3tx7EAgJnjZN+rU3+JEgAgwkcYAMAECAgAIE1AAABpAgIASJtQQKxduzaq1WosWLAgVq5cGT/4wQ8m+7wAgHFs2LAhrrjiiujv749KpRIPP/xw279vtVpx6623xjnnnBM9PT2xatWq2LJlS9ueXbt2xTXXXBO9vb1xxhlnxEc+8pHYt29f6jzSAfHNb34zbrrppqjVavHcc8/FhRdeGJdffnn88pe/zB4KAEjav39/XHjhhbF27dpx//2dd94ZX/ziF+O+++6LjRs3xumnnx6XX355HDx4sNxzzTXXxObNm+Oxxx6LRx55JDZs2BBr1qxJnUf6xzhXrlwZF198cdx7770RcXg+xtKlS+OjH/1ofOYzn0k9OQAwcZVKJdavXx9XXnllRBx+96G/vz8++clPxqc+9amIiBgaGopFixbF/fffH1dddVW8+OKLsXz58nj22WfjoosuioiI7373u/G+970vtm/fHv39/Sf03Kl3IEZGRmLTpk2xatWqowfo6IhVq1bF008/nTkUADDJtm7dGoODg2336b6+vli5cmV5n3766afjjDPOKOMhImLVqlXR0dERGzduPOHnSgXEyy+/HI1GIxYtWtS2vmjRohgcHMwcCgCYZEfuxa93nx4cHIw3v/nNbf++q6srzjrrrNS93E9hAABpqYA4++yzo7OzM3bu3Nm2vnPnzli8ePGknhgAkHPkXvx69+nFixcf94MP9Xo9du3albqXpwKiu7s73vGOd8Tjjz9erjWbzXj88cfjkksuyRwKAJhk5557bixevLjtPr1nz57YuHFjeZ++5JJL4tVXX41NmzaVe5544oloNpuxcuXKE36uruzJ3XTTTXHdddfFRRddFCtWrIi777479u/fH6tXr84eCgBI2rdvX/z0pz8tH2/dujV+9KMfxVlnnRXLli2LT3ziE3H77bfH+eefH+eee27ccsst0d/fX/6kxlvf+tZ4z3veE9dff33cd999MTo6GjfeeGNcddVVJ/wTGBER0ZqAe+65p7Vs2bJWd3d3a8WKFa1nnnlmIocBAJKefPLJVkQc9891113XarVarWaz2brllltaixYtas2fP7912WWXtX7yk5+0HeOVV15pXX311a2iKFq9vb2t1atXt/bu3Zs6D+O8AYA0P4UBAKQJCAAgTUAAAGkCAgBIExAAQJqAAADSBAQAkCYgAIA0AQEApAkIACBNQAAAaQICAEj7/0u5kzsQDFqPAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -235,7 +235,7 @@ "\n", "The concept of a privacy budget is important in DP. Interactively developing DP analyses is a good practice, for example, to identify variables of interest before choosing where to spend the rest of a finite privacy budget. That said, it is important to track the total budget consumed: It would not be good to run a cell in this notebook, look at output, and then run it again, without tracking the privacy consumed by each operaion.\n", "\n", - "We begin with a conventional set of imports and then define a [`Context`](https://docs.opendp.org/en/stable/api/user-guide/context/index.html), based on the information you provided:" + "We begin with a conventional set of imports:" ] }, { @@ -257,6 +257,13 @@ "dp.enable_features(\"contrib\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, the information that was provided in the UI:" + ] + }, { "cell_type": "code", "execution_count": 7, @@ -291,11 +298,26 @@ " class_year_min,\n", " class_year_max,\n", " int((class_year_max - class_year_min + 1) / class_year_bins_count)\n", - "))\n", - "\n", - "# Using this information, create a context object:\n", + "))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, define a [`Context`](https://docs.opendp.org/en/stable/api/user-guide/context/index.html) using the provided information." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ "context = dp.Context.compositor(\n", " data=pl.scan_csv(csv_path, encoding=\"utf8-lossy\").with_columns(\n", + " # The cut() method returns a Polars categorical type.\n", + " # Cast to string to get the human-readable label.\n", " pl.col(\"grade\").cut(grade_bins_list).alias(\"grade_bin\").cast(pl.String),\n", " pl.col(\"class_year\").cut(class_year_bins_list).alias(\"class_year_bin\").cast(pl.String)\n", " ),\n", @@ -327,7 +349,34 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "(A note on `utf8-lossy`: CSVs can use different \"character encodings\" to represent characters outside the plain ASCII character set, but out of the box the Polars library only supports UTF8. Specifying `utf8-lossy` preserves as much information as possible, and any unrecognized characters will be replaced by \"�\". If this is not sufficient, you will need to preprocess your data to reencode it as UTF8.)" + "(A note on `utf8-lossy`: CSVs can use different \"character encodings\" to represent characters outside the plain ASCII character set, but out of the box the Polars library only supports UTF8. Specifying `utf8-lossy` preserves as much information as possible, and any unrecognized characters will be replaced by \"�\". If this is not sufficient, you will need to preprocess your data to reencode it as UTF8.)\n", + "\n", + "Before making the DP release, let's define helper functions to render the histograms." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def df_to_dict(df):\n", + " return {\n", + " range_len[\n", + " list(range_len.keys() - {'len'})[0]\n", + " ]: range_len['len']\n", + " for range_len in df.to_dicts()\n", + " }\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_histogram(histogram_df, cutoff):\n", + " # TODO: Error bars\n", + " # TODO: Actually use cutoff\n", + " histogram_dict = df_to_dict(histogram_df)\n", + " labels, values = zip(*histogram_dict.items())\n", + " fig, ax = plt.subplots()\n", + " ax.bar(labels, values, color=['blue' if v > cutoff else 'lightblue' for v in values])" ] }, { @@ -339,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -352,7 +401,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (1, 1)
grade
f64
83.297052
" + "shape: (1, 1)
grade
f64
82.816327
" ], "text/plain": [ "shape: (1, 1)\n", @@ -361,11 +410,11 @@ "│ --- │\n", "│ f64 │\n", "╞═══════════╡\n", - "│ 83.297052 │\n", + "│ 82.816327 │\n", "└───────────┘" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -379,7 +428,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -392,27 +441,28 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (8, 2)
grade_binlen
stru32
"(60, 65]"0
"(65, 70]"0
"(70, 75]"83
"(75, 80]"106
"(80, 85]"121
"(85, 90]"28
"(90, 95]"68
"(95, inf]"0
" + "shape: (9, 2)
grade_binlen
stru32
"(55, 60]"25
"(60, 65]"21
"(65, 70]"12
"(70, 75]"106
"(75, 80]"178
"(80, 85]"127
"(85, 90]"99
"(90, 95]"60
"(95, inf]"49
" ], "text/plain": [ - "shape: (8, 2)\n", + "shape: (9, 2)\n", "┌───────────┬─────┐\n", "│ grade_bin ┆ len │\n", "│ --- ┆ --- │\n", "│ str ┆ u32 │\n", "╞═══════════╪═════╡\n", - "│ (60, 65] ┆ 0 │\n", - "│ (65, 70] ┆ 0 │\n", - "│ (70, 75] ┆ 83 │\n", - "│ (75, 80] ┆ 106 │\n", - "│ (80, 85] ┆ 121 │\n", - "│ (85, 90] ┆ 28 │\n", - "│ (90, 95] ┆ 68 │\n", - "│ (95, inf] ┆ 0 │\n", + "│ (55, 60] ┆ 25 │\n", + "│ (60, 65] ┆ 21 │\n", + "│ (65, 70] ┆ 12 │\n", + "│ (70, 75] ┆ 106 │\n", + "│ (75, 80] ┆ 178 │\n", + "│ (80, 85] ┆ 127 │\n", + "│ (85, 90] ┆ 99 │\n", + "│ (90, 95] ┆ 60 │\n", + "│ (95, inf] ┆ 49 │\n", "└───────────┴─────┘" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -428,6 +478,26 @@ "grade_histogram" ] }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAwQUlEQVR4nO3de3hTVb7/8U9KaWihSSnQlg7lrogIBUFqFbkIWOAcFMFRuSiogzdwFBz11KMizFHw7pFB8ThcnCOo4AioHDnDVVQqCkxFBCtF5NrCkdqGFgmFrt8fPs2P2JY2NKWr4f16njwPWXtl7/Xtzko+7OydOIwxRgAAABYJq+0BAAAA/BYBBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgnfDaHsDZKCkp0cGDBxUdHS2Hw1HbwwEAAFVgjNHRo0eVmJiosLAzHyOpkwHl4MGDSkpKqu1hAACAs7Bv3z61aNHijH3qZECJjo6W9GuBLperlkcDAACqwuPxKCkpyfc+fiZ1MqCUfqzjcrkIKAAA1DFVOT2Dk2QBAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArBNe2wMAUPdV4ZfTa50xtT0CAIHgCAoAALBOwAFl/fr1Gjp0qBITE+VwOLR06VK/5Q6Ho9zbc8895+vTunXrMstnzJhR7WIAAEBoCDigFBUVKTk5WbNmzSp3eU5Ojt9t7ty5cjgcGjFihF+/adOm+fW77777zq4CAAAQcgI+B2Xw4MEaPHhwhcsTEhL87i9btkz9+vVT27Zt/dqjo6PL9AUAAJBq+ByUQ4cOafny5brjjjvKLJsxY4aaNGmibt266bnnntPJkycrXI/X65XH4/G7AQCA0FWjV/G8+eabio6O1vDhw/3a//jHP+rSSy9VbGysNmzYoPT0dOXk5OjFF18sdz3Tp0/X1KlTa3KoAADAIg5jzv7iO4fDoSVLlmjYsGHlLr/ooos0cOBAzZw584zrmTt3ru666y4VFhbK6XSWWe71euX1en33PR6PkpKSVFBQIJfLdbbDBxAkXGYMoCo8Ho/cbneV3r9r7AjKp59+qqysLL377ruV9k1JSdHJkyf1448/qkOHDmWWO53OcoMLAAAITTV2DsqcOXPUvXt3JScnV9o3MzNTYWFhiouLq6nhAACAOiTgIyiFhYXKzs723d+9e7cyMzMVGxurli1bSvr1EM7ixYv1wgsvlHl8RkaGNm7cqH79+ik6OloZGRmaNGmSxowZo8aNG1ejFAAAECoCDiibNm1Sv379fPcnT54sSRo7dqzmz58vSXrnnXdkjNHIkSPLPN7pdOqdd97Rk08+Ka/XqzZt2mjSpEm+9QAAAFTrJNnaEshJNgBqHifJAqiKQN6/+S0eAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsEHFDWr1+voUOHKjExUQ6HQ0uXLvVbPm7cODkcDr/boEGD/Prk5eVp9OjRcrlciomJ0R133KHCwsJqFQIAAEJHwAGlqKhIycnJmjVrVoV9Bg0apJycHN/t7bff9ls+evRoffvtt1q5cqU++ugjrV+/XnfeeWfgowcAACEpPNAHDB48WIMHDz5jH6fTqYSEhHKX7dixQytWrNBXX32lHj16SJJmzpypIUOG6Pnnn1diYmKgQwIAACGmRs5BWbduneLi4tShQwfdc889OnLkiG9ZRkaGYmJifOFEkgYMGKCwsDBt3LixJoYDAADqmICPoFRm0KBBGj58uNq0aaNdu3bp0Ucf1eDBg5WRkaF69eopNzdXcXFx/oMID1dsbKxyc3PLXafX65XX6/Xd93g8wR42AACwSNADys033+z7d+fOndWlSxe1a9dO69atU//+/c9qndOnT9fUqVODNUQAAGC5Gr/MuG3btmratKmys7MlSQkJCTp8+LBfn5MnTyovL6/C81bS09NVUFDgu+3bt6+mhw0AAGpRjQeU/fv368iRI2revLkkKTU1Vfn5+dq8ebOvz5o1a1RSUqKUlJRy1+F0OuVyufxuAAAgdAX8EU9hYaHvaIgk7d69W5mZmYqNjVVsbKymTp2qESNGKCEhQbt27dLDDz+s9u3bKy0tTZLUsWNHDRo0SOPHj9fs2bNVXFysiRMn6uabb+YKHgAAIElyGGNMIA9Yt26d+vXrV6Z97Nixeu211zRs2DD985//VH5+vhITE3XNNdfoz3/+s+Lj43198/LyNHHiRH344YcKCwvTiBEj9Morr6hRo0ZVGoPH45Hb7VZBQQFHUwALOBy1PYLKBfZKB6AmBPL+HXBAsQEBBbALAQVAVQTy/s1v8QAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsE3BAWb9+vYYOHarExEQ5HA4tXbrUt6y4uFiPPPKIOnfurIYNGyoxMVG33nqrDh486LeO1q1by+Fw+N1mzJhR7WIAoLocDvtvwPkg4IBSVFSk5ORkzZo1q8yyY8eOacuWLXr88ce1ZcsWvf/++8rKytK1115bpu+0adOUk5Pju913331nVwEAAAg54YE+YPDgwRo8eHC5y9xut1auXOnX9pe//EU9e/bU3r171bJlS197dHS0EhISAt08AAA4D9T4OSgFBQVyOByKiYnxa58xY4aaNGmibt266bnnntPJkycrXIfX65XH4/G7AQCA0BXwEZRAHD9+XI888ohGjhwpl8vla//jH/+oSy+9VLGxsdqwYYPS09OVk5OjF198sdz1TJ8+XVOnTq3JoQIAAIs4jDHmrB/scGjJkiUaNmxYmWXFxcUaMWKE9u/fr3Xr1vkFlN+aO3eu7rrrLhUWFsrpdJZZ7vV65fV6ffc9Ho+SkpJUUFBwxvUCODfqwombVX2lC6VaANt4PB653e4qvX/XyBGU4uJi3XjjjdqzZ4/WrFlT6SBSUlJ08uRJ/fjjj+rQoUOZ5U6ns9zgAgAAQlPQA0ppONm5c6fWrl2rJk2aVPqYzMxMhYWFKS4uLtjDAQAAdVDAAaWwsFDZ2dm++7t371ZmZqZiY2PVvHlz3XDDDdqyZYs++ugjnTp1Srm5uZKk2NhYRUREKCMjQxs3blS/fv0UHR2tjIwMTZo0SWPGjFHjxo2DVxkAAKizAj4HZd26derXr1+Z9rFjx+rJJ59UmzZtyn3c2rVr1bdvX23ZskX33nuvvvvuO3m9XrVp00a33HKLJk+eXOWPcQL5DAtAzQul8zZCqRbANoG8f1frJNnaQkAB7BJKb+qhVAtgm0Dev/ktHgAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdcJrewDA+cjhqO0RVM6Y2h4BgPMZR1AAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKwTcEBZv369hg4dqsTERDkcDi1dutRvuTFGTzzxhJo3b67IyEgNGDBAO3fu9OuTl5en0aNHy+VyKSYmRnfccYcKCwurVQgAAAgdAQeUoqIiJScna9asWeUuf/bZZ/XKK69o9uzZ2rhxoxo2bKi0tDQdP37c12f06NH69ttvtXLlSn300Udav3697rzzzrOvAgAAhBSHMWf/dUwOh0NLlizRsGHDJP169CQxMVEPPvig/vSnP0mSCgoKFB8fr/nz5+vmm2/Wjh07dPHFF+urr75Sjx49JEkrVqzQkCFDtH//fiUmJla6XY/HI7fbrYKCArlcrrMdPlBrQu2L2kKpnlCqBbBNIO/fQT0HZffu3crNzdWAAQN8bW63WykpKcrIyJAkZWRkKCYmxhdOJGnAgAEKCwvTxo0bgzkcAABQRwX1q+5zc3MlSfHx8X7t8fHxvmW5ubmKi4vzH0R4uGJjY319fsvr9crr9fruezyeYA4bAABYpk5cxTN9+nS53W7fLSkpqbaHBAAAalBQA0pCQoIk6dChQ37thw4d8i1LSEjQ4cOH/ZafPHlSeXl5vj6/lZ6eroKCAt9t3759wRw2AACwTFADSps2bZSQkKDVq1f72jwejzZu3KjU1FRJUmpqqvLz87V582ZfnzVr1qikpEQpKSnlrtfpdMrlcvndAABn5nDYfwMqEvA5KIWFhcrOzvbd3717tzIzMxUbG6uWLVvqgQce0H/8x3/oggsuUJs2bfT4448rMTHRd6VPx44dNWjQII0fP16zZ89WcXGxJk6cqJtvvrlKV/AAAIDQF3BA2bRpk/r16+e7P3nyZEnS2LFjNX/+fD388MMqKirSnXfeqfz8fPXq1UsrVqxQgwYNfI9ZsGCBJk6cqP79+yssLEwjRozQK6+8EoRyAABAKKjW96DUFr4HBXVdXTi0zfeg2Ot8rAWhoda+BwUAACAYCCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1gl6QGndurUcDkeZ24QJEyRJffv2LbPs7rvvDvYwAABAHRYe7BV+9dVXOnXqlO/+tm3bNHDgQP3+97/3tY0fP17Tpk3z3Y+Kigr2MAAAQB0W9IDSrFkzv/szZsxQu3bt1KdPH19bVFSUEhISgr1pAAAQImr0HJQTJ07orbfe0u233y6Hw+FrX7BggZo2bapLLrlE6enpOnbs2BnX4/V65fF4/G4AACB0Bf0IyumWLl2q/Px8jRs3ztc2atQotWrVSomJidq6daseeeQRZWVl6f33369wPdOnT9fUqVNrcqgAAMAiDmOMqamVp6WlKSIiQh9++GGFfdasWaP+/fsrOztb7dq1K7eP1+uV1+v13fd4PEpKSlJBQYFcLlfQxw3UtNMOKForkFeGUKqHWs6tmnsHgo08Ho/cbneV3r9r7AjKnj17tGrVqjMeGZGklJQUSTpjQHE6nXI6nUEfIwAAsFONnYMyb948xcXF6V/+5V/O2C8zM1OS1Lx585oaCgAAqGNq5AhKSUmJ5s2bp7Fjxyo8/P9vYteuXVq4cKGGDBmiJk2aaOvWrZo0aZJ69+6tLl261MRQAABAHVQjAWXVqlXau3evbr/9dr/2iIgIrVq1Si+//LKKioqUlJSkESNG6LHHHquJYQAAgDqqRk+SrSmBnGQD2CjUTl4MpXqo5dyqe+9AqI5A3r/5LR4AAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1wmt7AAAAVMbhqO0RVM6Y2h5BaOEICgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1gh5QnnzySTkcDr/bRRdd5Ft+/PhxTZgwQU2aNFGjRo00YsQIHTp0KNjDAAAAdViNHEHp1KmTcnJyfLfPPvvMt2zSpEn68MMPtXjxYn3yySc6ePCghg8fXhPDAAAAdVR4jaw0PFwJCQll2gsKCjRnzhwtXLhQV199tSRp3rx56tixo7744gtdfvnlNTEcAABQx9TIEZSdO3cqMTFRbdu21ejRo7V3715J0ubNm1VcXKwBAwb4+l500UVq2bKlMjIyKlyf1+uVx+PxuwEAgNAV9ICSkpKi+fPna8WKFXrttde0e/duXXXVVTp69Khyc3MVERGhmJgYv8fEx8crNze3wnVOnz5dbrfbd0tKSgr2sAEAgEWC/hHP4MGDff/u0qWLUlJS1KpVKy1atEiRkZFntc709HRNnjzZd9/j8RBSAAAIYTVyDsrpYmJidOGFFyo7O1sDBw7UiRMnlJ+f73cU5dChQ+Wes1LK6XTK6XTW9FABADgnHI7aHkHljKnd7df496AUFhZq165dat68ubp376769etr9erVvuVZWVnau3evUlNTa3ooAACgjgj6EZQ//elPGjp0qFq1aqWDBw9qypQpqlevnkaOHCm326077rhDkydPVmxsrFwul+677z6lpqZyBQ8AAPAJekDZv3+/Ro4cqSNHjqhZs2bq1auXvvjiCzVr1kyS9NJLLyksLEwjRoyQ1+tVWlqaXn311WAPAwAA1GEOY2r7U6bAeTweud1uFRQUyOVy1fZwgICF2ufPoVQPtZxb52MtUujVU1WBvH/zWzwAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6wQ9oEyfPl2XXXaZoqOjFRcXp2HDhikrK8uvT9++feVwOPxud999d7CHAgAA6qigB5RPPvlEEyZM0BdffKGVK1equLhY11xzjYqKivz6jR8/Xjk5Ob7bs88+G+yhAACAOio82CtcsWKF3/358+crLi5OmzdvVu/evX3tUVFRSkhICPbmAQBACKjxc1AKCgokSbGxsX7tCxYsUNOmTXXJJZcoPT1dx44dq3AdXq9XHo/H7wYAAEJX0I+gnK6kpEQPPPCArrzySl1yySW+9lGjRqlVq1ZKTEzU1q1b9cgjjygrK0vvv/9+ueuZPn26pk6dWpND9eNwnLNNnTVjansEAADUHIcxNfdWd8899+jjjz/WZ599phYtWlTYb82aNerfv7+ys7PVrl27Msu9Xq+8Xq/vvsfjUVJSkgoKCuRyuYI+bgIKalqoPcdCqR5qObfOx1qk0Kunqjwej9xud5Xev2vsCMrEiRP10Ucfaf369WcMJ5KUkpIiSRUGFKfTKafTWSPjBAAA9gl6QDHG6L777tOSJUu0bt06tWnTptLHZGZmSpKaN28e7OEAAIA6KOgBZcKECVq4cKGWLVum6Oho5ebmSpLcbrciIyO1a9cuLVy4UEOGDFGTJk20detWTZo0Sb1791aXLl2CPRwAAFAHBf0cFEcFH6zNmzdP48aN0759+zRmzBht27ZNRUVFSkpK0vXXX6/HHnusyueTBPIZ1tk4Xz8bxLkTas+xUKqHWs6t87EWKfTqqapaPQelsryTlJSkTz75JNibBQAAIYTf4gEAANap0e9BQe07Xw8jAgDqNo6gAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOuE1/YAgKpyOGp7BJUzprZHAAChgSMoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYJ1aDSizZs1S69at1aBBA6WkpOjLL7+szeEAAABL1FpAeffddzV58mRNmTJFW7ZsUXJystLS0nT48OHaGhIAALBErQWUF198UePHj9dtt92miy++WLNnz1ZUVJTmzp1bW0MCAACWCK+NjZ44cUKbN29Wenq6ry0sLEwDBgxQRkZGmf5er1der9d3v6CgQJLk8XhqfrCWCqXSqcVOoVSLFFr1UIudQqkWqWbqKX3fNsZU2rdWAspPP/2kU6dOKT4+3q89Pj5e3333XZn+06dP19SpU8u0JyUl1dgYbed21/YIgoda7BRKtUihVQ+12CmUapFqtp6jR4/KXckGaiWgBCo9PV2TJ0/23S8pKVFeXp6aNGkih8NRiyOrnMfjUVJSkvbt2yeXy1Xbw6mWUKpFCq16qMVOoVSLFFr1UEvtMMbo6NGjSkxMrLRvrQSUpk2bql69ejp06JBf+6FDh5SQkFCmv9PplNPp9GuLiYmpySEGncvlsv6JU1WhVIsUWvVQi51CqRYptOqhlnOvsiMnpWrlJNmIiAh1795dq1ev9rWVlJRo9erVSk1NrY0hAQAAi9TaRzyTJ0/W2LFj1aNHD/Xs2VMvv/yyioqKdNttt9XWkAAAgCVqLaDcdNNN+r//+z898cQTys3NVdeuXbVixYoyJ87WdU6nU1OmTCnzEVVdFEq1SKFVD7XYKZRqkUKrHmqxn8NU5VofAACAc4jf4gEAANYhoAAAAOsQUAAAgHXO+4By5MgRxcXF6ccff6ztoZyVdevWyeFwyOFwaMiQIXW6lh9//NFXyyWXXFKnawml/TJ//nxfLQ888ABzxiKhNGdCtZauXbvW6pxp3bq1Xn755YAe8/nnn6tz586qX7++hg0bVqaec8ac5yZNmmT+8Ic/+LVJKnN7++23fcvXrl1bbp+cnJyAt79hwwbTr18/ExUVZaKjo81VV11ljh075lt+5MgRM2rUKBMdHW3cbre5/fbbzdGjR33LvV6vycnJMTfeeKNp165dmVqMMWbevHmmc+fOxul0mmbNmpl7773Xb/nXX39tevXqZZxOp2nRooV55plnAq7DGGO2b99uhg4dalwul4mKijI9evQwe/bs8S3v06dPmb/ZXXfd5Vt+8uRJk5OTYx588EHTtGnTgGvZvXt3ufslIyMjoDrKW4ck8+yzz/r6VGe/zJs3r8JtHDp0yNdv7dq1plu3biYiIsK0a9fOzJs3L6A6Kvp7SDKLFi06Y72nP9+PHTtmcnJyTGpqqrn//vvLzJmq1BOsOZOTk2PGjBlj4uPjTVRUlOnWrZt57733/PpUd858+eWX5uqrrzZut9vExMSYa665xmRmZvr1CcacOXr0qJkwYYL53e9+Zxo0aGA6duxoXnvtNb8+1Z0zldUSrDmTm5trxo4da5o3b24iIyNNWlqa+f777/36/PLLL+bee+81sbGxpmHDhmb48OEmNze3yrWsWrXKpKammkaNGpn4+Hjz8MMPm+LiYr8+wdgvVaklkP2SnJxc7vtMZfUEa98cPnzYFBUVBfSYnj17mjFjxph9+/aZn3/+uUw958p5HVCKioqMy+Uqs8MlmXnz5pmcnBzf7ZdffvEtL32xzcrK8utz6tSpgLa/YcMG43K5zPTp0822bdvMd999Z959911z/PhxX59BgwaZ5ORk88UXX5hPP/3UtG/f3owcObLMukaPHm3Cw8PL1PLCCy+YxMREs2DBApOdnW2+/vprs2zZMt/ygoICEx8fb0aPHm22bdtm3n77bRMZGWlef/31gGrJzs42sbGx5qGHHjJbtmwx2dnZZtmyZX5vuH369DHjx4/3+5sVFBSUWdejjz5qwsLCAq6ldEKvWrXKbxsnTpwIqJbTH5uTk2Pmzp1rHA6H2bVrl69PdfZL6Rv+6be0tDTTp08fX58ffvjBREVFmcmTJ5vt27ebmTNnmnr16pkVK1ZUuY7SF5XTb1OnTjWNGjXye8Ou7Pleqk+fPubee+8tM2eqUk+w5szAgQPNZZddZjZu3Gh27dpl/vznP5uwsDCzZcsWX5/q7JujR4+a2NhYM27cOPPdd9+Zbdu2mREjRpj4+Hjf8yhYc2b8+PGmXbt2Zu3atWb37t3m9ddfN/Xq1fN7TldnzlSllmDMmZKSEnP55Zebq666ynz55Zfmu+++M3feeadp2bKlKSws9PW7++67TVJSklm9erXZtGmTufzyy80VV1xRpVoyMzNNRESEmTp1qtm5c6dZt26dueiii8yDDz7o6xOM/VLVWqq6X6ZMmWI6d+5cZs5UpZ5gvZ6djSZNmpi5c+eWWw8B5RxZvHixadasWZl2SWbJkiUVPq70xfbnn3+u1vZTUlLMY489VuHy7du3G0nmq6++8rV9/PHHxuFwmAMHDvj17dOnj4mIiPBry8vLM5GRkWbVqlUVbuPVV181jRs3Nl6v19f2yCOPmA4dOgRUy0033WTGjBlzxj59+vQx999/f6Xr+v3vf2/Cw8P92qpSS+mE/uc//1mVIVfZddddZ66++mrf/erul986fPiwqV+/vvnb3/7ma3v44YdNp06d/PrddNNNJi0trTqlmK5du5rbb7/dr62y53upPn36mCFDhpQ7Z05XXj3BmjMNGzb0W68xxsTGxpo33njDGFP9ffPVV18ZSWbv3r2+tq1btxpJZufOncaY4M2ZTp06mWnTpvm1XXrppebf//3f/cZ4tnOmKrUEY85kZWUZSWbbtm2+tlOnTplmzZr59kt+fr6pX7++Wbx4sa/Pjh07yj0iUF4t6enppkePHn5tH3zwgWnQoIHxeDzGmODsl6rUYkzV98uUKVNMq1atysyZqtQTrNezVq1amZdeesl3X5J54403zLBhw0xkZKRp3769LxSXd9Tm9CO35zqgnNfnoHz66afq3r17ucsmTJigpk2bqmfPnpo7d265Pw3dtWtXNW/eXAMHDtTnn38e0LYPHz6sjRs3Ki4uTldccYXi4+PVp08fffbZZ74+GRkZiomJUY8ePXxtAwYMUFhYmDZu3Fhmfb/9faKVK1eqpKREBw4cUMeOHdWiRQvdeOON2rdvn982evfurYiICF9bWlqasrKy9PPPP1eplpKSEi1fvlwXXnih0tLSFBcXp5SUFC1durRM3wULFqhp06a65JJLlJ6ermPHjpXps2fPHkVGRgZcS6lrr71WcXFx6tWrlz744IMq1VCRQ4cOafny5brjjjt8bdXdL7/1t7/9TVFRUbrhhhv8tjFgwAC/fmlpacrIyDjrWjZv3qzMzEy/WkpV5fkuSQcPHqxwzpQqr55S1ZkzknTFFVfo3XffVV5enkpKSvTOO+/o+PHj6tu3r6Tq75sOHTqoSZMmmjNnjk6cOKFffvlFc+bMUceOHdW6dWvfNqo7Z0pr+eCDD3TgwAEZY7R27Vp9//33uuaaa/z6ne2cqUotpaozZ7xerySpQYMGvrawsDA5nU7f69nmzZtVXFzs95y+6KKL1LJlyzLP6fJq8Xq9fuuXpMjISB0/flybN2+WFJz9UpVaSlVlv0hSUVFRmTlTlXpKBfP1rNTUqVN14403auvWrRoyZIhGjx6tvLw8JSUlKScnRy6XSy+//LJycnJ00003BWWbZ+O8Dih79uwp9xcVp02bpkWLFmnlypUaMWKE7r33Xs2cOdO3vHnz5po9e7b+/ve/6+9//7uSkpLUt29fbdmypcrb/uGHHyRJTz75pMaPH68VK1bo0ksvVf/+/bVz505JUm5uruLi4vweFx4ertjYWOXm5vq1FxYWlnnC//DDDyopKdHTTz+tl19+We+9957y8vI0cOBAnThxwreN3357b+n9326jIocPH1ZhYaFmzJihQYMG6R//+Ieuv/56DR8+XJ988omv36hRo/TWW29p7dq1Sk9P13//939rzJgxZdZXUFCg+vXrB1xLo0aN9MILL2jx4sVavny5evXqpWHDhlVrUr/55puKjo7W8OHDfW3V3S+/NWfOHI0aNcrvRbmi/eLxePTLL7+cVS2lb05XXHGFX3tlz/fTeTyeSn+FtLx6gjFnJGnRokUqLi5WkyZN5HQ6ddddd2nJkiVq3769pOrvm+joaK1bt05vvfWWIiMj1ahRI61YsUIff/yxwsPDfduo7pyRpJkzZ+riiy9WixYtFBERoUGDBmnWrFnq3bu3r0915kxVagnGnCkNGunp6fr555914sQJPfPMM9q/f79ycnJ8f5eIiIgygTA+Pr7M36y8WtLS0rRhwwa9/fbbOnXqlA4cOKBp06ZJkt82qrtfqlKLVPX9IkknTpwoM2eqUk9NvJ6VGjdunEaOHKn27dvr6aefVmFhob788kvVq1dPCQkJcjgccrvdSkhIKBMWz6lzdqzGQtdcc02ZE0bL8/jjj5sWLVqcsU/v3r0r/YjjdJ9//rmRZNLT0/3aO3fubP7t3/7NGGPMU089ZS688MIyj23WrJl59dVX/doSExNN69at/dqeeuopI8n87//+r6/t8OHDJiwszHcuw8CBA82dd97p97hvv/3WSDLbt2+vUi0HDhwwksp8zj906FBz8803V/i41atXG0kmOzvbr71du3amSZMmAddSnltuucX06tWrSnWUp0OHDmbixIllxlKd/XK6DRs2GElm06ZNfu0XXHCBefrpp/3ali9fbiT5nURdVceOHTNut9s8//zzlfat6Pnep08f07JlyzPOmYrqKU+gc8YYYyZOnGh69uxpVq1aZTIzM82TTz5p3G632bp1qzGm+vvm2LFjpmfPnubWW281X375pcnIyDAjRowwnTp18v3dgzFnjDHmueeeMxdeeKH54IMPzNdff21mzpxpGjVqZFauXFnhYwKZM1WppTxnM2c2bdpkkpOTjSRTr149k5aWZgYPHmwGDRpkjDFmwYIF5X7Uedlll5mHH3640lqM+fUcNJfLZerVq2eioqLM9OnTjSTzzjvvGGOCt18qq6U8Fe2XKVOmmEaNGpU7Zyqrpzxns2/K+4jn9JPkjTHG5XKZN99803ff7XaXe1I+H/GcQ02bNq3Sob+UlBTt37/fd/ivPD179lR2dnaVt928eXNJ0sUXX+zX3rFjR+3du1eSlJCQoMOHD/stP3nypPLy8pSQkODX7nQ6VVxcXOk2mjVrpqZNm/pt49ChQ36PK73/221UpGnTpgoPDz9jLeVJSUmRpDJ/t6ioKJ06dSrgWiraRiD75XSffvqpsrKy9Ic//MGvvbr75XR//etf1bVr1zKHgCvaLy6X66z+R/Pee+/p2LFjuvXWWyvte6bne2Rk5BnnTEX1lCfQObNr1y795S9/0dy5c9W/f38lJydrypQp6tGjh2bNmiWp+vtm4cKF+vHHHzVv3jxddtlluvzyy7Vw4ULt3r1by5Yt822junPml19+0aOPPqoXX3xRQ4cOVZcuXTRx4kTddNNNev755yt8XCBzpiq1VLSNQOdM9+7dlZmZqfz8fOXk5GjFihU6cuSI2rZtK+nXv8uJEyeUn5/v97hDhw6V+ZuVV4v06w/M5ufna+/evfrpp5903XXXSZLfNqq7X6pSS3kq2i/Sr0fwypszldVT0XbO9vXsdL89QuVwOFRSUlLt9QbbeR1QunXrpu3bt1faLzMzU40bNz7jDzFlZmb63kSronXr1kpMTFRWVpZf+/fff69WrVpJklJTU5Wfn+/3meSaNWtUUlLimxClYmNjdfToUb+2K6+8UpL8tpGXl6effvrJbxvr16/3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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_histogram(grade_histogram, 0)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -437,7 +507,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -450,7 +520,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (1, 1)
class_year
f64
2.031746
" + "shape: (1, 1)
class_year
f64
1.897959
" ], "text/plain": [ "shape: (1, 1)\n", @@ -459,11 +529,11 @@ "│ --- │\n", "│ f64 │\n", "╞════════════╡\n", - "│ 2.031746 │\n", + "│ 1.897959 │\n", "└────────────┘" ] }, - "execution_count": 10, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -477,7 +547,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -490,7 +560,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (4, 2)
class_year_binlen
stru32
"(-inf, 1]"209
"(1, 2]"119
"(2, 3]"0
"(3, inf]"60
" + "shape: (4, 2)
class_year_binlen
stru32
"(-inf, 1]"210
"(1, 2]"165
"(2, 3]"20
"(3, inf]"0
" ], "text/plain": [ "shape: (4, 2)\n", @@ -499,14 +569,14 @@ "│ --- ┆ --- │\n", "│ str ┆ u32 │\n", "╞════════════════╪═════╡\n", - "│ (-inf, 1] ┆ 209 │\n", - "│ (1, 2] ┆ 119 │\n", - "│ (2, 3] ┆ 0 │\n", - "│ (3, inf] ┆ 60 │\n", + "│ (-inf, 1] ┆ 210 │\n", + "│ (1, 2] ┆ 165 │\n", + "│ (2, 3] ┆ 20 │\n", + "│ (3, inf] ┆ 0 │\n", "└────────────────┴─────┘" ] }, - "execution_count": 11, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -522,6 +592,26 @@ "class_year_histogram" ] }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_histogram(class_year_histogram, 0)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -542,7 +632,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -556,23 +646,24 @@ " 'delta': 1e-07,\n", " 'grade': {'min': 50, 'max': 100, 'bins_count': 10},\n", " 'class_year': {'min': 1, 'max': 4, 'bins_count': 4}},\n", - " 'outputs': {'grade': {'mean': 83.29705215419501,\n", - " 'histogram': {'(60, 65]': 0,\n", - " '(65, 70]': 0,\n", - " '(70, 75]': 83,\n", - " '(75, 80]': 106,\n", - " '(80, 85]': 121,\n", - " '(85, 90]': 28,\n", - " '(90, 95]': 68,\n", - " '(95, inf]': 0}},\n", - " 'class_year': {'mean': 2.0317460317460316,\n", - " 'histogram': {'(-inf, 1]': 209,\n", - " '(1, 2]': 119,\n", - " '(2, 3]': 0,\n", - " '(3, inf]': 60}}}}" + " 'outputs': {'grade': {'mean': 82.81632653061224,\n", + " 'histogram': {'(55, 60]': 25,\n", + " '(60, 65]': 21,\n", + " '(65, 70]': 12,\n", + " '(70, 75]': 106,\n", + " '(75, 80]': 178,\n", + " '(80, 85]': 127,\n", + " '(85, 90]': 99,\n", + " '(90, 95]': 60,\n", + " '(95, inf]': 49}},\n", + " 'class_year': {'mean': 1.8979591836734695,\n", + " 'histogram': {'(-inf, 1]': 210,\n", + " '(1, 2]': 165,\n", + " '(2, 3]': 20,\n", + " '(3, inf]': 0}}}}" ] }, - "execution_count": 24, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -622,7 +713,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -651,22 +742,23 @@ "outputs:\n", " class_year:\n", " histogram:\n", - " (-inf, 1]: 209\n", - " (1, 2]: 119\n", - " (2, 3]: 0\n", - " (3, inf]: 60\n", - " mean: 2.0317460317460316\n", + " (-inf, 1]: 210\n", + " (1, 2]: 165\n", + " (2, 3]: 20\n", + " (3, inf]: 0\n", + " mean: 1.8979591836734695\n", " grade:\n", " histogram:\n", - " (60, 65]: 0\n", - " (65, 70]: 0\n", - " (70, 75]: 83\n", - " (75, 80]: 106\n", - " (80, 85]: 121\n", - " (85, 90]: 28\n", - " (90, 95]: 68\n", - " (95, inf]: 0\n", - " mean: 83.29705215419501\n", + " (55, 60]: 25\n", + " (60, 65]: 21\n", + " (65, 70]: 12\n", + " (70, 75]: 106\n", + " (75, 80]: 178\n", + " (80, 85]: 127\n", + " (85, 90]: 99\n", + " (90, 95]: 60\n", + " (95, inf]: 49\n", + " mean: 82.81632653061224\n", "\n" ] } @@ -688,7 +780,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -766,59 +858,63 @@ " \n", " \n", " outputs.grade.mean\n", - " 83.297052\n", + " 82.816327\n", + " \n", + " \n", + " outputs.grade.histogram.(55, 60]\n", + " 25\n", " \n", " \n", " outputs.grade.histogram.(60, 65]\n", - " 0\n", + " 21\n", " \n", " \n", " outputs.grade.histogram.(65, 70]\n", - " 0\n", + " 12\n", " \n", " \n", " outputs.grade.histogram.(70, 75]\n", - " 83\n", + " 106\n", " \n", " \n", " outputs.grade.histogram.(75, 80]\n", - " 106\n", + " 178\n", " \n", " \n", " outputs.grade.histogram.(80, 85]\n", - " 121\n", + " 127\n", " \n", " \n", " outputs.grade.histogram.(85, 90]\n", - " 28\n", + " 99\n", " \n", " \n", " outputs.grade.histogram.(90, 95]\n", - " 68\n", + " 60\n", " \n", " \n", " outputs.grade.histogram.(95, inf]\n", - " 0\n", + " 49\n", " \n", " \n", " outputs.class_year.mean\n", - " 2.031746\n", + " 1.897959\n", " \n", " \n", " outputs.class_year.histogram.(-inf, 1]\n", - " 209\n", + " 210\n", " \n", " \n", " outputs.class_year.histogram.(1, 2]\n", - " 119\n", + " 165\n", " \n", " \n", " outputs.class_year.histogram.(2, 3]\n", - " 0\n", + " 20\n", " \n", " \n", " outputs.class_year.histogram.(3, inf]\n", - " 60\n", + " 0\n", " \n", " \n", "\n", @@ -838,23 +934,24 @@ "inputs.class_year.min 1\n", "inputs.class_year.max 4\n", "inputs.class_year.bins_count 4\n", - "outputs.grade.mean 83.297052\n", - "outputs.grade.histogram.(60, 65] 0\n", - "outputs.grade.histogram.(65, 70] 0\n", - "outputs.grade.histogram.(70, 75] 83\n", - "outputs.grade.histogram.(75, 80] 106\n", - "outputs.grade.histogram.(80, 85] 121\n", - "outputs.grade.histogram.(85, 90] 28\n", - "outputs.grade.histogram.(90, 95] 68\n", - "outputs.grade.histogram.(95, inf] 0\n", - "outputs.class_year.mean 2.031746\n", - "outputs.class_year.histogram.(-inf, 1] 209\n", - "outputs.class_year.histogram.(1, 2] 119\n", - "outputs.class_year.histogram.(2, 3] 0\n", - "outputs.class_year.histogram.(3, inf] 60" + "outputs.grade.mean 82.816327\n", + "outputs.grade.histogram.(55, 60] 25\n", + "outputs.grade.histogram.(60, 65] 21\n", + "outputs.grade.histogram.(65, 70] 12\n", + "outputs.grade.histogram.(70, 75] 106\n", + "outputs.grade.histogram.(75, 80] 178\n", + "outputs.grade.histogram.(80, 85] 127\n", + "outputs.grade.histogram.(85, 90] 99\n", + "outputs.grade.histogram.(90, 95] 60\n", + "outputs.grade.histogram.(95, inf] 49\n", + "outputs.class_year.mean 1.897959\n", + "outputs.class_year.histogram.(-inf, 1] 210\n", + "outputs.class_year.histogram.(1, 2] 165\n", + "outputs.class_year.histogram.(2, 3] 20\n", + "outputs.class_year.histogram.(3, inf] 0" ] }, - "execution_count": 31, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -864,13 +961,6 @@ "\n", "json_normalize(release).transpose()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": {