From b104f8eaebff4dc38bf2cdf8538d54cdb884f2cd Mon Sep 17 00:00:00 2001 From: Louis Oliphant <ltoliphant@wisc.edu> Date: Mon, 29 Apr 2024 08:24:04 -0500 Subject: [PATCH] Louis Lec 37 Advanced Pandas --- .../Lec37_AdvPandas_Solution_Oliphant.ipynb | 4036 +++++++++++++++++ .../Lec37_AdvPandas_Template_Oliphant.ipynb | 590 +++ .../37_AdvPandas/piazza.db | Bin 0 -> 81920 bytes 3 files changed, 4626 insertions(+) create mode 100644 s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Solution_Oliphant.ipynb create mode 100644 s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Template_Oliphant.ipynb create mode 100644 s24/Louis_Lecture_Notes/37_AdvPandas/piazza.db diff --git a/s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Solution_Oliphant.ipynb b/s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Solution_Oliphant.ipynb new file mode 100644 index 0000000..2e2b7cb --- /dev/null +++ b/s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Solution_Oliphant.ipynb @@ -0,0 +1,4036 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Advanced Pandas" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "CeWtFirwteFY" + }, + "outputs": [], + "source": [ + "# known import statements\n", + "import pandas as pd\n", + "import sqlite3\n", + "import os\n", + "\n", + "# new import statement\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CREATE TABLE \"piazza\" (\n", + "\"student_id\" TEXT,\n", + " \"name\" TEXT,\n", + " \"email\" TEXT,\n", + " \"role\" TEXT,\n", + " \"days_online\" INTEGER,\n", + " \"posts\" INTEGER,\n", + " \"answers\" INTEGER,\n", + " \"edits\" INTEGER,\n", + " \"followups\" INTEGER,\n", + " \"replies_to_followups\" INTEGER\n", + ")\n" + ] + } + ], + "source": [ + "# Get the Piazza data from 'piazza.db'\n", + "\n", + "db_name = \"piazza.db\"\n", + "assert os.path.exists(db_name)\n", + "conn = sqlite3.connect(db_name)\n", + "\n", + "def qry(sql):\n", + " return pd.read_sql(sql, conn)\n", + "\n", + "df = qry(\"\"\"\n", + " SELECT *\n", + " FROM sqlite_master\n", + " WHERE type='table'\n", + "\"\"\")\n", + "print(df.iloc[0]['sql'])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>student_id</th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>bffd301b-3ab9-42d7-bfb1-e5d56117543a</td>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>0fda0d07-ff49-4f6b-86de-c0e24ee211f1</td>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>4af54672-102f-4788-bbf0-e48a7e6b1e59</td>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>295ee845-0eb7-44aa-acd6-8809dc6700fa</td>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>4f800f63-e006-436b-8aed-9ce43b48bf76</td>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " student_id name email \\\n", + "0 bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "1 0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "2 4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "3 295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4 4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "\n", + " role days_online posts answers edits followups \\\n", + "0 student 0 0 0 0 0 \n", + "1 student 0 0 0 0 0 \n", + "2 student 0 0 0 0 0 \n", + "3 student 0 0 0 0 0 \n", + "4 student 0 0 0 0 0 \n", + "\n", + " replies_to_followups \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "piazza_df = pd.read_sql(\"\"\"\n", + " SELECT *\n", + " FROM piazza\n", + "\"\"\", conn)\n", + "piazza_df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>bffd301b-3ab9-42d7-bfb1-e5d56117543a</th>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0fda0d07-ff49-4f6b-86de-c0e24ee211f1</th>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4af54672-102f-4788-bbf0-e48a7e6b1e59</th>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>295ee845-0eb7-44aa-acd6-8809dc6700fa</th>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4f800f63-e006-436b-8aed-9ce43b48bf76</th>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f8b5c7f3-72a8-4831-ad08-1b21e277c5c6</th>\n", + " <td>clean coffee</td>\n", + " <td>clean_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50a18796-c7ff-4a20-9f8f-30d9db075db5</th>\n", + " <td>stale music</td>\n", + " <td>stale_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>94</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>877efa7c-a88d-45f9-85b0-73b2378f493c</th>\n", + " <td>wide music</td>\n", + " <td>wide_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>47</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3fd9b2c0-7974-4f14-896e-9b59dfda2bca</th>\n", + " <td>thick country</td>\n", + " <td>thick_country@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>85</td>\n", + " <td>8</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36e2dbd3-95c9-4ee7-8e02-db96656906df</th>\n", + " <td>fast friend</td>\n", + " <td>fast_friend@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>39</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>800 rows × 9 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee clean_coffee@wisc.edu \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music stale_music@wisc.edu \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music wide_music@wisc.edu \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country thick_country@wisc.edu \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend fast_friend@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a student 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 student 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 student 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa student 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 student 0 0 0 \n", + "... ... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 student 9 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 student 94 1 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c student 47 2 1 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca student 85 8 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df student 39 3 0 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 0 0 0 \n", + "... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 0 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 0 0 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c 0 1 2 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca 0 0 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df 0 0 0 \n", + "\n", + "[800 rows x 9 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Warmup 1: Set the student id column as the index\n", + "piazza_df = piazza_df.set_index(\"student_id\")\n", + "piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>af42117d-6f04-450a-8766-61d947d26862</th>\n", + " <td>narrow table</td>\n", + " <td>narrow_table@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>231</td>\n", + " <td>37</td>\n", + " <td>6</td>\n", + " <td>1</td>\n", + " <td>7</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b824ed12-13a0-4bfa-9129-7b329c098868</th>\n", + " <td>thick bus</td>\n", + " <td>thick_bus@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>172</td>\n", + " <td>29</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>32091fdf-d857-4b2c-bbfd-c0a213d6fe12</th>\n", + " <td>silent city</td>\n", + " <td>silent_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>98</td>\n", + " <td>27</td>\n", + " <td>4</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>7</td>\n", + " </tr>\n", + " <tr>\n", + " <th>fa4077ca-8344-415d-8153-2c31d0dcc081</th>\n", + " <td>old student</td>\n", + " <td>old_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>354</td>\n", + " <td>24</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>6</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>a48a4d6a-8c23-4b6a-93c7-571b4bd62bd8</th>\n", + " <td>sad airplane</td>\n", + " <td>sad_airplane@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>178</td>\n", + " <td>19</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>d0641d71-4faa-4e71-b9b4-ec70eed5796d</th>\n", + " <td>sweet rain</td>\n", + " <td>sweet_rain@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>84</td>\n", + " <td>18</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>4</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f67b48e1-aef1-4b56-8a56-ac921e42db4b</th>\n", + " <td>slow phone</td>\n", + " <td>slow_phone@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>268</td>\n", + " <td>16</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>7</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>efe75c65-2b67-42a0-bf5a-8bd214f1d84d</th>\n", + " <td>fast laughter</td>\n", + " <td>fast_laughter@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>365</td>\n", + " <td>15</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>5</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>eccc49cc-00f7-4414-a7db-7ce332c7306a</th>\n", + " <td>young bus</td>\n", + " <td>young_bus@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>75</td>\n", + " <td>15</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>6</td>\n", + " </tr>\n", + " <tr>\n", + " <th>04d44c73-218d-49b6-905c-0454b94831ef</th>\n", + " <td>cold bus</td>\n", + " <td>cold_bus@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>40</td>\n", + " <td>15</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>6</td>\n", + " <td>4</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "af42117d-6f04-450a-8766-61d947d26862 narrow table narrow_table@wisc.edu \n", + "b824ed12-13a0-4bfa-9129-7b329c098868 thick bus thick_bus@wisc.edu \n", + "32091fdf-d857-4b2c-bbfd-c0a213d6fe12 silent city silent_city@wisc.edu \n", + "fa4077ca-8344-415d-8153-2c31d0dcc081 old student old_student@wisc.edu \n", + "a48a4d6a-8c23-4b6a-93c7-571b4bd62bd8 sad airplane sad_airplane@wisc.edu \n", + "d0641d71-4faa-4e71-b9b4-ec70eed5796d sweet rain sweet_rain@wisc.edu \n", + "f67b48e1-aef1-4b56-8a56-ac921e42db4b slow phone slow_phone@wisc.edu \n", + "efe75c65-2b67-42a0-bf5a-8bd214f1d84d fast laughter fast_laughter@wisc.edu \n", + "eccc49cc-00f7-4414-a7db-7ce332c7306a young bus young_bus@wisc.edu \n", + "04d44c73-218d-49b6-905c-0454b94831ef cold bus cold_bus@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "af42117d-6f04-450a-8766-61d947d26862 student 231 37 6 \n", + "b824ed12-13a0-4bfa-9129-7b329c098868 student 172 29 3 \n", + "32091fdf-d857-4b2c-bbfd-c0a213d6fe12 student 98 27 4 \n", + "fa4077ca-8344-415d-8153-2c31d0dcc081 student 354 24 2 \n", + "a48a4d6a-8c23-4b6a-93c7-571b4bd62bd8 student 178 19 1 \n", + "d0641d71-4faa-4e71-b9b4-ec70eed5796d student 84 18 0 \n", + "f67b48e1-aef1-4b56-8a56-ac921e42db4b student 268 16 3 \n", + "efe75c65-2b67-42a0-bf5a-8bd214f1d84d student 365 15 1 \n", + "eccc49cc-00f7-4414-a7db-7ce332c7306a student 75 15 0 \n", + "04d44c73-218d-49b6-905c-0454b94831ef student 40 15 0 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "af42117d-6f04-450a-8766-61d947d26862 1 7 4 \n", + "b824ed12-13a0-4bfa-9129-7b329c098868 0 0 1 \n", + "32091fdf-d857-4b2c-bbfd-c0a213d6fe12 0 2 7 \n", + "fa4077ca-8344-415d-8153-2c31d0dcc081 0 6 2 \n", + "a48a4d6a-8c23-4b6a-93c7-571b4bd62bd8 0 2 0 \n", + "d0641d71-4faa-4e71-b9b4-ec70eed5796d 0 4 1 \n", + "f67b48e1-aef1-4b56-8a56-ac921e42db4b 0 7 4 \n", + "efe75c65-2b67-42a0-bf5a-8bd214f1d84d 0 5 3 \n", + "eccc49cc-00f7-4414-a7db-7ce332c7306a 0 3 6 \n", + "04d44c73-218d-49b6-905c-0454b94831ef 0 6 4 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Warmup 2a: Which 10 students post the most?\n", + "top_students = piazza_df[piazza_df[\"role\"] == \"student\"].sort_values(\"posts\", ascending=False).head(10)\n", + "top_students" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 2b: Can you plot their number of posts as a bar graph? Be sure to label your axes!\n", + "ax = top_students[\"posts\"].plot.bar()\n", + "ax.set_xlabel(\"Student ID\")\n", + "ax.set_ylabel(\"# of Posts\")\n", + "ax.set_title(\"Top Posting Students\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 2c: How about with their name rather than their student id?\n", + "ax = top_students.plot.bar(x=\"name\", y=\"posts\")\n", + "ax.set_xlabel(\"Student\")\n", + "ax.set_ylabel(\"# of Posts\")\n", + "ax.set_title(\"Top Posting Students\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>291bc772-3bb4-4461-bc14-02580937811b</th>\n", + " <td>stormy door</td>\n", + " <td>stormy_door@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>101</td>\n", + " <td>35</td>\n", + " <td>296</td>\n", + " <td>130</td>\n", + " <td>118</td>\n", + " <td>145</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f1b776b5-be88-423a-af72-4c989f95a661</th>\n", + " <td></td>\n", + " <td>loud_computer@wisc.edu</td>\n", + " <td>instructor</td>\n", + " <td>292</td>\n", + " <td>41</td>\n", + " <td>278</td>\n", + " <td>58</td>\n", + " <td>86</td>\n", + " <td>103</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10e7f31b-b213-4efd-81da-15faabf82ae5</th>\n", + " <td>tight rain</td>\n", + " <td>tight_rain@wisc.edu</td>\n", + " <td>instructor</td>\n", + " <td>252</td>\n", + " <td>11</td>\n", + " <td>169</td>\n", + " <td>91</td>\n", + " <td>13</td>\n", + " <td>25</td>\n", + " </tr>\n", + " <tr>\n", + " <th>80764a25-00dd-49ac-95eb-3903b417c81e</th>\n", + " <td>quiet rain</td>\n", + " <td>quiet_rain@wisc.edu</td>\n", + " <td>instructor</td>\n", + " <td>336</td>\n", + " <td>5</td>\n", + " <td>107</td>\n", + " <td>10</td>\n", + " <td>24</td>\n", + " <td>28</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7880e6fa-a00d-48f4-8374-3176512c3236</th>\n", + " <td>silent time</td>\n", + " <td></td>\n", + " <td>instructor</td>\n", + " <td>283</td>\n", + " <td>1</td>\n", + " <td>84</td>\n", + " <td>55</td>\n", + " <td>6</td>\n", + " <td>24</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11a1224c-8310-4b16-a50f-5b6a485793ee</th>\n", + " <td></td>\n", + " <td>stormy_laughter@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>185</td>\n", + " <td>0</td>\n", + " <td>75</td>\n", + " <td>11</td>\n", + " <td>8</td>\n", + " <td>7</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b5963cff-ffe0-460d-b356-d3ef5aa72a5b</th>\n", + " <td></td>\n", + " <td></td>\n", + " <td>instructor</td>\n", + " <td>58</td>\n", + " <td>0</td>\n", + " <td>70</td>\n", + " <td>7</td>\n", + " <td>0</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9f8ac76d-ce1d-4da0-be4b-09b1442922a0</th>\n", + " <td></td>\n", + " <td>soft_apple@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>332</td>\n", + " <td>0</td>\n", + " <td>59</td>\n", + " <td>24</td>\n", + " <td>2</td>\n", + " <td>11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>87cd9484-cae8-458f-a101-ddd6632d84e7</th>\n", + " <td>loose music</td>\n", + " <td>loose_music@wisc.edu</td>\n", + " <td>instructor</td>\n", + " <td>201</td>\n", + " <td>0</td>\n", + " <td>58</td>\n", + " <td>4</td>\n", + " <td>2</td>\n", + " <td>9</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47dd3e0a-f792-4a93-a31e-5c4d3536ac5f</th>\n", + " <td>hot train</td>\n", + " <td>hot_train@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>104</td>\n", + " <td>0</td>\n", + " <td>53</td>\n", + " <td>4</td>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>ec12974a-6790-4b5f-85ff-dd5dc1dc63b6</th>\n", + " <td>short apple</td>\n", + " <td>short_apple@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>94</td>\n", + " <td>0</td>\n", + " <td>51</td>\n", + " <td>6</td>\n", + " <td>0</td>\n", + " <td>13</td>\n", + " </tr>\n", + " <tr>\n", + " <th>d423ed1e-d95a-462d-8c18-fb66309942f1</th>\n", + " <td>sour table</td>\n", + " <td>sour_table@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>214</td>\n", + " <td>0</td>\n", + " <td>44</td>\n", + " <td>9</td>\n", + " <td>4</td>\n", + " <td>16</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f8ab1dcb-fa24-4f12-93bb-57a19cf17d5c</th>\n", + " <td>large bridge</td>\n", + " <td>large_bridge@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>48</td>\n", + " <td>0</td>\n", + " <td>37</td>\n", + " <td>6</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3c06148c-a67b-4127-8f77-54955d02da62</th>\n", + " <td>hard car</td>\n", + " <td>hard_car@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>185</td>\n", + " <td>1</td>\n", + " <td>27</td>\n", + " <td>2</td>\n", + " <td>2</td>\n", + " <td>6</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4307b923-c97b-4746-b049-9dfa5b6282f9</th>\n", + " <td></td>\n", + " <td>thin_river@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>96</td>\n", + " <td>0</td>\n", + " <td>19</td>\n", + " <td>5</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>e9608a83-6dfb-4444-a1eb-194ab57f465b</th>\n", + " <td>thin airplane</td>\n", + " <td>thin_airplane@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>233</td>\n", + " <td>4</td>\n", + " <td>12</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>118a5569-728d-4572-9cc2-8665ebcef401</th>\n", + " <td>timid door</td>\n", + " <td>timid_door@wisc.edu</td>\n", + " <td>ta</td>\n", + " <td>61</td>\n", + " <td>4</td>\n", + " <td>12</td>\n", + " <td>7</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "291bc772-3bb4-4461-bc14-02580937811b stormy door stormy_door@wisc.edu \n", + "f1b776b5-be88-423a-af72-4c989f95a661 loud_computer@wisc.edu \n", + "10e7f31b-b213-4efd-81da-15faabf82ae5 tight rain tight_rain@wisc.edu \n", + "80764a25-00dd-49ac-95eb-3903b417c81e quiet rain quiet_rain@wisc.edu \n", + "7880e6fa-a00d-48f4-8374-3176512c3236 silent time \n", + "11a1224c-8310-4b16-a50f-5b6a485793ee stormy_laughter@wisc.edu \n", + "b5963cff-ffe0-460d-b356-d3ef5aa72a5b \n", + "9f8ac76d-ce1d-4da0-be4b-09b1442922a0 soft_apple@wisc.edu \n", + "87cd9484-cae8-458f-a101-ddd6632d84e7 loose music loose_music@wisc.edu \n", + "47dd3e0a-f792-4a93-a31e-5c4d3536ac5f hot train hot_train@wisc.edu \n", + "ec12974a-6790-4b5f-85ff-dd5dc1dc63b6 short apple short_apple@wisc.edu \n", + "d423ed1e-d95a-462d-8c18-fb66309942f1 sour table sour_table@wisc.edu \n", + "f8ab1dcb-fa24-4f12-93bb-57a19cf17d5c large bridge large_bridge@wisc.edu \n", + "3c06148c-a67b-4127-8f77-54955d02da62 hard car hard_car@wisc.edu \n", + "4307b923-c97b-4746-b049-9dfa5b6282f9 thin_river@wisc.edu \n", + "e9608a83-6dfb-4444-a1eb-194ab57f465b thin airplane thin_airplane@wisc.edu \n", + "118a5569-728d-4572-9cc2-8665ebcef401 timid door timid_door@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "291bc772-3bb4-4461-bc14-02580937811b ta 101 35 296 \n", + "f1b776b5-be88-423a-af72-4c989f95a661 instructor 292 41 278 \n", + "10e7f31b-b213-4efd-81da-15faabf82ae5 instructor 252 11 169 \n", + "80764a25-00dd-49ac-95eb-3903b417c81e instructor 336 5 107 \n", + "7880e6fa-a00d-48f4-8374-3176512c3236 instructor 283 1 84 \n", + "11a1224c-8310-4b16-a50f-5b6a485793ee ta 185 0 75 \n", + "b5963cff-ffe0-460d-b356-d3ef5aa72a5b instructor 58 0 70 \n", + "9f8ac76d-ce1d-4da0-be4b-09b1442922a0 ta 332 0 59 \n", + "87cd9484-cae8-458f-a101-ddd6632d84e7 instructor 201 0 58 \n", + "47dd3e0a-f792-4a93-a31e-5c4d3536ac5f ta 104 0 53 \n", + "ec12974a-6790-4b5f-85ff-dd5dc1dc63b6 ta 94 0 51 \n", + "d423ed1e-d95a-462d-8c18-fb66309942f1 ta 214 0 44 \n", + "f8ab1dcb-fa24-4f12-93bb-57a19cf17d5c ta 48 0 37 \n", + "3c06148c-a67b-4127-8f77-54955d02da62 ta 185 1 27 \n", + "4307b923-c97b-4746-b049-9dfa5b6282f9 ta 96 0 19 \n", + "e9608a83-6dfb-4444-a1eb-194ab57f465b student 233 4 12 \n", + "118a5569-728d-4572-9cc2-8665ebcef401 ta 61 4 12 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "291bc772-3bb4-4461-bc14-02580937811b 130 118 145 \n", + "f1b776b5-be88-423a-af72-4c989f95a661 58 86 103 \n", + "10e7f31b-b213-4efd-81da-15faabf82ae5 91 13 25 \n", + "80764a25-00dd-49ac-95eb-3903b417c81e 10 24 28 \n", + "7880e6fa-a00d-48f4-8374-3176512c3236 55 6 24 \n", + "11a1224c-8310-4b16-a50f-5b6a485793ee 11 8 7 \n", + "b5963cff-ffe0-460d-b356-d3ef5aa72a5b 7 0 4 \n", + "9f8ac76d-ce1d-4da0-be4b-09b1442922a0 24 2 11 \n", + "87cd9484-cae8-458f-a101-ddd6632d84e7 4 2 9 \n", + "47dd3e0a-f792-4a93-a31e-5c4d3536ac5f 4 3 4 \n", + "ec12974a-6790-4b5f-85ff-dd5dc1dc63b6 6 0 13 \n", + "d423ed1e-d95a-462d-8c18-fb66309942f1 9 4 16 \n", + "f8ab1dcb-fa24-4f12-93bb-57a19cf17d5c 6 0 1 \n", + "3c06148c-a67b-4127-8f77-54955d02da62 2 2 6 \n", + "4307b923-c97b-4746-b049-9dfa5b6282f9 5 0 3 \n", + "e9608a83-6dfb-4444-a1eb-194ab57f465b 2 0 2 \n", + "118a5569-728d-4572-9cc2-8665ebcef401 7 2 1 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Warmup 3a: Which people had more than 10 answers? Include all roles.\n", + "top_answers = piazza_df[piazza_df[\"answers\"] > 10].sort_values(\"answers\", ascending=False)\n", + "top_answers" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<Axes: xlabel='student_id'>" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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iIiIehEDFBERESIqTWg9duwYderUiWrUqEFnz56lv/76i5ycnOjVq1d0+PBhunHjBpmampKRkRHVqVOHrK2tadasWTR37lxKT0+nJUuWqBxzzJgx1Lp1a1q8eDF1796d4uLiVPJPiIhmzJhBXbt2JWtra+rTpw9JJBK6fPkyXblyhebOnftB525ra0scx9H+/fupS5cupFAoSF9f/4Pfe7169cjPz49CQ0Np9erVpKWlRePGjftHybYiIiJsEHNQREREiIjI0NCQTpw4QV26dCFHR0eaPn06LVmyhDp37kyhoaFUr149at68OZmZmdGpU6dIJpPR1q1b6fr169SkSRNatGhRuYCiVatWtGbNGoqKiiIXFxeKi4uj6dOnq/yMr68v7d+/n44cOUItWrSgVq1a0Xfffccn6n4ItWrVotmzZ1N4eDiZm5vT6NGj/+f3Hx0dTdbW1uTl5UU9e/ak4cOHU40aNf7n44iIiLCBw4csEouIiIiIiIiIqBFxBkVERERERETko0MMUERERKocd+/eVSlbfne7e/eupk9RRETkbxCXeERERKocxcXFKnb772JnZ0daWmKNgIjIx4wYoIiIiIiIiIh8dIhLPCIiIiIiIiIfHWKAIiIiIiIiIvLRIQYoIiIiIiIiIh8dYoAiIiIiIiIi8tEhBigiIiIiIiIiHx1igCIiIiIiIiLy0SEGKCIiIiIiIiIfHWKAIiIiIiIiIvLR8f8ANpI+qX/GtaIAAAAASUVORK5CYII=", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Warmup 3b: Plot this as a bar graph.\n", + "top_answers[\"answers\"].plot.bar()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<Axes: xlabel='role'>" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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evLJJ+PHP/5xbN68OT744INGr61cuTKjqShW9fX10bp16/jNb34TvXv3znociIiIFi1axNatW6Nz586Nlr/zzjvRtWvX2LdvX0aTFQd7PpqZ++67L8aOHRudO3eOVatWxcCBA6NTp06xYcOGGDFiRNbjUYRKS0ujd+/esWPHjqxHgaipqYnq6uqG+5DU1NQ0PN57771YsGDBfkFC/tnz0cz06dMnbr311vja174W5eXlsWbNmjj22GNjypQp8e6778b999+f9YgUofnz58fdd98ds2bNin79+mU9DkWstLT0U29aWlJSElOnTo2bb7454VTFR3w0M23bto21a9dGZWVldO7cORYtWhT9+/ePN998M84880z/+iQThx9+eOzduzf27dsXrVq1ijZt2jR6/d13381oMorNkiVLIpfLxTnnnBNPPfVUdOzYseG1Vq1aRWVl5We6Kyt/mYJdXp1sdO3aNXbs2BGVlZVRWVkZS5cujf79+8fGjRtDZ5KVmTNnZj0CRETEl770pYiI2LhxY1RUVERpqbMPsiA+mplzzjknnnvuuTj11FPjyiuvjG9/+9vx5JNPxvLly2P06NFZj0eRuvzyy7MeARqprKyMnTt3xquvvhrbt2+P+vr6Rq9fdtllGU1WHBx2aWY2btwY3bt3j1atWkVExI9//OP45S9/Gb169YoRI0b4tgGZqauri3nz5sXatWujpKQk+vbtG6NGjYoWLVpkPRpF6LnnnosxY8bEnj17ory8vNF5ICUlJQ4FFpj4aGY+6etjO3bsiM6dO0ddXV1Gk1HM1q9fHyNHjowtW7bEX/3VX0Uul4t169ZFRUVFzJ8/P4477risR6TIHH/88TFy5MiYNm1atG3bNutxio74aGZKS0tj27Zt+8XHpk2bom/fvrFnz56MJqOYjRw5MnK5XPznf/5nwwl+O3bsiG984xtRWloa8+fPz3hCik27du3i9ddfj2OPPTbrUYqScz6aiQkTJkTER7sLp0yZ0qjk6+rq4pVXXolTTjklo+kodkuWLImlS5c2+mZBp06d4u67744hQ4ZkOBnF6stf/nIsX75cfGREfDQTq1atioiPLmX9+uuvN5zzEfHR18f69+8f3/3ud7MajyJXVlZ2wEtZ7969u9FnFVK54IILYuLEifE///M/cdJJJ8UhhxzS6PVRo0ZlNFlxcNilmRk7dmz8y7/8S7Rv3z7rUaDBZZddFitXroyHHnooBg4cGBERr7zySlx11VVx2mmnxcMPP5ztgBSdT/uKbUlJifPjCkx8AAW3c+fOuPzyy+O5555r+Bfmvn37YtSoUTF79uw47LDDsh0QSEp8AMmsX78+1q5dG7lcLvr27Ru9evXKeiSIP/zhD9G6deusxygqLu0GFNztt98ee/fujV69esVFF10Uo0aNil69esX7778ft99+e9bjUYTq6urijjvuiO7du8ehhx4aGzZsiIiIW265JR566KGMp2v+xAdQcFOnTo3du3fvt3zv3r0xderUDCai2N11113x8MMPx7333tvopOeTTjop/v3f/z3DyYqD+AAKLpfLHfBOomvWrGn09VtI5ZFHHokHHnggxowZ0+gquyeffHL89re/zXCy4uCrtkDBHH744VFSUhIlJSVx/PHHNwqQurq62L17d1xzzTUZTkix2rJlywHPOaqvr48PP/wwg4mKi/gACmbmzJmRy+XiiiuuiKlTp0aHDh0aXmvVqlX06NEjBg8enOGEFKsTTzwxfvGLX0RlZWWj5T/5yU9iwIABGU1VPMQHUDAf3822Z8+eMWTIkGjZ0l85HBxuvfXWuPTSS2PLli1RX18fTz/9dLzxxhvxyCOPxH/9139lPV6z55wPoOD27NkTL7744n7Ln3/++fjZz36WwUQUu4suuijmzp0bCxYsaLgtxdq1a+O5556L8847L+vxmj3X+QAK7uSTT4677747Ro4c2Wj5woULY9KkSbFmzZqMJgOyYM8HUHBvvvlm9O3bd7/lffr0ifXr12cwEZAlB2CBguvQoUNs2LAhevTo0Wj5+vXro127dtkMRdH5+NtXn8W7775b4GmKm/gACm7UqFExfvz4eOaZZ+K4446LiI/C4zvf+Y67h5LMzJkzG37esWNH3HnnnfHlL3+54RtXv/71r+P555+PW265JaMJi4dzPoCCq66ujvPPPz+WL18eRx99dEREvP3223H22WfH008/7cZyJPfVr341hg0bFtddd12j5ffff3/8/Oc/j3nz5mUzWJEQH0ASuVwuFi1aFGvWrIk2bdrEySefHF/84hezHosideihh8bq1av3u9DYm2++GQMGDDjg7QDIH4ddgCRKSkpi+PDhMXz48KxHgejUqVM888wzMXHixEbL582bF506dcpoquIh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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Warmup 3c: Plot the contributions as a bar graph.\n", + "top_answers[\"role\"].value_counts().plot.bar()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>role</th>\n", + " <th>NumAnswers</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>ta</td>\n", + " <td>10</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>instructor</td>\n", + " <td>6</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>student</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " role NumAnswers\n", + "0 ta 10\n", + "1 instructor 6\n", + "2 student 1" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Warmup 3d: Can you get this same data using SQL?\n", + "qry(\"\"\"\n", + "SELECT role, COUNT(*) as NumAnswers\n", + "FROM piazza\n", + "WHERE answers > 10\n", + "GROUP BY role\n", + "ORDER BY NumAnswers DESC\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>role</th>\n", + " <th>NumAnswers</th>\n", + " <th>AvgDaysOnline</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>ta</td>\n", + " <td>10</td>\n", + " <td>142.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>instructor</td>\n", + " <td>6</td>\n", + " <td>237.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>student</td>\n", + " <td>1</td>\n", + " <td>233.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " role NumAnswers AvgDaysOnline\n", + "0 ta 10 142.0\n", + "1 instructor 6 237.0\n", + "2 student 1 233.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Warmup 3e: What about their average # of days online as well?\n", + "qry(\"\"\"\n", + "SELECT role, COUNT(*) as NumAnswers, AVG(days_online) as AvgDaysOnline\n", + "FROM piazza\n", + "WHERE answers > 10\n", + "GROUP BY role\n", + "ORDER BY NumAnswers DESC\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 3f: Can we do that in Pandas as well?\n", + "# Today's topic!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yoLGptrqhbBo" + }, + "source": [ + "# Today's Learning Objectives: \n", + "\n", + "* Setting column as index for pandas `DataFrame`\n", + "* Identify, drop, or fill missing values (`np.NaN`) using Pandas `isna`, `dropna`, and `fillna`\n", + "* Applying transformations to `DataFrame`:\n", + " * Use `apply` on pandas `Series` to apply a transformation function\n", + " * Use `replace` to replace all target values in Pandas `Series` and `DataFrame` rows / columns\n", + "* Filter, aggregate, group, and summarize information in a `DataFrame` with `groupby`\n", + "* Convert .groupby examples to SQL\n", + "* Solving the same question using SQL and pandas `DataFrame` manipulations:\n", + " * filtering, grouping, and aggregation / summarization" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>7c1bed42-3d12-4027-bdce-d3df0b9443b4</th>\n", + " <td></td>\n", + " <td>hot_time@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>86</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9434914d-88d0-4e64-b3b7-4e864635cfdb</th>\n", + " <td></td>\n", + " <td>thick_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>19</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6ad21c80-1853-4918-a6dc-a5814199b1c5</th>\n", + " <td></td>\n", + " <td>serious_door@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>4</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15960bb8-bdc7-4c5e-83dc-99bb95c96f94</th>\n", + " <td></td>\n", + " <td>young_time@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>198</td>\n", + " <td>8</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5c82bf29-303e-4d29-b17b-4709933dbd4b</th>\n", + " <td></td>\n", + " <td>calm_star@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>54</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>74cbaf6e-34e7-4dd0-b577-8164f1d525d7</th>\n", + " <td>young music</td>\n", + " <td>young_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>25</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50c9efda-f01d-43ca-b79e-0dfd03199020</th>\n", + " <td>young ocean</td>\n", + " <td>young_ocean@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>298</td>\n", + " <td>2</td>\n", + " <td>2</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>ab58109e-5493-4893-a301-d85533255707</th>\n", + " <td>young river</td>\n", + " <td></td>\n", + " <td>ta</td>\n", + " <td>143</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8777e788-7e7e-4193-8f1a-deed767ecdca</th>\n", + " <td>young road</td>\n", + " <td>young_road@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>18</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0e67e72c-55cd-4e66-8841-1daffb3f5204</th>\n", + " <td>young window</td>\n", + " <td>young_window@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>45</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>800 rows × 9 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "7c1bed42-3d12-4027-bdce-d3df0b9443b4 hot_time@wisc.edu \n", + "9434914d-88d0-4e64-b3b7-4e864635cfdb thick_love@wisc.edu \n", + "6ad21c80-1853-4918-a6dc-a5814199b1c5 serious_door@wisc.edu \n", + "15960bb8-bdc7-4c5e-83dc-99bb95c96f94 young_time@wisc.edu \n", + "5c82bf29-303e-4d29-b17b-4709933dbd4b calm_star@wisc.edu \n", + "... ... ... \n", + "74cbaf6e-34e7-4dd0-b577-8164f1d525d7 young music young_music@wisc.edu \n", + "50c9efda-f01d-43ca-b79e-0dfd03199020 young ocean young_ocean@wisc.edu \n", + "ab58109e-5493-4893-a301-d85533255707 young river \n", + "8777e788-7e7e-4193-8f1a-deed767ecdca young road young_road@wisc.edu \n", + "0e67e72c-55cd-4e66-8841-1daffb3f5204 young window young_window@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "7c1bed42-3d12-4027-bdce-d3df0b9443b4 student 86 2 0 \n", + "9434914d-88d0-4e64-b3b7-4e864635cfdb student 19 0 0 \n", + "6ad21c80-1853-4918-a6dc-a5814199b1c5 student 4 0 0 \n", + "15960bb8-bdc7-4c5e-83dc-99bb95c96f94 student 198 8 0 \n", + "5c82bf29-303e-4d29-b17b-4709933dbd4b student 54 1 0 \n", + "... ... ... ... ... \n", + "74cbaf6e-34e7-4dd0-b577-8164f1d525d7 student 25 1 0 \n", + "50c9efda-f01d-43ca-b79e-0dfd03199020 student 298 2 2 \n", + "ab58109e-5493-4893-a301-d85533255707 ta 143 0 0 \n", + "8777e788-7e7e-4193-8f1a-deed767ecdca student 18 3 0 \n", + "0e67e72c-55cd-4e66-8841-1daffb3f5204 student 45 1 1 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "7c1bed42-3d12-4027-bdce-d3df0b9443b4 0 0 0 \n", + "9434914d-88d0-4e64-b3b7-4e864635cfdb 0 0 0 \n", + "6ad21c80-1853-4918-a6dc-a5814199b1c5 0 0 0 \n", + "15960bb8-bdc7-4c5e-83dc-99bb95c96f94 0 1 0 \n", + "5c82bf29-303e-4d29-b17b-4709933dbd4b 0 0 0 \n", + "... ... ... ... \n", + "74cbaf6e-34e7-4dd0-b577-8164f1d525d7 0 0 0 \n", + "50c9efda-f01d-43ca-b79e-0dfd03199020 2 0 0 \n", + "ab58109e-5493-4893-a301-d85533255707 0 0 0 \n", + "8777e788-7e7e-4193-8f1a-deed767ecdca 0 0 0 \n", + "0e67e72c-55cd-4e66-8841-1daffb3f5204 0 0 0 \n", + "\n", + "[800 rows x 9 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Sort by name... What do we notice?\n", + "piazza_df.sort_values(\"name\") # Some names are missing!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Not a Number\n", + "\n", + "- `np.NaN` is the floating point representation of Not a Number\n", + "- You do not need to know / learn the details about the `numpy` package \n", + "\n", + "### Replacing / modifying values within the `DataFrame`\n", + "\n", + "Syntax: `df.replace(<TARGET>, <REPLACE>)`\n", + "\n", + "Let's now replace the missing values (empty strings) with `np.NaN`" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>bffd301b-3ab9-42d7-bfb1-e5d56117543a</th>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0fda0d07-ff49-4f6b-86de-c0e24ee211f1</th>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4af54672-102f-4788-bbf0-e48a7e6b1e59</th>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>295ee845-0eb7-44aa-acd6-8809dc6700fa</th>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4f800f63-e006-436b-8aed-9ce43b48bf76</th>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f8b5c7f3-72a8-4831-ad08-1b21e277c5c6</th>\n", + " <td>clean coffee</td>\n", + " <td>clean_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50a18796-c7ff-4a20-9f8f-30d9db075db5</th>\n", + " <td>stale music</td>\n", + " <td>stale_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>94</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>877efa7c-a88d-45f9-85b0-73b2378f493c</th>\n", + " <td>wide music</td>\n", + " <td>wide_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>47</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3fd9b2c0-7974-4f14-896e-9b59dfda2bca</th>\n", + " <td>thick country</td>\n", + " <td>thick_country@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>85</td>\n", + " <td>8</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36e2dbd3-95c9-4ee7-8e02-db96656906df</th>\n", + " <td>fast friend</td>\n", + " <td>fast_friend@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>39</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>800 rows × 9 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee clean_coffee@wisc.edu \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music stale_music@wisc.edu \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music wide_music@wisc.edu \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country thick_country@wisc.edu \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend fast_friend@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a student 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 student 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 student 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa student 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 student 0 0 0 \n", + "... ... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 student 9 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 student 94 1 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c student 47 2 1 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca student 85 8 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df student 39 3 0 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 0 0 0 \n", + "... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 0 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 0 0 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c 0 1 2 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca 0 0 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df 0 0 0 \n", + "\n", + "[800 rows x 9 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's replace these empty strings with a special value.\n", + "piazza_df = piazza_df.replace(\"\", np.NaN)\n", + "piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>d19df22f-6fe2-4bbb-8f6d-3fcbb3a31b8e</th>\n", + " <td>ancient art</td>\n", + " <td>ancient_art@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>97</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>808afa38-ed47-4760-aa74-5239aa741356</th>\n", + " <td>ancient bridge</td>\n", + " <td>ancient_bridge@wisc.edu</td>\n", + " <td>instructor</td>\n", + " <td>122</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>d399cbd5-9a08-4c87-bb2b-007c25297790</th>\n", + " <td>ancient bus</td>\n", + " <td>NaN</td>\n", + " <td>student</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>fc46cec5-3b41-4bf6-b720-ada21a1c800e</th>\n", + " <td>ancient cat</td>\n", + " <td>ancient_cat@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>96</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>021a54be-5de0-4cea-a003-ca4782bbb9cb</th>\n", + " <td>ancient chair</td>\n", + " <td>ancient_chair@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>19</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9212f49b-40da-4bf9-87b0-a171ad32669d</th>\n", + " <td>NaN</td>\n", + " <td>ancient_river@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>198</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b5963cff-ffe0-460d-b356-d3ef5aa72a5b</th>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>instructor</td>\n", + " <td>58</td>\n", + " <td>0</td>\n", + " <td>70</td>\n", + " <td>7</td>\n", + " <td>0</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6c42a9e8-0b53-431d-9c49-1069c1b0e841</th>\n", + " <td>NaN</td>\n", + " <td>short_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>233</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>cf055ef8-4baa-4a43-851c-060e2e4f310d</th>\n", + " <td>NaN</td>\n", + " <td>noisy_bird@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>38</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>d82d6135-8953-4521-ac93-cef0d01bf2b5</th>\n", + " <td>NaN</td>\n", + " <td>serious_sun@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>60</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>800 rows × 9 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "d19df22f-6fe2-4bbb-8f6d-3fcbb3a31b8e ancient art ancient_art@wisc.edu \n", + "808afa38-ed47-4760-aa74-5239aa741356 ancient bridge ancient_bridge@wisc.edu \n", + "d399cbd5-9a08-4c87-bb2b-007c25297790 ancient bus NaN \n", + "fc46cec5-3b41-4bf6-b720-ada21a1c800e ancient cat ancient_cat@wisc.edu \n", + "021a54be-5de0-4cea-a003-ca4782bbb9cb ancient chair ancient_chair@wisc.edu \n", + "... ... ... \n", + "9212f49b-40da-4bf9-87b0-a171ad32669d NaN ancient_river@wisc.edu \n", + "b5963cff-ffe0-460d-b356-d3ef5aa72a5b NaN NaN \n", + "6c42a9e8-0b53-431d-9c49-1069c1b0e841 NaN short_house@wisc.edu \n", + "cf055ef8-4baa-4a43-851c-060e2e4f310d NaN noisy_bird@wisc.edu \n", + "d82d6135-8953-4521-ac93-cef0d01bf2b5 NaN serious_sun@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "d19df22f-6fe2-4bbb-8f6d-3fcbb3a31b8e student 97 0 0 \n", + "808afa38-ed47-4760-aa74-5239aa741356 instructor 122 1 1 \n", + "d399cbd5-9a08-4c87-bb2b-007c25297790 student 1 0 0 \n", + "fc46cec5-3b41-4bf6-b720-ada21a1c800e student 96 9 0 \n", + "021a54be-5de0-4cea-a003-ca4782bbb9cb student 19 0 1 \n", + "... ... ... ... ... \n", + "9212f49b-40da-4bf9-87b0-a171ad32669d student 198 2 0 \n", + "b5963cff-ffe0-460d-b356-d3ef5aa72a5b instructor 58 0 70 \n", + "6c42a9e8-0b53-431d-9c49-1069c1b0e841 student 233 0 1 \n", + "cf055ef8-4baa-4a43-851c-060e2e4f310d student 38 9 0 \n", + "d82d6135-8953-4521-ac93-cef0d01bf2b5 student 60 1 0 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "d19df22f-6fe2-4bbb-8f6d-3fcbb3a31b8e 0 0 0 \n", + "808afa38-ed47-4760-aa74-5239aa741356 0 0 0 \n", + "d399cbd5-9a08-4c87-bb2b-007c25297790 0 0 0 \n", + "fc46cec5-3b41-4bf6-b720-ada21a1c800e 0 2 1 \n", + "021a54be-5de0-4cea-a003-ca4782bbb9cb 0 0 0 \n", + "... ... ... ... \n", + "9212f49b-40da-4bf9-87b0-a171ad32669d 0 0 0 \n", + "b5963cff-ffe0-460d-b356-d3ef5aa72a5b 7 0 4 \n", + "6c42a9e8-0b53-431d-9c49-1069c1b0e841 0 0 0 \n", + "cf055ef8-4baa-4a43-851c-060e2e4f310d 0 1 1 \n", + "d82d6135-8953-4521-ac93-cef0d01bf2b5 0 0 0 \n", + "\n", + "[800 rows x 9 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Sort by name again... What do we notice?\n", + "piazza_df.sort_values(\"name\") # NaN's are at the end!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Checking for missing values\n", + "\n", + "Syntax: `Series.isna()`\n", + "- Returns a boolean Series" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "student_id\n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a False\n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 False\n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 False\n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa False\n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 False\n", + " ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 False\n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 False\n", + "877efa7c-a88d-45f9-85b0-73b2378f493c False\n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca False\n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df False\n", + "Name: name, Length: 800, dtype: bool" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run isna() on the name column\n", + "piazza_df[\"name\"].isna()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "name\n", + "False 742\n", + "True 58\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How many people are missing a name?\n", + "piazza_df[\"name\"].isna().value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "email\n", + "False 741\n", + "True 59\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How many people are missing an email?\n", + "piazza_df[\"email\"].isna().value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False 788\n", + "True 12\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How many people are missing both a name and email?\n", + "((piazza_df[\"name\"].isna()) & (piazza_df[\"email\"].isna())).value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False 695\n", + "True 105\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How many people are missing either a name or email?\n", + "((piazza_df[\"name\"].isna()) | (piazza_df[\"email\"].isna())).value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "# So... What do we do?\n", + "# 1. Drop those rows\n", + "# 2. Interpolate / Best Guess" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>bffd301b-3ab9-42d7-bfb1-e5d56117543a</th>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0fda0d07-ff49-4f6b-86de-c0e24ee211f1</th>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4af54672-102f-4788-bbf0-e48a7e6b1e59</th>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>295ee845-0eb7-44aa-acd6-8809dc6700fa</th>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4f800f63-e006-436b-8aed-9ce43b48bf76</th>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f8b5c7f3-72a8-4831-ad08-1b21e277c5c6</th>\n", + " <td>clean coffee</td>\n", + " <td>clean_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50a18796-c7ff-4a20-9f8f-30d9db075db5</th>\n", + " <td>stale music</td>\n", + " <td>stale_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>94</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>877efa7c-a88d-45f9-85b0-73b2378f493c</th>\n", + " <td>wide music</td>\n", + " <td>wide_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>47</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3fd9b2c0-7974-4f14-896e-9b59dfda2bca</th>\n", + " <td>thick country</td>\n", + " <td>thick_country@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>85</td>\n", + " <td>8</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36e2dbd3-95c9-4ee7-8e02-db96656906df</th>\n", + " <td>fast friend</td>\n", + " <td>fast_friend@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>39</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>695 rows × 9 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee clean_coffee@wisc.edu \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music stale_music@wisc.edu \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music wide_music@wisc.edu \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country thick_country@wisc.edu \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend fast_friend@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a student 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 student 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 student 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa student 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 student 0 0 0 \n", + "... ... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 student 9 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 student 94 1 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c student 47 2 1 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca student 85 8 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df student 39 3 0 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 0 0 0 \n", + "... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 0 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 0 0 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c 0 1 2 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca 0 0 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df 0 0 0 \n", + "\n", + "[695 rows x 9 columns]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Option 1: Drop those rows.\n", + "pure_piazza_df = piazza_df.dropna()\n", + "pure_piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>bffd301b-3ab9-42d7-bfb1-e5d56117543a</th>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0fda0d07-ff49-4f6b-86de-c0e24ee211f1</th>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4af54672-102f-4788-bbf0-e48a7e6b1e59</th>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>295ee845-0eb7-44aa-acd6-8809dc6700fa</th>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4f800f63-e006-436b-8aed-9ce43b48bf76</th>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f8b5c7f3-72a8-4831-ad08-1b21e277c5c6</th>\n", + " <td>clean coffee</td>\n", + " <td>clean_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50a18796-c7ff-4a20-9f8f-30d9db075db5</th>\n", + " <td>stale music</td>\n", + " <td>stale_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>94</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>877efa7c-a88d-45f9-85b0-73b2378f493c</th>\n", + " <td>wide music</td>\n", + " <td>wide_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>47</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3fd9b2c0-7974-4f14-896e-9b59dfda2bca</th>\n", + " <td>thick country</td>\n", + " <td>thick_country@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>85</td>\n", + " <td>8</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36e2dbd3-95c9-4ee7-8e02-db96656906df</th>\n", + " <td>fast friend</td>\n", + " <td>fast_friend@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>39</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>800 rows × 9 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee clean_coffee@wisc.edu \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music stale_music@wisc.edu \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music wide_music@wisc.edu \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country thick_country@wisc.edu \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend fast_friend@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a student 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 student 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 student 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa student 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 student 0 0 0 \n", + "... ... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 student 9 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 student 94 1 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c student 47 2 1 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca student 85 8 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df student 39 3 0 \n", + "\n", + " edits followups replies_to_followups \n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 0 0 0 \n", + "... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 0 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 0 0 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c 0 1 2 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca 0 0 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df 0 0 0 \n", + "\n", + "[800 rows x 9 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Option 2a: Interpolate / Best Guess\n", + "anon_piazza_df = piazza_df.fillna(\"Anonymous\")\n", + "anon_piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'calm star'" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a function to take an email (e.g. \"calm_star@wisc.edu\")\n", + "# and return the name (e.g. \"calm star\")\n", + "def parse_name_from_email(email):\n", + " if pd.isna(email):\n", + " return np.nan\n", + " else:\n", + " return email.split(\"@\")[0].replace(\"_\", \" \")\n", + "\n", + "# Test your function!\n", + "parse_name_from_email(\"calm_star@wisc.edu\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Review: `Pandas.Series.apply(...)`\n", + "Syntax: `Series.apply(<FUNCTION OBJECT REFERENCE>)`\n", + "- applies input function to every element of the Series.\n", + "- Returns a new `Series`" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " <th>guessed_name</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>bffd301b-3ab9-42d7-bfb1-e5d56117543a</th>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>timid city</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0fda0d07-ff49-4f6b-86de-c0e24ee211f1</th>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>hard coffee</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4af54672-102f-4788-bbf0-e48a7e6b1e59</th>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>hot love</td>\n", + " </tr>\n", + " <tr>\n", + " <th>295ee845-0eb7-44aa-acd6-8809dc6700fa</th>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>funny house</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4f800f63-e006-436b-8aed-9ce43b48bf76</th>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>calm student</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f8b5c7f3-72a8-4831-ad08-1b21e277c5c6</th>\n", + " <td>clean coffee</td>\n", + " <td>clean_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>clean coffee</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50a18796-c7ff-4a20-9f8f-30d9db075db5</th>\n", + " <td>stale music</td>\n", + " <td>stale_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>94</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>stale music</td>\n", + " </tr>\n", + " <tr>\n", + " <th>877efa7c-a88d-45f9-85b0-73b2378f493c</th>\n", + " <td>wide music</td>\n", + " <td>wide_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>47</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>wide music</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3fd9b2c0-7974-4f14-896e-9b59dfda2bca</th>\n", + " <td>thick country</td>\n", + " <td>thick_country@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>85</td>\n", + " <td>8</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>thick country</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36e2dbd3-95c9-4ee7-8e02-db96656906df</th>\n", + " <td>fast friend</td>\n", + " <td>fast_friend@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>39</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>fast friend</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>800 rows × 10 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee clean_coffee@wisc.edu \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music stale_music@wisc.edu \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music wide_music@wisc.edu \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country thick_country@wisc.edu \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend fast_friend@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a student 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 student 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 student 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa student 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 student 0 0 0 \n", + "... ... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 student 9 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 student 94 1 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c student 47 2 1 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca student 85 8 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df student 39 3 0 \n", + "\n", + " edits followups replies_to_followups \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 0 0 0 \n", + "... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 0 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 0 0 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c 0 1 2 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca 0 0 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df 0 0 0 \n", + "\n", + " guessed_name \n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student \n", + "... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend \n", + "\n", + "[800 rows x 10 columns]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Now, apply that function to each value in email!\n", + "piazza_df[\"guessed_name\"] = piazza_df[\"email\"].apply(parse_name_from_email)\n", + "piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'calm_star@wisc.edu'" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a function to take a name (e.g. \"calm star\")\n", + "# and return the email (e.g. \"calm_star@wisc.edu\")\n", + "def parse_email_from_name(name):\n", + " if pd.isna(name):\n", + " return np.nan\n", + " else:\n", + " return name.replace(\" \", \"_\") + \"@wisc.edu\"\n", + "\n", + "# Test your function!\n", + "parse_email_from_name(\"calm star\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>email</th>\n", + " <th>role</th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " <th>guessed_name</th>\n", + " <th>guessed_email</th>\n", + " </tr>\n", + " <tr>\n", + " <th>student_id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>bffd301b-3ab9-42d7-bfb1-e5d56117543a</th>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>timid city</td>\n", + " <td>timid_city@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0fda0d07-ff49-4f6b-86de-c0e24ee211f1</th>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>hard coffee</td>\n", + " <td>hard_coffee@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4af54672-102f-4788-bbf0-e48a7e6b1e59</th>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>hot love</td>\n", + " <td>hot_love@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>295ee845-0eb7-44aa-acd6-8809dc6700fa</th>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>funny house</td>\n", + " <td>funny_house@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4f800f63-e006-436b-8aed-9ce43b48bf76</th>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>calm student</td>\n", + " <td>calm_student@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>f8b5c7f3-72a8-4831-ad08-1b21e277c5c6</th>\n", + " <td>clean coffee</td>\n", + " <td>clean_coffee@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>9</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>clean coffee</td>\n", + " <td>clean_coffee@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50a18796-c7ff-4a20-9f8f-30d9db075db5</th>\n", + " <td>stale music</td>\n", + " <td>stale_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>94</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>stale music</td>\n", + " <td>stale_music@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>877efa7c-a88d-45f9-85b0-73b2378f493c</th>\n", + " <td>wide music</td>\n", + " <td>wide_music@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>47</td>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>wide music</td>\n", + " <td>wide_music@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3fd9b2c0-7974-4f14-896e-9b59dfda2bca</th>\n", + " <td>thick country</td>\n", + " <td>thick_country@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>85</td>\n", + " <td>8</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>thick country</td>\n", + " <td>thick_country@wisc.edu</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36e2dbd3-95c9-4ee7-8e02-db96656906df</th>\n", + " <td>fast friend</td>\n", + " <td>fast_friend@wisc.edu</td>\n", + " <td>student</td>\n", + " <td>39</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>fast friend</td>\n", + " <td>fast_friend@wisc.edu</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>800 rows × 11 columns</p>\n", + "</div>" + ], + "text/plain": [ + " name email \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee clean_coffee@wisc.edu \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music stale_music@wisc.edu \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music wide_music@wisc.edu \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country thick_country@wisc.edu \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend fast_friend@wisc.edu \n", + "\n", + " role days_online posts answers \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a student 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 student 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 student 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa student 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 student 0 0 0 \n", + "... ... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 student 9 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 student 94 1 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c student 47 2 1 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca student 85 8 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df student 39 3 0 \n", + "\n", + " edits followups replies_to_followups \\\n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a 0 0 0 \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 0 0 0 \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 0 0 0 \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa 0 0 0 \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 0 0 0 \n", + "... ... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 0 0 0 \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 0 0 0 \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c 0 1 2 \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca 0 0 0 \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df 0 0 0 \n", + "\n", + " guessed_name guessed_email \n", + "student_id \n", + "bffd301b-3ab9-42d7-bfb1-e5d56117543a timid city timid_city@wisc.edu \n", + "0fda0d07-ff49-4f6b-86de-c0e24ee211f1 hard coffee hard_coffee@wisc.edu \n", + "4af54672-102f-4788-bbf0-e48a7e6b1e59 hot love hot_love@wisc.edu \n", + "295ee845-0eb7-44aa-acd6-8809dc6700fa funny house funny_house@wisc.edu \n", + "4f800f63-e006-436b-8aed-9ce43b48bf76 calm student calm_student@wisc.edu \n", + "... ... ... \n", + "f8b5c7f3-72a8-4831-ad08-1b21e277c5c6 clean coffee clean_coffee@wisc.edu \n", + "50a18796-c7ff-4a20-9f8f-30d9db075db5 stale music stale_music@wisc.edu \n", + "877efa7c-a88d-45f9-85b0-73b2378f493c wide music wide_music@wisc.edu \n", + "3fd9b2c0-7974-4f14-896e-9b59dfda2bca thick country thick_country@wisc.edu \n", + "36e2dbd3-95c9-4ee7-8e02-db96656906df fast friend fast_friend@wisc.edu \n", + "\n", + "[800 rows x 11 columns]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Now, apply that function to each value in name!\n", + "piazza_df[\"guessed_email\"] = piazza_df[\"name\"].apply(parse_email_from_name)\n", + "piazza_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Pandas.DataFrame.apply(...)`\n", + "Syntax: `DataFrame.apply(<FUNCTION OBJECT REFERENCE>, axis=1)`\n", + "- `axis=1` means apply to each row.\n", + "- returns a new `Series`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If the name has a value, use it, otherwise use our best guess!\n", + "piazza_df[\"name\"] = piazza_df.apply(lambda r : r[\"guessed_name\"] if pd.isna(r[\"name\"]) else r[\"name\"], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Same thing for email!\n", + "piazza_df[\"email\"] = piazza_df.apply(lambda r : r[\"guessed_email\"] if pd.isna(r[\"email\"]) else r[\"email\"], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Drop the guessing columns\n", + "piazza_df = piazza_df.drop(\"guessed_name\", axis=1)\n", + "piazza_df = piazza_df.drop(\"guessed_email\", axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many rows are missing data now?\n", + "len(piazza_df.dropna()) # only 12!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Give a name of \"anonymous\" and email of \"anonymous@wisc.edu\"\n", + "# to anyone with left with missing data.\n", + "piazza_df[\"name\"] = piazza_df[\"name\"].fillna(\"anonymous\")\n", + "piazza_df[\"email\"] = piazza_df[\"email\"].fillna(\"anonymous@wisc.edu\")\n", + "len(piazza_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Pandas.DataFrame.groupby(...)`\n", + "\n", + "Syntax: `DataFrame.groupby(<COLUMN>)`\n", + "- Returns a `groupby` object\n", + "- Need to apply aggregation functions to use the return value of `groupby`" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<pandas.core.groupby.generic.DataFrameGroupBy object at 0x748f28ccfd50>" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What does this return?\n", + "piazza_df.groupby(\"role\") # a groupby object!" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>days_online</th>\n", + " <th>posts</th>\n", + " <th>answers</th>\n", + " <th>edits</th>\n", + " <th>followups</th>\n", + " <th>replies_to_followups</th>\n", + " </tr>\n", + " <tr>\n", + " <th>role</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>instructor</th>\n", + " <td>181.333333</td>\n", + " <td>5.000000</td>\n", + " <td>63.916667</td>\n", + " <td>18.750000</td>\n", + " <td>10.916667</td>\n", + " <td>16.083333</td>\n", + " </tr>\n", + " <tr>\n", + " <th>student</th>\n", + " <td>80.493386</td>\n", + " <td>2.124339</td>\n", + " <td>0.457672</td>\n", + " <td>0.125661</td>\n", + " <td>0.488095</td>\n", + " <td>0.412698</td>\n", + " </tr>\n", + " <tr>\n", + " <th>ta</th>\n", + " <td>146.062500</td>\n", + " <td>1.343750</td>\n", + " <td>21.500000</td>\n", + " <td>6.500000</td>\n", + " <td>4.375000</td>\n", + " <td>6.500000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " days_online posts answers edits followups \\\n", + "role \n", + "instructor 181.333333 5.000000 63.916667 18.750000 10.916667 \n", + "student 80.493386 2.124339 0.457672 0.125661 0.488095 \n", + "ta 146.062500 1.343750 21.500000 6.500000 4.375000 \n", + "\n", + " replies_to_followups \n", + "role \n", + "instructor 16.083333 \n", + "student 0.412698 \n", + "ta 6.500000 " + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Try getting the \"mean\" of this groupby object.\n", + "piazza_df.groupby(\"role\").mean(numeric_only=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>answers</th>\n", + " </tr>\n", + " <tr>\n", + " <th>role</th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>instructor</th>\n", + " <td>63.916667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>student</th>\n", + " <td>0.457672</td>\n", + " </tr>\n", + " <tr>\n", + " <th>ta</th>\n", + " <td>21.500000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " answers\n", + "role \n", + "instructor 63.916667\n", + "student 0.457672\n", + "ta 21.500000" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How many answers does the average instructor, student, and TA give?\n", + "piazza_df[[\"role\", \"answers\"]].groupby(\"role\").mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>role</th>\n", + " <th>AVG(answers)</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>instructor</td>\n", + " <td>63.916667</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>student</td>\n", + " <td>0.457672</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>ta</td>\n", + " <td>21.500000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " role AVG(answers)\n", + "0 instructor 63.916667\n", + "1 student 0.457672\n", + "2 ta 21.500000" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How would we write this in SQL?\n", + "qry(\"\"\"\n", + "SELECT role, AVG(answers)\n", + "FROM piazza\n", + "GROUP BY role\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>days_online</th>\n", + " </tr>\n", + " <tr>\n", + " <th>role</th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>instructor</th>\n", + " <td>2176</td>\n", + " </tr>\n", + " <tr>\n", + " <th>ta</th>\n", + " <td>4674</td>\n", + " </tr>\n", + " <tr>\n", + " <th>student</th>\n", + " <td>60853</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " days_online\n", + "role \n", + "instructor 2176\n", + "ta 4674\n", + "student 60853" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What is the total number of days spent online for instructors, students, and TAs?\n", + "# Order your answer from lowest to highest\n", + "piazza_df[[\"role\", \"days_online\"]].groupby(\"role\").sum().sort_values(\"days_online\")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>role</th>\n", + " <th>AvgDaysOnline</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>instructor</td>\n", + " <td>2176</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>ta</td>\n", + " <td>4674</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>student</td>\n", + " <td>60853</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " role AvgDaysOnline\n", + "0 instructor 2176\n", + "1 ta 4674\n", + "2 student 60853" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How would we write this in SQL?\n", + "qry(\"\"\"\n", + "SELECT role, SUM(days_online) as AvgDaysOnline\n", + "FROM piazza\n", + "GROUP BY role\n", + "ORDER BY AvgDaysOnline\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.2086614173228347 1.6373626373626373\n", + "\n", + " posts\n", + "role \n", + "instructor 7.375000\n", + "student 3.200893\n", + "ta 1.772727\n", + " posts\n", + "role \n", + "instructor 0.250000\n", + "student 1.671053\n", + "ta 0.400000\n" + ] + } + ], + "source": [ + "# Of those individuals who spend less than 100 days online,\n", + "# how does their average number of posts compare to those that\n", + "# spend 100 days or more online? Do your analysis by role as well.\n", + "\n", + "less_than_100 = piazza_df[piazza_df[\"days_online\"] < 100]\n", + "more_than_100 = piazza_df[piazza_df[\"days_online\"] >= 100]\n", + "\n", + "# In general, they post less...\n", + "print(more_than_100[\"posts\"].mean(), less_than_100[\"posts\"].mean())\n", + "print()\n", + "\n", + "# ... and this is also generally true.\n", + "print(more_than_100[[\"role\", \"posts\"]].groupby(\"role\").mean())\n", + "print(less_than_100[[\"role\", \"posts\"]].groupby(\"role\").mean())" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>role</th>\n", + " <th>AvgPosts</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>instructor</td>\n", + " <td>0.250000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>student</td>\n", + " <td>1.671053</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>ta</td>\n", + " <td>0.400000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " role AvgPosts\n", + "0 instructor 0.250000\n", + "1 student 1.671053\n", + "2 ta 0.400000" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# How would we write this in SQL?\n", + "qry(\"\"\"\n", + "SELECT role, AVG(posts) as AvgPosts\n", + "FROM piazza\n", + "WHERE days_online < 100\n", + "GROUP BY role\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>role</th>\n", + " <th>AvgPosts</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>instructor</td>\n", + " <td>7.375000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>student</td>\n", + " <td>3.200893</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>ta</td>\n", + " <td>1.772727</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " role AvgPosts\n", + "0 instructor 7.375000\n", + "1 student 3.200893\n", + "2 ta 1.772727" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"\"\"\n", + "SELECT role, AVG(posts) as AvgPosts\n", + "FROM piazza\n", + "WHERE days_online >= 100\n", + "GROUP BY role\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "role\n", + "student 53.968254\n", + "ta 62.500000\n", + "instructor 41.666667\n", + "Name: count, dtype: float64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What percentage of instructors, students, and TAs did not write a single answer,\n", + "# followup, or reply to a followup?\n", + "no_answers = piazza_df[(piazza_df[\"answers\"] == 0) & (piazza_df[\"followups\"] == 0) & (piazza_df[\"replies_to_followups\"] == 0)]\n", + "no_answers[\"role\"].value_counts() / piazza_df[\"role\"].value_counts() * 100" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How would we write this in SQL?\n", + "# The best we can write (without knowing subqueries) is how many!\n", + "qry(\"\"\"\n", + "SELECT role, COUNT(*)\n", + "FROM piazza\n", + "WHERE answers = 0 AND followups = 0 AND replies_to_followups = 0\n", + "GROUP BY role\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ... and then compare this with the total #!\n", + "qry(\"\"\"\n", + "SELECT role, COUNT(*)\n", + "FROM piazza\n", + "GROUP BY role\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "conn.close()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Template_Oliphant.ipynb b/s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Template_Oliphant.ipynb new file mode 100644 index 0000000..53bb671 --- /dev/null +++ b/s24/Louis_Lecture_Notes/37_AdvPandas/Lec37_AdvPandas_Template_Oliphant.ipynb @@ -0,0 +1,590 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Advanced Pandas" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CeWtFirwteFY" + }, + "outputs": [], + "source": [ + "# known import statements\n", + "import pandas as pd\n", + "import sqlite3\n", + "import os\n", + "\n", + "# new import statement\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Get the Piazza data from 'piazza.db'\n", + "\n", + "db_name = \"piazza.db\"\n", + "assert os.path.exists(db_name)\n", + "conn = sqlite3.connect(db_name)\n", + "\n", + "def qry(sql):\n", + " return pd.read_sql(sql, conn)\n", + "\n", + "df = qry(\"\"\"\n", + " SELECT *\n", + " FROM sqlite_master\n", + " WHERE type='table'\n", + "\"\"\")\n", + "print(df.iloc[0]['sql'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "piazza_df = pd.read_sql(\"\"\"\n", + " SELECT *\n", + " FROM piazza\n", + "\"\"\", conn)\n", + "piazza_df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 1: Set the student id column as the index\n", + "piazza_df = piazza_df.set_index(\"student_id\")\n", + "piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 2a: Which 10 students post the most?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 2b: Can you plot their number of posts as a bar graph? Be sure to label your axes!\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 2c: How about with their name rather than their student id?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 3a: Which people had more than 10 answers? Include all roles. Store the results in a dataframe named top_answers\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 3b: Plot this as a bar graph.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 3c: Plot the contributions of the various roles as a bar graph.\n", + "top_answers[\"role\"].value_counts().plot.bar()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 3d: Can you get this same data using SQL?\n", + "qry(\"\"\"\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 3e: What about their average # of days online as well?\n", + "qry(\"\"\"\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Warmup 3f: Can we do that in Pandas as well?\n", + "# TODAY'S TOPIC" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yoLGptrqhbBo" + }, + "source": [ + "# Today's Learning Objectives: \n", + "\n", + "* Setting column as index for pandas `DataFrame`\n", + "* Identify, drop, or fill missing values (`np.NaN`) using Pandas `isna`, `dropna`, and `fillna`\n", + "* Applying transformations to `DataFrame`:\n", + " * Use `apply` on pandas `Series` to apply a transformation function\n", + " * Use `replace` to replace all target values in Pandas `Series` and `DataFrame` rows / columns\n", + "* Filter, aggregate, group, and summarize information in a `DataFrame` with `groupby`\n", + "* Convert .groupby examples to SQL\n", + "* Solving the same question using SQL and pandas `DataFrame` manipulations:\n", + " * filtering, grouping, and aggregation / summarization" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Sort by name... What do we notice?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Not a Number\n", + "\n", + "- `np.NaN` is the floating point representation of Not a Number\n", + "- You do not need to know / learn the details about the `numpy` package \n", + "\n", + "### Replacing / modifying values within the `DataFrame`\n", + "\n", + "Syntax: `df.replace(<TARGET>, <REPLACE>)`\n", + "\n", + "Let's now replace the missing values (empty strings) with `np.NaN`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Let's replace these empty strings with a special value.\n", + "piazza_df = ???\n", + "piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Sort by name again... What do we notice?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Checking for missing values\n", + "\n", + "Syntax: `Series.isna()`\n", + "- Returns a boolean Series" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Run isna() on the name column\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many people are missing a name?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many people are missing an email?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many people are missing both a name and email?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many people are missing either a name or email?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# So... What do we do?\n", + "# 1. Drop those rows\n", + "# 2. Interpolate / Best Guess" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Option 1: Drop those rows.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Option 2a: Interpolate / Best Guess\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a function to take an email (e.g. \"calm_star@wisc.edu\")\n", + "# and return the name (e.g. \"calm star\")\n", + "def parse_name_from_email(email):\n", + " if pd.isna(email):\n", + " return np.nan\n", + " else:\n", + " pass # TODO Parse out the name!\n", + "\n", + "# Test your function!\n", + "parse_name_from_email(\"calm_star@wisc.edu\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Review: `Pandas.Series.apply(...)`\n", + "Syntax: `Series.apply(<FUNCTION OBJECT REFERENCE>)`\n", + "- applies input function to every element of the Series.\n", + "- Returns a new `Series`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Now, apply that function to each value in email!\n", + "piazza_df[\"guessed_name\"] = ???\n", + "piazza_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a function to take a name (e.g. \"calm star\")\n", + "# and return the email (e.g. \"calm_star@wisc.edu\")\n", + "def parse_email_from_name(name):\n", + " pass\n", + "\n", + "# Test your function!\n", + "parse_email_from_name(\"calm star\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Now, apply that function to each value in name!\n", + "piazza_df[\"guessed_email\"] = ???\n", + "piazza_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Pandas.DataFrame.apply(...)`\n", + "Syntax: `DataFrame.apply(<FUNCTION OBJECT REFERENCE>, axis=1)`\n", + "- `axis=1` means apply to each row.\n", + "- returns a new `Series`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If the name has a value, use it, otherwise use our best guess!\n", + "piazza_df[\"name\"] = piazza_df.apply(lambda r : r[\"guessed_name\"] if pd.isna(r[\"name\"]) else r[\"name\"], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Same thing for email!\n", + "piazza_df[\"email\"] = piazza_df.apply(lambda r : r[\"guessed_email\"] if pd.isna(r[\"email\"]) else r[\"email\"], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Drop the guessing columns\n", + "piazza_df = piazza_df.drop(\"guessed_name\", axis=1)\n", + "piazza_df = piazza_df.drop(\"guessed_email\", axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many rows are missing data now?\n", + "len(piazza_df.dropna())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Give a name of \"anonymous\" and email of \"anonymous@wisc.edu\"\n", + "# to anyone with left with missing data.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `Pandas.DataFrame.groupby(...)`\n", + "\n", + "Syntax: `DataFrame.groupby(<COLUMN>)`\n", + "- Returns a `groupby` object\n", + "- Need to apply aggregation functions to use the return value of `groupby`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What does this return?\n", + "piazza_df.groupby(\"role\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Try getting the \"mean\" of this groupby object.\n", + "piazza_df.groupby(\"role\").mean(numeric_only=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many answers does the average instructor, student, and TA give?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How would we write this in SQL?\n", + "qry(\"\"\"\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What is the total number of days spent online for instructors, students, and TAs?\n", + "# Order your answer from lowest to highest\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How would we write this in SQL?\n", + "qry(\"\"\"\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Of those individuals who spend less than 100 days online,\n", + "# how does their average number of posts compare to those that\n", + "# spend 100 days or more online? Do your analysis by role as well.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How would we write this in SQL?\n", + "qry(\"\"\"\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What percentage of instructors, students, and TAs did not write a single answer,\n", + "# followup, or reply to a followup?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How would we write this in SQL?\n", + "qry(\"\"\"\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "conn.close()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/s24/Louis_Lecture_Notes/37_AdvPandas/piazza.db b/s24/Louis_Lecture_Notes/37_AdvPandas/piazza.db new file mode 100644 index 0000000000000000000000000000000000000000..fd42fc45f64189a8a8f6b8013651198c97100fff GIT binary patch literal 81920 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 CR_6`? literal 0 HcmV?d00001 -- GitLab