diff --git a/notebooks/ai-ml/SparkXGBoostCustomerChurn.ipynb b/notebooks/ai-ml/SparkXGBoostCustomerChurn.ipynb index b3bb823..0cac8ec 100644 --- a/notebooks/ai-ml/SparkXGBoostCustomerChurn.ipynb +++ b/notebooks/ai-ml/SparkXGBoostCustomerChurn.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "c674ba30-373e-4320-b7b4-d6435988e3f1", "metadata": { "tags": [] @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "4cdbeb05-806e-438a-9010-3e9bea1b5cca", "metadata": { "tags": [] @@ -171,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "f579cf36-351b-41ae-8f6f-97b75bde26c4", "metadata": { "tags": [] @@ -198,31 +198,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "ff8fcf6e-6f07-4e8b-ae87-7fef5f132409", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+--------------+------------+\n", - "|MonthlyCharges|TotalCharges|\n", - "+--------------+------------+\n", - "| 0| 0|\n", - "+--------------+------------+\n", - "\n", - "+--------------+------------+\n", - "|MonthlyCharges|TotalCharges|\n", - "+--------------+------------+\n", - "| 0| 11|\n", - "+--------------+------------+\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in [\"MonthlyCharges\", \"TotalCharges\"]]).show()" ] @@ -237,25 +218,12 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "4ccd3420-e805-4ee4-8edd-e040e20228ef", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+--------------+------------+\n", - "|MonthlyCharges|TotalCharges|\n", - "+--------------+------------+\n", - "| 0| 11|\n", - "+--------------+------------+\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "df.select([count(when(col(c).cast(\"float\").isNull(), c)).alias(c) for c in [\"MonthlyCharges\", \"TotalCharges\"]]).show()" ] @@ -270,35 +238,12 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "55346696-18fb-4399-b7f7-f5fa3f3f2003", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+----------+------+-------------+-------+----------+------+------------+----------------+---------------+--------------+------------+----------------+-----------+-----------+---------------+--------------+----------------+--------------------+--------------+------------+-----+\n", - "|customerID|gender|SeniorCitizen|Partner|Dependents|tenure|PhoneService| MultipleLines|InternetService|OnlineSecurity|OnlineBackup|DeviceProtection|TechSupport|StreamingTV|StreamingMovies| Contract|PaperlessBilling| PaymentMethod|MonthlyCharges|TotalCharges|Churn|\n", - "+----------+------+-------------+-------+----------+------+------------+----------------+---------------+--------------+------------+----------------+-----------+-----------+---------------+--------------+----------------+--------------------+--------------+------------+-----+\n", - "|7590-VHVEG|Female| 0| Yes| No| 1| No|No phone service| DSL| No| Yes| No| No| No| No|Month-to-month| Yes| Electronic check| 29.85| 29.85| No|\n", - "|5575-GNVDE| Male| 0| No| No| 34| Yes| No| DSL| Yes| No| Yes| No| No| No| One year| No| Mailed check| 56.95| 1889.5| No|\n", - "|3668-QPYBK| Male| 0| No| No| 2| Yes| No| DSL| Yes| Yes| No| No| No| No|Month-to-month| Yes| Mailed check| 53.85| 108.15| Yes|\n", - "|7795-CFOCW| Male| 0| No| No| 45| No|No phone service| DSL| Yes| No| Yes| Yes| No| No| One year| No|Bank transfer (au...| 42.3| 1840.75| No|\n", - "|9237-HQITU|Female| 0| No| No| 2| Yes| No| Fiber optic| No| No| No| No| No| No|Month-to-month| Yes| Electronic check| 70.7| 151.65| Yes|\n", - "|9305-CDSKC|Female| 0| No| No| 8| Yes| Yes| Fiber optic| No| No| Yes| No| Yes| Yes|Month-to-month| Yes| Electronic check| 99.65| 820.5| Yes|\n", - "|1452-KIOVK| Male| 0| No| Yes| 22| Yes| Yes| Fiber optic| No| Yes| No| No| Yes| No|Month-to-month| Yes|Credit card (auto...| 89.1| 1949.4| No|\n", - "|6713-OKOMC|Female| 0| No| No| 10| No|No phone service| DSL| Yes| No| No| No| No| No|Month-to-month| No| Mailed check| 29.75| 301.9| No|\n", - "|7892-POOKP|Female| 0| Yes| No| 28| Yes| Yes| Fiber optic| No| No| Yes| Yes| Yes| Yes|Month-to-month| Yes| Electronic check| 104.8| 3046.05| Yes|\n", - "|6388-TABGU| Male| 0| No| Yes| 62| Yes| No| DSL| Yes| Yes| No| No| No| No| One year| No|Bank transfer (au...| 56.15| 3487.95| No|\n", - "+----------+------+-------------+-------+----------+------+------------+----------------+---------------+--------------+------------+----------------+-----------+-----------+---------------+--------------+----------------+--------------------+--------------+------------+-----+\n", - "only showing top 10 rows\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "# Drop records where TotalCharges has null or string values that can't be cast to float\n", "df = df.filter(col(\"TotalCharges\").cast(\"float\").isNotNull())\n", @@ -323,40 +268,12 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "b05a2d91-77ae-4bea-9b4d-a8f709219705", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAALRCAYAAABh+YPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABpBElEQVR4nO3deVxVdf7H8feVTUC4gspmKDruguaSis7kLi64tWjpkFvmpNk4aYvNr0Zb1KyxzcmWMc0tbVHLMhIzbQzNLUyTTA1TJxAXFhcEhO/vj453uuKGCRfx9Xw87uPRPedzz/2cw+XG2+8532MzxhgBAAAAAFTB1Q0AAAAAQFlBQAIAAAAACwEJAAAAACwEJAAAAACwEJAAAAAAwEJAAgAAAAALAQkAAAAALAQkAAAAALAQkAAAAADAQkACIEn67rvvNGzYMNWqVUsVK1ZUpUqV1Lx5c02fPl3Hjx8vkfdcuXKlJk2aVCLbLisOHz6sxx57TFFRUapUqZIqVqyounXr6q9//av27Nnj6vYkSYmJiZo0aZIyMzOvqH7o0KGqVKlSyTZlKSws1Pz589WlSxdVrVpVHh4eCgoKUmxsrFasWKHCwsISe++y8PlctGiRXnrppcvWzZ07Vzab7bKPiIiIEu+5LJo0aZJsNtsV169YsUK9e/dWcHCwPD09FRgYqM6dO2vhwoXKz8+XJO3fv182m00vvPBCSbUNwEXcXd0AANd76623NHr0aNWvX18PP/ywGjVqpPz8fG3ZskWvv/66NmzYoGXLll3z9125cqX+9a9/ufyP0JKyadMmxcbGyhijBx54QNHR0fL09NTu3bu1YMECtWrVShkZGa5uU4mJiZo8ebKGDh2qypUru7odhzNnzqhfv35atWqV7rrrLs2aNUshISE6cuSI4uPjdeedd2rJkiXq27dvibx/Wfh8Llq0SDt37tS4ceMuWderVy9t2LDBaVl0dLTuuOMOjR8/3rHMy8urJNosN4wxGj58uObOnauePXtqxowZCg8PV1ZWlr788kuNHj1aR48e1V//+ldXtwqgBBGQgBvchg0bdP/996tr165avny50x9QXbt21fjx4xUfH+/CDsuunJwcVaxY8YL/Mp2dna2+ffuqYsWKSkxM1E033eRY16FDB40aNUoffPBBabZ73XnooYf0+eef65133tE999zjtO62227T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cuzPhbYdFhamwsLCq57trkqVKkWWeXl5/e7JDdzd3YtsOyQkRJKcfj7Dhw+Xt7e3Xn/9dUnSv/71L3l7e2v48OGX3H6NGjUk6Yo/m8eOHbvo8Tu/J6nocTl3AXxxjsuF3m/Tpk3q1q2bpF9nh/z666+1efNm/f3vf3fa/pEjRyTJafKO0nBuevmEhARJv/48oqOj1bx58yK1536e5y87dyzP/f7ccccdRX5/nnvuORljLnmLgKVLl2rAgAGqXr26FixYoA0bNmjz5s0aPny443f0ty73Wc7IyFBhYeFF+76c4n7mLtbX1XyWznep75mSeD8AzpjFDriBubm5qXPnzvrss8906NChK/pjzcvLS7m5uUWWn/8HqK+vryZPnqzJkyfr8OHDjtGk3r1764cffrjke1SpUkVnz57VkSNHnEKSMUZpaWm65ZZbrnAPL61q1aqSpIkTJ+q22267YE39+vWdnl/pqEdMTIxWrVqlFStW6K677rpk7bk/eFJTU4us++WXX1ShQgXHSEXFihUvePzPD3Il7ezZszp27JjTH2tpaWmSnP+As9vtGjJkiP79739rwoQJmjNnjgYNGnTZ6cQ7duwoDw8PLV++XH/5y18u20+VKlUuevyk//2sr6ULfRYWL14sDw8PffLJJ06jGMuXL3eqO/e5PnTokMLDw695bxfTqVMnRUZGaubMmapUqZK2bdumBQsWXLD23M/z/GV16tSR9L9j+uqrr150przg4OCL9rJgwQLVqlVLS5YscTqWF/p8X4mAgADZbLaL9n05LVu2VGBgoD766CNNnTr1mo5wVqxYUVlZWUWWX+z39lq+N4DiYwQJuMFNnDhRxhiNHDlSeXl5Rdbn5+drxYoVjucRERH67rvvnGrWrFmjkydPXvQ9goODNXToUN19993avXu343Sxi/3LZ+fOnSWpyB9uH374oU6dOuVY/3vVr19fdevW1fbt29WyZcsLPn57Sk9xjBgxQiEhIXrkkUf03//+94I1S5cudfRRvXp1LVq0yHHqk/TrKUMffvihoqOjHacKRkREKD093fGv95KUl5enzz///Kr6lK7+X6AXLlzo9HzRokWSfj218bcefPBBHT16VHfccYcyMzMveDrX+UJCQnTvvffq888/17x58y5Ys2/fPsdnsXPnztq1a5e2bdvmVDNv3jzZbDZ17NjxSnfL4WqOi81mk7u7u9MpVzk5OZo/f75TXbdu3eTm5qZZs2ZdtodrPTLw4IMP6tNPP9XEiRMVHBysO++884J15/98ExMT9fPPPzt+vu3atVPlypW1a9eui/7+nBu1vRCbzSZPT0+nMJCWlqaPPvroqvbL19dXrVq10tKlS51GoE6cOOH0HXYxHh4eevTRR/XDDz/o6aefvmBNenq6vv7662L3FhERoR9//NEp/B07dkyJiYnF3haAkscIEnCDi46O1qxZszR69Gi1aNFC999/vxo3bqz8/Hx9++23evPNNxUZGek4hz8uLk5PPPGEnnzySbVv3167du3SzJkzZbfbnbbbunVrxcbGqkmTJgoICFBycrLmz5/v9Md+VFSUJOm5555Tjx495ObmpiZNmqhr166KiYnRo48+quzsbLVr107fffed/vGPf6hZs2aKi4u7Zvv/xhtvqEePHoqJidHQoUNVvXp1HT9+XMnJydq2bZvef//9q9qu3W7XRx99pNjYWDVr1szpRrF79uzRggULtH37dt12222qUKGCpk+frsGDBys2NlajRo1Sbm6unn/+eWVmZmratGmO7Q4cOFBPPvmk7rrrLj388MM6c+aMXnnlFRUUFFz1MTj3c3j55Zc1ZMgQeXh4qH79+pcMh56envrnP/+pkydP6pZbblFiYqKeeeYZ9ejRQ3/84x+dauvVq6fu3bvrs88+0x//+Ec1bdr0ivqaMWOGfvrpJw0dOlSff/65+vfvr+DgYB09elQJCQmaM2eOFi9erCZNmuhvf/ub5s2bp169eumpp55SzZo19emnn+q1117T/fffr3r16l31cTn/83mpP/p79eqlGTNmaNCgQbrvvvt07NgxvfDCC0XuYRMREaHHH39cTz/9tHJycnT33XfLbrdr165dOnr0qCZPnuzoYenSpZo1a5ZatGihChUqqGXLlsXel9/685//rIkTJ+qrr77S//3f/110f7Zs2aJ7771Xd955pw4ePKi///3vql69uuP000qVKunVV1/VkCFDdPz4cd1xxx0KCgrSkSNHtH37dh05cuSSATA2NlZLly7V6NGjdccdd+jgwYN6+umnFRoaekWn4l7I008/re7duzvu4VZQUKDnnntOvr6+lzzd75yHH35YycnJ+sc//qFNmzZp0KBBjhvFfvXVV3rzzTc1efJktWvXrlh9xcXF6Y033tCf//xnjRw5UseOHdP06dPl7+9/VfsJoIS5coYIAGVHUlKSGTJkiKlRo4bx9PR0TKn95JNPmvT0dEddbm6ueeSRR0x4eLjx9vY27du3N0lJSUVmsXvsscdMy5YtHfcWql27tvnb3/7mmEr43LbuvfdeU61aNWOz2YrcB+nRRx81NWvWNB4eHiY0NNTcf//9F70P0vl03gxexjjft+S3tm/fbgYMGGCCgoKMh4eHCQkJMZ06dXKazerczF4Xuo/SpaSlpZlHH33UNG7c2Pj4+BgvLy9Tp04dM2rUKLNjxw6n2uXLl5vWrVubihUrGl9fX9O5c2fz9ddfF9nmypUrzc0332y8vb1N7dq1zcyZMy95H6Tznf+zMsaYiRMnmrCwMFOhQoUrvg/Sd999Zzp06GC8vb1NYGCguf/++y86rfncuXONJLN48eKLbvdCzp49a9555x3TqVMnExgYaNzd3U21atVMjx49zKJFi5xm/fv555/NoEGDTJUqVYyHh4epX7++ef755y96H6Tz6bwZGi/1+bzYsTXGmLffftvUr1/f8bmfOnWqmT179gVnCpw3b5655ZZbTMWKFU2lSpVMs2bNnKaXP378uLnjjjtM5cqVHT1cqUv1OHToUOPu7u40++M5v70PUlxcnKlcubLx9vY2PXv2NHv27ClSv27dOtOrVy8TGBhoPDw8TPXq1U2vXr3M+++/f9kep02b5rhXWsOGDc1bb731uz/LH3/8sWnSpIljKvpp06Zd0X2Qfuujjz4yvXr1MtWqVTPu7u4mICDAdOzY0bz++usmNzfXGFO8z5IxxrzzzjumYcOGpmLFiqZRo0ZmyZIlF53F7kLbPLcPR44ccVp+7ud1pbNQArg8mzG/OZ8DAIAScG42vv379190di6Ujry8PEVEROiPf/yj3nvvvSLr586dq2HDhmnz5s2/e7QKAK5HnGIHACgRubm52rZtmzZt2qRly5ZpxowZhCMXOnLkiHbv3q05c+bo8OHDeuyxx1zdEgCUSQQkAECJSE1NVdu2beXv769Ro0Zp7Nixrm7phvbpp59q2LBhCg0N1WuvvXbBqb0BABKn2AEAAACAhWm+AQAAAMBCQAIAAAAACwEJAAAAACzldpKGwsJC/fLLL/Lz83O6SzcAAACAG4sxRidOnFBYWJgqVLj0GFG5DUi//PKLwsPDXd0GAAAAgDLi4MGDuummmy5ZU24Dkp+fn6RfD4K/v7+LuwEAAADgKtnZ2QoPD3dkhEsptwHp3Gl1/v7+BCQAAAAAV3TpDZM0AAAAAICFgAQAAAAAlt8VkKZOnSqbzaZx48Y5lhljNGnSJIWFhcnb21sdOnTQ999/7/S63NxcjR07VlWrVpWvr6/69OmjQ4cOOdVkZGQoLi5OdrtddrtdcXFxyszM/D3tAgAAAMAlXfU1SJs3b9abb76pJk2aOC2fPn26ZsyYoblz56pevXp65pln1LVrV+3evdtxUdS4ceO0YsUKLV68WFWqVNH48eMVGxurrVu3ys3NTZI0aNAgHTp0SPHx8ZKk++67T3FxcVqxYsXVtgwAAACUCwUFBcrPz3d1G2WGh4eHI0f8XjZjjCnui06ePKnmzZvrtdde0zPPPKObb75ZL730kowxCgsL07hx4/Too49K+nW0KDg4WM8995xGjRqlrKwsVatWTfPnz9fAgQMl/W9K7pUrVyomJkbJyclq1KiRNm7cqNatW0uSNm7cqOjoaP3www+qX7/+ZXvMzs6W3W5XVlYWkzQAAACgXDDGKC0tjTOrLqBy5coKCQm54EQMxckGVzWCNGbMGPXq1UtdunTRM88841iekpKitLQ0devWzbHMy8tL7du3V2JiokaNGqWtW7cqPz/fqSYsLEyRkZFKTExUTEyMNmzYILvd7ghHktSmTRvZ7XYlJiZeMCDl5uYqNzfX6SAAAAAA5cm5cBQUFCQfH58rmpWtvDPG6PTp00pPT5ckhYaG/q7tFTsgLV68WNu2bdPmzZuLrEtLS5MkBQcHOy0PDg7Wzz//7Kjx9PRUQEBAkZpzr09LS1NQUFCR7QcFBTlqzjd16lRNnjy5uLsDAAAAXBcKCgoc4ahKlSqubqdM8fb2liSlp6crKCjod51uV6xJGg4ePKi//vWvWrBggSpWrHjRuvOTrDHmsun2/JoL1V9qOxMnTlRWVpbjcfDgwUu+HwAAAHA9OXfNkY+Pj4s7KZvOHZffe21WsQLS1q1blZ6erhYtWsjd3V3u7u5at26dXnnlFbm7uztGjs4f5UlPT3esCwkJUV5enjIyMi5Zc/jw4SLvf+TIkSKjU+d4eXk5bgrLzWEBAABQXnFa3YVdq+NSrIDUuXNn7dixQ0lJSY5Hy5YtNXjwYCUlJal27doKCQlRQkKC4zV5eXlat26d2rZtK0lq0aKFPDw8nGpSU1O1c+dOR010dLSysrK0adMmR80333yjrKwsRw0AAAAAXGvFugbJz89PkZGRTst8fX1VpUoVx/Jx48ZpypQpqlu3rurWraspU6bIx8dHgwYNkiTZ7XaNGDFC48ePV5UqVRQYGKgJEyYoKipKXbp0kSQ1bNhQ3bt318iRI/XGG29I+nWa79jY2CuawQ4AAADA1bPZbFq2bJn69evn6lZK3e+6UeyFPPLIIxo3bpxGjx6tli1b6r///a9WrVrluAeSJL344ovq16+fBgwYoHbt2snHx0crVqxwuphq4cKFioqKUrdu3dStWzc1adJE8+fPv9btAgAAADectLQ0jR07VrVr15aXl5fCw8PVu3dvffHFF65uzeWu6j5I1wPugwQAAIDy5MyZM0pJSVGtWrUuOWHa5ezfv1/t2rVT5cqVNXnyZDVp0kT5+fn6/PPP9eabb+qHH34okRGk/Px8eXh4XLPtne9Sx6c42eCajyABAAAAKLtGjx4tm82mTZs26Y477lC9evXUuHFjPfTQQ9q4caOj7ujRo+rfv798fHxUt25dffzxx451c+fOVeXKlZ22u3z5cqeJEiZNmqSbb75Zb7/9tmOk6tys1P/+978vum1XIyABAAAAN4jjx48rPj5eY8aMka+vb5H1vw09kydP1oABA/Tdd9+pZ8+eGjx4sI4fP16s99u7d6/ee+89ffjhh0pKSrqm2y4pBCQAAADgBrF3714ZY9SgQYPL1g4dOlR333236tSpoylTpujUqVNOs0xfiby8PM2fP1/NmjVTkyZNHCNM12LbJYWABAAAANwgzk0/cCX3DGrSpInjv319feXn56f09PRivV/NmjVVrVq1Etl2SSEgAQAAADeIunXrymazKTk5+bK150+oYLPZVFhYKEmqUKGCzp/rLT8/v8g2LnQa3+W27WoEJAAAAOAGERgYqJiYGP3rX//SqVOniqzPzMy8ou1Uq1ZNJ06ccNrGb68xup4RkAAAAIAbyGuvvaaCggK1atVKH374ofbs2aPk5GS98sorio6OvqJttG7dWj4+Pnr88ce1d+9eLVq0SHPnzi3ZxksJAQkAAAC4gdSqVUvbtm1Tx44dNX78eEVGRqpr16764osvNGvWrCvaRmBgoBYsWKCVK1cqKipK7777riZNmlSyjZcS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dixfu3atgoKCVLlyZbVv317PPvusgoKCJElbt25Vfn6+unXr5qgPCwtTZGSkEhMTFRMTow0bNshutzvCkSS1adNGdrtdiYmJBCQAAADcsM4NRJwLSfifypUrX3SgpjiKHZB27Nih6OhonTlzRpUqVdKyZcvUqFEjSVKPHj105513qmbNmkpJSdETTzyhTp06aevWrfLy8lJaWpo8PT0VEBDgtM3g4GClpaVJktLS0hyB6reCgoIcNReSm5ur3Nxcx/Ps7Ozi7hoAAABQptlsNoWGhiooKEj5+fmubqfM8PDw+N0jR+cUOyDVr19fSUlJyszM1IcffqghQ4Zo3bp1atSokQYOHOioi4yMVMuWLVWzZk19+umnuu222y66TWOM0/DghYYKz68539SpUzV58uTi7g4AAABw3XFzc7tmgQDOij3Nt6enp+rUqaOWLVtq6tSpatq0qV5++eUL1oaGhqpmzZras2ePpF+HBPPy8pSRkeFUl56eruDgYEfN4cOHi2zryJEjjpoLmThxorKyshyPgwcPFnfXAAAAANzgfvd9kIwxTqe2/daxY8d08OBBhYaGSpJatGghDw8PJSQkOGpSU1O1c+dOtW3bVpIUHR2trKwsbdq0yVHzzTffKCsry1FzIV5eXo7px889AAAAAKA4inWK3eOPP64ePXooPDxcJ06c0OLFi7V27VrFx8fr5MmTmjRpkm6//XaFhoZq//79evzxx1W1alX1799fkmS32zVixAiNHz9eVapUUWBgoCZMmKCoqCjHrHYNGzZU9+7dNXLkSL3xxhuSpPvuu0+xsbFM0AAAAACgRBUrIB0+fFhxcXFKTU2V3W5XkyZNFB8fr65duyonJ0c7duzQvHnzlJmZqdDQUHXs2FFLliyRn5+fYxsvvvii3N3dNWDAAOXk5Khz586aO3eu0zmUCxcu1IMPPuiY7a5Pnz6aOXPmNdplAAAAALgwmymnt+LNzs6W3W5XVlbWjX263SS7qzuAq03KcnUHAAAALlWcbPC7r0ECAAAAgPKCgAQAAAAAFgISAAAAAFgISAAAAABgISABAAAAgIWABAAAAAAWAhIAAAAAWAhIAAAAAGAhIAEAAACAhYAEAAAAABYCEgAAAABYCEgAAAAAYCEgAQAAAICFgAQAAAAAFgISAAAAAFgISAAAAABgISABAAAAgIWABAAAAAAW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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Aggregate data\n", "df_plot_data = df.groupBy(\"Contract\", \"Churn\").count()\n", @@ -383,33 +300,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "628616a0-992f-4b6c-8668-6a3e6b74e179", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+4AAAJyCAYAAABaN5oyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABf90lEQVR4nO3df3zN9f//8fvZ7x+2YdgPZptMkomQ0NuP/MrPIkkRovKOlPCp8Cmj3vOjiIjSx68Ib/3gXe8QIj/eKqzkRyreKGJNrM2P2WZ7fv9w2fk6zjbbzM5rc7teLudS5/V6Pl6vxznbns79vF7ndWzGGCMAAAAAAGBJbq5uAAAAAAAA5I3gDgAAAACAhRHcAQAAAACwMII7AAAAAAAWRnAHAAAAAMDCCO4AAAAAAFgYwR0AAAAAAAsjuAMAAAAAYGEEdwAAAAAALIzgDgAodd566y3ZbDbVrVvX1a3cUPHx8Vq1atU1xw0YMEA2m+2atwEDBtzwnktSXFycbDab/vzzzxLZ32effaauXbsqJCREXl5eqlixotq0aaMPPvhAmZmZkqSjR4/KZrPpjTfeKJGeAAA3Bw9XNwAAQGHNnz9fkrR//359++23atKkiYs7ujHi4+PVs2dPPfDAA/mOe/nll/X3v//dfv+7777T0KFDFR8fr9atW9uXV65c+Ua1WqYZYzRw4EAtXLhQnTp10rRp0xQREaGUlBRt2rRJQ4YM0Z9//qnnnnvO1a0CAMoogjsAoFTZtWuXfvjhB3Xu3Fmff/655s2bV2aDe0HdcsstuuWWW+z3L168KEmKiYnR3Xff7aq28nXhwgX5+fm5uo0Cef3117Vw4UKNHz9er7zyisO6rl276oUXXtChQ4dKtKesrCxdunRJ3t7eJbpfAIBrcKo8AKBUmTdvniRp0qRJatasmZYvX64LFy44jfv999/11FNPKSIiQl5eXgoPD1fPnj31xx9/2Mf89ddfGjlypGrUqCFvb29VqVJFnTp10k8//WQfc+bMGQ0ZMkRVq1aVl5eXatSoobFjxyo9Pd0+Juf06IULFzr1YbPZFBcXZ7+fc3r3/v379cgjjygoKEghISEaOHCgUlJSHOrOnz+vRYsW2U91b9Wq1XU8c9KGDRvUpk0bBQYGys/PT82bN9eXX37pMKag/RXlMX/33Xfq2bOnKlSoYH+jwRij2bNnq379+vL19VWFChXUs2dPHT58uMCP69ixY+rRo4cCAwMVFBSkvn376tSpU/b1gwYNUsWKFXP9Pbn33nt1++2357ntzMxMTZ48WbVr19bLL7+c65jQ0FDdc889TsunTZum6OholStXTk2bNtU333zjsL5Vq1a5/kwHDBigqKgo+/2c53rKlCl67bXXFB0dLW9vb23atKnAPy8AQOlGcAcAlBppaWlatmyZGjdurLp162rgwIE6e/asPvzwQ4dxv//+uxo3bqyVK1dqxIgRWrNmjaZPn66goCAlJydLks6ePat77rlH7777rh5//HF99tlneuedd1SrVi2dPHlS0uUj161bt9b777+vESNG6PPPP1ffvn01ZcoU9ejR47oey4MPPqhatWrp448/1ksvvaSlS5fq+eeft6//+uuv5evrq06dOunrr7/W119/rdmzZxd5f0uWLFH79u0VGBioRYsWacWKFapYsaI6dOjgFN4L0l9R9OjRQzVr1tSHH36od955R5I0ePBgDR8+XG3bttWqVas0e/Zs7d+/X82aNXN4kyU/3bt3V82aNfXRRx8pLi5Oq1atUocOHeyfO3/uueeUnJyspUuXOtT9+OOP2rRpk4YOHZrntnft2qUzZ87o/vvvl81mK/Bjffvtt7V+/XpNnz5dH3zwgc6fP69OnTpdV5h+6623tHHjRr3xxhtas2aNateubV93I35eAAALMQAAlBLvv/++kWTeeecdY4wxZ8+eNeXKlTN/+9vfHMYNHDjQeHp6mh9//DHPbU2YMMFIMuvXr89zzDvvvGMkmRUrVjgsnzx5spFk1q1bZ4wx5siRI0aSWbBggdM2JJlx48bZ748bN85IMlOmTHEYN2TIEOPj42Oys7Pty/z9/U3//v3z7C8vmzZtMpLMhx9+aIwx5vz586ZixYqma9euDuOysrLMHXfcYe66665C91eUx/zKK684jPv666+NJDN16lSH5ceOHTO+vr7mhRdeyPdx5mz3+eefd1j+wQcfGElmyZIl9mUtW7Y09evXdxj39NNPm8DAQHP27Nk897F8+XKH37lryXleYmNjzaVLl+zLd+zYYSSZZcuWOfTUsmVLp23079/fREZGOm3zlltuMRkZGQ5jC/P7BAAovTjiDgAoNebNmydfX1/17t1bklSuXDk99NBD2rp1qw4ePGgft2bNGrVu3Vq33XZbnttas2aNatWqpbZt2+Y5ZuPGjfL391fPnj0dludcnT23I9UF1a1bN4f79erV08WLF5WUlFTkbeZl+/btOnPmjPr3769Lly7Zb9nZ2brvvvu0c+dOnT9//ob39+CDDzrc//e//y2bzaa+ffs69BUaGqo77rhDX331VYG226dPH4f7vXr1koeHhzZt2mRf9txzz2n37t36z3/+I0lKTU3V4sWL1b9/f5UrV67IjykvnTt3lru7u/1+vXr1JEm//vprkbfZrVs3eXp65rnuSjfy9wkAUPII7gCAUuHQoUPasmWLOnfuLGOM/vrrL/3111/2UJ1zpXlJOnXqlKpVq5bv9goy5vTp0woNDXU6RbpKlSry8PDQ6dOni/hopODgYIf7ORcZS0tLK/I285JzynnPnj3l6enpcJs8ebKMMTpz5swN7y8sLMypL2OMQkJCnPr65ptvCvw1b6GhoQ73PTw8FBwc7PDzuf/++xUVFaW3335bkrRw4UKdP38+39PkJal69eqSpCNHjhSolxwl8fzd6P0BAKyDq8oDAEqF+fPnyxijjz76SB999JHT+kWLFum1116Tu7u7KleurOPHj+e7vYKMCQ4O1rfffitjjEN4T0pK0qVLl1SpUiVJko+PjyQ5XLBO0nUF++KU0+fMmTPzvMp8SEhIobZZlMd89RsglSpVks1m09atW3O9OnpBr5iemJioqlWr2u9funRJp0+fdgizbm5uGjp0qMaMGaOpU6dq9uzZatOmjW699dZ8t92oUSNVrFhR//rXvzRx4sRCfc79Wnx8fHL9zHteb1gU574BAKULR9wBAJaXlZWlRYsW6ZZbbtGmTZucbiNHjtTJkye1Zs0aSVLHjh21adMm/fzzz3lus2PHjvrll1+0cePGPMe0adNG586d06pVqxyWv//++/b10uXQ6+Pjoz179jiM+9e//lWUh2vn7e1dLEdMmzdvrvLly+vHH39Uo0aNcr15eXkVapvF8Zi7dOkiY4x+//33XHuKjY0t0HY++OADh/srVqzQpUuXnK7Y/sQTT8jLy0t9+vTRzz//rGeeeeaa2/b09NSLL76on376Sa+++mquY5KSkuyn4BdGVFSUfvnlF4c3P06fPq3t27cXelsAgLKNI+4AAMtbs2aNTpw4ocmTJ+f69Vl169bVrFmzNG/ePHXp0kUTJkzQmjVr1KJFC40ZM0axsbH666+/tHbtWo0YMUK1a9fW8OHD9c9//lP333+/XnrpJd11111KS0vT5s2b1aVLF7Vu3Vr9+vXT22+/rf79++vo0aOKjY3Vtm3bFB8fr06dOtk/H5/zOe358+frlltu0R133KEdO3Y4XcW8sGJjY/XVV1/ps88+U1hYmAICAq55hDg35cqV08yZM9W/f3+dOXNGPXv2VJUqVXTq1Cn98MMPOnXqlObMmVOobRbHY27evLmeeuopPf7449q1a5datGghf39/nTx5Utu2bVNsbKyefvrpa27nk08+kYeHh9q1a6f9+/fr5Zdf1h133KFevXo5jCtfvrz69eunOXPmKDIyUl27di1Qn//zP/+jAwcOaNy4cdqxY4ceffRRRUREKCUlRVu2bNHcuXM1fvx4NW/evMCPXZIee+wxvfvuu+rbt6+efPJJnT59WlOmTFFgYGChtgMAKPsI7gAAy5s3b568vLz0+OOP57q+UqVK6t69uz766CP98ccfqlq1qnbs2KFx48Zp0qRJOn36tCpXrqx77rlHFStWlCQFBARo27ZtiouLswevChUqqHHjxnrqqackXT6VedOmTRo7dqxef/11nTp1SlWrVtWoUaM0btw4hx6mTp0qSZoyZYrOnTune++9V//+978dvo+7sGbMmKGhQ4eqd+/eunDhglq2bFngC7ZdrW/fvqpevbqmTJmiwYMH6+zZs6pSpYrq169vv9heYRXHY3733Xd19913691339Xs2bOVnZ2t8PBwNW/eXHfddVeBtvHJJ58oLi5Oc+bMkc1mU9euXTV9+vRczyJ4+OGHNWfOHD399NNycyvYiYc2m00LFixQ9+7dNXfuXA0fPlzJyckKCAhQ/fr1NXny5Dx/N/PTvHlzLVq0SJMmTdL999+vGjVqaNy4cVq9enWRf84AgLLJZowxrm4CAACgJIwcOVJz5szRsWPHnC7oBgCAVXHEHQAAlHnffPONfvnlF82ePVuDBw8mtAMAShWOuAMAgDLPZrPJz89PnTp10oIFC27Id7cDAHCjcMQdAACUeRynAACUZnwdHAAAAAAAFkZwBwAAAADAwgjuAAAAAABYGJ9xl5Sdna0TJ04oICBANpvN1e0AAAAAAMo4Y4zOnj2r8PBwubnlf0yd4C7pxIkTioiIcHUbAAAAAICbzLFjx1StWrV8xxDcJQUEBEi6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76769etr3LhxTuumTZumNm3a6OWXX1atWrU0YMAAPfPMM3r99ddLtEeXBvfnn39e33zzjeLj43Xo0CEtXbpUc+fO1dChQyVdPkV++PDhio+P18qVK7Vv3z4NGDBAfn5+evTRRyVJQUFBGjRokEaOHKkvv/xS33//vfr27avY2Fj7VeYBAAAAAMjL5MmTtWjRIv34448Oyw8cOKDmzZs7LGvevLkOHjxYol8/7tKryjdu3FgrV67U6NGjNWHCBEVHR2v69Onq06ePfcwLL7ygtLQ0DRkyRMnJyWrSpInWrVungIAA+5g333xTHh4e6tWrl9LS0tSmTRstXLhQ7u7urnhYAAAAAIBSpEWLFurQoYPGjBmjAQMG2Jfndu00V1xt3qXBXZK6dOmiLl265LneZrMpLi5OcXFxeY7x8fHRzJkzNXPmzBvQIQAAAACgrJs0aZLq16+vWrVq2ZfVqVNH27Ztcxi3fft21apVq0QPFLs8uAMAAAAA4GqxsbHq06ePwwHhkSNHqnHjxnr11Vf18MMP6+uvv9asWbM0e/bsEu2N4A4AAAAAKFZHJ3V2dQtF8uqrr2rFihX2+3feeadWrFihV155Ra+++qrCwsI0YcIEh9PpSwLBHQAAAABw08ntK90iIyN18eJFh2UPPvigHnzwwRLqKncuvao8AAAAAADIH8EdAAAAAAALI7gDAAAAAGBhBHcAAAAAACyM4A4AAAAAgIUR3AEAAAAAsDCCOwAAAAAAFkZwBwAAAADAwgjuAAAAAABYGMEdAAAAAAAL83B1AwAAAACAMiYuqIT3l1LgocYYtWvXTu7u7vriiy8c1s2ePVujR4/W3r17Vb169eLussg44g4AAAAAuGnYbDYtWLBA3377rd5991378iNHjujFF1/UjBkzLBXaJYI7AAAAAOAmExERoRkzZmjUqFE6cuSIjDEaNGiQ2rRpo7vuukudOnVSuXLlFBISoscee0x//vmnvfajjz5SbGysfH19FRwcrLZt2+r8+fM3tF+COwAAAADgptO/f3+1adNGjz/+uGbNmqV9+/ZpxowZatmyperXr69du3Zp7dq1+uOPP9SrVy9J0smTJ/XII49o4MCBOnDggL766iv16NFDxpgb2iufcQcAAAAA3JTmzp2runXrauvWrfroo480b9483XnnnYqPj7ePmT9/viIiIvTLL7/o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GOvOBWVpHjCGucCYsjkXXAvB/Qr/+te/8r29+eabDn9sDzzwgOnSpYs5deqUOXjwoOnatauJjo42v/76qzEm9z/Opk2bmrFjxxpjjFm2bJmpUKGCGTNmjH39mDFjTLt27Rxq4uPjTXR0tFOg9/DwyHOSsdls5o8//jDGGNO7d2/TqlUrc/78eWOMMRcvXjRdunQxPXv2dKjx8/Oz996gQQOnifKDDz4wderUcdrPhg0bzHPPPWcqVapkPD09Tbdu3cxnn31msrKycu2tRo0a5uOPPzbGXJ703N3dzZIlS+zrP/nkE1OzZk2HGl9fX/Pf//7Xfj8rK8t4enqaxMREY4wx69atM+Hh4Q41TNJla5IuygTdqlUr07t371z7SU9PN4888ohp1aqVw/Iffvgh39s///lPp59nv379zN1332127txp1q9fbxo1amQaNmxozpw5Y4y5/Dtgs9kcatq2bWueeOIJk5qaal5//XVTrVo188QTT9jXDxo0yDzwwAMOz3G1atVMVFSUw81ms5mqVauaqKgoEx0d7fRzyZkHnnzySVO/fn37m2t//vmnadasmRk4cKBDTUBAgDly5IgxxpgmTZqYSZMmOayfOXOmadCggdN+FixYYO6//37j6elpgoODzXPPPWf27t3r9LznuO2228zcuXONMcZs3LjR+Pj4mLffftu+fsGCBea2225zqOnYsaMZPHiwfW6ZOHGi6dixozHGmF9++cVERUWZcePGOdQwD5TMPGDlF2rMA8wDzANl6/WAMYWfC8rSPJDzPDMXlK25oCAI7lfIOXpss9nyvF35JFepUsXs2bPHYRtDhgwx1atXN//9739z/aEEBgaagwcPGmMuh08PDw+HCXnv3r0mJCTEqbcdO3aYWrVqmZEjR5qMjAxjTMGDe26h/5tvvjHVqlVzWBYcHGx27dplf2y7d+92WH/o0CHj6+ub534yMjLMP//5T9OhQwfj7u5uwsPDzZgxY+yPN4evr6/9DQJjjPH09DT79u2z3z969Kjx8/NzqImMjDTbtm2z3z9x4oSx2WzmwoULxhhjjhw5Ynx8fBxqmKTL1iRdlAna19c33wl47969uf5O5zUP5Cy/+ncgPDzcfPvtt/b7Fy9eNPfff7+pX7++OX36dK5zQYUKFexHUjIyMoybm5vDNr777jtTtWpV+/2nnnrK1K9f3+noS0HngVq1apl///vfDus3bdpkoqKiHJYFBQWZH374wRhzeR7I+f8chw4dcvr7vHI/f/zxh5k8ebKpXbu2cXNzM40bNzZz5841qampDjW5zQNX/r4cOXLEaT9+fn4OR5PS09ONp6en/eyiVatWOT0e5oGSmQes/EKNeYB5gHmgbL0eMKbwc0FZmgeMYS4wpuzNBQVBcL9CeHi4WblyZZ7rv//+e4cfTEBAQK6nMD3zzDOmWrVqZsuWLfkGd2OMKVeunMOR5KNHjzoF0Bxnz541/fr1M/Xq1TN79uwxnp6e+f5xJiUl2R/XlcHYmMt/AN7e3g7L+vbtawYNGmSMMeahhx4y//u//+uwPj4+3sTGxjrtJ+eP80q//vqrGTdunImMjHR6DqKjo82aNWuMMZcnVzc3N7NixQr7+s8//9zpD+25554zdevWNWvWrDEbN240rVu3dvjDWrt2rbnlllscapiky9YkXZQJOjw83KxatSrX58YYY1auXOl0pkalSpXMvHnzzNGjR3O9ff75504/T39/f6fTEzMzM80DDzxg/3vNrSbnBZExznPBr7/+6jQXrFy50kRERJiZM2fal13r558zD1SpUsVp3NGjR53mgW7dupmXXnrJGGNMhw4dnI7avPfeeyYmJsZpP7nNA1u2bDH9+/c3/v7+xt/f32FdzhxpjDG///67sdls5vPPP7ev/+qrr5zeXAwPD3d4ozM5OdnYbDb779bhw4edHg/zQMnMA1Z+ocY8wDzAPFC2Xg8YU/i5oKzNAzk9MxeUnbmgIAjuV+jatat5+eWX81y/e/duh3dHGjdubN5///1cxw4dOtSUL1/e6YdSr149e2g15vIvyJWn8mzdutXpXdKrLVu2zISEhBg3N7d8/zhjY2NNgwYNTLly5cwnn3zisH7z5s1O/xD8/vvvJioqyrRo0cKMGDHC+Pr6mnvuucc8+eSTpkWLFsbLy8vhjyhnP7n9cebIzs4269atc1g2duxYU7lyZfPEE0+Y6OhoM3r0aFO9enUzZ84c884775iIiAjz/PPPO9ScPXvW9OrVy3h4eBibzWaaNWtmDh8+bF//xRdfOIR/Y5ikjSlbk3RRJuhx48aZoKAg8/rrr5vdu3ebkydPmsTERLN7927z+uuvmwoVKjh9LqlDhw7m1VdfdXosOa6eB4wxJjY21nz00UdOY3N+D6pXr+70O1C7dm2HM2H+/e9/288gMSb3s2KMMeb48ePm3nvvNffdd585efLkNX/+nTp1Mt27dzcVKlSwn/KY4+uvv3Y6w+fHH380wcHBpl+/fubVV1815cqVM3379jX/+Mc/TL9+/Yy3t7dZsGCBQ42bm1u+80BKSor9aEqOoUOHmpiYGPPaa6+Zu+66y/Tv39/Url3brFmzxqxdu9bExsY6Hf3p37+/admypTlw4IA5fPiwefjhhx2O9nz11VcmIiLCoYZ5oGTmASu/UGMeYB5gHihbrweMKfxcUBbnAWOYC8rSXFAQBPcrbNmyxSFUX+3cuXPmq6++st+Pj4+3n5aTm6efftrpD3rOnDlO73JeacyYMfaj3vk5duyYWbVqVZ4XUYiLi3O4rV271mH9qFGjTO/evZ3qkpOTzYsvvmjq1KljfHx8jJeXl4mMjDSPPvqo2blzp9P4qKgo+7ubBXXp0iXz2muvmS5duthPu1q2bJmJiIgwwcHBZsCAAXk+rrS0tFwv8pAbJumyNUkXZYI2xphJkybZP//m5uZmf3c0LCzMTJ482Wn8J598YhYvXpznYzlz5oxZuHChw7IXXnjBtG/fPtfxmZmZplu3bk6/A3FxcWbZsmV57mfMmDGmR48eua7Lzs428fHxJjQ01Li7u+f58x8wYIDD7eo3t0aNGmU6dOjgVHfo0CHTu3dvExAQYH9X2dPT0zRr1izXs5Ku9QZebs6dO2eeeOIJU7duXfP3v//dZGRkmNdff914eXkZm81mWrVq5bTNP/74w9x99932n2VUVJT57rvv7Os//PBD89ZbbznUMA+UzDxg5RdqxjAPMA8wD5Sl1wPGFG0uKIvzgDHMBWVlLigIgjvKNKtM0lf/QTNJF36SLsoEfaXDhw+b7du3m+3btzucrVEcMjMzTUpKSp7rL126VOir7J4/f95cvHgx3zG7du0y06dPt39mqrDOnTtn0tLS8lyfnZ1tEhMTzYkTJ+zX1rjR0tLSnE6jvNovv/zidLZSfqwyD5TGF2sPP/xwgeYBK79Qu9KV88CVRzULKjs7O891ec0DOTWFmQdyago6D0ybNq3Q80DOPgozDxTkQmN57acwzp8/X+h54Fr7YR4oO68HjMl9LrjyCHx+c0FZfD1gDK8JSvtrgoLge9xxUzhy5IgSExMlSaGhofbvqi8Oly5d0oULFxQYGJjr+qysLB0/frxQ32d54cIFubu7y9vbO99xCQkJ2rZtm/r166cKFSoUqm/p8neauru7y8fHJ9f1xhglJSUpOztblSpVkqenZ6H3UVgXL15UZmamAgICcl1/8OBBpaenq3bt2vLw8Ljh/aDsYB7IndXmgWvNAVLxzANeXl764YcfCvz9yFausWpfVqwpq/PAd999p61bt5aZeUAqubkAN6fSNhdIEr/huClER0c7/UEeO3ZM48aN0/z58wu8ndxqPDw88vzDlKQTJ05o/PjxhdrP6dOnC9Rbw4YN1bBhwzx7u5YzZ87kW2Oz2RQSEuKwrLiet7z4+PjIx8cnz5qYmJhC7SMtLU0JCQmqWLGi6tSp47Du4sWLWrFihfr161cqaqzal9VrDhw4oG+++UbNmjVT06ZN9dNPP2nKlClKT09X3759de+99+pqOTVNmzZV7dq19dNPP2nGjBl51nh4eOj333/Xxx9/XOCaouwntxp/f3/99NNPGjly5DVrmjVrpltvvbVQ+7myZsKECXnWXM9jKWpfHh4e16wZMWKE0zakyy+cJk2apODgYEnStGnTLF9j1b6sXnOl6OholS9fXosWLdLBgwcVHh6ufv36KSIiItfxOZKTk+01YWFh6t+/v1PN1a8Hrq4ZMGDANV+oF2Q/udVs2bJFBw8e1Ntvv13gmsLsx2azycvL64Y8b/nVhIeHq3///qpWrVquY3NeE1xrP99//73Kly9vfy24ZMkSzZkzR7/99psiIyP1zDPPqHfv3g7bpqbs1QwbNky9evXS3/72t1yzQW6urCmo559/Pt8ad3f3Qod2SeJUedy0cvveRWpKb01u43/++WcTGRlpPx2qZcuW5sSJE/b1uV3V06o1Vu3L6jVr1qwxXl5epmLFisbHx8esWbPGVK5c2bRt29a0adPGeHh4OH1dJjWFr7FqX8ZcPnW3fv36plWrVg43m81mGjdubFq1amVat25dKmqs2pfVa8LCwuzX4zl8+LAJCwszoaGhpl27dqZatWomKCjIHDhwIN+a0NBQakpxTYMGDczGjRuNMZcvqufr62ueffZZM2fOHDN8+HBTrlw5M2/ePId9UFP2anJeP8TExJhJkybZvxIxPyVVUxAEd5RZ//rXv/K9vfnmm04v8qmxbk1R9vHAAw+YLl26mFOnTpmDBw+arl27mujoaPvXzuQW9KxaY9W+rF7TtGlTM3bsWGPM5YtgVqhQwYwZM8a+fsyYMaZdu3bUXGeNVfsy5vKFZKOjo50CfX4X8rJqjVX7snrNlZ+77t27t2nVqpU5f/68Meby1zR16dLF9OzZk5oyXOPn52f/t6JBgwbm3XffddjeBx98YOrUqeOwjJqyV2Oz2cyGDRvMc889ZypVqmQ8PT1Nt27dzGeffWaysrJMbkqqpiAI7iizrvx+xbxuV7/Ip8a6NUXZR5UqVcyePXsclg0ZMsRUr17d/Pe//8016Fm1xqp9Wb0mMDDQHDx40BhjTFZWlvHw8HC4gNHevXudrqRMTeFrrNpXjh07dphatWqZkSNH2i+qlF/Qs3KNVfuycs2VIS+30J/bldupKVs1wcHBZteuXcaYy/+W7N6922H8oUOHnL6/m5qyV3Pl701GRob55z//aTp06GDc3d1NeHi4GTNmjP3fmJKuKQi3wp9cD5QOYWFh+vjjj5WdnZ3r7bvvvqOmFNUUZR9paWlOF6t5++231a1bN7Vs2VK//PJLqamxal9Wr7mSm5ubfHx8VL58efuygIAApaSkUFOMNVbsq3HjxkpISNCpU6fUqFEj7d27VzabLc9tW7nGqn1ZvSZnfXp6utO1W0JCQnTq1ClqynBNx44dNWfOHElSy5Yt9dFHHzmMX7FihWrWrOmwjJqyV3MlT09P9erVS2vXrtXhw4f15JNP6oMPPtCtt97q8po8FTrqA6VE165dzcsvv5zn+ty+d5Ea69YUZR+NGzc277//fq7jhw4dasqXL+90hNaqNVbty+o19erVM2vWrLHfv/orY7Zu3Wqio6Opuc4aq/aVm2XLlpmQkBDj5uaW71Hd0lBj1b6sVmOz2UxsbKxp0KCBKVeunPnkk08c1m/evNlUrVqVmjJc8/vvv5uoqCjTokULM2LECOPr62vuuece8+STT5oWLVoYLy8v8/nnnztsg5qyV3PlkfDcZGdnm3Xr1rmkpiC4qjzKrP/5n//R+fPn81xfs2ZNbdq0iZpSUlOUfXTv3l3Lli3TY4895jR+1qxZys7O1jvvvFMqaqzal9Vrnn76aWVlZdnv161b12H9mjVrnK5CTk3ha6zaV2569+6te+65RwkJCQW+qq9Va6zal9Vqxo0b53Dfz8/P4f5nn33mdPVnaspWTXh4uL7//ntNmjRJn332mYwx2rFjh44dO6bmzZvrP//5jxo1auSwDWrKXk1kZKTc3d2VF5vNpnbt2rmkpiD4HncAAAAAACyMz7gDAAAAAGBhBHcAAAAAACyM4A4AAAAAgIUR3AEAAAAAsDCCOwAAKLR58+apffv2rm4jV1FRUZo+fXqRatPT01W9enUlJCQUb1MAAFwHgjsAADeYzWbL9zZgwABXt1go6enpeuWVV/Tyyy/bl8XFxclms+m+++5zGj9lyhTZbDa1atWqWPtYuHChypcvX6zb9Pb21qhRo/Tiiy8W63YBALgeBHcAAG6wkydP2m/Tp09XYGCgw7IZM2aUeE+ZmZlFrv34449Vrlw5p+9WDgsL06ZNm3T8+HGH5QsWLFD16tWLvL+S1qdPH23dulUHDhxwdSsAAEgiuAMAcMOFhobab0FBQbLZbA7LtmzZooYNG8rHx0c1atTQ+PHjdenSJXu9zWbT//3f/6l79+7y8/NTTEyMPv30U/v63I48r1q1SjabzX4/Li5O9evX1/z581WjRg15e3vLGKOUlBQ99dRTqlKligIDA3Xvvffqhx9+yPfxLF++XN26dXNaXqVKFbVv316LFi2yL9u+fbv+/PNPde7c2WFsdna2JkyYoGrVqsnb21v169fX2rVr7euPHj0qm82mTz75RK1bt5afn5/uuOMOff3115Kkr776So8//rhSUlLsZy7ExcXZ6y9cuKCBAwcqICBA1atX19y5c+3rMjIy9MwzzygsLEw+Pj6KiorSxIkT7euDg4PVrFkzLVu2LN/nAQCAkkJwBwDAhb744gv17dtXzz77rH788Ue9++67Wrhwof7xj384jBs/frx69eqlPXv2qFOnTurTp4/OnDlTqH0dOnRIK1as0Mcff6zdu3dLkjp37qzExEStXr1aCQkJuvPOO9WmTZt8t71161Y1atQo13UDBw7UwoUL7ffnz5+vPn36yMvLy2HcjBkzNHXqVL3xxhvas2ePOnTooG7duungwYMO48aOHatRo0Zp9+7dqlWrlh555BFdunRJzZo1czp7YdSoUfa6qVOnqlGjRvr+++81ZMgQPf300/rpp58kSW+99ZY+/fRTrVixQj///LOWLFmiqKgoh/3edddd2rp167WeUgAASgTBHQAAF/rHP/6hl156Sf3791eNGjXUrl07vfrqq3r33Xcdxg0YMECPPPKIatasqfj4eJ0/f147duwo1L4yMjK0ePFiNWjQQPXq1dOmTZu0d+9effjhh2rUqJFiYmL0xhtvqHz58vroo49y3cZff/2lv/76S+Hh4bmu79Kli1JTU7VlyxadP39eK1as0MCBA53GvfHGG3rxxRfVu3dv3XrrrZo8ebLq16/vdFG5UaNGqXPnzqpVq5bGjx+vX3/9VYcOHZKXl5fT2QvlypWz13Xq1ElDhgxRzZo19eKLL6pSpUr66quvJEm//fabYmJidM899ygyMlL33HOPHnnkEYf9Vq1aVUePHi34kwsAwA3k4eoGAAC4mSUkJGjnzp0OR9izsrJ08eJFXbhwQX5+fpKkevXq2df7+/srICBASUlJhdpXZGSkKleu7LDvc+fOKTg42GFcWlqa/vvf/+a6jbS0NEmSj49Prus9PT3Vt29fLViwQIcPH1atWrUcepek1NRUnThxQs2bN3dY3rx5c6fT9K+sDQsLkyQlJSWpdu3a+T1Uh7qccJ/zfA0YMEDt2rXTrbfeqvvuu09dunRxukK+r6+vLly4kO8+AAAoKQR3AABcKDs7W+PHj1ePHj2c1l0Zjj09PR3W2Ww2ZWdnS5Lc3NxkjHFYn9vF5/z9/Z32HRYWZj8SfaW8rtYeHBwsm82m5OTkXNdLl0+Xb9Kkifbt25fr0fYrH8OVjDFOy6583Dnrch53fvJ7vu68804dOXJEa9as0YYNG9SrVy+1bdvW4SyDM2fOOLzJAQCAKxHcAQBwoTvvvFM///yzatasWeRtVK5cWWfPntX58+ft4TznM+zX2ndiYqI8PDycPuOdFy8vL9WpU0c//vhjnt/jfvvtt+v222/Xnj179OijjzqtDwwMVHh4uLZt26YWLVrYl2/fvl133XVXgfrI6SUrK6vA46/u4eGHH9bDDz+snj176r777tOZM2dUsWJFSdK+ffvUoEGDIm0bAIDiRnAHAMCFXnnlFXXp0kURERF66KGH5Obmpj179mjv3r167bXXCrSNJk2ayM/PT2PGjNGwYcO0Y8cOhwvE5aVt27Zq2rSpHnjgAU2ePFm33nqrTpw4odWrV+uBBx7I8wJ0HTp00LZt2zR8+PA8t71x40ZlZmbmeeT+f/7nfzRu3Djdcsstql+/vhYsWKDdu3frgw8+KMAjviwqKkrnzp3Tl19+qTvuuEN+fn72jxbk580331RYWJjq168vNzc3ffjhhwoNDXXodevWrXr11VcL3AsAADcSF6cDAMCFOnTooH//+99av369GjdurLvvvlvTpk1TZGRkgbdRsWJFLVmyRKtXr1ZsbKyWLVvm8NVoebHZbFq9erVatGihgQMHqlatWurdu7eOHj2qkJCQPOuefPJJrV69WikpKXmO8ff3zzO0S9Kzzz6rkSNHauTIkYqNjdXatWv16aefKiYm5pp952jWrJn+/ve/6+GHH1blypU1ZcqUAtWVK1dOkydPVqNGjdS4cWMdPXpUq1evlpvb5ZdFX3/9tVJSUtSzZ88C9wIAwI1kM1d/KA4AAOAaevXqpQYNGmj06NGubqXYPfTQQ2rQoIHGjBnj6lYAAJDEEXcAAFAEr7/+usPXr5UV6enpuuOOO/T888+7uhUAAOw44g4AAAAAgIVxxB0AAAAAAAsjuAMAAAAAYGEEdwAAAAAALIzgDgAAAACAhRHcAQAAAACwMII7AAAAAAAWRnAHAAAAAMDCCO4AAAAAAFgYwR0AAAAAAAv7f0nXlOS4BGthAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Aggregate data\n", "histogram_data = df.groupBy(\"Tenure\", \"Churn\").count().orderBy(\"Tenure\")\n", @@ -484,115 +380,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "8abf9370-938b-4368-a300-e2a9064a48b6", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3cd67f4d13d94f6bb2d427f7a02e00a9", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "config.json: 0%| | 0.00/629 [00:00 (0 + 1) / 1]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+----------+--------------------+---------+\n", - "|customerID| text|sentiment|\n", - "+----------+--------------------+---------+\n", - "|7590-VHVEG|The customer was ...| NEGATIVE|\n", - "|5575-GNVDE|The customer was ...| NEGATIVE|\n", - "|3668-QPYBK|The customer was ...| POSITIVE|\n", - "|7795-CFOCW|The customer was ...| NEGATIVE|\n", - "|9237-HQITU|A quick and frien...| POSITIVE|\n", - "|9305-CDSKC|A pleasant conver...| POSITIVE|\n", - "|1452-KIOVK|The customer was ...| NEGATIVE|\n", - "|6713-OKOMC|The customer was ...| NEGATIVE|\n", - "|7892-POOKP|A friendly exchan...| POSITIVE|\n", - "|6388-TABGU|The customer was ...| NEGATIVE|\n", - "|9763-GRSKD|The customer was ...| NEGATIVE|\n", - "|7469-LKBCI|The customer was ...| NEGATIVE|\n", - "|8091-TTVAX|The customer was ...| NEGATIVE|\n", - "|0280-XJGEX|A friendly chat a...| POSITIVE|\n", - "|5129-JLPIS|The customer was ...| NEGATIVE|\n", - "|3655-SNQYZ|The customer was ...| NEGATIVE|\n", - "|8191-XWSZG|The customer was ...| NEGATIVE|\n", - "|9959-WOFKT|The customer was ...| NEGATIVE|\n", - "|4190-MFLUW|A friendly exchan...| POSITIVE|\n", - "|4183-MYFRB|The customer was ...| NEGATIVE|\n", - "+----------+--------------------+---------+\n", - "only showing top 20 rows\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], + "outputs": [], "source": [ "# Specify the model name and revision - downloads from Huggingface\n", "model_name = \"distilbert-base-uncased-finetuned-sst-2-english\"\n", @@ -640,7 +433,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "95e1b691-d216-43bd-9269-55c6a146c774", "metadata": { "tags": [] @@ -673,7 +466,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "235b509b-0a8c-40d8-8305-15a0930c4015", "metadata": {}, "outputs": [], @@ -692,18 +485,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "7a361ece-9bc9-4e66-8c09-f6c6c3373bb4", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], + "outputs": [], "source": [ "df_train = spark.read.parquet(training_data_path)" ] @@ -725,7 +510,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "4d7c39eb-076d-44d6-874d-e1f727953330", "metadata": {}, "outputs": [], @@ -761,24 +546,12 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "8bedfb96-f79f-4eb1-a163-b1fc719089de", "metadata": { "tags": [] }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'SparkXGBClassifier' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m xgb \u001b[38;5;241m=\u001b[39m \u001b[43mSparkXGBClassifier\u001b[49m(label_col\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchurn\u001b[39m\u001b[38;5;124m\"\u001b[39m, features_col\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfeatures\u001b[39m\u001b[38;5;124m\"\u001b[39m, num_workers\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m, missing\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.0\u001b[39m)\n\u001b[1;32m 3\u001b[0m pipeline \u001b[38;5;241m=\u001b[39m Pipeline(stages\u001b[38;5;241m=\u001b[39m[xgb])\n", - "\u001b[0;31mNameError\u001b[0m: name 'SparkXGBClassifier' is not defined" - ] - } - ], + "outputs": [], "source": [ "xgb = SparkXGBClassifier(label_col=\"churn\", features_col=\"features\", num_workers=2, missing=0.0)\n", "\n", @@ -797,24 +570,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "8d648b41-a6a8-4b67-9fce-ca5c4475c790", "metadata": { "tags": [] }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'transformed_data' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m train_data, test_data \u001b[38;5;241m=\u001b[39m \u001b[43mtransformed_data\u001b[49m\u001b[38;5;241m.\u001b[39mrandomSplit([\u001b[38;5;241m0.8\u001b[39m, \u001b[38;5;241m0.2\u001b[39m], seed\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m42\u001b[39m) \n", - "\u001b[0;31mNameError\u001b[0m: name 'transformed_data' is not defined" - ] - } - ], + "outputs": [], "source": [ "train_data, test_data = transformed_data.randomSplit([0.8, 0.2], seed=42) " ] @@ -1004,8 +765,6 @@ "metadata": {}, "outputs": [], "source": [ - "\n", - "\n", "# Construct a BigQuery client object.\n", "client = bigquery.Client()\n", "\n", @@ -1024,7 +783,7 @@ }, { "cell_type": "markdown", - "id": "2ece491f", + "id": "b5ff34de-baed-4ee5-ae24-57b850235028", "metadata": {}, "source": [ "Save the predictions directly from Spark to BigQuery." @@ -1040,7 +799,7 @@ "# Define table name to save predictions\n", "table_name = 'predictions'\n", "\n", - "# Write predictions DataFrame to a Delta table\n", + "# Write predictions DataFrame to table\n", "predictions.write \\\n", " .format(\"bigquery\") \\\n", " .mode(\"overwrite\") \\\n",