{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "88a31059", "metadata": {}, "source": [ "# 2. Data Cleaning\n" ] }, { "cell_type": "code", "execution_count": 240, "id": "a30a20db", "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "# Importing Libraries\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from IPython.display import set_matplotlib_formats\n", "\n", "sns.set(style=\"whitegrid\")\n", "sns.set_context(\"poster\", font_scale=.5, rc={\"grid.linewidth\": 0.6})\n", "sns.set_style({'font.family': 'Roboto'})\n", "# jupyter-book clean ./ --all\n", "# jupyter-book build ./\n", "# ghp-import -n -p -f _build/html\n", "\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")\n", "from pandas.core.common import SettingWithCopyWarning\n", "warnings.simplefilter(action=\"ignore\", category=SettingWithCopyWarning)\n" ] }, { "cell_type": "markdown", "id": "6d9d793a", "metadata": {}, "source": [ "### 2.1 Members Data\n" ] }, { "cell_type": "code", "execution_count": 289, "id": "7356f566", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "memberID 0\n", "holdtime 0\n", "puzzlepack 0\n", "dtype: int64" ] }, "execution_count": 289, "metadata": {}, "output_type": "execute_result" } ], "source": [ "member_holdtime_df=pd.read_csv('data/member_holdtime_df.csv')\n", "member_holdtime_df.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 290, "id": "07c920d8", "metadata": {}, "outputs": [], "source": [ "# removing outliers\n", "member_holdtime_df = member_holdtime_df[(member_holdtime_df['holdtime'] >= 0.1) & \n", " (member_holdtime_df['holdtime'] <= 150)]" ] }, { "cell_type": "markdown", "id": "8ea7c5df", "metadata": {}, "source": [ "### 2.2 Packs Data\n" ] }, { "cell_type": "code", "execution_count": 243, "id": "2f29f47c", "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", "
pack_namebrandpiece_countdifficulty_ratingpiece_count_1piece_count_2difficulty_rating_1difficulty_rating_2
0Anne Belle Thompson The Mikado Anne Belle Thom...Other-Hand-cut387,242A-Easy,A-Easy387.0242.0A-EasyA-Easy
1Anthology Puzzles Alphonse Mucha La Plume Anth...NaN320,160Average,Average320.0160.0AverageAverage
2Anthology Puzzles Colorful Cat Anthology Puzzl...NaN150,170Really-Hard,A-Easy150.0170.0Really-HardA-Easy
3Anthology Puzzles Framed American Gothic Antho...NaN320,300Average,Average320.0300.0AverageAverage
4Anthology Puzzles Over The Moon Anthology Puzz...NaN278,177Average,A-Easy278.0177.0AverageA-Easy
\n", "
" ], "text/plain": [ " pack_name brand \\\n", "0 Anne Belle Thompson The Mikado Anne Belle Thom... Other-Hand-cut \n", "1 Anthology Puzzles Alphonse Mucha La Plume Anth... NaN \n", "2 Anthology Puzzles Colorful Cat Anthology Puzzl... NaN \n", "3 Anthology Puzzles Framed American Gothic Antho... NaN \n", "4 Anthology Puzzles Over The Moon Anthology Puzz... NaN \n", "\n", " piece_count difficulty_rating piece_count_1 piece_count_2 \\\n", "0 387,242 A-Easy,A-Easy 387.0 242.0 \n", "1 320,160 Average,Average 320.0 160.0 \n", "2 150,170 Really-Hard,A-Easy 150.0 170.0 \n", "3 320,300 Average,Average 320.0 300.0 \n", "4 278,177 Average,A-Easy 278.0 177.0 \n", "\n", " difficulty_rating_1 difficulty_rating_2 \n", "0 A-Easy A-Easy \n", "1 Average Average \n", "2 Really-Hard A-Easy \n", "3 Average Average \n", "4 Average A-Easy " ] }, "execution_count": 243, "metadata": {}, "output_type": "execute_result" } ], "source": [ "packs_df=pd.read_csv('data/packs_df.csv')\n", "packs_df.head()" ] }, { "cell_type": "code", "execution_count": 244, "id": "c9c865eb", "metadata": {}, "outputs": [], "source": [ "# splitting brand name\n", "packs_df['brand_2'] = packs_df['brand'].str.split(',', expand=True)[1]\n", "packs_df['brand_1'] = packs_df['brand'].str.split(',', expand=True)[0]" ] }, { "cell_type": "code", "execution_count": 245, "id": "6ba0289e", "metadata": {}, "outputs": [], "source": [ "# adding number of puzzles feature\n", "packs_df['num_puzzles'] = packs_df['pack_name'].map(lambda n: 1 if (n[-1] == ' ') else 2, na_action='ignore')" ] }, { "cell_type": "code", "execution_count": 246, "id": "fd41b929", "metadata": {}, "outputs": [], "source": [ "# fixing datatype\n", "packs_df = packs_df.astype({'piece_count_1': 'int64', 'piece_count_2': 'int64'}, errors='ignore')" ] }, { "cell_type": "code", "execution_count": 247, "id": "f85c15d1", "metadata": {}, "outputs": [], "source": [ "# dropping the initial variables\n", "packs_df.drop(['brand', 'piece_count', 'difficulty_rating'], axis=1, inplace=True)" ] }, { "cell_type": "code", "execution_count": 248, "id": "16d622d8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pack_name 0\n", "piece_count_1 8\n", "piece_count_2 181\n", "difficulty_rating_1 4\n", "difficulty_rating_2 4\n", "brand_2 775\n", "brand_1 25\n", "num_puzzles 0\n", "dtype: int64" ] }, "execution_count": 248, "metadata": {}, "output_type": "execute_result" } ], "source": [ "packs_df.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 249, "id": "15b61b65", "metadata": {}, "outputs": [], "source": [ "# making the brand_2 same as brand_1\n", "# ------ must be done only for puzzle = 2, right?\n", "packs_df.loc[(packs_df['brand_2'].isna()), 'brand_2'] = packs_df['brand_1']" ] }, { "cell_type": "code", "execution_count": 250, "id": "e5cd081d", "metadata": {}, "outputs": [], "source": [ "packs_df[['brand_1', 'brand_2']] = packs_df[['brand_1', 'brand_2']].fillna('unknown')" ] }, { "cell_type": "code", "execution_count": 251, "id": "f22aa5ed", "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABcwAAAHxCAYAAABQ5v93AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAACasklEQVR4nOzde3zP9f//8ft7583mPOfTchgpmkROsRkWhijkNEY55FxiNKck59OUU/RBJDTHJJQwiUJhYRIy5LTkMHb+/eHn9fXehm22vXe4XS+XXez1fJ0er+drtsf78X6+ny9TQkJCggAAAAAAAAAAyOWsLB0AAAAAAAAAAABZAQVzAAAAAAAAAABEwRwAAAAAAAAAAEkUzAEAAAAAAAAAkETBHAAAAAAAAAAASRTMAQAAAAAAAACQRMEcAAAAAAAAAABJFMwBAAAAAAAAAJBEwRwAAAAAAAAAAEmSjaUDeFojRozQunXrUrz9smXLVLt2bW3evFnTp0/Xf//9pyZNmujDDz+UnZ1dBkaaNUVGRmrVqlXatm2bzpw5ozt37ihv3ryqXLmymjVrptdee+2p+2X//v3q1q2bWdvQoUPVu3fvZLf39/fX3r17jWVbW1v9/PPPcnZ2fupzlyxZUj/88EOqj5NZEhIS9N1332n9+vU6evSobty4IUdHR5UqVUovv/yyOnbsqHLlylk6zGxnx44dWrVqlUJDQ3Xz5k05Ozurb9++6t69u0XiCQ4OVkBAQLLrbG1tlS9fPj3zzDOqW7euXn/9dbm6umZyhOkrPDxcjRs3Nms7efKkhaIBAAAAAAB4tGxfME+Le/fuacSIEYqJiZEkrV+/XjVr1tQbb7xh4cgy14kTJ9S3b19dvHjRrP369evau3ev9u7dq+XLl2vhwoUqUaJEms9Ts2ZN5c+fXzdu3DDafv7552QL5tHR0Tp48KBZW506ddJULM9ubt++rUGDBikkJMSs/datWzp+/LiOHz+uZcuW6Z133tE777xjoSifTnh4uNkbXC4uLhletJ40aZI+//xzs7YbN27owoULGXretIqJidG1a9d07do1HThwQIsWLdKECRPUvHlzS4cGAAAAAACQ4+XKgnlCQoKlQ7C4mzdvqlevXrp69epjtzt16pT69Omj4OBg2dik7cfF2tpajRo10vr16422Q4cOKTo6Osno9UOHDunevXtmbd7e3mk6b3YSHR2tbt26KTQ09LHbxcXFac6cOYqOjtaQIUMyKbr0c+HCBc2dO9dYLlmyZIYWzI8fP56kWJ7d3LlzR++9955Kliyp6tWrWzocAAAAAACAHC3HFczr1KkjPz+/R66vVKmSHB0dNWnSJE2bNk03b95UkyZN1Lp160yM0vJWrVplViy3tbVVjx49VKVKFf3888/66quvjHUnT57Uzp071aRJkzSfz9vb26xgfu/ePR06dEgvv/yy2Xb79u0zW7ayskoylUNOtGDBArNiub29vXr06KFnn31W165d04YNG/T7778b6xcuXChvb289//zzlgg329i/f7/ZsouLi/r3769SpUqpZMmSFooqqUKFCumjjz6SdP+TBr/99pu++uor41MwcXFxWrBggT799FNLhgkAAAAAAJDj5biCebFixeTp6fnE7Vq2bKmWLVtmQkRZ05EjR8yW/f39NXToUElS8+bN9c8//2jXrl3G+kOHDj1Vwbx+/fpycHAwGz2+b9++JxbMX3jhBRUuXDjN580Obt26pYULF5q1TZo0yWwKjk6dOunNN9/U4cOHJUnx8fH64osvNHny5EyNNbu5ffu22bKnp6fF5i1/HAcHB7PfW76+vsqTJ48WLFhgtD249wAAAAAAAMg4Oa5gnlJeXl5mcxg/eBjoA3fu3NGyZcu0efNmhYeHy8nJSfXr11ffvn3VvHlzY1qXWrVqafny5U885uMeete1a1cdOHDAaP/mm2/03XffaeXKlbp27VqS2A4cOKCVK1fq6NGjunLlipycnFSlShW1adNGrVq1kpWV1ROvf/bs2WZT01hbW5utr1ChglnBPCoq6onHfBxHR0fVqVNHO3fuNNp+/vlns21u3bqlY8eOmbUlNx3L999/r+DgYB05ckT//vuvbG1t9cwzz6hZs2bq2rWrHB0dUxRT4gfG9u/fXwMGDDCWn/QzIkk//PCDVq9erZMnT+rq1avKmzevqlWrpvbt28vLyytFcezatUvR0dHGcokSJfTqq6+abWMymdSuXTuzounu3buTHOvMmTP64osvtHfvXv3zzz+ysbGRm5ubmjVrps6dO5v1zZMexJj4wZQP/6y7u7sb7YUKFdKuXbu0dOlSrV+/Xn///bccHBxUu3ZtvffeeypbtqykpP0p3Z+i5cGxvv/+e5UqVcrok6+++kpHjhzRjRs3ZG9vr3LlysnT01Ndu3ZVvnz5Htelj3yo5saNG7Vx40ZJSe/nsWPH9MUXX+jQoUP6559/5OjoqEqVKqlly5Zq166d2ZREiR8m27x5c/Xt21fjxo3T77//Lg8PD6Ov0qpGjRpmyw8X/4OCgsymthk7dqwKFSqkmTNn6uzZs+rXr5/xs3z79m2tXLlS33//vU6fPq27d+8qX758qlatmt588001bNjQ7DyJ79Nvv/2mzZs368svv9Rff/0lKysreXh4aMiQIXruueeSxL1+/Xp98cUX+vPPP2Vvby9vb2+9+eabT9UXAAAAAAAAmSXXFswf599//1XPnj3Npsi4d++eNm7cqB9++CHD50CfPHlyssXQ+Ph4TZ48Wf/73//M2qOjo7Vv3z7t27dPmzdv1ty5c+Xg4PDYcyQukCeWuHBdpUqVlAX/GN7e3mYF82PHjun27dvGAz0PHDiguLg4s30eHtUeHR2td999V9u2bTPbJiYmRseOHdOxY8e0fv16LV++XIUKFXrqeB/n3r17CggI0JYtW8zar1+/rp07d2rnzp1q27atPvrooye+gZH4IZ8vvPCCTCZTku1q1Kghf39/s7aH54HfsGGDAgMDk7y5ceTIER05ckRr1qzRZ599ptKlS6f4OlPi5s2b6tOnj9l1REVFadu2bTp8+LA2b96s/Pnzp/h4o0ePNpsSSDK/x6tWrdJnn32mypUrp9claNGiRZoxY4bi4+ONtqioKB04cEAHDhxQcHCw5s+frwIFCiS7/7lz59SjRw9du3Yt3WJK/HyBYsWKPXLb77//Xnv37jWLX7o/h/vbb7+tK1eumLU//HPq7++v4cOHP/LYgwcP1o8//mjWFhISokOHDmndunUqV66c0f7xxx+b/X66e/eu1q5dm+zvMwAAAAAAgKzoyUORc6EJEyY88uGLiad4yAiPKi4tXrw4SbE8sT179mjixImpPufhw4e1c+dObdmyRe+//77Z3M+lSpVSq1atUn3MxLy8vMwK9bGxsfrll1+M5cTTsVSqVEllypQxloOCgpIUyxM7ffq0Ro8e/dSxPsmkSZOSFMsTCw4O1mefffbEY128eNFs+VGF0fLly2v48OFmXw+K5YcPH9aIESMe+0mAByOPn/bTAonFxMQkKfo/cPXqVa1atSrFx9q4cWOSYnlyx+zXr1+Sh8Om1ZYtWzRt2rQkxeaH/fbbb3r33Xcf+WZZaGhouhXLIyMj9fPPP2vevHlm7U2bNn3kPnv27EkSf3R0tN55550kxfLElixZoh07djxyfeJi+cNxLl682Fj+6aefHvn76UkxAAAAAAAAZBU5boT5unXrzKbZeFi3bt00atSox+5/5swZbd682azNw8NDHTp00LVr17Ro0SL9999/6RZvSv37778KCgoya+vYsaNefvllhYeHa8GCBbp165Ykae3aterdu3eqHmo4Y8YMs2lhHihXrpzmz58ve3v7p7sASQULFpSHh4d+/fVXo23fvn3G3M2JC+aJp2N5+KGhkvTaa6/J09NTR48e1aJFi4z2H374QTdu3EjVqObUOHXqlFkR2NraWj179lTVqlUVFhamhQsXGg9rXLhwobp06SInJ6dHHi8iIsJs+UmfDkjOhAkTzAqmtWvXVrt27XT27FktWrTIiCcsLEyrV69W165dU32Ox6lYsaK6desmk8mkTz/91OxNgAMHDqhPnz766KOPdOTIEc2YMcNY9/DDLgsXLpzkDZFatWrpzTff1IULFzRnzhxj6poLFy5o9+7djywi161bV/Pnz9fmzZvN/j8//FDgSpUqKTY2NskbTM2aNVOTJk30+++/64svvjCK5Hv37tXOnTtTPNVOajw8NU1yKlWqpL59+6bqmL/88ovZ1CqOjo4aNmyYChQooOXLl+vQoUPGuuDg4GSnP5Luv4Hz1ltvydnZWYsXL1ZYWJix7uHfGQ8XzyWpbNmy6t27t2JiYvTZZ5/p/PnzqYofAAAAAADAEnJcwfxpPTxliCS5urpqyZIlRsEzb968GT6CuWTJkvroo4/k4eGh2NhY2dnZacOGDWYjgxs3bqxx48YZywkJCZo+fbokKS4uTnv27FHHjh2fKg5ra2u99dZbZlMuPC1vb+8kBXPp/gjUP//802zbxA8ZnTJlitkIXw8PDzk6OqpZs2Zav369MYVFfHy8zp07l2EF82+++cYsjs6dO+vdd9+VJPn4+OjatWvGKOlbt27p4MGDatCgwSOPFxkZabackjnoH3bmzBmzKXTy5s2rhQsXGoV3R0dH42dDuj91S3oXzGfPnq3y5ctLuv9z8/D84f/884+k+8XqxNeW+GGXiUdJjxw50pgOKCYmRr///rux7nFTIxUrVkzFihVLMrVQ4ocCh4SEmE194ubm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AAAAAABAEgVzAAAAAAAAAAAkUTAHAAAAAAAAAEASBXMAAAAAAAAAACTl0oL58uXL9dxzzyk6OtqsvWHDhgoMDDRr27x5s9zd3RUREZGZIWa4oKAgeXl5WToMAAAA5FLk5OTkAAAAWVGuLJjXrFlTMTExOnbsmNF26tQp/fPPP9q7d6/Ztr/99pueeeYZFSxY8KnPGxwcLHd396c+Tlq4u7srODjYIucGAAAAEiMnBwAAQFaUKwvm7u7ucnFx0eHDh422kJAQlStXThcuXNC5c+eM9kOHDqlmzZqWCPOpxcfHKyEhwdJhAAAAAEmQkwMAACArypUFcysrK3l4eJgl53v27FGTJk1UqVIlY0TL3bt3dfLkSb344ouSpHPnzql3797y8PCQp6enJk2apHv37km6P1LlxRdf1IYNG9S0aVNVr15dHTp00KlTpyRJXl5eCggIkHT/xUFQUJBWrVqll156SfHx8UYcXl5emjx5srG8a9cuVa5cWVevXpUknTlzRn369FGNGjVUs2ZNDRkyRFeuXDG279q1q3r16qVu3bqpevXqGjZsmDGCJiAgIMlHPhcvXqyGDRvKw8ND/v7+unz5cvp0MgAAAPAY5OT/h5wcAAAg68iVBXPp/kdAf/vtN0nSvXv39Ouvv6phw4aqX7++kZwfPXpUsbGxqlmzpiIiItSpUyeVLFlSwcHBmjZtmvbs2aNp06YZx7x9+7a+/vprzZkzR1999ZViYmI0btw4SdLatWs1cuRISfdHzvj7+6thw4a6efOm8THUP/74QxcuXND27duNY/7888+qWrWqXF1ddf36dXXq1Em2trZauXKlPvvsM128eFHdunUzXiRI0q+//qqOHTvqu+++07hx4xQSEiJJGjlypNauXWtsd+HCBR09elRLlizR559/rrNnz2rGjBkZ0NsAAABAUuTk5OQAAABZjY2lA7CUF198UTNmzND58+d15swZ2dnZycPDQzExMRo4cKDi4uL022+/qVixYipVqpTmzp2rAgUKKDAwUCaTSW5uburfv78CAgI0atQo47iffvqpnJ2dJUnt2rUzkveCBQvKxcVFkuTq6ipJypMnjypVqqSffvpJ1apV044dO9S0aVPt3r1bJ06cUOXKlbV//355enpKklauXCkrKytNmzZN9vb2kqQ5c+bI29tbmzdv1uuvvy5J8vb2VvPm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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Bar charts for distribution of brand\n", "fig, axs = plt.subplots(1, 2, figsize=(15, 5))\n", "fig.suptitle(\"Figure 3. Value Counts for Brand\", weight='heavy',y =0.99, x=0.16).set_fontsize('18')\n", "\n", "sns.histplot(data=packs_df, y=packs_df[packs_df['brand_1'].notnull()]['brand_1'], color=\"#e794bb\", alpha = 1.0, ax=axs[0])\n", "axs[0].set_title(\"Puzzle 1\")\n", "sns.histplot(data=packs_df, y=packs_df[packs_df['brand_2'].notnull()]['brand_2'], color=\"#ba328b\", alpha = 1.0, ax=axs[1])\n", "axs[1].set_title(\"Puzzle 2\")\n", "\n", "sns.despine(left=True, bottom=True)\n", "fig.tight_layout()\n", "# plt.savefig(\"_static/images/brand_dist.png\", format=\"png\", dpi=1200)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 252, "id": "ebb6c87d", "metadata": {}, "outputs": [], "source": [ "# Some 1 puzzle packs have a second number for pieces, this seems to be legit, updating to be 2 puzzle packs\n", "packs_df.loc[((packs_df.num_puzzles == 1) & (packs_df.piece_count_2.notna())), 'num_puzzles'] = 2" ] }, { "cell_type": "code", "execution_count": 253, "id": "d5459e84", "metadata": {}, "outputs": [], "source": [ "packs_df.piece_count_1 = packs_df.piece_count_1.astype('float').astype('Int64')\n", "packs_df.piece_count_2 = packs_df.piece_count_2.astype('float').astype('Int64')\n", "\n", "avg_pc1 = packs_df['piece_count_1'].median()\n", "avg_pc2 = packs_df['piece_count_2'].median()" ] }, { "cell_type": "code", "execution_count": 254, "id": "38e4c2e2", "metadata": {}, "outputs": [], "source": [ "# puzzles which have no value for piece_1 is replaced with avg values\n", "packs_df['piece_count_1'].fillna(avg_pc1, inplace=True)" ] }, { "cell_type": "code", "execution_count": 255, "id": "a19a8ece", "metadata": {}, "outputs": [], "source": [ "# if 2 puzzles and second piececount is not available, replace with average\n", "packs_df.loc[((packs_df['piece_count_2'].isna() ) &(packs_df['num_puzzles'] ==2)), 'piece_count_2'] = int(avg_pc2)" ] }, { "cell_type": "code", "execution_count": 256, "id": "10d2d338", "metadata": {}, "outputs": [], "source": [ "# puzzles with no second piece_count, make second piece count 0 \n", "# (because num_puzzle = 2 was dealt with earlier)\n", "packs_df.loc[\n", " (packs_df['piece_count_2'].isna()) & (packs_df['num_puzzles'] == 1),\n", " 'piece_count_2',\n", "] = 0" ] }, { "cell_type": "code", "execution_count": 257, "id": "433f63ca", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pack_name 0\n", "piece_count_1 0\n", "piece_count_2 0\n", "difficulty_rating_1 4\n", "difficulty_rating_2 4\n", "brand_2 0\n", "brand_1 0\n", "num_puzzles 0\n", "dtype: int64" ] }, "execution_count": 257, "metadata": {}, "output_type": "execute_result" } ], "source": [ "packs_df.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 258, "id": "05fdf166", "metadata": {}, "outputs": [], "source": [ "packs_df['difficulty_rating_1'].fillna('Average', inplace=True)\n", "packs_df['difficulty_rating_2'].fillna('Average', inplace=True)" ] }, { "cell_type": "markdown", "id": "dfb4cb56", "metadata": {}, "source": [ "### 2.3 Merged data" ] }, { "cell_type": "code", "execution_count": 259, "id": "f95473b8", "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", "
memberIDholdtimepuzzlepackpack_namepiece_count_1piece_count_2difficulty_rating_1difficulty_rating_2brand_2brand_1num_puzzles
0member12.939411Artifact Puzzles Justin Hillgrove Word Travels...Artifact Puzzles Justin Hillgrove Word Travels...456548A-EasyAverageArtifactArtifact2.0
1member10.998885DaVici Puzzles Full Moon Feast DaVici Puzzles ...DaVici Puzzles Full Moon Feast DaVici Puzzles ...195220A-EasyHardDaViciDaVici2.0
\n", "
" ], "text/plain": [ " memberID holdtime puzzlepack \\\n", "0 member1 2.939411 Artifact Puzzles Justin Hillgrove Word Travels... \n", "1 member1 0.998885 DaVici Puzzles Full Moon Feast DaVici Puzzles ... \n", "\n", " pack_name piece_count_1 \\\n", "0 Artifact Puzzles Justin Hillgrove Word Travels... 456 \n", "1 DaVici Puzzles Full Moon Feast DaVici Puzzles ... 195 \n", "\n", " piece_count_2 difficulty_rating_1 difficulty_rating_2 brand_2 brand_1 \\\n", "0 548 A-Easy Average Artifact Artifact \n", "1 220 A-Easy Hard DaVici DaVici \n", "\n", " num_puzzles \n", "0 2.0 \n", "1 2.0 " ] }, "execution_count": 259, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = member_holdtime_df.merge(packs_df, left_on='puzzlepack', right_on='pack_name', how='left')\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": 260, "id": "6cb17d39", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((19387, 11), (19387, 3))" ] }, "execution_count": 260, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape, member_holdtime_df.shape" ] }, { "cell_type": "code", "execution_count": 261, "id": "8d37f54e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(968, 920)" ] }, "execution_count": 261, "metadata": {}, "output_type": "execute_result" } ], "source": [ "member_holdtime_df.puzzlepack.nunique(), packs_df.pack_name.nunique(), " ] }, { "cell_type": "code", "execution_count": 262, "id": "11a58809", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "memberID 0\n", "holdtime 0\n", "puzzlepack 0\n", "pack_name 1085\n", "piece_count_1 1085\n", "piece_count_2 1085\n", "difficulty_rating_1 1085\n", "difficulty_rating_2 1085\n", "brand_2 1085\n", "brand_1 1085\n", "num_puzzles 1085\n", "dtype: int64" ] }, "execution_count": 262, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.isnull().sum()\n", "# about 5% of the data is missing" ] }, { "cell_type": "markdown", "id": "115a36c7", "metadata": {}, "source": [ "
\n", "Tip: # Ideally we should have information about all the packs. Since we do not have this information and it is recommended that we do not drop these rows, we will impute these with the average values.\n", "
" ] }, { "cell_type": "markdown", "id": "aa05a8a3", "metadata": {}, "source": [ "### 2.4 Dealing with Nulls!\n", "**Methodology**\n", "\n", "* num_puzzles $\\longrightarrow$ Count number of times 'Puzzle' appears in puzzlepack\n", "* brand_1, brand_2 $\\longrightarrow$ Take word before 'Puzzle' as brand name\n", "* difficulty_rating $\\longrightarrow$ Take average at brand level from known data\n", "* piece_count $\\longrightarrow$ Take average at brand level from known data" ] }, { "cell_type": "code", "execution_count": 263, "id": "d7c0c333", "metadata": {}, "outputs": [], "source": [ "missing_pack_data = df.loc[df['pack_name'].isna()][['puzzlepack', 'piece_count_1', 'piece_count_2',\n", " 'difficulty_rating_1', 'difficulty_rating_2', 'brand_1', \n", " 'brand_2', 'num_puzzles']]\n", "missing_pack_data.reset_index(drop=True, inplace=True)" ] }, { "cell_type": "code", "execution_count": 264, "id": "1282719e", "metadata": {}, "outputs": [], "source": [ "# getting number of puzzles\n", "missing_pack_data['num_puzzles'] = missing_pack_data['puzzlepack'].apply(lambda x: (x.count('Puzzles')))" ] }, { "cell_type": "code", "execution_count": 265, "id": "f8a92e5f", "metadata": {}, "outputs": [], "source": [ "# packs can have only 1 or two puzzles\n", "for i in range(len(missing_pack_data)):\n", " if missing_pack_data['num_puzzles'][i] < 1:\n", " missing_pack_data['num_puzzles'][i] = 1\n", " elif missing_pack_data['num_puzzles'][i] > 2:\n", " missing_pack_data['num_puzzles'][i] = 2" ] }, { "cell_type": "code", "execution_count": 266, "id": "60ad0f2b", "metadata": {}, "outputs": [], "source": [ "## to limit the number of brand names we will only use the brands that we know\n", "known_brands = list(set(packs_df['brand_1'].unique()).union(set(packs_df['brand_2'].unique())))" ] }, { "cell_type": "code", "execution_count": 267, "id": "57ca7af2", "metadata": {}, "outputs": [], "source": [ "# getting brand_1\n", "for i in range(len(missing_pack_data)):\n", " words = missing_pack_data['puzzlepack'][i].split()[:2]\n", "\n", " if 'Puzzles' in words[1:]: # if its the second or third word\n", " if words[words.index('Puzzles')-1] in (known_brands):\n", " missing_pack_data['brand_1'][i] = words[words.index('Puzzles')-1]\n", " else:\n", " missing_pack_data['brand_1'][i] = 'unknown'\n" ] }, { "cell_type": "code", "execution_count": 268, "id": "7529e7eb", "metadata": {}, "outputs": [], "source": [ "# getting brand_2\n", "for i in range(len(missing_pack_data)):\n", " words = missing_pack_data['puzzlepack'][i].split()[2:]\n", " if 'Puzzles' in words[1:]: # if its the 4th word onwards\n", " if words[words.index('Puzzles')-1] in (known_brands):\n", " missing_pack_data['brand_2'][i] = words[words.index('Puzzles')-1]\n", " else:\n", " missing_pack_data['brand_2'][i] = 'unknown'\n" ] }, { "cell_type": "code", "execution_count": 269, "id": "44c2ab96", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "num_puzzles 0\n", "brand_1 139\n", "brand_2 333\n", "dtype: int64" ] }, "execution_count": 269, "metadata": {}, "output_type": "execute_result" } ], "source": [ "missing_pack_data[['num_puzzles', 'brand_1', 'brand_2']].isnull().sum()" ] }, { "cell_type": "code", "execution_count": 270, "id": "e14ac8a2", "metadata": {}, "outputs": [], "source": [ "# if anything still missing in num_puzzles, brands\n", "missing_pack_data['num_puzzles'].fillna(1, inplace=True)\n", "missing_pack_data['brand_1'].fillna('unknown', inplace=True)\n", "missing_pack_data['brand_2'].fillna('unknown', inplace=True)" ] }, { "cell_type": "code", "execution_count": 271, "id": "dd163317", "metadata": {}, "outputs": [], "source": [ "# brand level average piece count values -- KNOWN data\n", "groupby_brand_pieces_1 = packs_df.groupby(\"brand_1\")[\"piece_count_1\"].mean()\n", "groupby_brand_pieces_2 = packs_df.groupby(\"brand_2\")[\"piece_count_2\"].mean()" ] }, { "cell_type": "code", "execution_count": 272, "id": "424af44b", "metadata": {}, "outputs": [], "source": [ "# getting piece_count_1\n", "for i in range(0, len(missing_pack_data)):\n", " try:\n", " missing_pack_data['piece_count_1'][i] = int(groupby_brand_pieces_1[missing_pack_data['brand_1'][i]])\n", " # getting piece_count_2 if needed\n", " if missing_pack_data['num_puzzles'][i] == 1:\n", " missing_pack_data['piece_count_2'][i] = 0\n", " else:\n", " missing_pack_data['piece_count_2'][i] = int(groupby_brand_pieces_2[missing_pack_data['brand_2'][i]])\n", " except Exception as e:\n", " pass\n", "# print(e)" ] }, { "cell_type": "code", "execution_count": 273, "id": "47c40d25", "metadata": {}, "outputs": [], "source": [ "# brand level most common difficulty values -- KNOWN data\n", "groupby_brand_diff_1 = packs_df.groupby(\"brand_1\")[\"difficulty_rating_1\"].agg(pd.Series.mode)\n", "groupby_brand_diff_2 = packs_df.groupby(\"brand_2\")[\"difficulty_rating_2\"].agg(pd.Series.mode)" ] }, { "cell_type": "code", "execution_count": 274, "id": "dacfe152", "metadata": {}, "outputs": [], "source": [ "# getting difficulty_rating_1\n", "for i in range(0, len(missing_pack_data)):\n", " try:\n", " missing_pack_data['difficulty_rating_1'][i] = groupby_brand_diff_1[missing_pack_data['brand_1'][i]]\n", " # getting difficulty_rating_2 if needed\n", " if missing_pack_data['num_puzzles'][i] == 1:\n", " missing_pack_data['difficulty_rating_2'][i] = 'Average'\n", " else:\n", " missing_pack_data['difficulty_rating_2'][i] = (groupby_brand_diff_2[missing_pack_data['brand_2'][i]])\n", " except Exception as e:\n", " pass" ] }, { "cell_type": "code", "execution_count": 275, "id": "edeef37f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "puzzlepack 0\n", "piece_count_1 0\n", "piece_count_2 0\n", "difficulty_rating_1 0\n", "difficulty_rating_2 0\n", "brand_1 0\n", "brand_2 0\n", "num_puzzles 0\n", "dtype: int64" ] }, "execution_count": 275, "metadata": {}, "output_type": "execute_result" } ], "source": [ "missing_pack_data.isnull().sum()" ] }, { "cell_type": "markdown", "id": "11d4827c", "metadata": {}, "source": [ "**Comments:**\n", "- No missing values in the data\n", "- We have information about 675 members and 910 unique puzzle packs\n" ] }, { "cell_type": "markdown", "id": "a0c1be0f", "metadata": {}, "source": [ "### Making a final packs data" ] }, { "cell_type": "code", "execution_count": 276, "id": "c12eb596", "metadata": {}, "outputs": [], "source": [ "# setting order same as missing pack to concat easily\n", "packs_df = packs_df[['pack_name', 'piece_count_1', 'piece_count_2', 'difficulty_rating_1', \n", " 'difficulty_rating_2', 'brand_1', 'brand_2', 'num_puzzles']]" ] }, { "cell_type": "code", "execution_count": 277, "id": "54ca2cc3", "metadata": {}, "outputs": [], "source": [ "# setting same column names to concat easily\n", "missing_pack_data = missing_pack_data.rename(columns = {'puzzlepack':'pack_name'})" ] }, { "cell_type": "code", "execution_count": 278, "id": "4b3386c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((920, 8), (1085, 8))" ] }, "execution_count": 278, "metadata": {}, "output_type": "execute_result" } ], "source": [ "packs_df.shape, missing_pack_data.shape" ] }, { "cell_type": "code", "execution_count": 279, "id": "10f53433", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2005, 8)" ] }, "execution_count": 279, "metadata": {}, "output_type": "execute_result" } ], "source": [ "packs_updated = pd.concat([packs_df, missing_pack_data])\n", "packs_updated.reset_index(inplace=True, drop = True)\n", "packs_updated.shape" ] }, { "cell_type": "code", "execution_count": 280, "id": "911bf569", "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", "
memberIDholdtimepuzzlepackpack_namepiece_count_1piece_count_2difficulty_rating_1difficulty_rating_2brand_1brand_2num_puzzles
0member12.939411Artifact Puzzles Justin Hillgrove Word Travels...Artifact Puzzles Justin Hillgrove Word Travels...456548A-EasyAverageArtifactArtifact2
1member10.998885DaVici Puzzles Full Moon Feast DaVici Puzzles ...DaVici Puzzles Full Moon Feast DaVici Puzzles ...195220A-EasyHardDaViciDaVici2
\n", "
" ], "text/plain": [ " memberID holdtime puzzlepack \\\n", "0 member1 2.939411 Artifact Puzzles Justin Hillgrove Word Travels... \n", "1 member1 0.998885 DaVici Puzzles Full Moon Feast DaVici Puzzles ... \n", "\n", " pack_name piece_count_1 \\\n", "0 Artifact Puzzles Justin Hillgrove Word Travels... 456 \n", "1 DaVici Puzzles Full Moon Feast DaVici Puzzles ... 195 \n", "\n", " piece_count_2 difficulty_rating_1 difficulty_rating_2 brand_1 brand_2 \\\n", "0 548 A-Easy Average Artifact Artifact \n", "1 220 A-Easy Hard DaVici DaVici \n", "\n", " num_puzzles \n", "0 2 \n", "1 2 " ] }, "execution_count": 280, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_cleaned = member_holdtime_df.merge(packs_updated, left_on='puzzlepack', right_on='pack_name', how='left')\n", "df_cleaned.head(2)" ] }, { "cell_type": "code", "execution_count": 288, "id": "cc5474df", "metadata": {}, "outputs": [], "source": [ "df_cleaned.drop_duplicates(inplace=True)\n", "df_cleaned.reset_index(drop=True, inplace=True)\n", "df_cleaned.to_csv('data/joined_hold_times_data_all.csv')" ] }, { "cell_type": "code", "execution_count": 282, "id": "9a5672d4", "metadata": {}, "outputs": [], "source": [ "difficulty_mapping = {'A-Easy': 1, 'Average': 2, 'Hard': 3, 'Really-Hard': 4}\n", "\n", "df_cleaned['difficulty_rating_1'] = df_cleaned['difficulty_rating_1'].map(lambda x: difficulty_mapping[x], na_action='ignore')\n", "df_cleaned['difficulty_rating_2'] = df_cleaned['difficulty_rating_2'].map(lambda x: difficulty_mapping[x], na_action='ignore')" ] }, { "cell_type": "code", "execution_count": 283, "id": "9ee3fe99", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((19387, 11), (19387, 11), (19387, 3))" ] }, "execution_count": 283, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_cleaned.shape, df.shape, member_holdtime_df.shape" ] }, { "cell_type": "code", "execution_count": 284, "id": "ce9fab27", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "memberID 0\n", "holdtime 0\n", "puzzlepack 0\n", "pack_name 0\n", "piece_count_1 0\n", "piece_count_2 0\n", "difficulty_rating_1 0\n", "difficulty_rating_2 0\n", "brand_1 0\n", "brand_2 0\n", "num_puzzles 0\n", "dtype: int64" ] }, "execution_count": 284, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_cleaned.isnull().sum()\n" ] }, { "cell_type": "code", "execution_count": 285, "id": "699f0ed9", "metadata": {}, "outputs": [], "source": [ "df_cleaned.to_csv('data/df_cleaned.csv', index=False)" ] } ], "metadata": { "celltoolbar": "Tags", "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.7.13" } }, "nbformat": 4, "nbformat_minor": 5 }