From 6cbafeca6cc64ffdbed67aab1b738b9db94771fd Mon Sep 17 00:00:00 2001 From: Luis Mantilla Date: Tue, 6 Jan 2026 21:42:47 -0500 Subject: [PATCH 1/2] add assignment 1 --- .../a1_sampling_and_reproducibility.ipynb | 64 +++++++++++++++---- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb index 11852458..66ccf497 100644 --- a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb +++ b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb @@ -16,7 +16,28 @@ "cell_type": "markdown", "id": "4ea73db3", "metadata": {}, - "source": [] + "source": [ + "Stages where sampling occurs:\n", + "- `infected_indices = np.random.choice(ppl.index, size=int(len(ppl) * ATTACK_RATE), replace=False)` determines which individuals become infected.\n", + " - Function used: `np.random.choice()`\n", + " - Sample size: `int(len(ppl) * ATTACK_RATE)` (20% of the population)\n", + " - Sampling frame: `ppl.index` (the indices of the DataFrame representing individuals)\n", + " - Underlying distribution: Uniform distribution (each individual has an equal chance of being selected)\n", + "\n", + "- ` ppl.loc[ppl['infected'], 'traced'] = np.random.rand(sum(ppl['infected'])) < TRACE_SUCCESS` determines which infected individuals are successfully traced.\n", + " - Function used: `np.random.rand()`\n", + " - Sample size: `sum(ppl['infected'])` (the number of infected individuals)\n", + " - Sampling frame: Infected individuals in the DataFrame\n", + " - Underlying distribution: Uniform distribution (each infected individual has an equal chance of being traced)\n", + "\n", + "- `results = [simulate_event(m) for m in range(1000)]` is a monte carlo simulation that samples 1000 events to estimate the distribution of outcomes.\n", + " - Function used: List comprehension to run `simulate_event(m)` for `m` in `range(1000)`\n", + " - Sample size: 1000 simulations\n", + " - Sampling frame: The range of integers from 0 to 999, each representing a different simulation run\n", + " - Underlying distribution: The outcomes of the simulations are influenced by the random sampling within the `simulate_event` function, which includes the infection and tracing processes.\n", + "\n", + "\n" + ] }, { "cell_type": "markdown", @@ -30,7 +51,9 @@ "cell_type": "markdown", "id": "4cf5d993", "metadata": {}, - "source": [] + "source": [ + "> For 10 repetitions, the results vary significantly between runs, showing high variability and less reliability in the estimates of infections and traces. Whereas 100 repetitions yield more consistent results to those obtained with 1000 repetitions. For sure 10 repetitions is too low to achieve reproducibility." + ] }, { "cell_type": "markdown", @@ -44,7 +67,9 @@ "cell_type": "markdown", "id": "77613cc3", "metadata": {}, - "source": [] + "source": [ + "> By setting a seed to numpy at the beginning of the script using `np.random.seed(0)`, the random number generator produces the same sequence of random numbers each time the script is run. " + ] }, { "cell_type": "markdown", @@ -56,10 +81,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "id": "ab8587a0", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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/Xf17dtXvXr1SnWGd9y4cerQoYN+/fVXtWzZUl26dLHX8fLLL2vPnj1atmyZoqKiNG3atHQvGX/33Xc1fvx4FS1aVDExMdqyZYvDe+Th4aGff/5ZH374of7++2+1bNlStWvX1q5duzRt2jTNmDFDr776aqr3Nm/evPrll1/0zDPPqH///nr88cdVr149bd++Xc2aNVO3bt0UF5f2LQn+/v6qXbu2w2tes2aNGjdurPr169vbjx49qj///FMREREZ2j9fffWVxowZo9dee01bt25VoUKFNHXqVIdtT548WZ9++qlmzJih9evX68yZM1q8eHGadd74vFq1amnHjh0aMGCA+vfvr71790qSLl68qDZt2qhq1aravn27XnnlFY0YMcLh+bezzwAAAIAczWRh58+fN5LM+fPnUz32zz//mD179ph//vnHoX3btm1GkqlZc5sJDzeW/tSseW1b27Ztu63X1aNHD9O2bVv7clhYmGnQoIFDn9q1a5sRI0bYl9u2bWt69OhhX161apUJCgoy8fHxDs8rU6aM+fDDD40xxoSGhpouXbqkW0eJEiXMO++849A2c+ZMExwcbF+uV6+e+fe//+3Q5/HHHzctW7a0L0syL730kn350qVLxmazmWXLlhljjGnTpo3p1atXunXc6J133jElSpRwaAsLCzPVq1d3aHvxxRdNhQoVTHJysr3tgw8+MAEBASYpKcn+vOvf28TEROPv72+6detmb4uJiTGSzMaNG9Ot6cUXXzTly5c3xhize/duExQUZBITE83EiRNN586djTHGzJ4923h7e5u4uLgM759+/fo5PF63bl1z//3325cLFSpkJk6caF++evWqKVq0aKrxM2jQIPtyiRIlTNeuXe3LycnJJn/+/GbatGnGGGOmTZtmQkJCHH53Pv74YyPJ7Nixwxhze/ssvd9FAAAAICu7WR69Hme6s4hq1ao5LBcqVEgnT55Mt/+2bdt06dIlhYSEKCAgwP5z6NAhHTx4UJK0c+dONW7c+I7qioqKUv369R3a6tev7zCp2I31+/v7KzAw0F5///79NW/ePFWvXl3Dhw/Xhg0bMlVLyln662sLDQ11+J7o+vXr69KlS/rrr7/SrM3d3V0hISGqWrWqva1AgQKSdNP3OyIiQvv379exY8cUGRmpBg0ayN3dXWFhYfbLziMjI/Xggw/K19c3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1QUAQNbjstAdGBioKlWqOLT5+/srJCQkVTsAAAAAAFmRy2cvBwAAAAAgu3Lp7OU3ioyMdHUJAAAAAAA4DWe6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLuDR0T5s2TdWqVVNQUJCCgoIUGhqqZcuWubIkAAAAAACcxqWhu2jRopo4caK2bt2qrVu3qlGjRmrbtq12797tyrIAAAAAAHAKD1duvE2bNg7Lr732mqZNm6ZNmzbpvvvuc1FVAAAAAAA4h0tD9/WSkpK0YMECXb58WaGhoWn2SUhIUEJCgn35woULd6s8AAAAAABum8snUvvtt98UEBAgb29v9evXT4sXL1blypXT7DthwgQFBwfbf4oVK3aXqwUAAAAAIONcHrorVKignTt3atOmTerfv7969OihPXv2pNl35MiROn/+vP3n6NGjd7laAAAAAAAyzuWXl3t5eals2bKSpFq1amnLli1699139eGHH6bq6+3tLW9v77tdIgAAAAAAmZKpM92HDh1ydh12xhiH+7YBAAAAAMiqMhW6y5Ytq4iICM2ZM0fx8fGZ3viLL76odevW6fDhw/rtt980atQoRUZGqkuXLpleJwAAAAAA94pMhe5du3bpgQce0NChQ1WwYEH17dtXv/zyy22v58SJE+rWrZsqVKigxo0ba/PmzVq+fLmaNGmSmbIAAAAAALinZCp0V6lSRW+//bb+/vtvzZw5U8ePH1eDBg1033336e2339apU6cytJ4ZM2bo8OHDSkhI0MmTJ/Xf//6XwA0AAAAAyDbuaPZyDw8PtWvXTl999ZXeeOMNHTx4UMOGDVPRokXVvXt3xcTEOKtOAAAAAACynDsK3Vu3btWAAQNUqFAhvf322xo2bJgOHjyon376SX///bfatm3rrDoBAAAAAMhyMvWVYW+//bZmzpypffv2qWXLlvrss8/UsmVLubldy/ClSpXShx9+qIoVKzq1WAAAAAAAspJMhe5p06apd+/e6tWrlwoWLJhmn+LFi2vGjBl3VBwAAAAAAFlZpkL3gQMHbtnHy8tLPXr0yMzqAQAAAADIFjJ1T/fMmTO1YMGCVO0LFizQ7Nmz77goAAAAAACyg0yF7okTJypv3ryp2vPnz6/XX3/9josCAAAAACA7yFToPnLkiEqVKpWqvUSJEoqOjr7jogAAAAAAyA4yFbrz58+vX3/9NVX7rl27FBIScsdFAQAAAACQHWQqdD/xxBN69tlntXr1aiUlJSkpKUk//fSTBg0apCeeeMLZNQIAAAAAkCVlavbyV199VUeOHFHjxo3l4XFtFcnJyerevTv3dAMAAAAA8P8yFbq9vLw0f/58vfLKK9q1a5d8fX1VtWpVlShRwtn1AQAAAACQZWUqdKcoX768ypcv76xaAAAAAADIVjIVupOSkjRr1iytWrVKJ0+eVHJyssPjP/30k1OKAwAAAAAgK8tU6B40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f+62bdv0xx9/KDAwUAEBAQoICFCePHkUHx+vgwcPKk+ePOrZs6eaNWumNm3a6N1331VMTEyGawcAIDMI3QCAHCsiIkI7d+7Uvn37FB8fr0WLFil//vz2x/39/R36G2PSvBQ5vfYUKY9d3+fG/mmt48btZ0RGa7xxUjibzabk5OTbWq8x5rbr8/X1Tfexy5cvq2nTpgoICNCcOXO0ZcsWLV68WNK1y84lqUWLFjpy5IgGDx6sY8eOqXHjxvbL7JOTk1WzZk3t3LnT4Wf//v3q3LmzJGnmzJnauHGj6tWrp/nz56t8+fLatGnTbb8OAAAyitANAMix/P39VbZsWZUoUSJDM5NXrlxZ0dHROnr0qL1tz549On/+vCpVqmRvi46O1rFjx+zLGzdulJubm8qXL6+goCAVLlxY69evd1j3hg0bHNaRFi8vr1ueVc5ojbercuXKadZcvnx5ubu7Z3g91apV06pVq9J8bO/evYqNjdXEiRP10EMPqWLFimmefc+XL5969uypOXPmaMqUKfroo48kSTVq1NCBAweUP39+lS1b1uHn+q8ve+CBBzRy5Eht2LBBVapU0Zdffpnh+gEAuF2EbgAAMujhhx9WtWrV1KVLF23fvl2//PKLunfvrrCwMIdLwX18fNSjRw/t2rVL69at07PPPqsOHTqoYMGCkqTnn39eb7zxhubPn699+/bphRde0M6dOzVo0KCbbr9kyZK6dOmSVq1apdjYWMXFxWW6xts1dOhQrVq1Sq+88or279+v2bNn6/33309zMrebGTNmjObOnasxY8YoKipKv/32myZNmiTp2mX5Xl5eeu+99/Tnn39q6dKleuWVVxyeP3r0aH3zzTf6448/tHv3bn333Xf2DxO6dOmivHnzqm3btlq3bp0OHTqkNWvWaNCgQfrrr7906NAhjRw5Uhs3btSRI0e0YsUK7d+//44+jAAA4FYI3QAAZJDNZtOSJUuUO3duNWzYUA8//LBKly6t+fPnO/QrW7as2rdvr5YtW6pp06aqUqWKpk6dan/82Wef1dChQzV06FBVrVpVy5cv19KlS1WuXLmbbr9evXrq16+fOnbsqHz58tnDamZqvF01atTQV199pXnz5qlKlSoaPXq0xo8f7zCzeEaEh4drwYIFWrp0qapXr65GjRpp8+bNkq6dwZ41a5YWLFigypUra+LEiXrrrbccnu/l5aWRI0eqWrVqatiwodzd3TVv3jxJkp+fn9auXavixYurffv2qlSpknr37q1//vlHQUFB8vPz0969e/Xoo4+qfPnyeuqpp/T000+rb9++d/TeAABwMzaTmRuyAABAmsaOHaslS5bYv2IMAADkbJzpBgAAAADAIoRuAAAAAAAswuXlAAAAAABYhDPdAAAAAABYhNANAAAAAIBFCN0AAAAAAFiE0A0AAAAAgEUI3QAAAAAAWITQDQAAAACARQjdAAAAAABYhNANAAAAAIBFCN0AAAAAAFjk/wCsV70rxykkrAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Import necessary libraries\n", "import pandas as pd\n", @@ -80,6 +116,9 @@ "TRACE_SUCCESS = 0.20\n", "SECONDARY_TRACE_THRESHOLD = 2\n", "\n", + "# add seed for reproducibility\n", + "np.random.seed(0)\n", + "\n", "def simulate_event(m):\n", " \"\"\"\n", " Simulates the infection and tracing process for a series of events.\n", @@ -95,6 +134,7 @@ " - A tuple containing the proportion of infections and the proportion of traced cases\n", " that are attributed to weddings.\n", " \"\"\"\n", + "\n", " # Create DataFrame for people at events with initial infection and traced status\n", " events = ['wedding'] * 200 + ['brunch'] * 800\n", " ppl = pd.DataFrame({\n", @@ -131,7 +171,7 @@ " 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", + "results = [simulate_event(m) for m in range(10)]\n", "props_df = pd.DataFrame(results, columns=[\"Infections\", \"Traces\"])\n", "\n", "# Plotting the results\n", @@ -182,10 +222,10 @@ " * Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily.\n", "\n", "#### Checklist:\n", - "- [ ] Create a branch called `assignment-1`.\n", - "- [ ] Ensure that the repository is public.\n", - "- [ ] Review [the PR description guidelines](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#guidelines-for-pull-request-descriptions) and adhere to them.\n", - "- [ ] Verify that the link is accessible in a private browser window.\n", + "- [x] Create a branch called `assignment-1`.\n", + "- [x] Ensure that the repository is public.\n", + "- [x] Review [the PR description guidelines](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#guidelines-for-pull-request-descriptions) and adhere to them.\n", + "- [x] Verify that the link is accessible in a private browser window.\n", "\n", "If you encounter any difficulties or have questions, please don't hesitate to reach out to our team via the help channel in Slack. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges.\n" ] @@ -193,7 +233,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "agentem", "language": "python", "name": "python3" }, @@ -207,7 +247,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.0" + "version": "3.11.0" } }, "nbformat": 4, From 9960936249463d3730bc69b919e9cf87e606f877 Mon Sep 17 00:00:00 2001 From: Luis Mantilla <52287586+bestquark@users.noreply.github.com> Date: Sun, 18 Jan 2026 23:45:10 +0100 Subject: [PATCH 2/2] part a --- .../a2_survey_design_and_evaluation.md | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/02_activities/assignments/a2_survey_design_and_evaluation.md b/02_activities/assignments/a2_survey_design_and_evaluation.md index a955d827..6b6f4791 100644 --- a/02_activities/assignments/a2_survey_design_and_evaluation.md +++ b/02_activities/assignments/a2_survey_design_and_evaluation.md @@ -40,30 +40,31 @@ 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 this survey is to identify the key factors contributing to high turnover at a large tech company. The survey aims to learn the job satisfaction, management practices, compensation, and workload of employees in order to create retention strategies. ``` Describe your target population, sampling frame, sampling units, and observational units: ``` -write your answer here... +- **Target population:** Current and recently departed employees of the company. +- **Sampling frame:** The company’s HR records. +- **Sampling units:** Individual employees listed in the HR records. +- **Observational units:** Survey responses given by individual employees. ``` 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) +1. How satisfied were you with your role at the company overall? (Very satisfied → Very dissatisfied) +2. How manageable was your workload in your position? (Very manageable → Not manageable at all) +3. How satisfied were you with your compensation and benefits relative to your responsibilities? +4. To what extent did you feel supported by your direct manager? +5. How clear were opportunities for career growth or promotion? +6. Did you feel your work was valued and recognized by the company? +7. What was the primary reason you considered leaving or decided to leave your role? (Multiple choice + other) +8. What one change would most improve employee retention at your level? (Open-ended) ``` ## Part B - Survey Evaluation: @@ -71,7 +72,7 @@ Your 5-10 question survey: Identify and describe survey features: ``` -write your answer here + ``` ## Rubric @@ -93,9 +94,9 @@ write your answer here * Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily. Checklist: -- [ ] Create a branch called `assignment-2`. -- [ ] Ensure that the repository is public. -- [ ] Review [the PR description guidelines](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#guidelines-for-pull-request-descriptions) and adhere to them. -- [ ] Verify that the link is accessible in a private browser window. +- [x] Create a branch called `assignment-2`. +- [x] Ensure that the repository is public. +- [x] Review [the PR description guidelines](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md#guidelines-for-pull-request-descriptions) and adhere to them. +- [x] Verify that the link is accessible in a private browser window. If you encounter any difficulties or have questions, please don't hesitate to reach out to our team via the help channel in Slack. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges.