From a39bc645c63e88548ce42cf174fe6c4f36dddea8 Mon Sep 17 00:00:00 2001 From: Teresa OV Date: Sat, 23 May 2026 13:29:27 -0400 Subject: [PATCH 1/3] assignment 1 changes --- .../a1_sampling_and_reproducibility.ipynb | 125 ++++++++++++++++-- 1 file changed, 113 insertions(+), 12 deletions(-) diff --git a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb index 873f5985..be5f7262 100644 --- a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb +++ b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb @@ -16,7 +16,24 @@ "cell_type": "markdown", "id": "4ea73db3", "metadata": {}, - "source": [] + "source": [ + "#all the stages where sampling is occuring: \n", + " # events = ['wedding'] * 200 + ['brunch'] * 800 \n", + " # this is the sampling frame, functino of constructing the population\n", + " # entire population of N=1000, sample of wedding n=200, sample of brunch n=800\n", + " # infected_indices = np.random.choice(ppl.index, size=int(len(ppl) * ATTACK_RATE)\n", + " replace=False) ppl.loc[infected_indices, 'infected'] = True\n", + " # this is random sampling (choosing a random sample of people to be 'infected') with the function np.random.choice\n", + " # since the ATTACK_RATE is 0.1 , 10% of inficiduals will be infected from the entire population, infected n=100\n", + " # ppl.loc[ppl['infected'], 'traced'] = np.random.rand(sum(ppl['infected'])) < TRACE_SUCCESS\n", + " # another random sampling (choosing a random sample of people the be traced) with the function np.random.rand\n", + " # since the TRACE_SUCCESS is .2, 20% of the infected individuals will be traced, traced n=20\n", + " # event_trace_counts = ppl[ppl['traced'] == True]['event'].value_counts()\n", + " events_traced = event_trace_counts[event_trace_counts >= SECONDARY_TRACE_THRESHOLD].index\n", + " ppl.loc[ppl['event'].isin(events_traced) & ppl['infected'], 'traced'] = True\n", + " # cluster-based sampling (counting the number of traced individuals per event wedding/brunch) with the function event_trace_counts = ppl[ppl['traced'] == True]['event'].value_counts()\n", + " # there is also a SECONDARY_TRACE_THRESHOLD setting that requires at least 2 traced individuals, both events should have at least 2 traced individuals " + ] }, { "cell_type": "markdown", @@ -27,10 +44,17 @@ ] }, { - "cell_type": "markdown", - "id": "4cf5d993", + "cell_type": "code", + "execution_count": null, + "id": "88c5e194", "metadata": {}, - "source": [] + "outputs": [], + "source": [ + "# when the script was run at the 1000 repetitions, the histogram looks like a normal distribution, with most cases in the middle \n", + "# when the script was run at 100 repetitions, the histogram was slightly skewed to the right\n", + "# when the script was run at 10 repetitions, the histogram clustered to the right \n", + "# therefore, with lower repetitions, there is more variability in the data with low reproducibility, the larger the repeitions the more reproducible the results are" + ] }, { "cell_type": "markdown", @@ -44,7 +68,9 @@ "cell_type": "markdown", "id": "77613cc3", "metadata": {}, - "source": [] + "source": [ + "#I added a random seed function for reproducibility. By setting a random seed fixed number, every script run will produce the same outputs, even when run multiple times. " + ] }, { "cell_type": "markdown", @@ -56,10 +82,76 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, + "id": "78c34c1c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting matplotlib\n", + " Downloading matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl.metadata (52 kB)\n", + "Collecting seaborn\n", + " Downloading seaborn-0.13.2-py3-none-any.whl.metadata (5.4 kB)\n", + "Collecting contourpy>=1.0.1 (from matplotlib)\n", + " Downloading contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl.metadata (5.5 kB)\n", + "Collecting cycler>=0.10 (from matplotlib)\n", + " Downloading cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)\n", + "Collecting fonttools>=4.22.0 (from matplotlib)\n", + " Downloading fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl.metadata (118 kB)\n", + "Collecting kiwisolver>=1.3.1 (from matplotlib)\n", + " Downloading kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl.metadata (5.1 kB)\n", + "Requirement already satisfied: numpy>=1.23 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from matplotlib) (2.4.4)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from matplotlib) (26.1)\n", + "Collecting pillow>=8 (from matplotlib)\n", + " Downloading pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl.metadata (8.8 kB)\n", + "Collecting pyparsing>=3 (from matplotlib)\n", + " Downloading pyparsing-3.3.2-py3-none-any.whl.metadata (5.8 kB)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from matplotlib) (2.9.0.post0)\n", + "Requirement already satisfied: pandas>=1.2 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from seaborn) (3.0.2)\n", + "Requirement already satisfied: six>=1.5 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from python-dateutil>=2.7->matplotlib) (1.17.0)\n", + "Downloading matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl (8.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.2/8.2 MB\u001b[0m \u001b[31m53.7 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading seaborn-0.13.2-py3-none-any.whl (294 kB)\n", + "Downloading contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl (273 kB)\n", + "Downloading cycler-0.12.1-py3-none-any.whl (8.3 kB)\n", + "Downloading fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl (2.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.9/2.9 MB\u001b[0m \u001b[31m70.4 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl (64 kB)\n", + "Downloading pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl (4.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m50.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading pyparsing-3.3.2-py3-none-any.whl (122 kB)\n", + "Installing collected packages: pyparsing, pillow, kiwisolver, fonttools, cycler, contourpy, matplotlib, seaborn\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8/8\u001b[0m [seaborn]m7/8\u001b[0m [seaborn]ib]\n", + "\u001b[1A\u001b[2KSuccessfully installed contourpy-1.3.3 cycler-0.12.1 fonttools-4.63.0 kiwisolver-1.5.0 matplotlib-3.10.9 pillow-12.2.0 pyparsing-3.3.2 seaborn-0.13.2\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m26.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m26.1.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" + ] + } + ], + "source": [ + "!pip install matplotlib seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "id": "ab8587a0", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9wAAAJOCAYAAABFiQ/hAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW8FJREFUeJzt3QmcXeP9P/An+0IIQSLETsROFEHVHkv9bG1VqVBF7WuVn9a+q31t1VpqLUprj612YmfELjQJYsvW7Pf/+j6/153/nckkmUnmZCYz7/frdU3uueee+5zlXudznuW0KZVKpQQAAAA0qraNuzgAAABA4AYAAICCqOEGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACN0Aj+Otf/5pWXnnl1KFDh9S9e3fbdB7Vpk2bdPLJJzd1Mahl7733Tssss8w8f0w05XrUZcqUKenYY49Nffr0SW3btk077bTTXPvsTz75JG/b66+/fq59JkBTELiBmYqToTgpevnll+f5LXX//fcXEqbefffdfCK9/PLLp6uvvjr9+c9/nuV7XnvttbTnnnvmE91OnTqlhRdeOG255ZbpuuuuS1OnTk1FefbZZ/M2+O6771KR/va3v6WLLrpolvNFWeL4mtVj0003LbS8rcUTTzxRY7vGBaLlllsu7bXXXumjjz5q6uLNs8rhsa7HBhtsUPj+vPPOO2fr/ddee20677zz0k9+8pN0ww03pCOPPLLJfgvmtvvuuy/96Ec/Sosttljq2rVr/h787Gc/Sw8++GBTFw1oYdo3dQEA5mbgvvzyyxs9dMdJ77Rp09LFF1+cVlhhhVnO/5e//CX95je/ST179ky//OUv04orrpjGjBmTBg8enPbdd980YsSI9L//+7+pqMB9yimn5AsERdbEx0n2W2+9lY444oiZzrfLLrvU2GZjx45NBx54YNp5553za2WxreaG//73v6l9+5b/v8bDDjss/eAHP0iTJ09Or7zySr5I9K9//Su9+eabqXfv3qm5iQtZ8R1r7nbfffe03Xbb1Zi26KKLpubqscceS0sssUS68MIL5/pvwdJLL52/b3HRZ2774x//mH7729/mwH388cfnwP3BBx+kRx99NN16661pm222metlAlquln9WAVCwL7/8Mv+tT4B9/vnnc9geMGBAvgDQ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ZsyY1Lt373wHkvpq8YE7wrbRYQEAAJhTn332WVpyySXrPX+LD9xRs13eMAsssEBTFwcAAIB5zOjRo3NFbjlf1leLD9zlZuQRtgVuAAAAZldDuykbNA0AAAAKIHADAABAAQRuAAAAKECL78NdX1OnTk2TJ09u6mJAq9OhQ4fUrl27pi4GAAA0ulYfuON+aiNHjkzfffdd429doF66d++eevXq1eBBKAAAoDlr9YG7HLYXW2yx1LVrVyf8MJcveI0fPz59+eWX+fniiy9u+wMA0GK0b+3NyMthu0ePHk1dHGiVunTpkv9G6I7voublAAC0FK160LRyn+2o2QaaTvk7aBwFAABaklYduMv0GwXfQQAAaGwCNwAAABSgVffhnpFhw4alUaNGzbXPW2SRRdJSSy1V+OBwv/zlL9Ozzz6bb8NU1Kjs119/fTriiCOadNT3GIjrgAMOSHfeeWf69ttv06uvvprWWmut1BrUZ/uffPLJ6Z577kmvvfZafr733nvn+WMaAADQeATuOsJ237790oQJ49Pc0rlz1zR0aFW9Q/fsBKQLL7wwjRgxIoesBRdcMDWGZZZZJoe7eJTttttuabvttktN6cEHH8zB84knnkjLLbdcvqDRlI477ri8r959993qafHvfv36pUGDBuWylsW/42JB7N/yYGJFu/jii/NFCgAAoHEJ3LVEzXaE7X79bkpdu/ZLRRs/vipVVe2ZP7fIWu4PP/ww9e/fP6244oqpSBES51ZQnNm6xu2lNtxwwxnOM2nSpNSxY8e5Up7NNtssnXPOObmVQdxrOjz++OOpT58++aJApZi+wQYbzNVt2FgXYAAAgJr04Z6BCNvduq1T+KMxQv2mm26aDjvssHTsscemhRdeOIe6aDZcWRP997//Pd144415gLioIQ9Ri/rrX/86LbroommBBRZIm2++eXr99ddrLPu+++5LP/jBD1Lnzp1zTfHOO+9c/ZmffvppOvLII/MyywPPRQ1t9+7dayzjyiuvTMsvv3wOuH379k1//etfa7we7/3LX/6Slx2jVcdFgXvvvbf69WgWvscee+RyRhCN16+77ro6t0Ws26GHHppbKsRyY93L5T3kkENybXysx8CBA/P0J598Mq233nqpU6dOOaRHbfSUKVNqbNtYXrxvoYUWSj179kxXX311GjduXNpnn31St27d0gorrJAe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2q677pr7xEc4n13RxD0G14tbysUFggjv5513Xtphhx3yoG8hWglEGI8R1WP+mC+2dREXMgCYu2JgzOgONSMxXkncehTiQntcgC+Lc5m4nSm0Jm1KdaWkFmT06NF55Orvv/8+B8ZKEUCin2mEwHJQiP+J9O3bL02YUPctnorQuXPXNHRolR8g5lnRFD8Ggvvggw/yBZiGquu7CEDzE+dJ/fr2TeNncbcLCHGZvXIEGOe8tNRcOTNquGuJq24Rfmd25baxudrHvCburx6Dt8WtvyJkR+uFaLI+O2EbgHlHnB9F2L6pX7/Ur2vX6V4fN358eqeqKnXuvExq12buDb5K8/PxtP+mEyd+kvr1uyl17dovt+qsqtozH0NquWlNBO46xI+AHwKYsei3HX35o6YjLhhFc/boaw5A6xBhe51u3aabPialNCW6FrXvkdq1n/51Wo+2U8akNPGTHLa7dfv/Y9dAayNwAw0Wg7nFAwAAmDEjGAEAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACuC1YHeLewqNGjUpzS9zHuCXe93vTTTdNa621VrroootSS7H33nun7777Lt1zzz31Xu9lllkmHXHEEfkBAAC0HgJ3HWG7X9++afyECXNtJ3Tt3DlVDR1ar9Ddpk2bmb5+0kknpZNPPjnNC6KcEVxfe+21OVrOBhtskAPuVVddVT0t/n3ggQem6667Lofksvj3hx9+mP7973+nueWll15K880331z7PAAAoHkQuGuJmu0I2zf165f6de1a+A6oGj8+7VlVlT+3PoF7xIgR1f++7bbb0oknnpiGDh1aPW3++eev/nepVEpTp05N7du37N282WabpbvvvrvGtMcffzz16dMnPfHEEzUCdzwfNGjQXC3foosuOlc/DwAAaB704Z6BCNvrdOtW+KOhob5Xr17VjwUXXDDXeJefv/vuu6lbt27pgQceSP3790+dOnVKTz/9dK7R3XHHHVPPnj1zIP/BD36QHn300RrLnThxYvrd736XQ2q8b4UVVkjXXHNN9etvvfVW2nbbbfP7Yzm//OUvazS7HzduXNprr73y64svvng6//zzZ7oe119/fTrllFPS66+/ntchHjGt3MogyhvLWmCBBdLPfvaz9MUXX8w0cMdFh5EjR1ZPe/LJJ9Nxxx2XA3bZxx9/nD799NM8f/jss8/ysrt3754WXnjh/JmffPJJ9fxxseKoo47Kr/fo0SMde+yx+SJGpfqsdzQpr2xWH+v6l7/8Je28886pa9euacUVV0z33ntvjffE85jeuXPnXN4bbrghvy+as4dYjx122CEttNBCufZ81VVXTffff/9MtzkAADB3CdwtUATNs88+O1VVVaU11lgjjR07Nm233XZp8ODB6dVXX03bbLNNDmsRbMsiNN5yyy3pkksuye/705/+VF1bHiFv8803T2uvvXZ6+eWX04MPPpgDcITVst/+9rc55P7jH/9IDz/8cA66r7zyygzLuNtuu6Wjjz46B8WotY9HTJs2bVoOvt98801e3iOPPJI++uij/NqMbLTRRqlDhw65Vju888476b///W/ad99909dff52DdojXI8AOGDAgTZ48OQ0cODBfoIjm5c8880xe39g2kyZNyvNHeI6LANdee22+cBFlql2T3tD1LouLDbH93njjjbxv9thjj7z8EOX9yU9+knbaaad8QeKAAw5IJ5xwQo33H3zwwfkiyVNPPZXefPPNdM4559Ro3QAAADS9lt3WuJU69dRT01ZbbVX9PGpv11xzzernp512Wg6OUYt6yCGHpPfeey/dfvvtOdxuueWWeZ7llluuev7LLrssh+0zzzyzelqE0KgNj/f27t0714bfdNNNaYsttsivR43skksuOcMydunSJQfEaO4etfNlUYYIkBE6Y/nhxhtvzME8+kJH7XxtUcO73nrr5bC7++67578bb7xxrqnfcMMN8/Nll102/42wHdOjrBHuo6a53C8++ntHbXbMt/XWW+da6eOPPz7tsssu1f3CH3rooerPjQsZDV3vsmjmHmUNsV3jQseLL76YA39c7Ojbt28677zz8uvx72hhcMYZZ1S/Py6W7Lrrrmn11Vefbn8BAADNgxruFmjdddet8TyC4THHHJP69euXA2UE3ajFLtdwx6Bl7dq1Sz/60Y/qXF7UskbtcLyv/Fh55ZXza9FcPR5RK7z++uvXCPkRFBsqyhVBuxy2wyqrrJLLHa/NbGTwcvPx+BvPQ6xT5fRyc/JYpw8++CDXcJfXKco8YcKEvD7ff/99rnWvXKe4OFC5bedkvaPlQeUFg2g6/+WXX+bn0Ty+9oWFuKBQ6bDDDkunn356rt2PgfKiphwAAGheBO4WqPaI2BG2o0Y7alKj+XQE7KgZLTedjtrmmYnAHk3Q432Vj/fffz9tsskmqTmIIB217f/5z39ysC5fPCgH7gjH0Wc7msaX1yn6uddep1jGL37xi8LLG03gK0Ute9S419evf/3r3NQ++tJHi4C4EHDppZcWUFIAAGB2CdytQPRPjibMMUhXBO1owl05OFhMi7AXfZHrss4666S33347D/4Vg6lVPiLcL7/88jlAvvDCC9Xv+fbbb3N4nZmOHTvmgckqRS18BON4lEWf7OhHHjXdMxJNx2N5V1xxRa6ljjAdoqb4q6++yk3gy03Py+sUFwwWW2yx6dYpBqOLRwyCVrlOU6ZMSUOGDKl+PrvrPStRQx595StFc/raohXAb37zm3TXXXfl/vBXX331HH0uAADQuATuViBGu45QFjW40ZQ6anAra1MjSMetsn71q1/l+2JH/+moFY5+3eUBumJAr+hzHMEvaoujL/M+++yTA3M0x44BymIAscceeyz3N46A37btzA+v+Nz4rChXjHgeg4BFH/K4ABCDiMXgY9GvOQZ0i5rq2k3lK0UtfdyPO2p5o5l1NJEPEcIrp5drlmP5iyyySB6gLWr9y+scTbU///zzPM/hhx+eB5+LbRIjwB900EHVo4SH2V3vWYlB0uLzYtT4cv/68gju5f7mRxxxRN4HUe7YTtHkPy5WAAAAzYdB02Zyf+yW8jkXXHBBDtNRCxwhM4Lc6NGja8xz5ZVXpv/93//NoTJG9o57gsfzEIOiRS15vC8GE4tgvPTSS+cBvsrhMgb4Kjc9j37RUeMa/aBnJgb9igsB0Rw8gmwMWhaBNUb8PvTQQ3Nz9Vh+fE59mkvHcmLU7nL/7bII6xFIy/23Q9yOK+aNdYpB0caMGZOWWGKJPPhZ9KcOsQ7RjzsuRkQ5YhtGK4HK9Zqd9Z6VGODtzjvvzMu6+OKL80BvMUr5gQcemAd8C3GhIy6ExMWBKG9sowsvvHCOPhcAAGhcbUq1byzcwkSwjObBEYLKQaosmh5HDWEEnLhdVIiBxPr17ZvGT5gw18rYtXPnVDV0aA65UJcYoTxGSa9sat+S1PVdBKD5iVZV0W1rSP/+aZ1u3aZ7PS5gvzxkSOo2f//Urv30r9N6VE0Zk/YYOyT17z8kdeu2Thoz5pU0ZEj/3D0vuvZBS8qVM6OGu5YIvRF+o4nz3BK1zsI2laIvevQ/79GjR25dEDXpcQs3AABg3iFw1yHCrwBMU4oB3eK2X9F3Po7FaF4e9wQHAADmHQI3NEPRH1ufbAAAmLcZpRwAAAAKIHADAABAAQTulGrckxqY+3wHAQBoiVp1H+6OHTvm+ysPHz48Lbroovl5mzZtmrpY0GrEXQknTZqUvvrqq/xdjO8gAAC0FK06cMcJftz3d8SIETl0A02ja9eueTT2+E4CAEBL0aoDd4gatTjRnzJlSpo6dWpTFwdanXbt2qX27dtrXQIAQIvT6gN3iGbkHTp0yA8AAABoDNpvAgAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEBLDtxnn312atOmTTriiCOqp02YMCEdfPDBqUePHmn++edPu+66a/riiy+atJwAAAAwzwTul156Kf3pT39Ka6yxRo3pRx55ZLrvvvvSHXfckZ588sk0fPjwtMsuuzRZOQEAAGCeCdxjx45Ne+yxR7r66qvTQgstVD39+++/T9dcc0264IIL0uabb5769++frrvuuvTss8+m559/vknLDAAAAM0+cEeT8e233z5tueWWNaYPGTIkTZ48ucb0lVdeOS211FLpueeea4KSAgAAQP21T03o1ltvTa+88kpuUl7byJEjU8eOHVP37t1rTO/Zs2d+bUYmTpyYH2WjR49u5FIDAABAM67h/uyzz9Lhhx+ebr755tS5c+dGW+5ZZ52VFlxwwepHnz59Gm3ZAAAA0OwDdzQZ//LLL9M666yT2rdvnx8xMNoll1yS/x012ZMmTUrfffddjffFKOW9evWa4XKPP/743P+7/IhgDwAAAK2mSfkWW2yR3nzzzRrT9tlnn9xP+3e/+12ume7QoUMaPHhwvh1YGDp0aBo2bFgaMGDADJfbqVOn/AAAAIBWGbi7deuWVltttRrT5ptvvnzP7fL0fffdNx111FFp4YUXTgsssEA69NBDc9jeYIMNmqjUAAAAMA8MmjYrF154YWrbtm2u4Y6B0AYOHJiuuOKKpi4WAAAAzFuB+4knnqjxPAZTu/zyy/MDAAAA5iVNfh9uAAAAaIkEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAArQvYqEAQMs2bNiwNGrUqKYuBnNZVVVV/jtu/Pg0po7XYzoA/5/ADQA0OGz37dsvTZggXLVW71RVpSkzeX1aqZTazcXyADRXAjcA0CBRsx1hu1+/m1LXrv1svVZk/PiqVFW1Z5qvS7/UrV3X6V6fPOWbNGHCx6lUKjVJ+QCaG4EbAJgtEba7dVvH1muF2rbrmtq17zbd9KnTtHoAqGTQNAAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACtC+iIUCAPOWYcOGpVGjRtVr3qqqqvx3/Pj/+0vrYZ8DNIzADQCtXITtfn37pvETJjTofVVVexZWJpq3UmlSUxcBYJ4gcANAKxc12xG2b+rXL/Xr2nWW848bPz69U1WV5uvSL7VtN+v5aTmemfJ1umLCJ6k0bUpTFwVgniBwAwBZhO11unWb5dYYk1KKuNWtXdfUrv2s56fl+Hjq+KYuAsA8xaBpAAAAUACBGwAAAAogcAMAAEBLC9xXXnllWmONNdICCyyQHwMGDEgPPPBA9esTJkxIBx98cOrRo0eaf/7506677pq++OKLpiwyAAAANP/AveSSS6azzz47DRkyJL388stp8803TzvuuGN6++238+tHHnlkuu+++9Idd9yRnnzyyTR8+PC0yy67NGWRAQAAoPmPUr7DDjvUeH7GGWfkWu/nn38+h/Frrrkm/e1vf8tBPFx33XWpX79++fUNNtigiUoNAAAA81Af7qlTp6Zbb701jRs3Ljctj1rvyZMnpy233LJ6npVXXjkttdRS6bnnnpvhciZOnJhGjx5d4wEAAACtLnC/+eabuX92p06d0m9+85t09913p1VWWSWNHDkydezYMXXv3r3G/D179syvzchZZ52VFlxwwepHnz595sJaAAAAQDML3H379k2vvfZaeuGFF9KBBx6YBg0alN55553ZXt7xxx+fvv/+++rHZ5991qjlBQAAgGbfhztELfYKK6yQ/92/f//00ksvpYsvvjjttttuadKkSem7776rUcsdo5T36tVrhsuLmvJ4AAAAQKuu4a5t2rRpuR92hO8OHTqkwYMHV782dOjQNGzYsNzHGwAAAJqzJq3hjubf2267bR4IbcyYMXlE8ieeeCI99NBDuf/1vvvum4466qi08MIL5/t0H3rooTlsG6EcAACA5q5JA/eXX36Z9tprrzRixIgcsNdYY40ctrfaaqv8+oUXXpjatm2bdt1111zrPXDgwHTFFVc0ZZEBAACg+QfuuM/2zHTu3Dldfvnl+QEAAADzkmbXhxsAAABaAoEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAAGgugfujjz5q/JIAAABAaw/cK6ywQtpss83STTfdlCZMmND4pQIAAIDWGLhfeeWVtMYaa6Sjjjoq9erVKx1wwAHpxRdfbPzSAQAAQGsK3GuttVa6+OKL0/Dhw9O1116bRowYkTbeeOO02mqrpQsuuCB99dVXjV9SAAAAaC2DprVv3z7tsssu6Y477kjnnHNO+uCDD9IxxxyT+vTpk/baa68cxAEAAKA1mqPA/fLLL6eDDjooLb744rlmO8L2hx9+mB555JFc+73jjjs2XkkBAABgHtJ+dt4U4fq6665LQ4cOTdttt1268cYb89+2bf8vvy+77LLp+uuvT8sss0xjlxcAAABabuC+8sor069+9au0995759rtuiy22GLpmmuumdPyAQAAQOsJ3O+///4s5+nYsWMaNGjQ7CweAAAAWmcf7mhOHgOl1RbTbrjhhsYoFwAAALS+wH3WWWelRRZZpM5m5GeeeWZjlAsAAABaX+AeNmxYHhittqWXXjq/BgAAAK3dbAXuqMl+4403ppv++uuvpx49ejRGuQAAAKD1Be7dd989HXbYYenxxx9PU6dOzY/HHnssHX744ennP/9545cSAAAAWsMo5aeddlr65JNP0hZbbJHat/+/RUybNi3ttdde+nADAADA7AbuuOXXbbfdloN3NCPv0qVLWn311XMfbgAAAGA2A3fZSiutlB8AAABAIwTu6LN9/fXXp8GDB6cvv/wyNyevFP25AQAAoDWbrcAdg6NF4N5+++3Taqutltq0adP4JQMAAIDWFrhvvfXWdPvtt6ftttuu8UsEAAAArfW2YDFo2gorrND4pQEAAIDWHLiPPvrodPHFF6dSqdT4JQIAAIDW2qT86aefTo8//nh64IEH0qqrrpo6dOhQ4/W77rqrscoHAAAArSdwd+/ePe28886NXxoAAABozYH7uuuua/ySAAAAQGvvwx2mTJmSHn300fSnP/0pjRkzJk8bPnx4Gjt2bGOWDwAAAFpPDfenn36attlmmzRs2LA0ceLEtNVWW6Vu3bqlc845Jz+/6qqrGr+kAAAA0NJruA8//PC07rrrpm+//TZ16dKlenr06x48eHBjlg8AAABaTw33v//97/Tss8/m+3FXWmaZZdJ//vOfxiobAAAAtK4a7mnTpqWpU6dON/3zzz/PTcsBAACgtZutwL311luniy66qPp5mzZt8mBpJ510Utpuu+0as3wAAADQepqUn3/++WngwIFplVVWSRMmTEi/+MUv0vvvv58WWWSRdMsttzR+KQEAAKA1BO4ll1wyvf766+nWW29Nb7zxRq7d3nfffdMee+xRYxA1AAAAaK3az/Yb27dPe+65Z+OWBgAAAFpz4L7xxhtn+vpee+01u+UBAACA1hu44z7clSZPnpzGjx+fbxPWtWtXgRsAAIBWb7ZGKf/2229rPKIP99ChQ9PGG29s0DQAAACY3duC1WXFFVdMZ5999nS13wAAANAaNVrgLg+kNnz48MZcJAAAALSePtz33ntvjeelUimNGDEiXXbZZWmjjTZqrLIBAABA6wrcO+20U43nbdq0SYsuumjafPPN0/nnn99YZQMAAIDWFbinTZvW+CUBAACAFqRR+3ADAAAAc1DDfdRRR9V73gsuuGB2PgIAAABaX+B+9dVX82Py5Mmpb9++edp7772X2rVrl9ZZZ50afbsBAACgNZqtwL3DDjukbt26pRtuuCEttNBCedq3336b9tlnn/TDH/4wHX300Y1dTgAAAGj5fbhjJPKzzjqrOmyH+Pfpp59ulHIAAACY3cA9evTo9NVXX003PaaNGTPGhgUAAKDVm63AvfPOO+fm43fddVf6/PPP8+Pvf/972nfffdMuu+zS6jcqAAAAzFYf7quuuiodc8wx6Re/+EUeOC20b98+B+7zzjvPVgUAAKDVm63A3bVr13TFFVfkcP3hhx/macsvv3yab775Wv0GBQAAgNluUl42YsSI/FhxxRVz2C6VSrYqAAAAzG7g/vrrr9MWW2yRVlpppbTddtvl0B2iSblbggEAAMBsBu4jjzwydejQIQ0bNiw3Ly/bbbfd0oMPPmi7AgAA0OrNVh/uhx9+OD300ENpySWXrDE9mpZ/+umnrX6jAgAAwGzVcI8bN65GzXbZN998kzp16mSrAgAA0OrNVuD+4Q9/mG688cbq523atEnTpk1L5557btpss81a/UYFAACA2WpSHsE6Bk17+eWX06RJk9Kxxx6b3n777VzD/cwzz9iqAAAAtHqzVcO92mqrpffeey9tvPHGaccdd8xNzHfZZZf06quv5vtxAwAAQGvX4BruyZMnp2222SZdddVV6YQTTiimVAAAANDaarjjdmBvvPFGMaUBAACA1tykfM8990zXXHNN45cGAAAAWvOgaVOmTEnXXnttevTRR1P//v3TfPPNV+P1Cy64oLHKBwAAAC0/cH/00UdpmWWWSW+99VZaZ5118rQYPK1S3CIMAAAAWrsGBe4VV1wxjRgxIj3++OP5+W677ZYuueSS1LNnz6LKBwAAAC2/D3epVKrx/IEHHsi3BAMAAAAaYdC0GQVwAAAAYDYCd/TPrt1HW59tAAAAmMM+3FGjvffee6dOnTrl5xMmTEi/+c1vphul/K677qrX8s4666w877vvvpu6dOmSNtxww3TOOeekvn37Vs8Tn3H00UenW2+9NU2cODENHDgwXXHFFfqNAwAA0HJquAcNGpQWW2yxtOCCC+ZH3I+7d+/e1c/Lj/p68skn08EHH5yef/759Mgjj6TJkyenrbfeuka/8COPPDLdd9996Y477sjzDx8+PO2yyy4NW0sAAABozjXc1113XaN++IMPPljj+fXXX58D/ZAhQ9Imm2ySvv/++3TNNdekv/3tb2nzzTevLkO/fv1ySN9ggw0atTwAAADQLAZNa2wRsMPCCy+c/0bwjlrvLbfcsnqelVdeOS211FLpueeeq3MZ0ex89OjRNR4AAADQagP3tGnT0hFHHJE22mijtNpqq+VpI0eOTB07dkzdu3evMW/c9ztem1G/8Mrm7X369Jkr5QcAAIBmGbijL/dbb72VB0ebE8cff3yuKS8/Pvvss0YrIwAAABTSh7sohxxySPrnP/+ZnnrqqbTkkktWT+/Vq1eaNGlS+u6772rUcn/xxRf5tbrECOrlUdQBAACgVdZwx23GImzffffd6bHHHkvLLrtsjdf79++fOnTokAYPHlw9bejQoWnYsGFpwIABTVBiAAAAmAdquKMZeYxA/o9//CN169atul929L2O+3LH33333TcdddRReSC1BRZYIB166KE5bBuhHAAAgOasSQP3lVdemf9uuummNabHrb/23nvv/O8LL7wwtW3bNu266655BPKBAwemK664oknKCwAAAPNE4I4m5bPSuXPndPnll+cHAAAAzCuazSjlAAAA0JII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAABG4AAACYN6jhBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAABaWuB+6qmn0g477JB69+6d2rRpk+65554ar5dKpXTiiSemxRdfPHXp0iVtueWW6f3332+y8gIAAMA8EbjHjRuX1lxzzXT55ZfX+fq5556bLrnkknTVVVelF154Ic0333xp4MCBacKECXO9rAAAANAQ7VMT2nbbbfOjLlG7fdFFF6Xf//73accdd8zTbrzxxtSzZ89cE/7zn/98LpcWAAAAWkAf7o8//jiNHDkyNyMvW3DBBdP666+fnnvuuSYtGwAAADTrGu6ZibAdoka7Ujwvv1aXiRMn5kfZ6NGjCywlAAAwI+PHV9X4e//996eqqv/7N5Qtt9xyacCAAaklaraBe3adddZZ6ZRTTmnqYgAAQKs1atqk3JS2qmrPGtP/8Ic/NFmZaL7appSefvbZFhm6m23g7tWrV/77xRdf5FHKy+L5WmutNcP3HX/88emoo46qUcPdp0+fgksLAACUjSlNSdNSSqd2WiYt36FHmjzl6zRhwiepU8elU/t2XW0oqn049ft08qTh6aOPPhK456Zll102h+7BgwdXB+wIzzFa+YEHHjjD93Xq1Ck/AACAprVs2y6pX/tuadK08Wl8Sqlr+4VTx44L2i38f7k38PDUUjVpDffYsWPTBx98UGOgtNdeey0tvPDCaamllkpHHHFEOv3009OKK66YA3g0QYl7du+0005NWWwAAABo3oH75ZdfTptttln183JT8EGDBqXrr78+HXvssfle3fvvv3/67rvv0sYbb5wefPDB1Llz5yYsNQAAADTzwL3pppvm+23PSJs2bdKpp56aHwAAADAvabb34QYAAIB5mcANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFCA9kUslNkzbNiwNGrUKJuPWVpkkUXSUkstZUsBAEAzJnA3o7Ddr2/fNH7ChKYuCvOArp07p6qhQ4VuAABoxgTuZiJqtiNs39SvX+rXtWtTF4dmrGr8+LRnVVU+ZtRyAwBA8yVwNzMRttfp1q2piwEAAMAcMmgaAAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAVwH24AZmjYsGFp1KhRtlALV1VVlf+OGz8+janH/DEfADBrAjcAMwzbffv2SxMmCFetxTtVVWlKA+afViqldgWWBwDmdQI3AHWKmu0I2/363ZS6du1nK7Vg48dXpaqqPdN8Xfqlbu26znL+yVO+SRMmfJxKpdJcKR8AzKsEbgBmKsJ2t27r2EqtQNt2XVO79t1mOd/UaVo9AEB9GDQNAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAK4DzdACzZs2LA0atSo2XpvVVVV/jt+/P/9peWyjwGgGAI3QAsO2/369k3jJ0yYo+VUVe3ZaGWieSuVJjV1EQCgRRG4AVqoqNmOsH1Tv36pX9euDX7/uPHj0ztVVWm+Lv1S23YNfz/zjmemfJ2umPBJKk2b0tRFAYAWReAGaOEibK/TrVuD3zcmpRTxq1u7rqld+4a/n3nHx1PHN3URAKBFMmgaAAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKC1Bu7LL788LbPMMqlz585p/fXXTy+++GJTFwkAAADm7cB92223paOOOiqddNJJ6ZVXXklrrrlmGjhwYPryyy+bumgAAAAw7wbuCy64IO23335pn332Sausskq66qqrUteuXdO1117b1EUDAACAeTNwT5o0KQ0ZMiRtueWW1dPatm2bnz/33HNNWjYAAACYmfapGRs1alSaOnVq6tmzZ43p8fzdd9+t8z0TJ07Mj7Lvv/8+/x09enRqzsaOHZv/DhkzJo2dOrWpi0MzNnT8+Pw3LkaVjxuo81gZOnSOflfGjx+f4pe28+SvUrspY2zkFuyjKf/3/8q3p3yb/lua9bEyZeroFP+n7TR5VGo/bdxcKCHzyrHi2GBGx4pjgxn5aOro6vOO5pzZymUrlUoNel+bUkPfMRcNHz48LbHEEunZZ59NAwYMqJ5+7LHHpieffDK98MIL073n5JNPTqeccspcLikAAAAt3WeffZaWXHLJllHDvcgii6R27dqlL774osb0eN6rV68633P88cfnQdbKpk2blr755pvUo0eP1KZNm+muUvTp0ydvtAUWWKCgtaC1cVzhmGJe4LcKxxXzCr9XNIfjKuqpx4wZk3r37t2gz2nWgbtjx46pf//+afDgwWmnnXaqDtDx/JBDDqnzPZ06dcqPSt27d5/p58QGFrhpbI4rHFPMC/xW4bhiXuH3iqY+rhZccMEGL79ZB+4QtdWDBg1K6667blpvvfXSRRddlMaNG5dHLQcAAIDmqtkH7t122y199dVX6cQTT0wjR45Ma621VnrwwQenG0gNAAAAmpNmH7hDNB+fURPyORFNz0866aTpmqCD44rmxG8VjivmFX6vcFwxr+g0l7Jgsx6lHAAAAOZVbZu6AAAAANASCdwAAABQAIEbAAAACtCiAvfll1+elllmmdS5c+e0/vrrpxdffHGm899xxx1p5ZVXzvOvvvrq6f7776/xenRvj9HRF1988dSlS5e05ZZbpvfff7/gtaClH1d77713atOmTY3HNttsU/BaMC8fV2+//Xbadddd8/xxvMTtEed0mbRMjX1cnXzyydP9XsXvG61LQ46rq6++Ov3whz9MCy20UH7EuVPt+Z1fUcRx5fyKyxtwTN111135ttPdu3dP8803X74T1l//+tdCfqtaTOC+7bbb8j27Y6S5V155Ja255ppp4MCB6csvv6xz/meffTbtvvvuad99902vvvpq2mmnnfLjrbfeqp7n3HPPTZdcckm66qqr0gsvvJB3RixzwoQJc3HNaGnHVYiAPWLEiOrHLbfcMpfWiHnxuBo/fnxabrnl0tlnn5169erVKMuk5SniuAqrrrpqjd+rp59+usC1YF4/rp544on8/8HHH388Pffcc6lPnz5p6623Tv/5z3+q53F+RRHHVXB+1Xrd1sBjauGFF04nnHBCPp7eeOONtM8+++THQw891Pi/VaUWYr311isdfPDB1c+nTp1a6t27d+mss86qc/6f/exnpe23377GtPXXX790wAEH5H9Pmzat1KtXr9J5551X/fp3331X6tSpU+mWW24pbD1o2cdVGDRoUGnHHXcssNS0tOOq0tJLL1268MILG3WZtAxFHFcnnXRSac0112z0sjLvmNPflilTppS6detWuuGGG/Jz51cUcVwF51et23qNcB609tprl37/+983+m9Vi6jhnjRpUhoyZEiu5i9r27Ztfh5XLeoS0yvnD3HFojz/xx9/nEaOHFljngUXXDA3T5jRMmlZijiuKq/ULrbYYqlv377pwAMPTF9//XVBa0FLOK6aYpnMW4o8BqL5XO/evXNt+B577JGGDRvWCCWmtRxX0ZJi8uTJuTYpOL+iiOOqzPlV6zRpDo+paDo+ePDgNHTo0LTJJps0+m9Viwjco0aNSlOnTk09e/asMT2ex4aqS0yf2fzlvw1ZJi1LEcdVubnTjTfemL/Y55xzTnryySfTtttumz+Llm92jqumWCbzlqKOgTixuP7669ODDz6YrrzyynwCEv0ox4wZ0wilpjUcV7/73e/yBZvySavzK4o4roLzq9Zr1GweU99//32af/75U8eOHdP222+fLr300rTVVls1+m9V+wbNDcyxn//859X/jkHV1lhjjbT88svnq7JbbLGFLQw0G3ExsCx+qyKAL7300un222/PY1XAzMT4ALfeemv+/1sMYgRFHlfOr2iobt26pddeey2NHTs2V4RFH/BozbXpppumxtQiargXWWSR1K5du/TFF1/UmB7PZzQQTEyf2fzlvw1ZJi1LEcdVXeKLHZ/1wQcfNFLJaWnHVVMsk3nL3DoGYjTXlVZaye9VKzEnx9Uf//jHHIwefvjhfLGmzPkVRRxXdXF+1XosMpvHVDQ7X2GFFfII5UcffXT6yU9+ks4666xG/61qEYE7mgH0798/X5komzZtWn4+YMCAOt8T0yvnD4888kj1/Msuu2zemJXzjB49Oo9QN6Nl0rIUcVzV5fPPP899uOOWA7R8s3NcNcUymbfMrWMgagE+/PBDv1etxOweVzGy72mnnZa7IsRtdyo5v6KI46ouzq9aj46N9P/AeM/EiRMb/7eq1ELceuutedS466+/vvTOO++U9t9//1L37t1LI0eOzK//8pe/LB133HHV8z/zzDOl9u3bl/74xz+Wqqqq8kisHTp0KL355pvV85x99tl5Gf/4xz9Kb7zxRh5Zetllly3997//bZJ1ZN4/rsaMGVM65phjSs8991zp448/Lj366KOlddZZp7TiiiuWJkyYYBe3Eg09riZOnFh69dVX82PxxRfPx1D8+/3336/3Mmn5ijiujj766NITTzyRf6/i923LLbcsLbLIIqUvv/yySdaR5n9cxblTx44dS3feeWdpxIgR1Y/4/1/lPM6vWrfGPq6cX3FrA4+pM888s/Twww+XPvzwwzx/nLvHOfzVV1/d6L9VLSZwh0svvbS01FJL5S9kDA3//PPPV7/2ox/9KN8uoNLtt99eWmmllfL8q666aulf//pXjddjOPg//OEPpZ49e+YduMUWW5SGDh0619aHlndcjR8/vrT11luXFl100RzE41Y8++23n1DUCjXkuIqwE9dHaz9ivvouk9ahsY+r3XbbLYfxWN4SSyyRn3/wwQdzfb2Yd46r+P9aXcdVXIAuc35FYx9Xzq9o6DF1wgknlFZYYYVS586dSwsttFBpwIABObRXaqzfqjbxn4bViQMAAACtog83AAAANDcCNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBoIVo06ZNuueee5q6GGnkyJFpq622SvPNN1/q3r17UxcHAJqMwA1Aq7b33nvnoBqPjh07phVWWCGdeuqpacqUKam5Ovnkk9Naa6013fQRI0akbbfdNjW1Cy+8MJfltddeS++9915TFwcAmkz7pvtoAGgettlmm3TdddeliRMnpvvvvz8dfPDBqUOHDun444+fbt5JkyblYN4USqVSmjp16gxf79WrV2oOPvzww9S/f/+04oorNnVRAKBJqeEGoNXr1KlTDqtLL710OvDAA9OWW26Z7r333uoa8J122imdccYZqXfv3qlv3755+ptvvpk233zz1KVLl9SjR4+0//77p7Fjx1Zvy/L7TjnllLToooumBRZYIP3mN7/Jgb0sAv5hhx2WFltssdS5c+e08cYbp5deeqn69SeeeCLXvD/wwAM5wEY5b7rpprzM119/vbpm/vrrr6+zSXl9y/jHP/4xLb744nmeuNgwefLkmR4TV155ZVp++eXzhYfYHn/961+rX1tmmWXS3//+93TjjTfm8sRnzMi1116bVl111bxe8fmHHHJI9WsXXHBBWn311XOz9D59+qSDDjqoRtk//fTTtMMOO6SFFloozxPLiYslZW+99Vau7Z9//vlTz5490y9/+cs0atSo6tfvvPPOvPzytol9Pm7cuFb/XQCgcQncAFBLhLDKYDx48OA0dOjQ9Mgjj6R//vOfOZgNHDgwh70IyHfccUd69NFHawTG8vuqqqpycL7lllvSXXfdlcNy2bHHHpvD6Q033JBeeeWV3Jw9lvvNN9/UWM5xxx2Xzj777Lys6Bt99NFH54AZzbbjsdtuu023D+tbxscffzzXSMffKEeE93KAr8vdd9+dDj/88FyGCLUHHHBA2mefffL7Q3xWtBj42c9+lst28cUXzzC0R7iPiwBxYSAucMT6l7Vt2zZdcskl6e23387leuyxx/L2Kov3xgWLp556Kr//nHPOyeE6fPfdd/lCw9prr51efvnl9OCDD6YvvvgilylEuXbffff0q1/9qnr/7LLLLrkFAQA0qhIAtGKDBg0q7bjjjvnf06ZNKz3yyCOlTp06lY455pjq13v27FmaOHFi9Xv+/Oc/lxZaaKHS2LFjq6f961//KrVt27Y0cuTI6vctvPDCpXHjxlXPc+WVV5bmn3/+0tSpU/N7O3ToULr55purX580aVKpd+/epXPPPTc/f/zxxyMBlu65554aZT7ppJNKa6655nTrEvPefffdDSrj0ksvXZoyZUr1PD/96U9Lu+222wy314Ybbljab7/9akyL92y33XbVz2N7xrJnJtbzhBNOKNXXHXfcUerRo0f189VXX7108skn1znvaaedVtp6661rTPvss8/y9hk6dGhpyJAh+d+ffPJJvT8fAGaHGm4AWr2otY7a0WjWHc2Qo8Y4BiYri6bHlf22o1Z0zTXXzE2ZyzbaaKM0bdq0XBNeFvN07dq1+vmAAQNys+jPPvss1ypH0+14X1n0G19vvfXy8iutu+66Dd5H9S1j1JS3a9eu+nk07f7yyy9nutzKMpeXW7vMMxPLHz58eNpiiy1mOE/UxsfrSyyxROrWrVtuEv7111+n8ePH59ejKf7pp5+eP/ukk05Kb7zxRvV7o7l91LjHPi0/Vl555fxabPfYLrHs2K8//elP09VXX52+/fbbepcfAOpL4Aag1dtss83yiNrvv/9++u9//5ubMFcG1cp/N4UiPz9CfqXodx2hvOgm+zPzySefpB//+MdpjTXWyE3uhwwZki6//PL8Wrmp/69//ev00Ucf5SAeTcrjosSll16aX4uLGtG/O/Zp5SP27yabbJIvMET3gOgbv8oqq+T3RV/0jz/+uND1BqD1EbgBaPUi0Eb/4aWWWiq1bz/rG3j069cv16JWDrL1zDPP5H7H5UHVQswTAb7s+eefz7WtMQhYedCxeF9Z1HhHH+gIgTMT75vZaOUNKWNDxXIry1xe7qzKXClqrGNwtejjXpcI2BH6zz///LTBBhuklVZaKdeI1xbbMQaii77x0ac8aqrDOuusk/t+x2fEfq18lC9exIWFqB2PPvWvvvpq3qbRPx0AGpPADQANtMcee+Tm54MGDcoDh0Xz5UMPPTTXtsaI2GVRG7vvvvumd955J4+gHU2fY9CyCL0R/GJE9N/+9rd5UK+YZ7/99stNpuM9MxNBMmpjo9Y2Rt6OwcNmt4wNFeWNQdVi0LOoMY7RxCPwHnPMMQ1aTjTZj0AdA6PFcmLQuHINdQTjuPgQz6MWO0ZBv+qqq2q8/4gjjkgPPfRQ3g7x3li/uBhQHlAtBp6LgdHiAkY0I495Y3C3uFDxwgsvpDPPPDMPqDZs2LBc/q+++qr6/QDQWARuAGig6JcdAS5C3Q9+8IP0k5/8JPcJvuyyy2rMF9PiXtTRjDn6hf/P//xPjb7hMfL4rrvumkNw1Mp+8MEHebkxsvjMxHtiJPBoCh+3HIsR0Ge3jA0VtxGLkcfjVmLR//tPf/pTvof5pptu2qDlxIWAiy66KF1xxRV5OdGEPIJ3iD7WEeRj5PHVVlst3Xzzzemss86q8f4IzhGsIyTHtoha8FhWiNu3Ra17zLP11lvnvtoR0Lt3754vdsQt2mJ08+222y6/7/e//30O/9F/HwAaU5sYOa1RlwgA5PtPx+2pKu+LDQC0Lmq4AQAAoAACNwAAABRAk3IAAAAogBpuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAABIje//AZNhd6Wi8qGkAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Import necessary libraries\n", "import pandas as pd\n", @@ -67,6 +159,9 @@ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", + "# random seed for reproducibility\n", + "np.random.seed(42)\n", + "\n", "# Note: Suppressing FutureWarnings to maintain a clean output. This is specifically to ignore warnings about\n", "# deprecated features in the libraries we're using (e.g., 'use_inf_as_na' option in Pandas, used by Seaborn),\n", "# which we currently have no direct control over. This action is taken to ensure that our output remains\n", @@ -130,8 +225,8 @@ "\n", " return p_wedding_infections, p_wedding_traces\n", "\n", - "# Run the simulation 1000 times\n", - "results = [simulate_event(m) for m in range(1000)]\n", + "# Run the simulation 1000 times > turned into 10 and 100\n", + "results = [simulate_event(m) for m in range(100)]\n", "props_df = pd.DataFrame(results, columns=[\"Infections\", \"Traces\"])\n", "\n", "# Plotting the results\n", @@ -146,6 +241,12 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "id": "0687ca76", + "metadata": {}, + "source": [] + }, { "cell_type": "markdown", "id": "f418c720", @@ -193,9 +294,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python (opensmile)", "language": "python", - "name": "python3" + "name": "opensmile-env" }, "language_info": { "codemirror_mode": { @@ -207,7 +308,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.0" + "version": "3.14.4" } }, "nbformat": 4, From fec07dd4f076469e63a60ca404d520b73340553a Mon Sep 17 00:00:00 2001 From: Teresa OV Date: Fri, 29 May 2026 22:10:46 -0400 Subject: [PATCH 2/3] assignment 2 changes --- .../a2_survey_design_and_evaluation.md | 53 +++++++++++++------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/02_activities/assignments/a2_survey_design_and_evaluation.md b/02_activities/assignments/a2_survey_design_and_evaluation.md index b4f036f2..f1214eae 100644 --- a/02_activities/assignments/a2_survey_design_and_evaluation.md +++ b/02_activities/assignments/a2_survey_design_and_evaluation.md @@ -7,7 +7,6 @@ The goal of this assignment is to practice developing and evaluating sampling ma ### Part A - Survey Design: Select one of the scenarios below and design a survey to meet the need(s) outlined in the prompt. - 1. In two to three sentences, describe the purpose of your survey 2. Describe your target population, sampling frame, sampling units, and overall sampling strategy. 3. Write a 5-10 question survey to address your chosen scenario below. @@ -40,30 +39,38 @@ For the **Canadian General Social Survey on Giving, Volunteering, and Participat ## Part A - Survey Design: -The number of your chosen topic: `#` +The number of your chosen topic: `#1` Describe the purpose of your survey: ``` -write your answer here... + The purpose of the survey is to determine employee satisfaction across the entire organization (compare rates across departments), what is working well (strengths) and what are some challenges to achieving high satisfaction resulting in high employee turnover. With particular emphasis on the entry and lower level positions. ``` Describe your target population, sampling frame, sampling units, and observational units: ``` -write your answer here... + - The target population is employees at the large tech company, specifically the entry and lower level positions. + - The sampling frame is the employee database from organization records. + - The sampling unit is each employee who completes the survey. + - Overall sampling strategy would be stratified sampling, having responses from entry level positiong, to mid to senior level across all departments. ``` Your 5-10 question survey: ``` -1. write your question here... -2. write your question here... -3. write your question here... -4. write your question here... -5. write your question here... -6. write your question here... (optional) -7. write your question here... (optional) -8. write your question here... (optional) -9. write your question here... (optional) -10. write your question here... (optional) +Rate the following questions using the following 5-pt Likert scale: +1= Strongly Disagree, 2= Disagree, 3= Neutral, 4=Agree, 5= Strongly Agree + +1. Overall, I am satisfied with my current job. +2. Overall, I would recommend this company to a friend. +3. I am fairly compensated for the work that I do. +4. I feel supported by leadership. +5. My workload is manageable. +6. I can maintain a healthy work-life balance. +7. I see the potential to move up in the company. + +Please answer the following text questions: +8. Please provide feedback on some strengths of working in your role and this company. +9. Please provide feedback on some challenges of working in your role and this company. +10. Is there anything else you would like to share? ``` ## Part B - Survey Evaluation: @@ -71,7 +78,23 @@ Your 5-10 question survey: Identify and describe survey features: ``` -write your answer here +1. Sample type = stratified probability sample (anyone aged 15+ living in private housholds across the provinces) +2. Sample size = 16,149 +3. Target population = anyone aged 15+ living in private housholds across the provinces +4. Sampling frame = Statistics Canada's Household survey +5. Survey mode(s) = online survey +6. Timeline = collected in 2018 +7. Response rate = 41.9% +8. Weights = person level weight +9. Data processing = data cleaning, coding, imputation, weights, analyses of variables +10. Cleaning, imputation, etc (see above) +11. Sources of error = sampling error, nonresponse error (queen of N/A in class), measurement error, processing error etc. +12. Limitations, known biases, etc (see above) +13. Link to documentation and any additional sources used +https://www150.statcan.gc.ca/n1/en/catalogue/45250011 +https://www150.statcan.gc.ca/n1/pub/45-25-0001/index-eng.htm +https://www150.statcan.gc.ca/n1/pub/45-25-0001/cat5/c33_2018.zip + ``` ## Rubric From 7fa7c719049ea02389c3d2293bd4ffed1247dec5 Mon Sep 17 00:00:00 2001 From: Teresa OV Date: Thu, 11 Jun 2026 12:51:59 -0400 Subject: [PATCH 3/3] more details --- .../a1_sampling_and_reproducibility.ipynb | 6 +++--- .../a2_survey_design_and_evaluation.md | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb index be5f7262..bb9f15d3 100644 --- a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb +++ b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb @@ -294,9 +294,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python (opensmile)", + "display_name": "cpython-3.11.14-macos-aarch64-none (3.11.14)", "language": "python", - "name": "opensmile-env" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -308,7 +308,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.4" + "version": "3.11.14" } }, "nbformat": 4, diff --git a/02_activities/assignments/a2_survey_design_and_evaluation.md b/02_activities/assignments/a2_survey_design_and_evaluation.md index f1214eae..296ef485 100644 --- a/02_activities/assignments/a2_survey_design_and_evaluation.md +++ b/02_activities/assignments/a2_survey_design_and_evaluation.md @@ -79,16 +79,16 @@ Identify and describe survey features: ``` 1. Sample type = stratified probability sample (anyone aged 15+ living in private housholds across the provinces) -2. Sample size = 16,149 -3. Target population = anyone aged 15+ living in private housholds across the provinces -4. Sampling frame = Statistics Canada's Household survey -5. Survey mode(s) = online survey -6. Timeline = collected in 2018 -7. Response rate = 41.9% -8. Weights = person level weight +2. Sample size = 16,149 (the amount of people who completed the survey and fit the inclusion criteria) +3. Target population = anyone aged 15+ living in private housholds across the provinces (inclusion criteria for sample) +4. Sampling frame = Statistics Canada's Household survey (the entire population for the survey) +5. Survey mode(s) = online survey (was completed on the participants' computers or phones) +6. Timeline = collected in 2018 (yearly survey) +7. Response rate = 41.9% (the percentage that completed the survey from the total surveys that were put out) +8. Weights = person level weight (per individual) 9. Data processing = data cleaning, coding, imputation, weights, analyses of variables 10. Cleaning, imputation, etc (see above) -11. Sources of error = sampling error, nonresponse error (queen of N/A in class), measurement error, processing error etc. +11. Sources of error = sampling error (maybe not representatative of the entire population), nonresponse error (queen of N/A in class - error for missing data), measurement error (potential for questions not accurately measuring what we want), processing error (inaccuracies in analyses) etc. 12. Limitations, known biases, etc (see above) 13. Link to documentation and any additional sources used https://www150.statcan.gc.ca/n1/en/catalogue/45250011