From 18ded3f0a06aa0b4748fd3ea580b6c334292f52e Mon Sep 17 00:00:00 2001 From: Alejandro de Tuero Date: Thu, 30 Oct 2025 17:54:54 +0100 Subject: [PATCH] resolution_lab_9 --- lab-dw-aggregating.ipynb | 2511 +++++++++++++++++++++++++++++++++++++- 1 file changed, 2507 insertions(+), 4 deletions(-) diff --git a/lab-dw-aggregating.ipynb b/lab-dw-aggregating.ipynb index fadd718..579dece 100644 --- a/lab-dw-aggregating.ipynb +++ b/lab-dw-aggregating.ipynb @@ -125,16 +125,2519 @@ "External Resources for Data Filtering: https://towardsdatascience.com/filtering-data-frames-in-pandas-b570b1f834b9" ] }, + { + "cell_type": "markdown", + "id": "e8954f27", + "metadata": {}, + "source": [ + "1. Create a new DataFrame that only includes customers who:\n", + " - have a **low total_claim_amount** (e.g., below $1,000),\n", + " - have a response \"Yes\" to the last marketing campaign." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "449513f4-0459-46a0-a18d-9398d974c9ad", "metadata": { "id": "449513f4-0459-46a0-a18d-9398d974c9ad" }, "outputs": [], "source": [ - "# your code goes here" + "# your code goes here\n", + "import pandas as pd\n", + "url = \"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/marketing_customer_analysis.csv\"\n", + "customer_df = pd.read_csv(url)\n", + "customer_df\n", + "\n", + "pd.options.display.float_format = '{:,.2f}'.format" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c605c083", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(10910, 26)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customer_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a71f8a60", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0CustomerStateCustomer Lifetime ValueResponseCoverageEducationEffective To DateEmploymentStatusGender...Number of Open ComplaintsNumber of PoliciesPolicy TypePolicyRenew Offer TypeSales ChannelTotal Claim AmountVehicle ClassVehicle SizeVehicle Type
00DK49336Arizona4,809.22NoBasicCollege2/18/11EmployedM...0.009Corporate AutoCorporate L3Offer3Agent292.80Four-Door CarMedsizeNaN
11KX64629California2,228.53NoBasicCollege1/18/11UnemployedF...0.001Personal AutoPersonal L3Offer4Call Center744.92Four-Door CarMedsizeNaN
22LZ68649Washington14,947.92NoBasicBachelor2/10/11EmployedM...0.002Personal AutoPersonal L3Offer3Call Center480.00SUVMedsizeA
33XL78013Oregon22,332.44YesExtendedCollege1/11/11EmployedM...0.002Corporate AutoCorporate L3Offer2Branch484.01Four-Door CarMedsizeA
44QA50777Oregon9,025.07NoPremiumBachelor1/17/11Medical LeaveF...NaN7Personal AutoPersonal L2Offer1Branch707.93Four-Door CarMedsizeNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 Customer State Customer Lifetime Value Response \\\n", + "0 0 DK49336 Arizona 4,809.22 No \n", + "1 1 KX64629 California 2,228.53 No \n", + "2 2 LZ68649 Washington 14,947.92 No \n", + "3 3 XL78013 Oregon 22,332.44 Yes \n", + "4 4 QA50777 Oregon 9,025.07 No \n", + "\n", + " Coverage Education Effective To Date EmploymentStatus Gender ... \\\n", + "0 Basic College 2/18/11 Employed M ... \n", + "1 Basic College 1/18/11 Unemployed F ... \n", + "2 Basic Bachelor 2/10/11 Employed M ... \n", + "3 Extended College 1/11/11 Employed M ... \n", + "4 Premium Bachelor 1/17/11 Medical Leave F ... \n", + "\n", + " Number of Open Complaints Number of Policies Policy Type Policy \\\n", + "0 0.00 9 Corporate Auto Corporate L3 \n", + "1 0.00 1 Personal Auto Personal L3 \n", + "2 0.00 2 Personal Auto Personal L3 \n", + "3 0.00 2 Corporate Auto Corporate L3 \n", + "4 NaN 7 Personal Auto Personal L2 \n", + "\n", + " Renew Offer Type Sales Channel Total Claim Amount Vehicle Class \\\n", + "0 Offer3 Agent 292.80 Four-Door Car \n", + "1 Offer4 Call Center 744.92 Four-Door Car \n", + "2 Offer3 Call Center 480.00 SUV \n", + "3 Offer2 Branch 484.01 Four-Door Car \n", + "4 Offer1 Branch 707.93 Four-Door Car \n", + "\n", + " Vehicle Size Vehicle Type \n", + "0 Medsize NaN \n", + "1 Medsize NaN \n", + "2 Medsize A \n", + "3 Medsize A \n", + "4 Medsize NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customer_df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bc3ddd31", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Unnamed: 0', 'Customer', 'State', 'Customer Lifetime Value',\n", + " 'Response', 'Coverage', 'Education', 'Effective To Date',\n", + " 'EmploymentStatus', 'Gender', 'Income', 'Location Code',\n", + " 'Marital Status', 'Monthly Premium Auto', 'Months Since Last Claim',\n", + " 'Months Since Policy Inception', 'Number of Open Complaints',\n", + " 'Number of Policies', 'Policy Type', 'Policy', 'Renew Offer Type',\n", + " 'Sales Channel', 'Total Claim Amount', 'Vehicle Class', 'Vehicle Size',\n", + " 'Vehicle Type'],\n", + " dtype='object')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Verificamos el nombre de todas las columnas para saber con cuales vamos a trabajar\n", + "customer_df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "476e941f", + "metadata": {}, + "outputs": [], + "source": [ + "# Filtamos las columnas \"total_claim_amount\" y \"response\"\n", + "filtered_customer_df = customer_df[(customer_df[\"Total Claim Amount\"] < 1000) & (customer_df[\"Response\"] == \"Yes\")].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0e5275c7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1399, 26)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_customer_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "35afb180", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0CustomerStateCustomer Lifetime ValueResponseCoverageEducationEffective To DateEmploymentStatusGender...Number of Open ComplaintsNumber of PoliciesPolicy TypePolicyRenew Offer TypeSales ChannelTotal Claim AmountVehicle ClassVehicle SizeVehicle Type
33XL78013Oregon22,332.44YesExtendedCollege1/11/11EmployedM...0.002Corporate AutoCorporate L3Offer2Branch484.01Four-Door CarMedsizeA
88FM55990California5,989.77YesPremiumCollege1/19/11EmployedM...0.001Personal AutoPersonal L1Offer2Branch739.20Sports CarMedsizeNaN
1515CW49887California4,626.80YesBasicMaster1/16/11EmployedF...0.001Special AutoSpecial L1Offer2Branch547.20SUVMedsizeNaN
1919NJ54277California3,746.75YesExtendedCollege2/26/11EmployedF...1.001Personal AutoPersonal L2Offer2Call Center19.58Two-Door CarLargeA
2727MQ68407Oregon4,376.36YesPremiumBachelor2/28/11EmployedF...0.001Personal AutoPersonal L3Offer2Agent60.04Four-Door CarMedsizeNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 Customer State Customer Lifetime Value Response \\\n", + "3 3 XL78013 Oregon 22,332.44 Yes \n", + "8 8 FM55990 California 5,989.77 Yes \n", + "15 15 CW49887 California 4,626.80 Yes \n", + "19 19 NJ54277 California 3,746.75 Yes \n", + "27 27 MQ68407 Oregon 4,376.36 Yes \n", + "\n", + " Coverage Education Effective To Date EmploymentStatus Gender ... \\\n", + "3 Extended College 1/11/11 Employed M ... \n", + "8 Premium College 1/19/11 Employed M ... \n", + "15 Basic Master 1/16/11 Employed F ... \n", + "19 Extended College 2/26/11 Employed F ... \n", + "27 Premium Bachelor 2/28/11 Employed F ... \n", + "\n", + " Number of Open Complaints Number of Policies Policy Type \\\n", + "3 0.00 2 Corporate Auto \n", + "8 0.00 1 Personal Auto \n", + "15 0.00 1 Special Auto \n", + "19 1.00 1 Personal Auto \n", + "27 0.00 1 Personal Auto \n", + "\n", + " Policy Renew Offer Type Sales Channel Total Claim Amount \\\n", + "3 Corporate L3 Offer2 Branch 484.01 \n", + "8 Personal L1 Offer2 Branch 739.20 \n", + "15 Special L1 Offer2 Branch 547.20 \n", + "19 Personal L2 Offer2 Call Center 19.58 \n", + "27 Personal L3 Offer2 Agent 60.04 \n", + "\n", + " Vehicle Class Vehicle Size Vehicle Type \n", + "3 Four-Door Car Medsize A \n", + "8 Sports Car Medsize NaN \n", + "15 SUV Medsize NaN \n", + "19 Two-Door Car Large A \n", + "27 Four-Door Car Medsize NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_customer_df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fa0d1bf5", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
New IndexUnnamed: 0CustomerStateCustomer Lifetime ValueResponseCoverageEducationEffective To DateEmploymentStatus...Number of Open ComplaintsNumber of PoliciesPolicy TypePolicyRenew Offer TypeSales ChannelTotal Claim AmountVehicle ClassVehicle SizeVehicle Type
303XL78013Oregon22,332.44YesExtendedCollege1/11/11Employed...0.002Corporate AutoCorporate L3Offer2Branch484.01Four-Door CarMedsizeA
818FM55990California5,989.77YesPremiumCollege1/19/11Employed...0.001Personal AutoPersonal L1Offer2Branch739.20Sports CarMedsizeNaN
15215CW49887California4,626.80YesBasicMaster1/16/11Employed...0.001Special AutoSpecial L1Offer2Branch547.20SUVMedsizeNaN
19319NJ54277California3,746.75YesExtendedCollege2/26/11Employed...1.001Personal AutoPersonal L2Offer2Call Center19.58Two-Door CarLargeA
27427MQ68407Oregon4,376.36YesPremiumBachelor2/28/11Employed...0.001Personal AutoPersonal L3Offer2Agent60.04Four-Door CarMedsizeNaN
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " New Index Unnamed: 0 Customer State Customer Lifetime Value \\\n", + "3 0 3 XL78013 Oregon 22,332.44 \n", + "8 1 8 FM55990 California 5,989.77 \n", + "15 2 15 CW49887 California 4,626.80 \n", + "19 3 19 NJ54277 California 3,746.75 \n", + "27 4 27 MQ68407 Oregon 4,376.36 \n", + "\n", + " Response Coverage Education Effective To Date EmploymentStatus ... \\\n", + "3 Yes Extended College 1/11/11 Employed ... \n", + "8 Yes Premium College 1/19/11 Employed ... \n", + "15 Yes Basic Master 1/16/11 Employed ... \n", + "19 Yes Extended College 2/26/11 Employed ... \n", + "27 Yes Premium Bachelor 2/28/11 Employed ... \n", + "\n", + " Number of Open Complaints Number of Policies Policy Type \\\n", + "3 0.00 2 Corporate Auto \n", + "8 0.00 1 Personal Auto \n", + "15 0.00 1 Special Auto \n", + "19 1.00 1 Personal Auto \n", + "27 0.00 1 Personal Auto \n", + "\n", + " Policy Renew Offer Type Sales Channel Total Claim Amount \\\n", + "3 Corporate L3 Offer2 Branch 484.01 \n", + "8 Personal L1 Offer2 Branch 739.20 \n", + "15 Special L1 Offer2 Branch 547.20 \n", + "19 Personal L2 Offer2 Call Center 19.58 \n", + "27 Personal L3 Offer2 Agent 60.04 \n", + "\n", + " Vehicle Class Vehicle Size Vehicle Type \n", + "3 Four-Door Car Medsize A \n", + "8 Sports Car Medsize NaN \n", + "15 SUV Medsize NaN \n", + "19 Two-Door Car Large A \n", + "27 Four-Door Car Medsize NaN \n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Creamos un indice nuevo sin eliminar el anterior.\n", + "filtered_customer_df.loc[:, \"New Index\"] = range(len(filtered_customer_df))\n", + "\n", + "cols =[\"New Index\"] + [col for col in filtered_customer_df.columns if col != \"New Index\"]\n", + "filtered_customer_df = filtered_customer_df[cols]\n", + "\n", + "filtered_customer_df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "63567ddc", + "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", + "
New IndexResponseTotal Claim Amount
30Yes484.01
81Yes739.20
152Yes547.20
193Yes19.58
274Yes60.04
\n", + "
" + ], + "text/plain": [ + " New Index Response Total Claim Amount\n", + "3 0 Yes 484.01\n", + "8 1 Yes 739.20\n", + "15 2 Yes 547.20\n", + "19 3 Yes 19.58\n", + "27 4 Yes 60.04" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Creamos el dataframe final con el \"New_Index\" + \"Response\" + \"Total_Clain_Amount\"\n", + "\n", + "customer_df_final = filtered_customer_df[[\"New Index\", \"Response\", \"Total Claim Amount\"]]\n", + "\n", + "customer_df_final.head(5)" + ] + }, + { + "cell_type": "markdown", + "id": "e657a5c4", + "metadata": {}, + "source": [ + "2. Using the original Dataframe, analyze:\n", + " - the average `monthly_premium` and/or customer lifetime value by `policy_type` and `gender` for customers who responded \"Yes\", and\n", + " - compare these insights to `total_claim_amount` patterns, and discuss which segments appear most profitable or low-risk for the company." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "14f715d4", + "metadata": {}, + "outputs": [], + "source": [ + "# Calculamos los clientes que respondieron SI a la campaña de marketing\n", + "customer_yes = customer_df[customer_df[\"Response\"] == \"Yes\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6f9a4f71", + "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", + "
Policy TypeGenderMonthly Premium AutoCustomer Lifetime Value
0Corporate AutoF94.307,712.63
1Corporate AutoM92.197,944.47
2Personal AutoF99.008,339.79
3Personal AutoM91.097,448.38
4Special AutoF92.317,691.58
5Special AutoM86.348,247.09
\n", + "
" + ], + "text/plain": [ + " Policy Type Gender Monthly Premium Auto Customer Lifetime Value\n", + "0 Corporate Auto F 94.30 7,712.63\n", + "1 Corporate Auto M 92.19 7,944.47\n", + "2 Personal Auto F 99.00 8,339.79\n", + "3 Personal Auto M 91.09 7,448.38\n", + "4 Special Auto F 92.31 7,691.58\n", + "5 Special Auto M 86.34 8,247.09" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Calculamos el promedio de \"monthly_premium\" y \"customer lifetime value\" por \"policy_type\" y \"gender\"\n", + "\n", + "average = customer_yes.groupby([\"Policy Type\", \"Gender\"])[[\"Monthly Premium Auto\", \"Customer Lifetime Value\"]].mean().reset_index()\n", + "\n", + "average" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b31df0c9", + "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", + "
Policy TypeGenderMonthly Premium AutoCustomer Lifetime ValueTotal Claim Amount
0Corporate AutoF94.307,712.63433.74
1Corporate AutoM92.197,944.47408.58
2Personal AutoF99.008,339.79452.97
3Personal AutoM91.097,448.38457.01
4Special AutoF92.317,691.58453.28
5Special AutoM86.348,247.09429.53
\n", + "
" + ], + "text/plain": [ + " Policy Type Gender Monthly Premium Auto Customer Lifetime Value \\\n", + "0 Corporate Auto F 94.30 7,712.63 \n", + "1 Corporate Auto M 92.19 7,944.47 \n", + "2 Personal Auto F 99.00 8,339.79 \n", + "3 Personal Auto M 91.09 7,448.38 \n", + "4 Special Auto F 92.31 7,691.58 \n", + "5 Special Auto M 86.34 8,247.09 \n", + "\n", + " Total Claim Amount \n", + "0 433.74 \n", + "1 408.58 \n", + "2 452.97 \n", + "3 457.01 \n", + "4 453.28 \n", + "5 429.53 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "average_total_claim_amount = customer_yes.groupby([\"Policy Type\", \"Gender\"])[[\"Monthly Premium Auto\", \"Customer Lifetime Value\", \"Total Claim Amount\"]].mean().reset_index()\n", + "\n", + "average_total_claim_amount" + ] + }, + { + "cell_type": "markdown", + "id": "f6b47f8d", + "metadata": {}, + "source": [ + "##### Los clientes mas rentables y de bajo riesgo son los que tiene un poliza de Corporate Auto tanto masculino como femenino y los clientes masculinos de la poliza Special Auto, ya que al ver la tabla vemos que tienen un CLV alto y un Total Claim Amount bajo. En el lado contrario vemos que los cliente con poliza Personal Auto de genero masculino y los clientes de poliza Special Auto de genero femenino representan que son clientes de menor rentabilidad y de un riesgo alto comparado con los demás." + ] + }, + { + "cell_type": "markdown", + "id": "1a11ea49", + "metadata": {}, + "source": [ + "3. Analyze the total number of customers who have policies in each state, and then filter the results to only include states where there are more than 500 customers." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "463aa491", + "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", + "
StateCustomer
0Arizona1937
1California3552
2Nevada993
3Oregon2909
4Washington888
\n", + "
" + ], + "text/plain": [ + " State Customer\n", + "0 Arizona 1937\n", + "1 California 3552\n", + "2 Nevada 993\n", + "3 Oregon 2909\n", + "4 Washington 888" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Analizamos cuantos clientes tiene cada estado\n", + "customer_by_state = customer_df.groupby(\"State\")[\"Customer\"].count().reset_index()\n", + "\n", + "customer_by_state.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a6a0d500", + "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", + "
StateCustomer
0Arizona1937
1California3552
2Nevada993
3Oregon2909
4Washington888
\n", + "
" + ], + "text/plain": [ + " State Customer\n", + "0 Arizona 1937\n", + "1 California 3552\n", + "2 Nevada 993\n", + "3 Oregon 2909\n", + "4 Washington 888" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filtramos los estados que tien mas de 500 clientes\n", + "state_over_500_df = customer_by_state[customer_by_state[\"Customer\"] > 500]\n", + "\n", + "state_over_500_df" + ] + }, + { + "cell_type": "markdown", + "id": "d2f25b20", + "metadata": {}, + "source": [ + "4. Find the maximum, minimum, and median customer lifetime value by education level and gender. Write your conclusions." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "e478fe0c", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
EducationGenderCustomer Lifetime Value
minmaxmedian
0BachelorF1,904.0073,225.965,640.51
1BachelorM1,898.0167,907.275,548.03
2CollegeF1,898.6861,850.195,623.61
3CollegeM1,918.1261,134.686,005.85
4DoctorF2,395.5744,856.115,332.46
5DoctorM2,267.6032,677.345,577.67
6High School or BelowF2,144.9255,277.456,039.55
7High School or BelowM1,940.9883,325.386,286.73
8MasterF2,417.7851,016.075,729.86
9MasterM2,272.3150,568.265,579.10
\n", + "
" + ], + "text/plain": [ + " Education Gender Customer Lifetime Value \n", + " min max median\n", + "0 Bachelor F 1,904.00 73,225.96 5,640.51\n", + "1 Bachelor M 1,898.01 67,907.27 5,548.03\n", + "2 College F 1,898.68 61,850.19 5,623.61\n", + "3 College M 1,918.12 61,134.68 6,005.85\n", + "4 Doctor F 2,395.57 44,856.11 5,332.46\n", + "5 Doctor M 2,267.60 32,677.34 5,577.67\n", + "6 High School or Below F 2,144.92 55,277.45 6,039.55\n", + "7 High School or Below M 1,940.98 83,325.38 6,286.73\n", + "8 Master F 2,417.78 51,016.07 5,729.86\n", + "9 Master M 2,272.31 50,568.26 5,579.10" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "value_min_max_median = customer_df.groupby([\"Education\", \"Gender\"])[[\"Customer Lifetime Value\"]].agg([\"min\", \"max\", \"median\"]).reset_index()\n", + "\n", + "value_min_max_median" + ] + }, + { + "cell_type": "markdown", + "id": "d1dc163b", + "metadata": {}, + "source": [ + "##### Según los siguientes datos poder decir que segun la mediana, los hombres con estudios High School pueden ser clientes mas valiosos que algunos clientes con estudios avanzados. Los valores min oscilan entre 1900 y 2.400, esto nos indica que incluso los clientes \"menos valiosos\" aportan algo al negocio. En cuanto, al valor max son muy altos en todos los grupos, hay un pico significativo en High School de genero masculino que representa un alto potencial para el negocio aunque podria ser un caso extremo." + ] + }, + { + "cell_type": "markdown", + "id": "d67061c6", + "metadata": {}, + "source": [ + "5. The marketing team wants to analyze the number of policies sold by state and month. Present the data in a table where the months are arranged as columns and the states are arranged as rows." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "28f7760b", + "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", + "
StateMonths Since Policy InceptionNumber of Policies
0Arizona016
1Arizona111
2Arizona214
3Arizona328
4Arizona417
\n", + "
" + ], + "text/plain": [ + " State Months Since Policy Inception Number of Policies\n", + "0 Arizona 0 16\n", + "1 Arizona 1 11\n", + "2 Arizona 2 14\n", + "3 Arizona 3 28\n", + "4 Arizona 4 17" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sold_policy_type = customer_df.groupby([\"State\", \"Months Since Policy Inception\"])[\"Number of Policies\"].count().reset_index()\n", + "\n", + "sold_policy_type.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4b1cf81b", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Months Since Policy Inception0123456789...90919293949596979899
State
Arizona16111428171919131719...1520212126161191424
California45342738373227333344...28192227262826202032
Nevada9109111555161614...14122132198659
Oregon21274040272925252232...22283030181721181316
Washington610813985773...13101011788379
\n", + "

5 rows × 100 columns

\n", + "
" + ], + "text/plain": [ + "Months Since Policy Inception 0 1 2 3 4 5 6 7 8 9 ... \\\n", + "State ... \n", + "Arizona 16 11 14 28 17 19 19 13 17 19 ... \n", + "California 45 34 27 38 37 32 27 33 33 44 ... \n", + "Nevada 9 10 9 11 15 5 5 16 16 14 ... \n", + "Oregon 21 27 40 40 27 29 25 25 22 32 ... \n", + "Washington 6 10 8 13 9 8 5 7 7 3 ... \n", + "\n", + "Months Since Policy Inception 90 91 92 93 94 95 96 97 98 99 \n", + "State \n", + "Arizona 15 20 21 21 26 16 11 9 14 24 \n", + "California 28 19 22 27 26 28 26 20 20 32 \n", + "Nevada 14 12 2 13 2 19 8 6 5 9 \n", + "Oregon 22 28 30 30 18 17 21 18 13 16 \n", + "Washington 13 10 10 11 7 8 8 3 7 9 \n", + "\n", + "[5 rows x 100 columns]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Para que la columna sea mas legible pivotamos la tabla\n", + "policy_pivot = sold_policy_type.pivot(index=\"State\", columns=\"Months Since Policy Inception\", values=\"Number of Policies\").fillna(0)\n", + "\n", + "policy_pivot" + ] + }, + { + "cell_type": "markdown", + "id": "b7c4b115", + "metadata": {}, + "source": [ + "6. Display a new DataFrame that contains the number of policies sold by month, by state, for the top 3 states with the highest number of policies sold.\n", + "\n", + "*Hint:*\n", + "- *To accomplish this, you will first need to group the data by state and month, then count the number of policies sold for each group. Afterwards, you will need to sort the data by the count of policies sold in descending order.*\n", + "- *Next, you will select the top 3 states with the highest number of policies sold.*\n", + "- *Finally, you will create a new DataFrame that contains the number of policies sold by month for each of the top 3 states.*" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "5b079161", + "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", + "
StateMonths Since Policy InceptionNumber of Policies
0Arizona016
1Arizona111
2Arizona214
3Arizona328
4Arizona417
............
495Washington958
496Washington968
497Washington973
498Washington987
499Washington999
\n", + "

500 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " State Months Since Policy Inception Number of Policies\n", + "0 Arizona 0 16\n", + "1 Arizona 1 11\n", + "2 Arizona 2 14\n", + "3 Arizona 3 28\n", + "4 Arizona 4 17\n", + ".. ... ... ...\n", + "495 Washington 95 8\n", + "496 Washington 96 8\n", + "497 Washington 97 3\n", + "498 Washington 98 7\n", + "499 Washington 99 9\n", + "\n", + "[500 rows x 3 columns]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sold_policy_type = customer_df.groupby([\"State\", \"Months Since Policy Inception\"])[\"Number of Policies\"].count().reset_index()\n", + "\n", + "sold_policy_type" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "bdbbc987", + "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", + "
StateNumber of Policies
0Arizona1937
1California3552
2Nevada993
3Oregon2909
4Washington888
\n", + "
" + ], + "text/plain": [ + " State Number of Policies\n", + "0 Arizona 1937\n", + "1 California 3552\n", + "2 Nevada 993\n", + "3 Oregon 2909\n", + "4 Washington 888" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_policies_by_state = sold_policy_type.groupby(\"State\")[\"Number of Policies\"].sum().reset_index()\n", + "\n", + "total_policies_by_state" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "a6a379a1", + "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", + "
StateNumber of Policies
1California3552
3Oregon2909
0Arizona1937
\n", + "
" + ], + "text/plain": [ + " State Number of Policies\n", + "1 California 3552\n", + "3 Oregon 2909\n", + "0 Arizona 1937" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "top_states = total_policies_by_state.sort_values(by=\"Number of Policies\", ascending=False).head(3)\n", + "\n", + "top_states" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "a56ca650", + "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", + "
StateMonths Since Policy InceptionNumber of Policies
0Arizona016
1Arizona111
2Arizona214
3Arizona328
4Arizona417
............
395Oregon9517
396Oregon9621
397Oregon9718
398Oregon9813
399Oregon9916
\n", + "

300 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " State Months Since Policy Inception Number of Policies\n", + "0 Arizona 0 16\n", + "1 Arizona 1 11\n", + "2 Arizona 2 14\n", + "3 Arizona 3 28\n", + "4 Arizona 4 17\n", + ".. ... ... ...\n", + "395 Oregon 95 17\n", + "396 Oregon 96 21\n", + "397 Oregon 97 18\n", + "398 Oregon 98 13\n", + "399 Oregon 99 16\n", + "\n", + "[300 rows x 3 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "top_3_states = top_states[\"State\"].tolist()\n", + "\n", + "policies_top_3 = sold_policy_type[sold_policy_type[\"State\"].isin(top_3_states)]\n", + "\n", + "policies_top_3" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "dc053266", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Months Since Policy Inception0123456789...90919293949596979899
State
Arizona16111428171919131719...1520212126161191424
California45342738373227333344...28192227262826202032
Oregon21274040272925252232...22283030181721181316
\n", + "

3 rows × 100 columns

\n", + "
" + ], + "text/plain": [ + "Months Since Policy Inception 0 1 2 3 4 5 6 7 8 9 ... \\\n", + "State ... \n", + "Arizona 16 11 14 28 17 19 19 13 17 19 ... \n", + "California 45 34 27 38 37 32 27 33 33 44 ... \n", + "Oregon 21 27 40 40 27 29 25 25 22 32 ... \n", + "\n", + "Months Since Policy Inception 90 91 92 93 94 95 96 97 98 99 \n", + "State \n", + "Arizona 15 20 21 21 26 16 11 9 14 24 \n", + "California 28 19 22 27 26 28 26 20 20 32 \n", + "Oregon 22 28 30 30 18 17 21 18 13 16 \n", + "\n", + "[3 rows x 100 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "policies_top_3_pivot = policies_top_3.pivot(index=\"State\", columns=\"Months Since Policy Inception\", values=\"Number of Policies\").fillna(0)\n", + "\n", + "policies_top_3_pivot" + ] + }, + { + "cell_type": "markdown", + "id": "2789467b", + "metadata": {}, + "source": [ + "7. The marketing team wants to analyze the effect of different marketing channels on the customer response rate.\n", + "\n", + "Hint: You can use melt to unpivot the data and create a table that shows the customer response rate (those who responded \"Yes\") by marketing channel." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "07d85c10", + "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", + "
Sales ChannelResponse
0AgentNo
1Call CenterNo
2Call CenterNo
3BranchYes
4BranchNo
\n", + "
" + ], + "text/plain": [ + " Sales Channel Response\n", + "0 Agent No\n", + "1 Call Center No\n", + "2 Call Center No\n", + "3 Branch Yes\n", + "4 Branch No" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Verificamos las columnas \"Sales Channel\" y \"Response\"\n", + "customer_df[[\"Sales Channel\", \"Response\"]].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "ffbfe706", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Sales Channel Response Yes Rate (%)\n", + "0 Agent 18.01\n", + "1 Branch 10.79\n", + "2 Call Center 10.32\n", + "3 Web 10.89\n" + ] + } + ], + "source": [ + "# Calculamos la tasa \"Yes\" por canal\n", + "response_yes_rate = (customer_df.groupby(\"Sales Channel\")[\"Response\"].apply(lambda x: (x == \"Yes\").mean() * 100).reset_index(name=\"Response Yes Rate (%)\"))\n", + "\n", + "print(response_yes_rate)" ] } ], @@ -143,7 +2646,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -157,7 +2660,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.12.9" } }, "nbformat": 4,