{ "cells": [ { "cell_type": "markdown", "id": "a92ddba5", "metadata": {}, "source": [ "# Lesson 15 activity solution\n", "\n", "## Learning objectives\n", "\n", "This activity will help you to:\n", "\n", "1. Merge and aggregate data from multiple sources\n", "2. Apply groupby operations to summarize data\n", "3. Calculate meaningful statistics from aggregated data\n", "4. Visualize aggregated results" ] }, { "cell_type": "markdown", "id": "28c8b549", "metadata": {}, "source": [ "## Setup\n", "\n", "Import the required libraries." ] }, { "cell_type": "code", "execution_count": 1, "id": "7248ac92", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from scipy import stats\n", "from sklearn.impute import KNNImputer" ] }, { "cell_type": "markdown", "id": "de1e8cc9", "metadata": {}, "source": [ "## Exercise 1: Merge Data and Calculate Monthly Sales\n", "\n", "**Tasks**:\n", "\n", "1. Merge `df_sales` and `df_dates` on the `transaction_id` column. Store the result in a dataframe called `df_transactions`.\n", "\n", "2. Extract the month from the `sale_date` column and add it as a new column called `month` in `df_transactions`.\n", "\n", "3. Calculate the total sales per month using groupby and sum. Store the result in a dataframe called `monthly_sales`.\n", "\n", "4. Create a bar chart showing the total sales for each month. Include appropriate labels and title.\n", "\n", "**Hints**:\n", "\n", "- To merge two dataframes, use `pd.merge()` or the `.merge()` method. You can specify the column to join on with the `on` parameter.\n", " - Example: `df_merged = pd.merge(df1, df2, on='key_column')`\n", " - Or: `df_merged = df1.merge(df2, on='key_column')`\n", "\n", "- To extract the month from a datetime column, use the `.dt.month` accessor.\n", " - Example: `df['month'] = df['date_column'].dt.month`\n", "\n", "- To group by a column and calculate the sum, use `.groupby()` followed by `.sum()`.\n", " - Example: `grouped_df = df.groupby('group_column')['value_column'].sum()`\n", " - You can also use `.reset_index()` to convert the result back to a regular dataframe." ] }, { "cell_type": "code", "execution_count": 2, "id": "d6a058a0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
transaction_idsale_date
0TXN00012024-08-01
1TXN00022024-09-07
2TXN00032024-08-25
3TXN00042024-08-10
4TXN00052024-02-15
\n", "
" ], "text/plain": [ " transaction_id sale_date\n", "0 TXN0001 2024-08-01\n", "1 TXN0002 2024-09-07\n", "2 TXN0003 2024-08-25\n", "3 TXN0004 2024-08-10\n", "4 TXN0005 2024-02-15" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_sales = pd.read_csv('https://media.githubusercontent.com/media/gperdrizet/fullstack-2605/refs/heads/main/data/sale_amounts.csv')\n", "df_dates = pd.read_csv('https://media.githubusercontent.com/media/gperdrizet/fullstack-2605/refs/heads/main/data/sales_by_date.csv')\n", "df_dates.head()" ] }, { "cell_type": "code", "execution_count": 3, "id": "ed7fac23", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPflJREFUeJzt3Xt8jvXjx/H3bexgtjFss8zMIcz5EI1KahmWKBFRRHzTxCjJt3IqZA7JIdIB9SWqL5IKI4fKYWusFC19Y1s0azFj2sF2/f7o4f65m7Jp27W5Xs/H4348dn+uz31d73t093adbpthGIYAAAAsrILZAQAAAMxGIQIAAJZHIQIAAJZHIQIAAJZHIQIAAJZHIQIAAJZHIQIAAJZHIQIAAJZHIQIAAJZHIQJwzXbu3CmbzaadO3eW2janTJkim81WatuTpNtvv13NmjUr1W2WdfxOcL2hEAHljM1mK9SjMCVlxowZ2rBhQ4lnRvl08uRJTZkyRfHx8WZHAUpcRbMDACiad955x+H522+/rejo6ALjTZo0ueq6ZsyYofvvv1+9e/cuzoi4Tpw8eVJTp05V3bp11apVK7PjACWKQgSUM4MGDXJ4vm/fPkVHRxcYBwAUHofMgOtQZmamnnzySQUEBMjFxUWNGjXSnDlzZBiGfY7NZlNmZqZWrlxpP8w2ZMgQSVJiYqIef/xxNWrUSG5ubqpevbr69u2r48ePX1Oec+fOKTIyUnXr1pWLi4t8fHx011136cCBA/Y5n3/+ufr27as6derIxcVFAQEBGjt2rH7//fdCbeM///mP2rZtKzc3N3l7e6t///5KTk52mHP06FH16dNHfn5+cnV1Ve3atdW/f3+dPXu2UNuIi4tTx44d5ebmpqCgIC1dutS+7Pz583J3d9eYMWMKvO7nn3+Wk5OTZs6c+ZfrPn78uGw2m+bMmaPFixerXr16qly5srp27ark5GQZhqEXXnhBtWvXlpubm3r16qXTp08XWM+rr76qpk2bysXFRf7+/oqIiFB6errDnEvn/xw+fFhdunRR5cqVdcMNNygqKso+Z+fOnbrpppskSY888oj978iKFSsc1vV36wDKE/YQAdcZwzB0zz33aMeOHRo2bJhatWqlLVu2aPz48Tpx4oRefvllSX8cenv00UfVvn17jRgxQpJUv359SVJsbKz27Nmj/v37q3bt2jp+/LiWLFmi22+/XYcPH1blypWLlOmxxx7TBx98oFGjRik4OFi//fabvvjiCx05ckRt2rSRJL3//vu6cOGCRo4cqerVqysmJkYLFy7Uzz//rPfff/9v1z99+nQ9//zz6tevnx599FH9+uuvWrhwoW677TYdPHhQVatWVU5OjsLCwpSdna0nnnhCfn5+OnHihDZt2qT09HR5eXn97TbOnDmjHj16qF+/fhowYIDee+89jRw5Us7Ozho6dKiqVKmie++9V2vXrtW8efPk5ORkf+27774rwzA0cODAq/6uVq1apZycHD3xxBM6ffq0oqKi1K9fP91xxx3auXOnJkyYoB9//FELFy7UU089pbfeesv+2ilTpmjq1KkKDQ3VyJEjlZCQoCVLlig2NlZffvmlKlWq5PB+unXrpvvuu0/9+vXTBx98oAkTJqh58+bq3r27mjRpomnTpmnSpEkaMWKEbr31VklSx44dC70OoFwxAJRrERERxuX/KW/YsMGQZLz44osO8+6//37DZrMZP/74o33M3d3dGDx4cIF1XrhwocDY3r17DUnG22+/bR/bsWOHIcnYsWPH32b08vIyIiIi/nbOlbY5c+ZMw2azGYmJifaxyZMnO7zf48ePG05OTsb06dMdXnvo0CGjYsWK9vGDBw8akoz333//b3NcSefOnQ1Jxty5c+1j2dnZRqtWrQwfHx8jJyfHMAzD2LJliyHJ+PTTTx1e36JFC6Nz585/u41jx44ZkoyaNWsa6enp9vGJEycakoyWLVsaubm59vEBAwYYzs7ORlZWlmEYhpGammo4OzsbXbt2NfLy8uzzFi1aZEgy3nrrrQLv5/I/y+zsbMPPz8/o06ePfSw2NtaQZCxfvvwvfydXWwdQXnDIDLjOfPLJJ3JyctLo0aMdxp988kkZhqFPP/30qutwc3Oz/5ybm6vffvtNDRo0UNWqVR0OcxVW1apVtX//fp08ebJQ28zMzFRaWpo6duwowzB08ODBv3zdunXrlJ+fr379+iktLc3+8PPzU8OGDbVjxw5Jsu8B2rJliy5cuFDk91CxYkX961//sj93dnbWv/71L6WmpiouLk6SFBoaKn9/f61atco+79tvv9U333xT6HO8+vbt67C3qkOHDpL+OHesYsWKDuM5OTk6ceKEJGnbtm3KyclRZGSkKlT4/4/24cOHy9PTUx9//LHDdqpUqeKQydnZWe3bt9dPP/1UqJzFtQ6grKAQAdeZxMRE+fv7y8PDw2H80lVniYmJV13H77//rkmTJtnPQapRo4Zq1qyp9PT0Qp9vc7moqCh9++23CggIUPv27TVlypQC/9NMSkrSkCFD5O3trSpVqqhmzZrq3LmzJP3tNo8ePSrDMNSwYUPVrFnT4XHkyBGlpqZKkoKCgjRu3Di98cYbqlGjhsLCwrR48eJCvx9/f3+5u7s7jN14442SZD+3qkKFCho4cKA2bNhgL12rVq2Sq6ur+vbtW6jt1KlTx+H5pXIUEBBwxfEzZ85I+v8/10aNGjnMc3Z2Vr169Qr8udeuXbvA/ZyqVatmX19hFMc6gLKCc4gAFPDEE09o+fLlioyMVEhIiLy8vGSz2dS/f3/l5+cXeX39+vXTrbfeqvXr12vr1q2aPXu2Zs2apXXr1ql79+7Ky8vTXXfdpdOnT2vChAlq3Lix3N3ddeLECQ0ZMuRvt5mfny+bzaZPP/3U4bydS6pUqWL/ee7cuRoyZIg+/PBDbd26VaNHj9bMmTO1b98+1a5du8jv60oefvhhzZ49Wxs2bNCAAQO0evVq3X333Vc9R+mSK72Hvxs3LjtRviiKY33FnQkwE4UIuM4EBgZq27ZtOnfunMNeou+//96+/JK/uuPzBx98oMGDB2vu3Ln2saysrAJXKxVFrVq19Pjjj+vxxx9Xamqq2rRpo+nTp6t79+46dOiQfvjhB61cuVIPP/yw/TXR0dFXXW/9+vVlGIaCgoLse2z+TvPmzdW8eXM999xz2rNnjzp16qSlS5fqxRdf/NvXnTx5UpmZmQ57iX744QdJUt26de1jzZo1U+vWrbVq1SrVrl1bSUlJWrhw4VVz/VOX/lwTEhJUr149+3hOTo6OHTum0NDQIq+ztO8IDpiJQ2bAdaZHjx7Ky8vTokWLHMZffvll2Ww2h6t/3N3dr1hynJycCvwrf+HChcrLyytynry8vAKHpXx8fOTv76/s7Gz79iTHPQuGYeiVV1656vrvu+8+OTk5aerUqQUyG4ah3377TZKUkZGhixcvOixv3ry5KlSoYM/xdy5evKjXXnvN/jwnJ0evvfaaatasqbZt2zrMfeihh7R161bNnz9f1atXL5UrrkJDQ+Xs7KwFCxY4/B7efPNNnT17VuHh4UVe56Xy90+KMFBesIcIuM707NlTXbp00bPPPqvjx4+rZcuW2rp1qz788ENFRkbaL62XpLZt22rbtm2aN2+e/P39FRQUpA4dOujuu+/WO++8Iy8vLwUHB2vv3r3atm2bqlevXuQ8586dU+3atXX//ferZcuWqlKlirZt26bY2Fj7HqjGjRurfv36euqpp3TixAl5enrqv//9b6HORalfv75efPFFTZw4UcePH1fv3r3l4eGhY8eOaf369RoxYoSeeuopffbZZxo1apT69u2rG2+8URcvXtQ777wjJycn9enT56rb8ff316xZs3T8+HHdeOONWrt2reLj47Vs2TKHy9kl6cEHH9TTTz+t9evXa+TIkQWWl4SaNWtq4sSJmjp1qrp166Z77rlHCQkJevXVV3XTTTdd040769evr6pVq2rp0qXy8PCQu7u7OnTooKCgoBJ4B4DJTLm2DUCx+fNl94ZhGOfOnTPGjh1r+Pv7G5UqVTIaNmxozJ4928jPz3eY9/333xu33Xab4ebmZkiyX4J/5swZ45FHHjFq1KhhVKlSxQgLCzO+//57IzAw0OEy/cJcdp+dnW2MHz/eaNmypeHh4WG4u7sbLVu2NF599VWHeYcPHzZCQ0ONKlWqGDVq1DCGDx9ufP311wUu+/7zZfeX/Pe//zVuueUWw93d3XB3dzcaN25sREREGAkJCYZhGMZPP/1kDB061Khfv77h6upqeHt7G126dDG2bdt21d9x586djaZNmxpfffWVERISYri6uhqBgYHGokWL/vI1PXr0MCQZe/bsuer6DeP/L7ufPXu2w/il3/GfbxewfPlyQ5IRGxvrML5o0SKjcePGRqVKlQxfX19j5MiRxpkzZ674fv5s8ODBRmBgoMPYhx9+aAQHBxsVK1Z0+LMoyjqA8sBmGJz9BgDF7d5779WhQ4f0448/mh0FQCFwDhEAFLNffvlFH3/8sR566CGzowAoJM4hAoBicuzYMX355Zd64403VKlSJYcbOQIo29hDBADFZNeuXXrooYd07NgxrVy5Un5+fmZHAlBInEMEAAAsjz1EAADA8ihEAADA8jipuhDy8/N18uRJeXh4cCt7AADKCcMwdO7cOfn7+6tChb/fB0QhKoSTJ08W+KZpAABQPiQnJ1/1C5wpRIVw6Qsyk5OT5enpaXIaAABQGBkZGQoICHD4ouu/QiEqhEuHyTw9PSlEAACU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wYMHi5wRAABc/8rMVWYAAABmoRABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLoxABAADLs1QhWrx4serWrStXV1d16NBBMTExZkcCAABlgGUK0dq1azVu3DhNnjxZBw4cUMuWLRUWFqbU1FSzowEAAJNZphDNmzdPw4cP1yOPPKLg4GAtXbpUlStX1ltvvWV2NAAAYDJLFKKcnBzFxcUpNDTUPlahQgWFhoZq7969JiYDAABlQUWzA5SGtLQ05eXlydfX12Hc19dX33//fYH52dnZys7Otj8/e/asJCkjI6PYs50/f77Y13ktGf783sj1166U69K4mchVdOXp71hZzXVp3EzkKrry9nfsWl1al2EYV59sWMCJEycMScaePXscxsePH2+0b9++wPzJkycbknjw4MGDBw8e18EjOTn5ql3BEnuIatSoIScnJ506dcph/NSpU/Lz8yswf+LEiRo3bpz9eX5+vk6fPq3q1avLZrOVeN7CysjIUEBAgJKTk+Xp6Wl2HLuymksqu9nIVTRlNZdUdrORq2jIVXRlMZthGDp37pz8/f2vOtcShcjZ2Vlt27bV9u3b1bt3b0l/lJzt27dr1KhRBea7uLjIxcXFYaxq1aqlkPTaeHp6lpm/fJcrq7mkspuNXEVTVnNJZTcbuYqGXEVX1rJ5eXkVap4lCpEkjRs3ToMHD1a7du3Uvn17zZ8/X5mZmXrkkUfMjgYA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Merge df_sales and df_dates on transaction_id\n", "df_transactions = pd.merge(df_sales, df_dates, on='transaction_id')\n", "\n", "# Extract month from sale_date and add as new column\n", "df_transactions['sale_date'] = pd.to_datetime(df_transactions['sale_date'])\n", "df_transactions['month'] = df_transactions['sale_date'].dt.month\n", "\n", "# Sort by month to ensure correct order in the plot\n", "df_transactions = df_transactions.sort_values(by='month')\n", "\n", "# Calculate total sales per month\n", "monthly_sales = df_transactions.groupby('month')['sale_amount'].sum().reset_index()\n", "\n", "# 4. Create bar chart\n", "plt.bar(monthly_sales['month'], monthly_sales['sale_amount'], color='black', edgecolor='black')\n", "plt.xlabel('Month')\n", "plt.ylabel('Total sales ($)')\n", "plt.title('Total sales by month')\n", "plt.xticks(monthly_sales['month'])\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "8a4abc24", "metadata": {}, "source": [ "## Exercise 2: Analyze Missing Data Patterns\n", "\n", "Load the California Housing dataset with missing values and investigate whether the pattern of missing data in the `HouseAge` feature is related to the `Population` feature.\n", "\n", "**Background**: \n", "Sometimes data is not missing completely at random. In real-world scenarios, certain values might be more likely to be missing based on other features in the dataset. This is called Missing Not At Random (MNAR). Understanding these patterns is important for choosing appropriate imputation strategies.\n", "\n", "**Tasks**:\n", "\n", "1. Load the dataset from `salted_housing_data.csv` and examine the first few rows.\n", "\n", "2. Create a new boolean column called `HouseAge_Missing` that indicates whether `HouseAge` is missing (True) or not (False).\n", "\n", "3. Use `pd.qcut()` to bin the `Population` feature into 4 quartiles. Store the result in a new column called `Population_Quartile`. Use labels like `['Q1 (Lowest)', 'Q2', 'Q3', 'Q4 (Highest)']`.\n", "\n", "4. Calculate the percentage of missing `HouseAge` values for each population quartile. Use `groupby()` to group by `Population_Quartile` and calculate:\n", " - The count of missing values (sum of `HouseAge_Missing`)\n", " - The total count in each quartile\n", " - The percentage missing\n", "\n", "5. Create a bar chart showing the percentage of missing `HouseAge` values by population quartile. Add value labels on top of each bar.\n", "\n", "6. Conduct a statistical test to determine if there is a relationship between `Population_Quartile` and the amount of `HouseAge` data missing.\n", "\n", "7. Based on your analysis, answer: Is `HouseAge` more likely to be missing in certain population quartile groups? What does this suggest about the missing data mechanism?\n", "\n", "**Hints**:\n", "\n", "- To check for missing values, use `.isnull()` or `.isna()`.\n", " - Example: `df['HouseAge_Missing'] = df['HouseAge'].isnull()`\n", "\n", "- To create quartile bins, use `pd.qcut()` with `q=4`.\n", " - Example: `df['quartile'] = pd.qcut(df['column'], q=4, labels=['Q1', 'Q2', 'Q3', 'Q4'])`\n", "\n", "- To calculate percentage missing by group:\n", " - Group by the quartile column\n", " - Use `.agg()` with multiple functions: `{'HouseAge_Missing': ['sum', 'count']}`\n", " - Calculate percentage: `(sum / count) * 100`" ] }, { "cell_type": "code", "execution_count": 4, "id": "263ef495", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 20640 entries, 0 to 20639\n", "Data columns (total 9 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 MedInc 19775 non-null float64\n", " 1 HouseAge 19857 non-null float64\n", " 2 AveRooms 18671 non-null float64\n", " 3 AveBedrms 20044 non-null float64\n", " 4 Population 19649 non-null float64\n", " 5 AveOccup 18684 non-null float64\n", " 6 Latitude 18885 non-null float64\n", " 7 Longitude 18798 non-null float64\n", " 8 MedHouseVal 20370 non-null float64\n", "dtypes: float64(9)\n", "memory usage: 1.4 MB\n" ] } ], "source": [ "housing_df = pd.read_csv('https://media.githubusercontent.com/media/gperdrizet/fullstack-2605/refs/heads/main/data/salted_housing_data.csv')\n", "housing_df.info()" ] }, { "cell_type": "code", "execution_count": 5, "id": "384fd98a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitudeMedHouseVal
08.325241.06.9841271.023810NaN2.55555637.88-122.234.526
18.301421.0NaN0.9718802401.02.10984237.86-122.223.585
27.257452.08.2881361.073446496.02.802260NaN-122.243.521
35.643152.05.8173521.073059558.02.54794537.85-122.253.413
43.846252.06.2818531.081081565.02.18146737.85-122.253.422
\n", "
" ], "text/plain": [ " MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude \\\n", "0 8.3252 41.0 6.984127 1.023810 NaN 2.555556 37.88 \n", "1 8.3014 21.0 NaN 0.971880 2401.0 2.109842 37.86 \n", "2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 NaN \n", "3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 \n", "4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 \n", "\n", " Longitude MedHouseVal \n", "0 -122.23 4.526 \n", "1 -122.22 3.585 \n", "2 -122.24 3.521 \n", "3 -122.25 3.413 \n", "4 -122.25 3.422 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1. Examine the first few rows\n", "housing_df.head()" ] }, { "cell_type": "code", "execution_count": 6, "id": "058fad1f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitudeMedHouseValHouseAge_Missing
08.325241.06.9841271.023810NaN2.55555637.88-122.234.526False
18.301421.0NaN0.9718802401.02.10984237.86-122.223.585False
27.257452.08.2881361.073446496.02.802260NaN-122.243.521False
35.643152.05.8173521.073059558.02.54794537.85-122.253.413False
43.846252.06.2818531.081081565.02.18146737.85-122.253.422False
\n", "
" ], "text/plain": [ " MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude \\\n", "0 8.3252 41.0 6.984127 1.023810 NaN 2.555556 37.88 \n", "1 8.3014 21.0 NaN 0.971880 2401.0 2.109842 37.86 \n", "2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 NaN \n", "3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 \n", "4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 \n", "\n", " Longitude MedHouseVal HouseAge_Missing \n", "0 -122.23 4.526 False \n", "1 -122.22 3.585 False \n", "2 -122.24 3.521 False \n", "3 -122.25 3.413 False \n", "4 -122.25 3.422 False " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2. Create boolean column indicating if HouseAge is missing\n", "housing_df['HouseAge_Missing'] = housing_df['HouseAge'].isnull()\n", "housing_df.head()" ] }, { "cell_type": "code", "execution_count": 7, "id": "47f73df6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitudeMedHouseValHouseAge_MissingPopulation_Quartile
08.325241.06.9841271.023810NaN2.55555637.88-122.234.526FalseNaN
18.301421.0NaN0.9718802401.02.10984237.86-122.223.585FalseQ4
27.257452.08.2881361.073446496.02.802260NaN-122.243.521FalseQ1
35.643152.05.8173521.073059558.02.54794537.85-122.253.413FalseQ1
43.846252.06.2818531.081081565.02.18146737.85-122.253.422FalseQ1
\n", "
" ], "text/plain": [ " MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude \\\n", "0 8.3252 41.0 6.984127 1.023810 NaN 2.555556 37.88 \n", "1 8.3014 21.0 NaN 0.971880 2401.0 2.109842 37.86 \n", "2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 NaN \n", "3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 \n", "4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 \n", "\n", " Longitude MedHouseVal HouseAge_Missing Population_Quartile \n", "0 -122.23 4.526 False NaN \n", "1 -122.22 3.585 False Q4 \n", "2 -122.24 3.521 False Q1 \n", "3 -122.25 3.413 False Q1 \n", "4 -122.25 3.422 False Q1 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 3. Bin Population into quartiles\n", "housing_df['Population_Quartile'] = pd.qcut(\n", " housing_df['Population'],\n", " q=4,\n", " labels=['Q1', 'Q2', 'Q3', 'Q4']\n", ")\n", "\n", "housing_df.head()" ] }, { "cell_type": "code", "execution_count": 8, "id": "575bacbf", "metadata": {}, "outputs": [], "source": [ "groups = housing_df.groupby('Population_Quartile', observed=False)\n", "\n", "house_age_groups = groups['HouseAge_Missing']\n", "\n", "missing_by_quartile = house_age_groups.agg(['sum', 'count'])" ] }, { "cell_type": "code", "execution_count": 9, "id": "5e2f9bfc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.api.typing.DataFrameGroupBy" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(groups)" ] }, { "cell_type": "code", "execution_count": 10, "id": "b26f033c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sumcountpercentage_missing
Population_Quartile
Q121749154.415056
Q219149143.886854
Q315349093.116724
Q417949113.644879
\n", "
" ], "text/plain": [ " sum count percentage_missing\n", "Population_Quartile \n", "Q1 217 4915 4.415056\n", "Q2 191 4914 3.886854\n", "Q3 153 4909 3.116724\n", "Q4 179 4911 3.644879" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 4. Calculate percentage of missing HouseAge values by quartile\n", "missing_by_quartile = housing_df.groupby('Population_Quartile', observed=False)['HouseAge_Missing'].agg(['sum', 'count'])\n", "missing_by_quartile['percentage_missing'] = (missing_by_quartile['sum'] / missing_by_quartile['count']) * 100\n", "missing_by_quartile.head()" ] }, { "cell_type": "code", "execution_count": 11, "id": "1f061fe1", "metadata": {}, "outputs": [ { "data": { "image/png": "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QZIc/0ZGRsrX11fPPvusfH199fPPP+u1117T6dOn9Z///Mcxn+nTp2vo0KFq0KCBnnnmGcXExKhDhw4qVKiQihcv7uiXnp6udu3aae3atRo0aJAqVKig3bt3691339WBAwe0ZMmS667zjOWuWbOmJk6cqH///VfTpk3TunXrHOt49OjRKl++vGbOnOk4fJ6x7q6nW7duqlChgt566y19//33ev311xUQEKCPP/5YTZs21aRJkzR37lw9//zzqlmzpho2bHjNaXXq1Em///67nn76aZUqVUoJCQlasWKFYmNjHc9btGihwoUL66WXXpK/v79iYmK0ePHiG9YpSV27dlXp0qU1ceJEbdu2Tf/9738VHBysSZMmOfr0799f8+fPV58+fVSnTh2tWbNGDz30kEvTz3Du3Lksz6PLKoy48rMxY8WKFerRo4eaNWvmWK69e/dq3bp1Gj58uKOORo0a6e+//9bgwYNVsmRJ/fbbbxo1apTi4+M1depUp2n+73//k4+Pj9q2bStvb2+FhYVp7ty5qlevnlO/3BjP3bp104cffqjvv//e8QsoY5m+/fZb9e/f37EX2NXP4a34/fff9cADD6hYsWJ66aWX5OPjo/nz56tDhw5atGiRHnnkEUmX/7iYOHGiHnvsMdWqVUunT5/Wli1btG3bNj344IM3nM/QoUPl7++vsWPHav/+/Zo+fbqOHDni+AXdp08fzZkzR1FRUWrbtq3jfUePHtXPP/+sMWPG3HAeJ06cUJs2bdS1a1f16NFD8+fP15NPPilPT0/HH08pKSlq3LixDh48qKFDh6p06dJasGCB+vfvr5MnTzrGWIY5c+bozJkzGjJkiM6fP69p06apadOm2r17t4oUKWJmVWdp8+bN+u2339S9e3cVL15cMTExmj59uho3bqw//vhD+fPnv+H2+mpml/HLL7/UmTNnNHjwYNlsNk2ePFkdO3bUoUOHrnuqydGjR9WkSRNdunTJMXZmzpwpb2/vm14fhw4d0pIlS9SlSxeVLl1a//77rz7++GM1atRIf/zxh0JCQpz6T5gwQZ6ennr++eeVmpqqFi1amFpXWXH1M3HbMOCy2bNnG5KMn376yTh27JgRFxdnzJs3zwgMDDS8vb2Nv/76y4iJiTHy5s1rvPHGG07v3b17t+Hh4eHU3qhRI0OSMWPGDKe+n376qSHJeOeddzLVkJ6ebhiGYfz666+GJGPu3LlOr//www+Z2kNDQw1Jxi+//OJoS0hIMOx2u/Hcc8852hYsWGBIMlatWpVpvufOncvUNnjwYCN//vzG+fPnDcMwjNTUVCMwMNCoWbOmcfHiRUe/yMhIQ5LRqFEjR9vnn39u5MmTx/j111+dpjljxgxDkrFu3bpM88tw4cIFIzg42KhcubKRkpLiaP/uu+8MScZrr73maMv4mW3evPma08swZswYQ5IxaNAgR9ulS5eM4sWLGzabzXjrrbcc7SdOnDC8vb2Nfv36OdoOHz5sSDJmz57t6CPJ+M9//nPNeX799dcu1SfJGDNmTKZaBw4c6NTvkUceMQIDAx3Pt27dakgyRowY4dSvf//+maaZlYxlutHj2LFjhmGY+9k0atTIaUxk6NevnxEaGup4Pnz4cKNgwYLGpUuXrlnnhAkTDB8fH+PAgQNO7S+99JKRN29eIzY21qm9SpUqRq9evRzPX375ZSMoKMhp3ObWeE5PTzeKFStmdOrUyal9/vz5mT63rnwODSPzOly1alWWn+2rx6xhGEazZs2MKlWqOE0vPT3dqFevnlG2bFlHW9WqVY2HHnromst1LRmfyerVqxsXLlxwtE+ePNmQZHzzzTeGYRhGWlqaUbx4caNbt25O73/nnXcMm81mHDp06Lrzydi+TpkyxdGWmppqVKtWzQgODnbMe+rUqYYk44svvnD0u3DhglG3bl3D19fXOH36tGEY/7+uMrb1GTZu3GhIMp555hmnebsytg0j82c7q5/x+vXrDUnGnDlzHG3X215fPX+zyxgYGGgcP37c0febb74xJBnffvttpnldacSIEYYkY+PGjY62hIQEw8/Pz5BkHD58+JrLnSE0NNRpu3r+/HkjLS3Nqc/hw4cNu91ujB8/3tGWMcbLlCmTaR2aWVe38pm4XXAo9iY0b95chQsXVokSJdS9e3f5+vrq66+/VrFixbR48WKlp6era9euSkxMdDyKFi2qsmXLatWqVU7TstvtGjBggFPbokWLFBQUpKeffjrTvG02m6TLh7r8/Pz04IMPOs2nevXq8vX1zTSfihUrqkGDBo7nhQsXVvny5XXo0CGXlvnKv7jOnDmjxMRENWjQQOfOndO+ffskXT6kmJSUpMcff9zpfLBevXqpUKFCTtNbsGCBKlSooIiICKf6Mw5rX13/lbZs2aKEhAQ99dRT8vLycrQ/9NBDioiI0Pfff+/SMl3LY4895vh/3rx5VaNGDRmGoUcffdTR7u/vf8P15+3tLU9PT61evTrT4fErpyNJ3333XZaHnG7kiSeecHreoEEDJSUl6fTp05Iu3+pFkp566imnflmNresZNGiQVqxYkenRp08fp3458bPx9/fX2bNnr3uIb8GCBWrQoIEKFSrkNJ6aN2+utLQ0/fLLL46+u3bt0u7du9WjRw9HW48ePZSYmKioqCinZcmN8Wyz2dSlSxctW7ZMycnJjvavvvpKxYoVU/369R1trnwOb8Xx48f1888/q2vXro7pJyYmKikpSS1btlR0dLTjkLq/v79+//13RUdH39S8Bg0a5LT358knn5SHh4eWLVsmScqTJ4969eqlpUuX6syZM45+GXtWS5cufcN5eHh4aPDgwY7nnp6eGjx4sBISErR161ZJ0rJly1S0aFGn8ZAvXz4NGzZMycnJWrNmjdM0O3TooGLFijme16pVS7Vr13bUfauu/BlfvHhRSUlJCg8Pl7+/v7Zt23ZT0zS7jN26dXMa4xm/O270+2LZsmWqU6eOatWq5WgrXLiwevXqdVN1S5d/R+bJczmqpKWlKSkpSb6+vipfvnyW66Nfv363tIfwamY+E7cLDsXehA8//FDlypWTh4eHihQpovLlyzsGXnR0tAzDUNmyZbN879W7sYsVK5bpxM0///xT5cuXv+7J8tHR0Tp16pSCg4OzfD3jooEMJUuWzNSnUKFC1wwcV/v999/1yiuv6Oeff3aEhgynTp2SdPncEEkKDw93et3DwyPTeSXR0dHau3evChcu7FL9V8qYT1bn2ERERGjt2rXXX5gbuHpd+fn5ycvLS0FBQZnak5KSrjkdu92uSZMm6bnnnlORIkVUp04dtW3bVn379lXRokUlSY0aNVKnTp00btw4vfvuu2rcuLE6dOignj17ym63m641Y2N84sQJFSxYUEeOHFGePHky/RK8+md0I2XLls3yquKr13VO/GyeeuopzZ8/X61bt1axYsXUokULde3aVa1atXL0iY6O1q5du1waT1988YV8fHxUpkwZHTx4UNLli1NKlSqluXPnOg5T59Z4li7/Ip06daqWLl2qnj17Kjk5WcuWLXMcCsvgyufwVhw8eFCGYejVV1/Vq6++es1lKVasmMaPH6/2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J07Ujh071KJFC+XLl0/R0dFasGCBpk2bps6dO5uqvVq1asqbN68mTZqkU6dOyW63q2nTpqpXr54KFSqkfv36adiwYbLZbPr8888zfdg8PT01duxYPf3002ratKm6du2qmJgYRUZGKiwszOmvpj59+mj+/Pl64okntGrVKj3wwANKS0vTvn37NH/+fEVFRV3zcHe+fPk0adIkDRgwQI0aNVKPHj0ct9QoVaqUnnnmGVPLnVMOHDigZs2aqWvXrqpYsaI8PDz09ddf699//1X37t0lSZ999pk++ugjPfLIIwoLC9OZM2f0ySefqGDBgpn2XNyM6tWrq1OnTpo6daqSkpIctzvJ2GtxK3/JZsXMz2bgwIF655131LJlSz366KNKSEjQjBkzVKlSJafzxx577DEdP35cTZs2VfHixXXkyBG9//77qlatmmOv28iRI7V06VK1bdvWcRufs2fPavfu3Vq4cKFiYmJUoEABLVq0SA8++KDThR1XateunaZNm6aEhAQFBwfnynjOcP/99ys8PFyjR49Wamqq02FYSS5/DrPi5+enLl266P3335fNZlNYWJi+++67LM/9+/DDD1W/fn1VqVJFjz/+uMqUKaN///1X69ev119//eW4f1jFihXVuHFjVa9eXQEBAdqyZYsWLlyooUOH3rAe6XLIyvh87N+/Xx999JHq16+vdu3aOfUrXLiwWrVqpQULFsjf39/UH24hISGaNGmSYmJiVK5cOX311VfasWOHZs6c6TgaMmjQIH388cfq37+/tm7dqlKlSmnhwoVat26dpk6dqgIFCjhNMzw8XPXr19eTTz6p1NRUTZ06VYGBgU6nAbg6trPStm1bff755/Lz81PFihW1fv16/fTTT5nOJ7vW9jqr867NLuPNeuGFF/T555+rVatWGj58uON2Jxl7DK/02GOP6YknnlCnTp304IMPaufOnYqKisq0F65t27YaP368BgwYoHr16mn37t2aO3euY0+aK8ysq6y4+pm4beTiFbh3PDO3zli0aJFRv359w8fHx/Dx8TEiIiKMIUOGGPv373f0adSokVGpUqUs33/u3Dlj9OjRRunSpY18+fIZRYsWNTp37mz8+eefTv1mzpxpVK9e3fD29jYKFChgVKlSxXjhhReMf/75x9EnNDQ0y9sSZHVJ/ieffGKUKVPGyJs3r9Pl4evWrTPq1KljeHt7GyEhIcYLL7xgREVFZXkJ+XvvvWeEhoYadrvdqFWrlrFu3TqjevXqRqtWrZz6XbhwwZg0aZJRqVIlw263G4UKFTKqV69ujBs3zjh16tSNVrHx1VdfGffdd59ht9uNgIAAo1evXk63ITCMm7vdScatOzL069fP8PHxydT/6p/f1ZfJJyYmGkOGDDEiIiIMHx8fw8/Pz6hdu7Yxf/58x3u2bdtm9OjRwyhZsqRht9uN4OBgo23btsaWLVuc5qVr3O7k6lozlvfK2wqcPXvWGDJkiBEQEGD4+voaHTp0MPbv329IcrqFS1Yylulat2y5Vh2u/GwMwzC++OILo0yZMoanp6dRrVo1IyoqKtMtIRYuXGi0aNHCCA4ONjw9PY2SJUsagwcPNuLj452mdebMGWPUqFFGeHi44enpaQQFBRn16tUz3n77bePChQvGokWLDEnGrFmzrrm8q1evNiQZ06ZNc7Tl1ng2DMMYPXq0IckIDw/P8nVXP4dZ3Vbj2LFjRqdOnYz8+fMbhQoVMgYPHmzs2bMn060dDMMw/vzzT6Nv375G0aJFjXz58hnFihUz2rZtayxcuNDR5/XXXzdq1apl+Pv7G97e3kZERITxxhtvON3CJCsZY3TNmjXGoEGDjEKFChm+vr5Gr169jKSkpCzfk3HrlytvRXQjGZ/PLVu2GHXr1jW8vLyM0NBQ44MPPsjU999//zUGDBhgBAUFGZ6enkaVKlUyrZMrPwtTpkwxSpQoYdjtdqNBgwbGzp07M03TlbFtGJk/2ydOnHDU4uvra7Rs2dLYt29fptuAGMa1t9dZbdvNLuPVrq7zWnbt2mU0atTI8PLyMooVK2ZMmDDBmDVrVqbtUlpamvHiiy8aQUFBRv78+Y2WLVsaBw8ezPJ2J88995xxzz33GN7e3sYDDzxgrF+/PtMyZtzuZMGCBVnW5eq6yup2J4bh2mfidmEzjDvgLGvc0dLT01W4cGF17Ngxy0NVyH07duzQfffdpy+++OKWbkVwN2I8575vvvlGHTp00C+//OJ026brady4sRITEzN9K8TNiomJUenSpfWf//znhkdd4CzjpuWHDx+2zPeQ3844xw7Z6vz585kODc2ZM0fHjx936WtbkP1SUlIytU2dOlV58uS57rdmgPF8u/jkk09UpkwZp3v6Acga59ghW23YsEHPPPOMunTposDAQG3btk2zZs1S5cqVnb4uCbln8uTJ2rp1q5o0aSIPDw/HLUMGDRrk1tvK3AkYz+41b9487dq1S99//72mTZuW7eeEAlZEsEO2KlWqlEqUKKH33ntPx48fV0BAgPr27au33nor042YkTvq1aunFStWaMKECUpOTlbJkiU1duxYjR492t2l3fYYz+7Vo0cP+fr66tFHH8307SkAssY5dgAAABbBOXYAAAAWQbADAACwiDv6HLv09HT9888/KlCgACfVAgAASzIMQ2fOnFFISIjT18Jl5Y4Odv/88w9X9QEAgLtCXFycihcvft0+d3Swy/galLi4OBUsWNDN1QAAAGS/06dPq0SJEi59/dsdHewyDr8WLFiQYAcAACzNldPOuHgCAADAIgh2AAAAFkGwAwAAsAiCHQAAgEUQ7AAAACyCYAcAAGARBDsAAACLINgBAABYBMEOAADAIgh2AAAAFkGwAwAAsAiCHQAAgEUQ7AAAACyCYAcAAGARBDsAAACL8HB3AXeK2NhYJSYmursMmBQUFKSSJUu6uwwAAHIFwc4FsbGxioiIUEpKirtLgUne3t7at28f4Q4AcFcg2LkgMTFRKSkp6tixo4KCgtxdDlyUmJioxYsXKzExkWAHALgrEOxMCAoKUkhIiLvLAAAAyBIXTwAAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWcdsEu7feeks2m00jRoxwdykAAAB3pNsi2G3evFkff/yx7r33XneXAgAAcMdye7BLTk5Wr1699Mknn6hQoULuLgcAAOCO5fZgN2TIED300ENq3rz5Dfumpqbq9OnTTg8AAABc5uHOmc+bN0/btm3T5s2bXeo/ceJEjRs3LoerAgAAuDO5bY9dXFychg8frrlz58rLy8ul94waNUqnTp1yPOLi4nK4SgAAgDuH2/bYbd26VQkJCbr//vsdbWlpafrll1/0wQcfKDU1VXnz5nV6j91ul91uz+1SAQAA7ghuC3bNmjXT7t27ndoGDBigiIgIvfjii5lCHQAAAK7PbcGuQIECqly5slObj4+PAgMDM7UDAADgxtx+VSwAAACyh1uvir3a6tWr3V0CAADAHYs9dgAAABZxW+2xA+5ksbGxSkxMdHcZMCEoKEglS5Z0dxkAkG0IdkA2iI2NVUREhFJSUtxdCkzw9vbWvn37CHcALINgB2SDxMREpaSkqGPHjgoKCnJ3OXBBYmKiFi9erMTERIIdAMsg2AHZKCgoSCEhIe4uAwBwl+LiCQAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEe7i4AAABcFhsbq8TERHeXAROCgoJUsmRJd5fhQLADAOA2EBsbq4iICKWkpLi7FJjg7e2tffv23TbhjmAHAMBtIDExUSkpKerYsaOCgoLcXQ5ckJiYqMWLFysxMZFgBwAAMgsKClJISIi7y8AdiosnAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFiEh5nOe/fu1bx58/Trr7/qyJEjOnfunAoXLqz77rtPLVu2VKdOnWS323OqVgAAAFyHS3vstm3bpubNm+u+++7T2rVrVbt2bY0YMUITJkxQ7969ZRiGRo8erZCQEE2aNEmpqak5XTcAAACu4tIeu06dOmnkyJFauHCh/P39r9lv/fr1mjZtmqZMmaKXX345u2oEAACAC1wKdgcOHFC+fPlu2K9u3bqqW7euLl68eMuFAQAAwByXDsW6EupupT8AAABu3U1fFRsfH6/OnTurcOHCCggI0MMPP6xDhw5lZ20AAAAw4aaD3cCBA1W5cmWtWbNGP//8s4oUKaKePXtmZ20AAAAwweVgN3z4cJ09e9bx/ODBg3rxxRdVsWJFVatWTcOHD9f+/ftzpEgAAADcmMv3sStevLiqV6+uyZMnq127durWrZtq166tNm3a6OLFi1q8eLF69eqVk7UCAADgOlwOdiNHjlTnzp311FNPKTIyUu+//75q166t1atXKy0tTZMnT1bnzp1zslYAAABch6lvnihdurSWL1+uuXPnqlGjRho+fLjefvtt2Wy2nKoPAAAALjJ98URSUpJ69eqlzZs3a/v27apbt6527dqVE7UBAADABJf32K1cuVI9e/bUsWPHFBISogULFujTTz/VqlWr1KNHDz300EMaN26cvL29c7JeALhjxcbGKjEx0d1lwISgoCCVLFnS3WUALnM52A0ZMkQvvPCChgwZoh9++EEjRozQxo0b1aRJE23btk3jx49XtWrVuDIWALIQGxuriIgIpaSkuLsUmODt7a19+/YR7nDHcDnYxcfH66GHHpKXl5datWqlZ5991vGa3W7XG2+8wX3sAOAaEhMTlZKSoo4dOyooKMjd5cAFiYmJWrx4sRITEwl2uGO4HOzatWunzp07q127dlq7dq3atGmTqU+lSpWytTgAsJqgoCCFhIS4uwwAFuXyxROzZs3S4MGDderUKfXu3VtTp07NwbIAAABglst77Dw9PfX000/nZC0AAAC4BS7tsduwYYPLEzx37px+//13l/pOnz5d9957rwoWLKiCBQuqbt26Wr58ucvzAgAAwP9zKdj16dNHLVu21IIFC5y+L/ZKf/zxh15++WWFhYVp69atLs28ePHieuutt7R161Zt2bJFTZs2Vfv27V0OhgAAAPh/Lh2K/eOPPzR9+nS98sor6tmzp8qVK6eQkBB5eXnpxIkT2rdvn5KTk/XII4/oxx9/VJUqVVya+cMPP+z0/I033tD06dO1YcMGLsQAAAAwyaVgly9fPg0bNkzDhg3Tli1btHbtWh05ckQpKSmqWrWqnnnmGTVp0kQBAQE3XUhaWppjj2DdunVvejoAAAB3K1PfFStJNWrUUI0aNbKtgN27d6tu3bo6f/68fH199fXXX6tixYpZ9k1NTVVqaqrj+enTp7OtDgAAgDud6e+KzW7ly5fXjh07tHHjRj355JPq16+f/vjjjyz7Tpw4UX5+fo5HiRIlcrlaAACA25fbg52np6fCw8NVvXp1TZw4UVWrVtW0adOy7Dtq1CidOnXK8YiLi8vlagEAAG5fpg/F5rT09HSnw61XstvtstvtuVwRAADAncGtwW7UqFFq3bq1SpYsqTNnzujLL7/U6tWrFRUV5c6yAAAA7khuDXYJCQnq27ev4uPj5efnp3vvvVdRUVF68MEH3VkWAADAHcl0sHvvvfeybLfZbPLy8lJ4eLgaNmyovHnz3nBas2bNMjt7AAAAXIPpYPfuu+/q2LFjOnfunAoVKiRJOnHihPLnzy9fX18lJCSoTJkyWrVqFVetAgAA5CLTV8W++eabqlmzpqKjo5WUlKSkpCQdOHBAtWvX1rRp0xQbG6uiRYvqmWeeyYl6AQAAcA2m99i98sorWrRokcLCwhxt4eHhevvtt9WpUycdOnRIkydPVqdOnbK1UAAAAFyf6T128fHxunTpUqb2S5cu6ejRo5KkkJAQnTlz5tarAwAAgMtMB7smTZpo8ODB2r59u6Nt+/btevLJJ9W0aVNJl78mrHTp0tlXJQAAAG7IdLCbNWuWAgICVL16dccNg2vUqKGAgADHVa6+vr6aMmVKthcLAACAazN9jl3RokW1YsUK7du3TwcOHJB0+ftey5cv7+jTpEmT7KsQAAAALrnpGxRHREQoIiIiO2sBAADALTAd7NLS0hQZGamVK1cqISFB6enpTq///PPP2VYcAAAAXGc62A0fPlyRkZF66KGHVLlyZdlstpyoCwAAACaZDnbz5s3T/Pnz1aZNm5yoBwAAADfJ9FWxnp6eCg8Pz4laAAAAcAtMB7vnnntO06ZNk2EYOVEPAAAAbpLpQ7Fr167VqlWrtHz5clWqVEn58uVzen3x4sXZVhwAAABcZzrY+fv765FHHsmJWgAAAHALTAe72bNn50QdAAAAuEWmz7EDAADA7cmlPXb333+/Vq5cqUKFCum+++677r3rtm3blm3FAQAAwHUuBbv27dvLbrdLkjp06JCT9QAAAOAmuRTsxowZk+X/AQAAcPswfY5dXFyc/vrrL8fzTZs2acSIEZo5c2a2FgYAAABzTAe7nj17atWqVZKko0ePqnnz5tq0aZNGjx6t8ePHZ3uBAAAAcI3pYLdnzx7VqlVLkjR//nxVqVJFv/32m+bOnavIyMjsrg8AAAAuMh3sLl686LiQ4qefflK7du0kSREREYqPj8/e6gAAAOAy08GuUqVKmjFjhn799VetWLFCrVq1kiT9888/CgwMzPYCAQAA4BrTwW7SpEn6+OOP1bhxY/Xo0UNVq1aVJC1dutRxiBYAAAC5z/RXijVu3FiJiYk6ffq0ChUq5GgfNGiQ8ufPn63FAQAAwHWm99ilpKQoNTXVEeqOHDmiqVOnav/+/QoODs72AgEAAOAa08Guffv2mjNnjiTp5MmTql27tqZMmaIOHTpo+vTp2V4gAAAAXGM62G3btk0NGjSQJC1cuFBFihTRkSNHNGfOHL333nvZXiAAAABcYzrYnTt3TgUKFJAk/fjjj+rYsaPy5MmjOnXq6MiRI9leIAAAAFxjOtiFh4dryZIliouLU1RUlFq0aCFJSkhIUMGCBbO9QAAAALjGdLB77bXX9Pzzz6tUqVKqXbu26tatK+ny3rv77rsv2wsEAACAa0zf7qRz586qX7++4uPjHfewk6RmzZrpkUceydbiAAAA4DrTwU6SihYtqqJFizq1cXNiAAAA93Ip2HXs2FGRkZEqWLCgOnbseN2+ixcvzpbCAAAAYI5Lwc7Pz082m83xfwAAANx+XAp2s2fPzvL/AAAAuH2YvioWAAAAtyfTF08kJSXptdde06pVq5SQkKD09HSn148fP55txQEAAMB1poNdnz59dPDgQT366KMqUqSI49w7AAAAuJfpYPfrr79q7dq1TvewAwAAgPuZPscuIiJCKSkpOVELAAAAboHpYPfRRx9p9OjRWrNmjZKSknT69GmnBwAAANzD9KFYf39/nT59Wk2bNnVqNwxDNptNaWlp2VYcAAAAXGc62PXq1Uv58uXTl19+ycUTAAAAtxHTwW7Pnj3avn27ypcvnxP1AAAA4CaZPseuRo0aiouLy4laAAAAcAtM77F7+umnNXz4cI0cOVJVqlRRvnz5nF6/9957s604AAAAuM50sOvWrZskaeDAgY42m83GxRMAAABuZjrYHT58OCfqAAAAwC0yHexCQ0Nzog4AAADcItMXTwAAAOD2RLADAACwCIIdAACARRDsAAAALOKmgt3Jkyf13//+V6NGjdLx48clSdu2bdPff/+drcUBAADAdaavit21a5eaN28uPz8/xcTE6PHHH1dAQIAWL16s2NhYzZkzJyfqBAAAwA2Y3mP37LPPqn///oqOjpaXl5ejvU2bNvrll1+ytTgAAAC4znSw27x5swYPHpypvVixYjp69Gi2FAUAAADzTAc7u92u06dPZ2o/cOCAChcunC1FAQAAwDzTwa5du3YaP368Ll68KOny98TGxsbqxRdfVKdO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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 5. Create bar chart\n", "plt.title('Percentage of missing HouseAge values by population quartile')\n", "\n", "plt.bar(\n", " missing_by_quartile.index.astype(str),\n", " missing_by_quartile['percentage_missing'],\n", " color='grey',\n", " edgecolor='black'\n", ")\n", "plt.xlabel('Population quartile')\n", "plt.ylabel('Percentage missing (%)')\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "id": "9b91ba0d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Chi-square test of independence (Population quartile vs HouseAge missingness)\n", "Chi-square statistic: 11.8198\n", "p-value: 0.008027\n", "Degrees of freedom: 3\n" ] } ], "source": [ "# 6. Statistical test: is missingness different across population quartiles?\n", "contingency_table = pd.crosstab(\n", " housing_df['Population_Quartile'],\n", " housing_df['HouseAge_Missing']\n", " )\n", "\n", "chi2_stat, p_value, dof, expected = stats.chi2_contingency(contingency_table)\n", "\n", "print('Chi-square test of independence (Population quartile vs HouseAge missingness)')\n", "print(f'Chi-square statistic: {chi2_stat:.4f}')\n", "print(f'p-value: {p_value:.6f}')\n", "print(f'Degrees of freedom: {dof}')" ] }, { "cell_type": "markdown", "id": "3dc46951", "metadata": {}, "source": [ "## Exercise 3: Apply Imputation to Missing Data\n", "\n", "Now that you've analyzed the missing data pattern, select and apply an appropriate imputation method to fill in the missing `HouseAge` values.\n", "\n", "**Background**:\n", "Based on your findings from Exercise 2, you discovered that `HouseAge` is more likely to be missing in areas with lower population (MNAR pattern). This information should guide your choice of imputation method. Advanced methods like KNN or Iterative Imputation can leverage relationships between features, which is particularly useful when data is not missing completely at random.\n", "\n", "**Tasks**:\n", "\n", "1. Choose an imputation method. Consider:\n", " - Simple methods: Mean or Median imputation\n", " - Advanced methods: KNN Imputation or Iterative Imputation\n", " - Justify your choice based on the missing data pattern you discovered\n", "2. Apply your chosen imputation method to fill the missing `HouseAge` values. Store the result in a new column called `HouseAge_imputed`.\n", "\n", "3. Compare the distribution of the original `HouseAge` (non-missing values only) with the imputed values:\n", " - Create a histogram showing both distributions\n", " - Calculate summary statistics (mean, median, std) for both\n", "\n", "4. Evaluate your imputation:\n", " - Does the imputed distribution look reasonable compared to the original?\n", " - Are there any obvious problems or artifacts introduced by the imputation?\n", " - Would a different method have been better? Why or why not?" ] }, { "cell_type": "markdown", "id": "65237ab0", "metadata": {}, "source": [ "**1. Choose imputation method**\n", "\n", "Use KNN imputation so that missing values are filled in based on similar records." ] }, { "cell_type": "code", "execution_count": 13, "id": "b1f4da2e", "metadata": {}, "outputs": [], "source": [ "# 2. Apply KNN imputation\n", "housing_df.drop(['HouseAge_Missing', 'Population_Quartile'], axis=1, inplace=True)\n", "\n", "imputer = KNNImputer()\n", "housing_imputed = imputer.fit_transform(housing_df)\n", "imputed_housing_df = pd.DataFrame(housing_imputed, columns=housing_df.columns)" ] }, { "cell_type": "code", "execution_count": 14, "id": "36427b15", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create KDE of original distribution\n", "kde_original = stats.gaussian_kde(housing_df['HouseAge'].dropna(), bw_method=0.25)\n", "x_range = np.linspace(housing_df['HouseAge'].min(), housing_df['HouseAge'].max(), 300)\n", "kde_values = kde_original(x_range)\n", "\n", "plt.title('KNN imputation of HouseAge vs. original distribution')\n", "plt.hist(\n", " imputed_housing_df['HouseAge'],\n", " bins=10, edgecolor='black', color='grey',\n", " density=True, label='Imputed'\n", ")\n", "\n", "plt.plot(\n", " x_range, kde_values,\n", " 'b-', linewidth=2.5,\n", " label='Original'\n", ")\n", "\n", "plt.xlabel('HouseAge')\n", "plt.ylabel('Density')\n", "plt.legend(loc='upper right', framealpha=1, markerscale=3)\n", "\n", "plt.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": ".venv (3.12.3)", "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }