diff --git a/02_activities/assignments/assignment_1.ipynb b/02_activities/assignments/assignment_1.ipynb index 71d8ecc31..8ecfd8ca2 100644 --- a/02_activities/assignments/assignment_1.ipynb +++ b/02_activities/assignments/assignment_1.ipynb @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -65,7 +65,7 @@ "True" ] }, - "execution_count": 15, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -75,6 +75,7 @@ "def anagram_checker(word_a, word_b):\n", " \"\"\"Check if two words are anagrams of each other.\n", " An anagram is a word formed by rearranging the letters of another.\n", + " For example, \"listen\" is an anagram of \"silent\".\n", " \n", " Parameters:\n", " word_a (str): The first word to check.\n", @@ -97,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -106,7 +107,7 @@ "False" ] }, - "execution_count": 16, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -117,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -126,7 +127,7 @@ "True" ] }, - "execution_count": 3, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -146,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -155,7 +156,7 @@ "True" ] }, - "execution_count": 13, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -165,7 +166,7 @@ "\n", "def anagram_checker(word_a, word_b, is_case_sensitive):\n", " \"\"\" Check if two words are anagrams of each other.\n", - " \n", + " An anagram is a word formed by rearranging the letters of another.\n", " Args:\n", " word_a (str): The first word.\n", " word_b (str): The second word.\n", @@ -201,7 +202,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -210,7 +211,7 @@ "False" ] }, - "execution_count": 14, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } diff --git a/02_activities/assignments/assignment_2.ipynb b/02_activities/assignments/assignment_2.ipynb index fd02cc6cc..eba7e17b0 100644 --- a/02_activities/assignments/assignment_2.ipynb +++ b/02_activities/assignments/assignment_2.ipynb @@ -39,10 +39,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", - "- [ ] Created a branch with the correct naming convention.\n", - "- [ ] Ensured that the repository is public.\n", - "- [ ] Reviewed the PR description guidelines and adhered to them.\n", - "- [ ] Verify that the link is accessible in a private browser window.\n", + "- [X] Created a branch with the correct naming convention.\n", + "- [X] Ensured that the repository is public.\n", + "- [X] Reviewed the PR description guidelines and adhered 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 our Slack at `#dc-help`. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges." ] @@ -72,31 +72,106 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 84, "metadata": { "id": "n0m48JsS-nMC" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0,0,1,3,1,2,4,7,8,3,3,3,10,5,7,4,7,7,12,18,6,13,11,11,7,7,4,6,8,8,4,4,5,7,3,4,2,3,0,0\n", + "0,1,2,1,2,1,3,2,2,6,10,11,5,9,4,4,7,16,8,6,18,4,12,5,12,7,11,5,11,3,3,5,4,4,5,5,1,1,0,1\n", + "0,1,1,3,3,2,6,2,5,9,5,7,4,5,4,15,5,11,9,10,19,14,12,17,7,12,11,7,4,2,10,5,4,2,2,3,2,2,1,1\n", + "0,0,2,0,4,2,2,1,6,7,10,7,9,13,8,8,15,10,10,7,17,4,4,7,6,15,6,4,9,11,3,5,6,3,3,4,2,3,2,1\n", + "0,1,1,3,3,1,3,5,2,4,4,7,6,5,3,10,8,10,6,17,9,14,9,7,13,9,12,6,7,7,9,6,3,2,2,4,2,0,1,1\n", + "0,0,1,2,2,4,2,1,6,4,7,6,6,9,9,15,4,16,18,12,12,5,18,9,5,3,10,3,12,7,8,4,7,3,5,4,4,3,2,1\n", + "0,0,2,2,4,2,2,5,5,8,6,5,11,9,4,13,5,12,10,6,9,17,15,8,9,3,13,7,8,2,8,8,4,2,3,5,4,1,1,1\n", + "0,0,1,2,3,1,2,3,5,3,7,8,8,5,10,9,15,11,18,19,20,8,5,13,15,10,6,10,6,7,4,9,3,5,2,5,3,2,2,1\n", + "0,0,0,3,1,5,6,5,5,8,2,4,11,12,10,11,9,10,17,11,6,16,12,6,8,14,6,13,10,11,4,6,4,7,6,3,2,1,0,0\n", + "0,1,1,2,1,3,5,3,5,8,6,8,12,5,13,6,13,8,16,8,18,15,16,14,12,7,3,8,9,11,2,5,4,5,1,4,1,2,0,0\n", + "0,1,0,0,4,3,3,5,5,4,5,8,7,10,13,3,7,13,15,18,8,15,15,16,11,14,12,4,10,10,4,3,4,5,5,3,3,2,2,1\n", + "0,1,0,0,3,4,2,7,8,5,2,8,11,5,5,8,14,11,6,11,9,16,18,6,12,5,4,3,5,7,8,3,5,4,5,5,4,0,1,1\n", + "0,0,2,1,4,3,6,4,6,7,9,9,3,11,6,12,4,17,13,15,13,12,8,7,4,7,12,9,5,6,5,4,7,3,5,4,2,3,0,1\n", + "0,0,0,0,1,3,1,6,6,5,5,6,3,6,13,3,10,13,9,16,15,9,11,4,6,4,11,11,12,3,5,8,7,4,6,4,1,3,0,0\n", + "0,1,2,1,1,1,4,1,5,2,3,3,10,7,13,5,7,17,6,9,12,13,10,4,12,4,6,7,6,10,8,2,5,1,3,4,2,0,2,0\n", + "0,1,1,0,1,2,4,3,6,4,7,5,5,7,5,10,7,8,18,17,9,8,12,11,11,11,14,6,11,2,10,9,5,6,5,3,4,2,2,0\n", + "0,0,0,0,2,3,6,5,7,4,3,2,10,7,9,11,12,5,12,9,13,19,14,17,5,13,8,11,5,10,9,8,7,5,3,1,4,0,2,1\n", + "0,0,0,1,2,1,4,3,6,7,4,2,12,6,12,4,14,7,8,14,13,19,6,9,12,6,4,13,6,7,2,3,6,5,4,2,3,0,1,0\n", + "0,0,2,1,2,5,4,2,7,8,4,7,11,9,8,11,15,17,11,12,7,12,7,6,7,4,13,5,7,6,6,9,2,1,1,2,2,0,1,0\n", + "0,1,2,0,1,4,3,2,2,7,3,3,12,13,11,13,6,5,9,16,9,19,16,11,8,9,14,12,11,9,6,6,6,1,1,2,4,3,1,1\n", + "0,1,1,3,1,4,4,1,8,2,2,3,12,12,10,15,13,6,5,5,18,19,9,6,11,12,7,6,3,6,3,2,4,3,1,5,4,2,2,0\n", + "0,0,2,3,2,3,2,6,3,8,7,4,6,6,9,5,12,12,8,5,12,10,16,7,14,12,5,4,6,9,8,5,6,6,1,4,3,0,2,0\n", + "0,0,0,3,4,5,1,7,7,8,2,5,12,4,10,14,5,5,17,13,16,15,13,6,12,9,10,3,3,7,4,4,8,2,6,5,1,0,1,0\n", + "0,1,1,1,1,3,3,2,6,3,9,7,8,8,4,13,7,14,11,15,14,13,5,13,7,14,9,10,5,11,5,3,5,1,1,4,4,1,2,0\n", + "0,1,1,1,2,3,5,3,6,3,7,10,3,8,12,4,12,9,15,5,17,16,5,10,10,15,7,5,3,11,5,5,6,1,1,1,1,0,2,1\n", + "0,0,2,1,3,3,2,7,4,4,3,8,12,9,12,9,5,16,8,17,7,11,14,7,13,11,7,12,12,7,8,5,7,2,2,4,1,1,1,0\n", + "0,0,1,2,4,2,2,3,5,7,10,5,5,12,3,13,4,13,7,15,9,12,18,14,16,12,3,11,3,2,7,4,8,2,2,1,3,0,1,1\n", + "0,0,1,1,1,5,1,5,2,2,4,10,4,8,14,6,15,6,12,15,15,13,7,17,4,5,11,4,8,7,9,4,5,3,2,5,4,3,2,1\n", + "0,0,2,2,3,4,6,3,7,6,4,5,8,4,7,7,6,11,12,19,20,18,9,5,4,7,14,8,4,3,7,7,8,3,5,4,1,3,1,0\n", + "0,0,0,1,4,4,6,3,8,6,4,10,12,3,3,6,8,7,17,16,14,15,17,4,14,13,4,4,12,11,6,9,5,5,2,5,2,1,0,1\n", + "0,1,1,0,3,2,4,6,8,6,2,3,11,3,14,14,12,8,8,16,13,7,6,9,15,7,6,4,10,8,10,4,2,6,5,5,2,3,2,1\n", + "0,0,2,3,3,4,5,3,6,7,10,5,10,13,14,3,8,10,9,9,19,15,15,6,8,8,11,5,5,7,3,6,6,4,5,2,2,3,0,0\n", + "0,1,2,2,2,3,6,6,6,7,6,3,11,12,13,15,15,10,14,11,11,8,6,12,10,5,12,7,7,11,5,8,5,2,5,5,2,0,2,1\n", + "0,0,2,1,3,5,6,7,5,8,9,3,12,10,12,4,12,9,13,10,10,6,10,11,4,15,13,7,3,4,2,9,7,2,4,2,1,2,1,1\n", + "0,0,1,2,4,1,5,5,2,3,4,8,8,12,5,15,9,17,7,19,14,18,12,17,14,4,13,13,8,11,5,6,6,2,3,5,2,1,1,1\n", + "0,0,0,3,1,3,6,4,3,4,8,3,4,8,3,11,5,7,10,5,15,9,16,17,16,3,8,9,8,3,3,9,5,1,6,5,4,2,2,0\n", + "0,1,2,2,2,5,5,1,4,6,3,6,5,9,6,7,4,7,16,7,16,13,9,16,12,6,7,9,10,3,6,4,5,4,6,3,4,3,2,1\n", + "0,1,1,2,3,1,5,1,2,2,5,7,6,6,5,10,6,7,17,13,15,16,17,14,4,4,10,10,10,11,9,9,5,4,4,2,1,0,1,0\n", + "0,1,0,3,2,4,1,1,5,9,10,7,12,10,9,15,12,13,13,6,19,9,10,6,13,5,13,6,7,2,5,5,2,1,1,1,1,3,0,1\n", + "0,1,1,3,1,1,5,5,3,7,2,2,3,12,4,6,8,15,16,16,15,4,14,5,13,10,7,10,6,3,2,3,6,3,3,5,4,3,2,1\n", + "0,0,0,2,2,1,3,4,5,5,6,5,5,12,13,5,7,5,11,15,18,7,9,10,14,12,11,9,10,3,2,9,6,2,2,5,3,0,0,1\n", + "0,0,1,3,3,1,2,1,8,9,2,8,10,3,8,6,10,13,11,17,19,6,4,11,6,12,7,5,5,4,4,8,2,6,6,4,2,2,0,0\n", + "0,1,1,3,4,5,2,1,3,7,9,6,10,5,8,15,11,12,15,6,12,16,6,4,14,3,12,9,6,11,5,8,5,5,6,1,2,1,2,0\n", + "0,0,1,3,1,4,3,6,7,8,5,7,11,3,6,11,6,10,6,19,18,14,6,10,7,9,8,5,8,3,10,2,5,1,5,4,2,1,0,1\n", + "0,1,1,3,3,4,4,6,3,4,9,9,7,6,8,15,12,15,6,11,6,18,5,14,15,12,9,8,3,6,10,6,8,7,2,5,4,3,1,1\n", + "0,1,2,2,4,3,1,4,8,9,5,10,10,3,4,6,7,11,16,6,14,9,11,10,10,7,10,8,8,4,5,8,4,4,5,2,4,1,1,0\n", + "0,0,2,3,4,5,4,6,2,9,7,4,9,10,8,11,16,12,15,17,19,10,18,13,15,11,8,4,7,11,6,7,6,5,1,3,1,0,0,0\n", + "0,1,1,3,1,4,6,2,8,2,10,3,11,9,13,15,5,15,6,10,10,5,14,15,12,7,4,5,11,4,6,9,5,6,1,1,2,1,2,1\n", + "0,0,1,3,2,5,1,2,7,6,6,3,12,9,4,14,4,6,12,9,12,7,11,7,16,8,13,6,7,6,10,7,6,3,1,5,4,3,0,0\n", + "0,0,1,2,3,4,5,7,5,4,10,5,12,12,5,4,7,9,18,16,16,10,15,15,10,4,3,7,5,9,4,6,2,4,1,4,2,2,2,1\n", + "0,1,2,1,1,3,5,3,6,3,10,10,11,10,13,10,13,6,6,14,5,4,5,5,9,4,12,7,7,4,7,9,3,3,6,3,4,1,2,0\n", + "0,1,2,2,3,5,2,4,5,6,8,3,5,4,3,15,15,12,16,7,20,15,12,8,9,6,12,5,8,3,8,5,4,1,3,2,1,3,1,0\n", + "0,0,0,2,4,4,5,3,3,3,10,4,4,4,14,11,15,13,10,14,11,17,9,11,11,7,10,12,10,10,10,8,7,5,2,2,4,1,2,1\n", + "0,0,2,1,1,4,4,7,2,9,4,10,12,7,6,6,11,12,9,15,15,6,6,13,5,12,9,6,4,7,7,6,5,4,1,4,2,2,2,1\n", + "0,1,2,1,1,4,5,4,4,5,9,7,10,3,13,13,8,9,17,16,16,15,12,13,5,12,10,9,11,9,4,5,5,2,2,5,1,0,0,1\n", + "0,0,1,3,2,3,6,4,5,7,2,4,11,11,3,8,8,16,5,13,16,5,8,8,6,9,10,10,9,3,3,5,3,5,4,5,3,3,0,1\n", + "0,1,1,2,2,5,1,7,4,2,5,5,4,6,6,4,16,11,14,16,14,14,8,17,4,14,13,7,6,3,7,7,5,6,3,4,2,2,1,1\n", + "0,1,1,1,4,1,6,4,6,3,6,5,6,4,14,13,13,9,12,19,9,10,15,10,9,10,10,7,5,6,8,6,6,4,3,5,2,1,1,1\n", + "0,0,0,1,4,5,6,3,8,7,9,10,8,6,5,12,15,5,10,5,8,13,18,17,14,9,13,4,10,11,10,8,8,6,5,5,2,0,2,0\n", + "0,0,1,0,3,2,5,4,8,2,9,3,3,10,12,9,14,11,13,8,6,18,11,9,13,11,8,5,5,2,8,5,3,5,4,1,3,1,1,0\n" + ] + } + ], "source": [ "all_paths = [\n", - " \"python/05_src/data/assignment_2_data/inflammation_01.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_02.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_03.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_04.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_05.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_06.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_07.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_08.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_09.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_10.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_11.csv\",\n", - " \"python/05_src/data/assignment_2_data/inflammation_12.csv\"\n", + " \"../../05_src/data/assignment_2_data/inflammation_01.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_02.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_03.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_04.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_05.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_06.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_07.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_08.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_09.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_10.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_11.csv\",\n", + " \"../../05_src/data/assignment_2_data/inflammation_12.csv\"\n", "]\n", "\n", "with open(all_paths[0], 'r') as f:\n", " # YOUR CODE HERE: Use the readline() or readlines() method to read the .csv file into a variable\n", " \n", - " # YOUR CODE HERE: Iterate through the variable using a for loop and print each row for inspection" + " # Read all lines from the file\n", + " session_data = f.readlines()\n", + "\n", + " # YOUR CODE HERE: Iterate through the variable using a for loop and print each row for inspection\n", + " \n", + " ## Using a for loop to iterate through each row in the session_data\n", + " ## and print each row to the console\n", + " for row in session_data:\n", + " print(row.strip()) # Using strip() to remove any leading/trailing whitespace or newline characters\n" ] }, { @@ -130,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 85, "metadata": { "id": "82-bk4CBB1w4" }, @@ -139,19 +214,30 @@ "import numpy as np\n", "\n", "def patient_summary(file_path, operation):\n", + " \"\"\"Calculate summary statistics for patient flare-ups from a CSV file.\n", + " Args:\n", + " File_path (str): Path to the CSV file containing patient data.\n", + " operation (str): The operation to perform on the data. Can be 'mean', 'max', or 'min'.\n", + " Returns: \n", + " np.ndarray: An array containing the summary statistics for each patient.\n", + " \"\"\"\n", + "\n", " data = np.loadtxt(fname=file_path, delimiter=',') # Load the data from the file\n", " ax = 1 # This specifies that the operation should be done for each row (patient)\n", "\n", " # Implement the specific operation based on the 'operation' argument\n", " if operation == 'mean':\n", " # YOUR CODE HERE: Calculate the mean (average) number of flare-ups for each patient\n", + " summary_values = np.mean(data, axis=ax)\n", "\n", " elif operation == 'max':\n", " # YOUR CODE HERE: Calculate the maximum number of flare-ups experienced by each patient\n", - "\n", + " summary_values = np.max(data, axis=ax)\n", + " \n", " elif operation == 'min':\n", " # YOUR CODE HERE: Calculate the minimum number of flare-ups experienced by each patient\n", - "\n", + " summary_values = np.min(data, axis=ax)\n", + " \n", " else:\n", " # If the operation is not one of the expected values, raise an error\n", " raise ValueError(\"Invalid operation. Please choose 'mean', 'max', or 'min'.\")\n", @@ -161,16 +247,231 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 86, "metadata": { "id": "3TYo0-1SDLrd" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Number of patients with minimum flare-ups: 60\n", + "Patient 1: 0.0\n", + "Patient 2: 0.0\n", + "Patient 3: 0.0\n", + "Patient 4: 0.0\n", + "Patient 5: 0.0\n", + "Patient 6: 0.0\n", + "Patient 7: 0.0\n", + "Patient 8: 0.0\n", + "Patient 9: 0.0\n", + "Patient 10: 0.0\n", + "Patient 11: 0.0\n", + "Patient 12: 0.0\n", + "Patient 13: 0.0\n", + "Patient 14: 0.0\n", + "Patient 15: 0.0\n", + "Patient 16: 0.0\n", + "Patient 17: 0.0\n", + "Patient 18: 0.0\n", + "Patient 19: 0.0\n", + "Patient 20: 0.0\n", + "Patient 21: 0.0\n", + "Patient 22: 0.0\n", + "Patient 23: 0.0\n", + "Patient 24: 0.0\n", + "Patient 25: 0.0\n", + "Patient 26: 0.0\n", + "Patient 27: 0.0\n", + "Patient 28: 0.0\n", + "Patient 29: 0.0\n", + "Patient 30: 0.0\n", + "Patient 31: 0.0\n", + "Patient 32: 0.0\n", + "Patient 33: 0.0\n", + "Patient 34: 0.0\n", + "Patient 35: 0.0\n", + "Patient 36: 0.0\n", + "Patient 37: 0.0\n", + "Patient 38: 0.0\n", + "Patient 39: 0.0\n", + "Patient 40: 0.0\n", + "Patient 41: 0.0\n", + "Patient 42: 0.0\n", + "Patient 43: 0.0\n", + "Patient 44: 0.0\n", + "Patient 45: 0.0\n", + "Patient 46: 0.0\n", + "Patient 47: 0.0\n", + "Patient 48: 0.0\n", + "Patient 49: 0.0\n", + "Patient 50: 0.0\n", + "Patient 51: 0.0\n", + "Patient 52: 0.0\n", + "Patient 53: 0.0\n", + "Patient 54: 0.0\n", + "Patient 55: 0.0\n", + "Patient 56: 0.0\n", + "Patient 57: 0.0\n", + "Patient 58: 0.0\n", + "Patient 59: 0.0\n", + "Patient 60: 0.0\n", + "\n", + "Number of patients max flare-ups: 60\n", + "Patient 1: 18.0\n", + "Patient 2: 18.0\n", + "Patient 3: 19.0\n", + "Patient 4: 17.0\n", + "Patient 5: 17.0\n", + "Patient 6: 18.0\n", + "Patient 7: 17.0\n", + "Patient 8: 20.0\n", + "Patient 9: 17.0\n", + "Patient 10: 18.0\n", + "Patient 11: 18.0\n", + "Patient 12: 18.0\n", + "Patient 13: 17.0\n", + "Patient 14: 16.0\n", + "Patient 15: 17.0\n", + "Patient 16: 18.0\n", + "Patient 17: 19.0\n", + "Patient 18: 19.0\n", + "Patient 19: 17.0\n", + "Patient 20: 19.0\n", + "Patient 21: 19.0\n", + "Patient 22: 16.0\n", + "Patient 23: 17.0\n", + "Patient 24: 15.0\n", + "Patient 25: 17.0\n", + "Patient 26: 17.0\n", + "Patient 27: 18.0\n", + "Patient 28: 17.0\n", + "Patient 29: 20.0\n", + "Patient 30: 17.0\n", + "Patient 31: 16.0\n", + "Patient 32: 19.0\n", + "Patient 33: 15.0\n", + "Patient 34: 15.0\n", + "Patient 35: 19.0\n", + "Patient 36: 17.0\n", + "Patient 37: 16.0\n", + "Patient 38: 17.0\n", + "Patient 39: 19.0\n", + "Patient 40: 16.0\n", + "Patient 41: 18.0\n", + "Patient 42: 19.0\n", + "Patient 43: 16.0\n", + "Patient 44: 19.0\n", + "Patient 45: 18.0\n", + "Patient 46: 16.0\n", + "Patient 47: 19.0\n", + "Patient 48: 15.0\n", + "Patient 49: 16.0\n", + "Patient 50: 18.0\n", + "Patient 51: 14.0\n", + "Patient 52: 20.0\n", + "Patient 53: 17.0\n", + "Patient 54: 15.0\n", + "Patient 55: 17.0\n", + "Patient 56: 16.0\n", + "Patient 57: 17.0\n", + "Patient 58: 19.0\n", + "Patient 59: 18.0\n", + "Patient 60: 18.0\n", + "\n", + "Number of patients mean flare-ups: 60\n", + "Patient 1: 5.45\n", + "Patient 2: 5.425\n", + "Patient 3: 6.1\n", + "Patient 4: 5.9\n", + "Patient 5: 5.55\n", + "Patient 6: 6.225\n", + "Patient 7: 5.975\n", + "Patient 8: 6.65\n", + "Patient 9: 6.625\n", + "Patient 10: 6.525\n", + "Patient 11: 6.775\n", + "Patient 12: 5.8\n", + "Patient 13: 6.225\n", + "Patient 14: 5.75\n", + "Patient 15: 5.225\n", + "Patient 16: 6.3\n", + "Patient 17: 6.55\n", + "Patient 18: 5.7\n", + "Patient 19: 5.85\n", + "Patient 20: 6.55\n", + "Patient 21: 5.775\n", + "Patient 22: 5.825\n", + "Patient 23: 6.175\n", + "Patient 24: 6.1\n", + "Patient 25: 5.8\n", + "Patient 26: 6.425\n", + "Patient 27: 6.05\n", + "Patient 28: 6.025\n", + "Patient 29: 6.175\n", + "Patient 30: 6.55\n", + "Patient 31: 6.175\n", + "Patient 32: 6.35\n", + "Patient 33: 6.725\n", + "Patient 34: 6.125\n", + "Patient 35: 7.075\n", + "Patient 36: 5.725\n", + "Patient 37: 5.925\n", + "Patient 38: 6.15\n", + "Patient 39: 6.075\n", + "Patient 40: 5.75\n", + "Patient 41: 5.975\n", + "Patient 42: 5.725\n", + "Patient 43: 6.3\n", + "Patient 44: 5.9\n", + "Patient 45: 6.75\n", + "Patient 46: 5.925\n", + "Patient 47: 7.225\n", + "Patient 48: 6.15\n", + "Patient 49: 5.95\n", + "Patient 50: 6.275\n", + "Patient 51: 5.7\n", + "Patient 52: 6.1\n", + "Patient 53: 6.825\n", + "Patient 54: 5.975\n", + "Patient 55: 6.725\n", + "Patient 56: 5.7\n", + "Patient 57: 6.25\n", + "Patient 58: 6.4\n", + "Patient 59: 7.05\n", + "Patient 60: 5.9\n" + ] + } + ], "source": [ "# Test it out on the data file we read in and make sure the size is what we expect i.e., 60\n", "# Your output for the first file should be 60\n", - "data_min = patient_summary(all_paths[0], 'min')\n", - "print(len(data_min))" + "session = 0\n", + "data_min = patient_summary(all_paths[session], 'min') # This should return an array of minimum flare-ups for each patient\n", + "data_max = patient_summary(all_paths[session], 'max') # This should return an array of maximum flare-ups for each patient\n", + "data_mean = patient_summary(all_paths[session], 'mean') # This should return an array of mean flare-ups for each patient\n", + "\n", + "# print(f\"{len(data_min)} Patients minimum flare-ups:\\n{data_min}\")\n", + "# print(f\"{len(data_max)} Patients maximum flare-ups:\\n{data_max}\")\n", + "# print(f\"{len(data_mean)} Patients mean flare-ups:\\n{data_mean}\")\n", + "\n", + "# Print the minimum results in a formatted way\n", + "print(f\"\\nNumber of patients with minimum flare-ups: {len(data_min)}\")\n", + "for patient, value in enumerate(data_min, start=1):\n", + " print(f\"Patient {patient:2d}: {value}\")\n", + "\n", + "# Print the maximum results in a formatted way\n", + "print(f\"\\nNumber of patients max flare-ups: {len(data_max)}\")\n", + "for patient, value in enumerate(data_max, start=1):\n", + " print(f\"Patient {patient:2d}: {value}\")\n", + "\n", + "# Print the mean results in a formatted way\n", + "print(f\"\\nNumber of patients mean flare-ups: {len(data_mean)}\")\n", + "for patient, value in enumerate(data_mean, start=1):\n", + " print(f\"Patient {patient:2d}: {value}\")\n", + "\n" ] }, { @@ -228,7 +529,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 87, "metadata": { "id": "_svDiRkdIwiT" }, @@ -237,10 +538,14 @@ "# Run this cell so you can use this helper function\n", "\n", "def check_zeros(x):\n", - " '''\n", - " Given an array, x, check whether any values in x equal 0.\n", - " Return True if any values found, else returns False.\n", - " '''\n", + " \"\"\" Check if any values in the array x are equal to zero.\n", + " Args:\n", + " x (numpy.ndarray): The input array to check for zeros.\n", + "\n", + " Returns:\n", + " True if any values are zero, otherwise returns False.\n", + " \"\"\"\n", + "\n", " # np.where() checks every value in x against the condition (x == 0) and returns a tuple of indices where it was True (i.e. x was 0)\n", " flag = np.where(x == 0)[0]\n", "\n", @@ -251,7 +556,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 88, "metadata": { "id": "LEYPM5v4JT0i" }, @@ -260,20 +565,57 @@ "# Define your function `detect_problems` here\n", "\n", "def detect_problems(file_path):\n", + " \"\"\" Detects if there are any zeros in the mean flare-ups of patients from a given file.\n", + " \n", + " Args:\n", + " file_path (str): The path to the CSV file containing patient data.\n", + " \n", + " Returns:\n", + " bool: True if there are zeros in the mean flare-ups, False otherwise. \n", + " \"\"\"\n", " #YOUR CODE HERE: Use patient_summary() to get the means and check_zeros() to check for zeros in the means\n", + " means = patient_summary(file_path, 'mean')\n", + " has_zeros = check_zeros(means)\n", "\n", - " return" + " #YOUR CODE HERE: If there are zeros, return True, else return False\n", + " return has_zeros\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 89, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Session:[ 1] | File:[inflammation_01.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[ 2] | File:[inflammation_02.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[ 3] | File:[inflammation_03.csv ] | Has Zero:[True ] | Status:[ANOMALY DETECTED | POTENTIAL ISSUE]\n", + "Session:[ 4] | File:[inflammation_04.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[ 5] | File:[inflammation_05.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[ 6] | File:[inflammation_06.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[ 7] | File:[inflammation_07.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[ 8] | File:[inflammation_08.csv ] | Has Zero:[True ] | Status:[ANOMALY DETECTED | POTENTIAL ISSUE]\n", + "Session:[ 9] | File:[inflammation_09.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[10] | File:[inflammation_10.csv ] | Has Zero:[False] | Status:[OK ]\n", + "Session:[11] | File:[inflammation_11.csv ] | Has Zero:[True ] | Status:[ANOMALY DETECTED | POTENTIAL ISSUE]\n", + "Session:[12] | File:[inflammation_12.csv ] | Has Zero:[False] | Status:[OK ]\n" + ] + } + ], "source": [ "# Test out your code here\n", "# Your output for the first file should be False\n", - "print(detect_problems(all_paths[0]))" + "#print(detect_problems(all_paths[0]))\n", + "\n", + "\n", + "for session, path in enumerate(all_paths, start=1):\n", + " anomaly = detect_problems(path) # Boolean: True if anomaly detected\n", + " status = \"ANOMALY DETECTED | POTENTIAL ISSUE\" if anomaly else \"OK\"\n", + " filename = path.split(\"/\")[-1]\n", + " print(f\"Session:[{session:>2}] | File:[{filename:<20}] | Has Zero:[{str(anomaly):<5}] | Status:[{status:<34}]\")\n" ] }, { @@ -314,7 +656,8 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3", + "display_name": "dsi_participant", + "language": "python", "name": "python3" }, "language_info": { @@ -327,7 +670,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.12.3" } }, "nbformat": 4,