diff --git a/.ipynb_checkpoints/lab-dw-data-structuring-and-combining-checkpoint.ipynb b/.ipynb_checkpoints/lab-dw-data-structuring-and-combining-checkpoint.ipynb new file mode 100644 index 0000000..ec4e3f9 --- /dev/null +++ b/.ipynb_checkpoints/lab-dw-data-structuring-and-combining-checkpoint.ipynb @@ -0,0 +1,168 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "25d7736c-ba17-4aff-b6bb-66eba20fbf4e", + "metadata": { + "id": "25d7736c-ba17-4aff-b6bb-66eba20fbf4e" + }, + "source": [ + "# Lab | Data Structuring and Combining Data" + ] + }, + { + "cell_type": "markdown", + "id": "a2cdfc70-44c8-478c-81e7-2bc43fdf4986", + "metadata": { + "id": "a2cdfc70-44c8-478c-81e7-2bc43fdf4986" + }, + "source": [ + "## Challenge 1: Combining & Cleaning Data\n", + "\n", + "In this challenge, we will be working with the customer data from an insurance company, as we did in the two previous labs. The data can be found here:\n", + "- https://raw.githubusercontent.com/data-bootcamp-v4/data/main/file1.csv\n", + "\n", + "But this time, we got new data, which can be found in the following 2 CSV files located at the links below.\n", + "\n", + "- https://raw.githubusercontent.com/data-bootcamp-v4/data/main/file2.csv\n", + "- https://raw.githubusercontent.com/data-bootcamp-v4/data/main/file3.csv\n", + "\n", + "Note that you'll need to clean and format the new data.\n", + "\n", + "Observation:\n", + "- One option is to first combine the three datasets and then apply the cleaning function to the new combined dataset\n", + "- Another option would be to read the clean file you saved in the previous lab, and just clean the two new files and concatenate the three clean datasets" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "492d06e3-92c7-4105-ac72-536db98d3244", + "metadata": { + "id": "492d06e3-92c7-4105-ac72-536db98d3244" + }, + "outputs": [], + "source": [ + "# Your code goes here" + ] + }, + { + "cell_type": "markdown", + "id": "31b8a9e7-7db9-4604-991b-ef6771603e57", + "metadata": { + "id": "31b8a9e7-7db9-4604-991b-ef6771603e57" + }, + "source": [ + "# Challenge 2: Structuring Data" + ] + }, + { + "cell_type": "markdown", + "id": "a877fd6d-7a0c-46d2-9657-f25036e4ca4b", + "metadata": { + "id": "a877fd6d-7a0c-46d2-9657-f25036e4ca4b" + }, + "source": [ + "In this challenge, we will continue to work with customer data from an insurance company, but we will use a dataset with more columns, called marketing_customer_analysis.csv, which can be found at the following link:\n", + "\n", + "https://raw.githubusercontent.com/data-bootcamp-v4/data/main/marketing_customer_analysis_clean.csv\n", + "\n", + "This dataset contains information such as customer demographics, policy details, vehicle information, and the customer's response to the last marketing campaign. Our goal is to explore and analyze this data by performing data cleaning, formatting, and structuring." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa10d9b0-1c27-4d3f-a8e4-db6ab73bfd26", + "metadata": { + "id": "aa10d9b0-1c27-4d3f-a8e4-db6ab73bfd26" + }, + "outputs": [], + "source": [ + "# Your code goes here" + ] + }, + { + "cell_type": "markdown", + "id": "df35fd0d-513e-4e77-867e-429da10a9cc7", + "metadata": { + "id": "df35fd0d-513e-4e77-867e-429da10a9cc7" + }, + "source": [ + "1. You work at the marketing department and you want to know which sales channel brought the most sales in terms of total revenue. Using pivot, create a summary table showing the total revenue for each sales channel (branch, call center, web, and mail).\n", + "Round the total revenue to 2 decimal points. Analyze the resulting table to draw insights." + ] + }, + { + "cell_type": "markdown", + "id": "640993b2-a291-436c-a34d-a551144f8196", + "metadata": { + "id": "640993b2-a291-436c-a34d-a551144f8196" + }, + "source": [ + "2. Create a pivot table that shows the average customer lifetime value per gender and education level. Analyze the resulting table to draw insights." + ] + }, + { + "cell_type": "markdown", + "id": "32c7f2e5-3d90-43e5-be33-9781b6069198", + "metadata": { + "id": "32c7f2e5-3d90-43e5-be33-9781b6069198" + }, + "source": [ + "## Bonus\n", + "\n", + "You work at the customer service department and you want to know which months had the highest number of complaints by policy type category. Create a summary table showing the number of complaints by policy type and month.\n", + "Show it in a long format table." + ] + }, + { + "cell_type": "markdown", + "id": "e3d09a8f-953c-448a-a5f8-2e5a8cca7291", + "metadata": { + "id": "e3d09a8f-953c-448a-a5f8-2e5a8cca7291" + }, + "source": [ + "*In data analysis, a long format table is a way of structuring data in which each observation or measurement is stored in a separate row of the table. The key characteristic of a long format table is that each column represents a single variable, and each row represents a single observation of that variable.*\n", + "\n", + "*More information about long and wide format tables here: https://www.statology.org/long-vs-wide-data/*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a069e0b-b400-470e-904d-d17582191be4", + "metadata": { + "id": "3a069e0b-b400-470e-904d-d17582191be4" + }, + "outputs": [], + "source": [ + "# Your code goes here" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/lab-dw-data-structuring-and-combining.ipynb b/lab-dw-data-structuring-and-combining.ipynb index ec4e3f9..1ecfc1a 100644 --- a/lab-dw-data-structuring-and-combining.ipynb +++ b/lab-dw-data-structuring-and-combining.ipynb @@ -36,14 +36,209 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "492d06e3-92c7-4105-ac72-536db98d3244", "metadata": { "id": "492d06e3-92c7-4105-ac72-536db98d3244" }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['Customer', 'ST', 'GENDER', 'Education', 'Customer Lifetime Value',\n", + " 'Income', 'Monthly Premium Auto', 'Number of Open Complaints',\n", + " 'Policy Type', 'Vehicle Class', 'Total Claim Amount'],\n", + " dtype='object')\n", + "Index(['Customer', 'ST', 'GENDER', 'Education', 'Customer Lifetime Value',\n", + " 'Income', 'Monthly Premium Auto', 'Number of Open Complaints',\n", + " 'Total Claim Amount', 'Policy Type', 'Vehicle Class'],\n", + " dtype='object')\n", + "Index(['Customer', 'State', 'Customer Lifetime Value', 'Education', 'Gender',\n", + " 'Income', 'Monthly Premium Auto', 'Number of Open Complaints',\n", + " 'Policy Type', 'Total Claim Amount', 'Vehicle Class'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Load cleaned dataset from previous lab\n", + "df1 = pd.read_csv(\"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/file1.csv\")\n", + "\n", + "# Load new datasets\n", + "url2 = \"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/file2.csv\"\n", + "url3 = \"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/file3.csv\"\n", + "\n", + "df2 = pd.read_csv(url2)\n", + "df3 = pd.read_csv(url3)\n", + "\n", + "# Check columns\n", + "print(df1.columns)\n", + "print(df2.columns)\n", + "print(df3.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "aa8632a9-8fb7-4501-b01c-bdfdd3cfee59", + "metadata": {}, "outputs": [], "source": [ - "# Your code goes here" + "def clean_insurance_data(df):\n", + "\n", + " # Clean column names\n", + " df.columns = (\n", + " df.columns\n", + " .str.lower()\n", + " .str.strip()\n", + " .str.replace(\" \", \"_\")\n", + " .str.replace(\"st\", \"state\")\n", + " )\n", + "\n", + " # Clean gender\n", + " if \"gender\" in df.columns:\n", + " df[\"gender\"] = df[\"gender\"].replace({\n", + " \"F\": \"F\",\n", + " \"Femal\": \"F\",\n", + " \"female\": \"F\",\n", + " \"M\": \"M\",\n", + " \"Male\": \"M\"\n", + " })\n", + "\n", + " # Clean state\n", + " if \"state\" in df.columns:\n", + " df[\"state\"] = df[\"state\"].replace({\n", + " \"AZ\": \"Arizona\",\n", + " \"Cali\": \"California\",\n", + " \"WA\": \"Washington\"\n", + " })\n", + "\n", + " # Clean education\n", + " if \"education\" in df.columns:\n", + " df[\"education\"] = df[\"education\"].replace({\n", + " \"Bachelors\": \"Bachelor\"\n", + " })\n", + "\n", + " # Clean customer lifetime value\n", + " if \"customer_lifetime_value\" in df.columns:\n", + " df[\"customer_lifetime_value\"] = (\n", + " df[\"customer_lifetime_value\"]\n", + " .astype(str)\n", + " .str.replace(\"%\", \"\", regex=False)\n", + " )\n", + " df[\"customer_lifetime_value\"] = pd.to_numeric(\n", + " df[\"customer_lifetime_value\"],\n", + " errors=\"coerce\"\n", + " )\n", + "\n", + " # Clean number of open complaints\n", + " if \"number_of_open_complaints\" in df.columns:\n", + " df[\"number_of_open_complaints\"] = (\n", + " df[\"number_of_open_complaints\"]\n", + " .astype(str)\n", + " .str.split(\"/\")\n", + " .str[1]\n", + " )\n", + "\n", + " df[\"number_of_open_complaints\"] = pd.to_numeric(\n", + " df[\"number_of_open_complaints\"],\n", + " errors=\"coerce\"\n", + " )\n", + "\n", + " # Clean vehicle class\n", + " if \"vehicle_class\" in df.columns:\n", + " df[\"vehicle_class\"] = df[\"vehicle_class\"].replace({\n", + " \"Sports Car\": \"Luxury\",\n", + " \"Luxury SUV\": \"Luxury\",\n", + " \"Luxury Car\": \"Luxury\"\n", + " })\n", + "\n", + " # Handle missing values\n", + " numerical_cols = df.select_dtypes(include=\"number\").columns\n", + "\n", + " for col in numerical_cols:\n", + " df[col] = df[col].fillna(df[col].median())\n", + "\n", + " categorical_cols = df.select_dtypes(include=\"object\").columns\n", + "\n", + " for col in categorical_cols:\n", + " df[col] = df[col].fillna(df[col].mode()[0])\n", + "\n", + " # Remove duplicates\n", + " df = df.drop_duplicates()\n", + " df = df.reset_index(drop=True)\n", + "\n", + " # Convert numeric columns to integers\n", + " numerical_cols = df.select_dtypes(include=\"number\").columns\n", + " df[numerical_cols] = df[numerical_cols].astype(int)\n", + "\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7063006d-da35-452b-b994-e5d7d8b94959", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'df3_clean' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[6]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# Concatenate all cleaned datasets\u001b[39;00m\n\u001b[32m 3\u001b[39m final_df = pd.concat(\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m [df1, df2_clean, \u001b[43mdf3_clean\u001b[49m],\n\u001b[32m 5\u001b[39m ignore_index=\u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[32m 6\u001b[39m )\n\u001b[32m 8\u001b[39m \u001b[38;5;66;03m# Check final shape\u001b[39;00m\n\u001b[32m 9\u001b[39m \u001b[38;5;28mprint\u001b[39m(final_df.shape)\n", + "\u001b[31mNameError\u001b[39m: name 'df3_clean' is not defined" + ] + } + ], + "source": [ + "# Concatenate all cleaned datasets\n", + "\n", + "final_df = pd.concat(\n", + " [df1, df2_clean, df3_clean],\n", + " ignore_index=True\n", + ")\n", + "\n", + "# Check final shape\n", + "print(final_df.shape)\n", + "\n", + "# Check first rows\n", + "final_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d32766a-f485-4ab2-86d3-2309aa7df7ed", + "metadata": {}, + "outputs": [], + "source": [ + "# Check missing values\n", + "print(final_df.isnull().sum())\n", + "\n", + "# Check duplicates\n", + "print(\"Duplicates:\", final_df.duplicated().sum())\n", + "\n", + "# Check data types\n", + "print(final_df.dtypes)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "777de77d-4122-479f-a8da-5fe807e08869", + "metadata": {}, + "outputs": [], + "source": [ + "final_df.to_csv(\n", + " \"insurance_customer_final_cleaned.csv\",\n", + " index=False\n", + ")" ] }, { @@ -72,14 +267,1031 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "aa10d9b0-1c27-4d3f-a8e4-db6ab73bfd26", "metadata": { "id": "aa10d9b0-1c27-4d3f-a8e4-db6ab73bfd26" }, - "outputs": [], + "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_policiespolicy_typepolicyrenew_offer_typesales_channeltotal_claim_amountvehicle_classvehicle_sizevehicle_typemonth
00DK49336Arizona4809.216960NoBasicCollege2011-02-18EmployedM...9Corporate AutoCorporate L3Offer3Agent292.800000Four-Door CarMedsizeA2
11KX64629California2228.525238NoBasicCollege2011-01-18UnemployedF...1Personal AutoPersonal L3Offer4Call Center744.924331Four-Door CarMedsizeA1
22LZ68649Washington14947.917300NoBasicBachelor2011-02-10EmployedM...2Personal AutoPersonal L3Offer3Call Center480.000000SUVMedsizeA2
33XL78013Oregon22332.439460YesExtendedCollege2011-01-11EmployedM...2Corporate AutoCorporate L3Offer2Branch484.013411Four-Door CarMedsizeA1
44QA50777Oregon9025.067525NoPremiumBachelor2011-01-17Medical LeaveF...7Personal AutoPersonal L2Offer1Branch707.925645Four-Door CarMedsizeA1
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " unnamed:_0 customer state customer_lifetime_value response \\\n", + "0 0 DK49336 Arizona 4809.216960 No \n", + "1 1 KX64629 California 2228.525238 No \n", + "2 2 LZ68649 Washington 14947.917300 No \n", + "3 3 XL78013 Oregon 22332.439460 Yes \n", + "4 4 QA50777 Oregon 9025.067525 No \n", + "\n", + " coverage education effective_to_date employmentstatus gender ... \\\n", + "0 Basic College 2011-02-18 Employed M ... \n", + "1 Basic College 2011-01-18 Unemployed F ... \n", + "2 Basic Bachelor 2011-02-10 Employed M ... \n", + "3 Extended College 2011-01-11 Employed M ... \n", + "4 Premium Bachelor 2011-01-17 Medical Leave F ... \n", + "\n", + " number_of_policies policy_type policy renew_offer_type \\\n", + "0 9 Corporate Auto Corporate L3 Offer3 \n", + "1 1 Personal Auto Personal L3 Offer4 \n", + "2 2 Personal Auto Personal L3 Offer3 \n", + "3 2 Corporate Auto Corporate L3 Offer2 \n", + "4 7 Personal Auto Personal L2 Offer1 \n", + "\n", + " sales_channel total_claim_amount vehicle_class vehicle_size \\\n", + "0 Agent 292.800000 Four-Door Car Medsize \n", + "1 Call Center 744.924331 Four-Door Car Medsize \n", + "2 Call Center 480.000000 SUV Medsize \n", + "3 Branch 484.013411 Four-Door Car Medsize \n", + "4 Branch 707.925645 Four-Door Car Medsize \n", + "\n", + " vehicle_type month \n", + "0 A 2 \n", + "1 A 1 \n", + "2 A 2 \n", + "3 A 1 \n", + "4 A 1 \n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code goes here" + "import pandas as pd\n", + "\n", + "# Load dataset\n", + "url = \"https://raw.githubusercontent.com/data-bootcamp-v4/data/main/marketing_customer_analysis_clean.csv\"\n", + "\n", + "df = pd.read_csv(url)\n", + "\n", + "# Display first rows\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c4bb41dc-b7bf-41aa-99ea-01beb05849d1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10910, 27)\n", + "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', 'month'],\n", + " dtype='object')\n", + "\n", + "RangeIndex: 10910 entries, 0 to 10909\n", + "Data columns (total 27 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 unnamed:_0 10910 non-null int64 \n", + " 1 customer 10910 non-null object \n", + " 2 state 10910 non-null object \n", + " 3 customer_lifetime_value 10910 non-null float64\n", + " 4 response 10910 non-null object \n", + " 5 coverage 10910 non-null object \n", + " 6 education 10910 non-null object \n", + " 7 effective_to_date 10910 non-null object \n", + " 8 employmentstatus 10910 non-null object \n", + " 9 gender 10910 non-null object \n", + " 10 income 10910 non-null int64 \n", + " 11 location_code 10910 non-null object \n", + " 12 marital_status 10910 non-null object \n", + " 13 monthly_premium_auto 10910 non-null int64 \n", + " 14 months_since_last_claim 10910 non-null float64\n", + " 15 months_since_policy_inception 10910 non-null int64 \n", + " 16 number_of_open_complaints 10910 non-null float64\n", + " 17 number_of_policies 10910 non-null int64 \n", + " 18 policy_type 10910 non-null object \n", + " 19 policy 10910 non-null object \n", + " 20 renew_offer_type 10910 non-null object \n", + " 21 sales_channel 10910 non-null object \n", + " 22 total_claim_amount 10910 non-null float64\n", + " 23 vehicle_class 10910 non-null object \n", + " 24 vehicle_size 10910 non-null object \n", + " 25 vehicle_type 10910 non-null object \n", + " 26 month 10910 non-null int64 \n", + "dtypes: float64(4), int64(6), object(17)\n", + "memory usage: 2.2+ MB\n" + ] + } + ], + "source": [ + "# Check number of rows and columns\n", + "print(df.shape)\n", + "\n", + "# Check column names\n", + "print(df.columns)\n", + "\n", + "# Check data types and missing values\n", + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "5d58680b-18cb-400e-9e1f-45ade7cc2c54", + "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", + "
unnamed:_0customer_lifetime_valueincomemonthly_premium_automonths_since_last_claimmonths_since_policy_inceptionnumber_of_open_complaintsnumber_of_policiestotal_claim_amountmonth
count10910.00000010910.00000010910.00000010910.00000010910.00000010910.00000010910.00000010910.00000010910.00000010910.000000
mean5454.5000008018.24109437536.28478593.19605915.14907148.0919340.3842562.979193434.8883301.466728
std3149.5900536885.08143430359.19567034.4425329.78352027.9406750.8855892.399359292.1805560.498915
min0.0000001898.0076750.00000061.0000000.0000000.0000000.0000001.0000000.0990071.000000
25%2727.2500004014.4531130.00000068.0000007.00000024.0000000.0000001.000000271.0825271.000000
50%5454.5000005771.14723533813.50000083.00000015.00000048.0000000.0000002.000000382.5646301.000000
75%8181.7500008992.77913762250.750000109.00000023.00000071.0000000.3842564.000000547.2000002.000000
max10909.00000083325.38119099981.000000298.00000035.00000099.0000005.0000009.0000002893.2396782.000000
\n", + "
" + ], + "text/plain": [ + " unnamed:_0 customer_lifetime_value income \\\n", + "count 10910.000000 10910.000000 10910.000000 \n", + "mean 5454.500000 8018.241094 37536.284785 \n", + "std 3149.590053 6885.081434 30359.195670 \n", + "min 0.000000 1898.007675 0.000000 \n", + "25% 2727.250000 4014.453113 0.000000 \n", + "50% 5454.500000 5771.147235 33813.500000 \n", + "75% 8181.750000 8992.779137 62250.750000 \n", + "max 10909.000000 83325.381190 99981.000000 \n", + "\n", + " monthly_premium_auto months_since_last_claim \\\n", + "count 10910.000000 10910.000000 \n", + "mean 93.196059 15.149071 \n", + "std 34.442532 9.783520 \n", + "min 61.000000 0.000000 \n", + "25% 68.000000 7.000000 \n", + "50% 83.000000 15.000000 \n", + "75% 109.000000 23.000000 \n", + "max 298.000000 35.000000 \n", + "\n", + " months_since_policy_inception number_of_open_complaints \\\n", + "count 10910.000000 10910.000000 \n", + "mean 48.091934 0.384256 \n", + "std 27.940675 0.885589 \n", + "min 0.000000 0.000000 \n", + "25% 24.000000 0.000000 \n", + "50% 48.000000 0.000000 \n", + "75% 71.000000 0.384256 \n", + "max 99.000000 5.000000 \n", + "\n", + " number_of_policies total_claim_amount month \n", + "count 10910.000000 10910.000000 10910.000000 \n", + "mean 2.979193 434.888330 1.466728 \n", + "std 2.399359 292.180556 0.498915 \n", + "min 1.000000 0.099007 1.000000 \n", + "25% 1.000000 271.082527 1.000000 \n", + "50% 2.000000 382.564630 1.000000 \n", + "75% 4.000000 547.200000 2.000000 \n", + "max 9.000000 2893.239678 2.000000 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "6b04d033-2aaa-44ae-b803-8ed9e41cda46", + "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", + "
customerstateresponsecoverageeducationeffective_to_dateemploymentstatusgenderlocation_codemarital_statuspolicy_typepolicyrenew_offer_typesales_channelvehicle_classvehicle_sizevehicle_type
count1091010910109101091010910109101091010910109101091010910109101091010910109101091010910
unique913452355952333944631
topID89933CaliforniaNoBasicBachelor2011-01-10EmployedFSuburbanMarriedPersonal AutoPersonal L3Offer1AgentFour-Door CarMedsizeA
freq74183944466603272239678955736902631981284118448341215834787310910
\n", + "
" + ], + "text/plain": [ + " customer state response coverage education effective_to_date \\\n", + "count 10910 10910 10910 10910 10910 10910 \n", + "unique 9134 5 2 3 5 59 \n", + "top ID89933 California No Basic Bachelor 2011-01-10 \n", + "freq 7 4183 9444 6660 3272 239 \n", + "\n", + " employmentstatus gender location_code marital_status policy_type \\\n", + "count 10910 10910 10910 10910 10910 \n", + "unique 5 2 3 3 3 \n", + "top Employed F Suburban Married Personal Auto \n", + "freq 6789 5573 6902 6319 8128 \n", + "\n", + " policy renew_offer_type sales_channel vehicle_class \\\n", + "count 10910 10910 10910 10910 \n", + "unique 9 4 4 6 \n", + "top Personal L3 Offer1 Agent Four-Door Car \n", + "freq 4118 4483 4121 5834 \n", + "\n", + " vehicle_size vehicle_type \n", + "count 10910 10910 \n", + "unique 3 1 \n", + "top Medsize A \n", + "freq 7873 10910 " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe(include=\"object\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "0cac1b25-276c-4f22-9be1-22de61d00853", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "unnamed:_0 0\n", + "customer 0\n", + "state 0\n", + "customer_lifetime_value 0\n", + "response 0\n", + "coverage 0\n", + "education 0\n", + "effective_to_date 0\n", + "employmentstatus 0\n", + "gender 0\n", + "income 0\n", + "location_code 0\n", + "marital_status 0\n", + "monthly_premium_auto 0\n", + "months_since_last_claim 0\n", + "months_since_policy_inception 0\n", + "number_of_open_complaints 0\n", + "number_of_policies 0\n", + "policy_type 0\n", + "policy 0\n", + "renew_offer_type 0\n", + "sales_channel 0\n", + "total_claim_amount 0\n", + "vehicle_class 0\n", + "vehicle_size 0\n", + "vehicle_type 0\n", + "month 0\n", + "dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Count null values\n", + "df.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9faf64c2-476c-43d4-b3ad-567ca1342859", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Duplicate rows: 0\n" + ] + } + ], + "source": [ + "# Count duplicate rows\n", + "print(\"Duplicate rows:\", df.duplicated().sum())" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "c698fbd5-f568-4d5b-b697-3396795fd81a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Column: customer\n", + "['DK49336' 'KX64629' 'LZ68649' ... 'KX53892' 'TL39050' 'WA60547']\n", + "\n", + "Column: state\n", + "['Arizona' 'California' 'Washington' 'Oregon' 'Nevada']\n", + "\n", + "Column: response\n", + "['No' 'Yes']\n", + "\n", + "Column: coverage\n", + "['Basic' 'Extended' 'Premium']\n", + "\n", + "Column: education\n", + "['College' 'Bachelor' 'High School or Below' 'Doctor' 'Master']\n", + "\n", + "Column: effective_to_date\n", + "['2011-02-18' '2011-01-18' '2011-02-10' '2011-01-11' '2011-01-17'\n", + " '2011-02-14' '2011-02-24' '2011-01-19' '2011-01-04' '2011-01-02'\n", + " '2011-02-07' '2011-01-31' '2011-01-26' '2011-02-28' '2011-01-16'\n", + " '2011-02-26' '2011-02-23' '2011-01-15' '2011-02-02' '2011-02-15'\n", + " '2011-01-24' '2011-02-21' '2011-02-22' '2011-01-07' '2011-01-28'\n", + " '2011-02-08' '2011-02-12' '2011-02-20' '2011-01-05' '2011-02-19'\n", + " '2011-01-03' '2011-02-03' '2011-01-22' '2011-01-23' '2011-02-05'\n", + " '2011-02-13' '2011-01-25' '2011-02-16' '2011-02-01' '2011-01-27'\n", + " '2011-01-12' '2011-01-20' '2011-02-06' '2011-02-11' '2011-01-21'\n", + " '2011-01-29' '2011-01-09' '2011-02-09' '2011-02-27' '2011-01-01'\n", + " '2011-02-17' '2011-02-25' '2011-01-13' '2011-01-06' '2011-02-04'\n", + " '2011-01-14' '2011-01-10' '2011-01-08' '2011-01-30']\n", + "\n", + "Column: employmentstatus\n", + "['Employed' 'Unemployed' 'Medical Leave' 'Disabled' 'Retired']\n", + "\n", + "Column: gender\n", + "['M' 'F']\n", + "\n", + "Column: location_code\n", + "['Suburban' 'Urban' 'Rural']\n", + "\n", + "Column: marital_status\n", + "['Married' 'Single' 'Divorced']\n", + "\n", + "Column: policy_type\n", + "['Corporate Auto' 'Personal Auto' 'Special Auto']\n", + "\n", + "Column: policy\n", + "['Corporate L3' 'Personal L3' 'Personal L2' 'Corporate L2' 'Personal L1'\n", + " 'Special L1' 'Corporate L1' 'Special L3' 'Special L2']\n", + "\n", + "Column: renew_offer_type\n", + "['Offer3' 'Offer4' 'Offer2' 'Offer1']\n", + "\n", + "Column: sales_channel\n", + "['Agent' 'Call Center' 'Branch' 'Web']\n", + "\n", + "Column: vehicle_class\n", + "['Four-Door Car' 'SUV' 'Two-Door Car' 'Sports Car' 'Luxury Car'\n", + " 'Luxury SUV']\n", + "\n", + "Column: vehicle_size\n", + "['Medsize' 'Small' 'Large']\n", + "\n", + "Column: vehicle_type\n", + "['A']\n" + ] + } + ], + "source": [ + "# Display unique values for object columns\n", + "\n", + "for col in df.select_dtypes(include=\"object\").columns:\n", + " print(\"\\nColumn:\", col)\n", + " print(df[col].unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "bef4c8ec-63ba-41f4-85a0-288b70528925", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "unnamed:_0 int64\n", + "customer object\n", + "state object\n", + "customer_lifetime_value float64\n", + "response object\n", + "coverage object\n", + "education object\n", + "effective_to_date object\n", + "employmentstatus object\n", + "gender object\n", + "income int64\n", + "location_code object\n", + "marital_status object\n", + "monthly_premium_auto int64\n", + "months_since_last_claim float64\n", + "months_since_policy_inception int64\n", + "number_of_open_complaints float64\n", + "number_of_policies int64\n", + "policy_type object\n", + "policy object\n", + "renew_offer_type object\n", + "sales_channel object\n", + "total_claim_amount float64\n", + "vehicle_class object\n", + "vehicle_size object\n", + "vehicle_type object\n", + "month int64\n", + "dtype: object" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "006a2b1a-1db3-4a70-80df-daa593c64da0", + "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", + "
total_claim_amount
sales_channel
Agent1810226.82
Branch1301204.00
Call Center926600.82
Web706600.04
\n", + "
" + ], + "text/plain": [ + " total_claim_amount\n", + "sales_channel \n", + "Agent 1810226.82\n", + "Branch 1301204.00\n", + "Call Center 926600.82\n", + "Web 706600.04" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create pivot table for total revenue by sales channel\n", + "\n", + "sales_channel_revenue = pd.pivot_table(\n", + " df,\n", + " values=\"total_claim_amount\",\n", + " index=\"sales_channel\",\n", + " aggfunc=\"sum\"\n", + ")\n", + "\n", + "# Round values to 2 decimals\n", + "sales_channel_revenue = sales_channel_revenue.round(2)\n", + "\n", + "sales_channel_revenue" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "cb25b15d-7cd0-40d0-ad4d-fc6d79d3e5fa", + "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", + "
total_claim_amount
sales_channel
Agent1810226.82
Branch1301204.00
Call Center926600.82
Web706600.04
\n", + "
" + ], + "text/plain": [ + " total_claim_amount\n", + "sales_channel \n", + "Agent 1810226.82\n", + "Branch 1301204.00\n", + "Call Center 926600.82\n", + "Web 706600.04" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sales_channel_revenue.sort_values(\n", + " by=\"total_claim_amount\",\n", + " ascending=False\n", + ")" ] }, { @@ -93,6 +1305,222 @@ "Round the total revenue to 2 decimal points. Analyze the resulting table to draw insights." ] }, + { + "cell_type": "code", + "execution_count": 17, + "id": "d551bb2c-a36a-4416-be18-c59bea53c5c4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAIUCAYAAAD49f/AAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUjtJREFUeJzt3Qm8jGX/x/HfsZOQZCt7IpTsW5KEkHgqVEilRfIQSYREi6VskUolUYkeW6KkskaKUD0hikgkZN+Z/+t7/Z+Z18zZnGXOmXPu83m/XnfnzD333HPPPdPxnev+XdcV5fP5fAYAAAB4VKZIHwAAAACQkgi8AAAA8DQCLwAAADyNwAsAAABPI/ACAADA0wi8AAAA8DQCLwAAADyNwAsAAABPI/ACAADA0wi8gEdFRUUlaFmyZMkF9/Xiiy/anDlzkn08zz77bKKPO0+ePFa3bl2bNm1asp7fyyZPnuzO1Zo1a1L8uRYuXGhNmjSxokWLWvbs2d3PG2+80YYNG5ak/d13331WsmRJi4R58+ZZy5YtrVChQpYtWzbLnz+/NWrUyN5//307c+aM22b79u3u3L788svmFQn9fxHwEgIv4FGrVq0KWZo3b245c+aMsb5q1aqpEngT484773THtnLlSnv99dft8OHDds8999gHH3yQaseAmPRe3HLLLe5LyPjx4134HT58uF199dX2n//8J92cMp/PZ/fff7/ddtttdv78eRs1apR98cUX9u6771rlypWta9euNmHChEgfJoAwyhLOnQFIO2rXrh1y+7LLLrNMmTLFWJ8WqcXNf5x16tSxevXquVbAN954wwVfRMbQoUPthhtuiBFuO3bs6IJjevHSSy+5VvHBgwfbM888E3KfWnz79OljW7dujdjxAQg/WniBDOzAgQOuNevyyy93l3RLly5t/fv3t1OnToVc/jx27Jhr/fKXGegStvz999/u8RUqVLDcuXNbwYIF7aabbrLly5eH9ThLlCjhAvtff/0Vsl4tv71797ZSpUq549frePzxx93x+lWpUsXq168fY5/nzp1z299+++2BdadPn7bnn3/eypcv7y7X6znVEqjXGUzh+9Zbb7XPPvvMtZCr5VyPmTRpUsh2umys8xVXCYIulwebPn26C/gXXXSRO59Nmza1devWJfg8/fPPP+54dWle+1B4++233wL3P/fcc5YlSxbbuXNnjMc+8MADdumll9rJkyfj3P/+/futSJEisd6nL1PBXn31VReO9ZnQsVxzzTU2YsSIQKnAhVpg1cJ63XXXuXN7ySWXuFb/4NciOjd6H/Qc/vKKFi1a2B9//BHnvvX8apXW+zVw4MBYtylcuLBdf/31MdarJVifNb03ep+++eabkPtVUnLXXXe5z4eOWz/vvvtu+/3332N9/xcvXmyPPvqoFShQwJ17fRb//PPPJH3WZM+ePfbII4/YFVdc4f5/0LEq1J89ezbO8wFkFAReIINSsGnYsKFNmTLFevXqZfPnz7cOHTq4UBIcAlVaoH9kVRLhL4PwX+5VYJZBgwa5x7/zzjsuNCsQJ6Q2OKEOHTrknuuqq64KrDt+/Lg1aNDABfHu3bvbp59+ak899ZQLE7pUrdAkCoArVqywLVu2hOzz888/d+FC94taKFu1auVqUdWKrNej3xctWuRez4kTJ0Iev2HDBnviiSesZ8+eNnfuXLv22mutc+fOtmzZsiS9RpWNKBzpy8OMGTNs6tSpduTIERfWf/755wTtQ8+v4KnSjzFjxti3337rjv3gwYPufoUhBV61lAfTuf3www/d43PkyBHn/hXyZs6c6YK8Xr++NMTl119/dedRr+OTTz5x+1bLqo7hQrSNvrjcfPPNrpRGn7f//ve/rpbb/6VHX2oaN27sbitc633Say5evLg7b3FRKNXr1Xsd25eRuAQ/h2p89fz6f0KfTT99gSlXrpzbxl/usXv3bqtRo4bt27cvxj4ffPBBy5o1q3u/9P+d/p/R/4PRJeSzprBbs2ZN97xqtdb/D9pGrfIPPfRQgl8n4Fk+ABlCp06dfBdddFHg9uuvv65E6JsxY0bIdsOHD3frP//888A6PU6Pv5CzZ8/6zpw542vUqJHvX//6V8h92uegQYMuuA9t17VrV7ef06dP+3755Rffbbfd5rv44ot9a9asCWw3dOhQX6ZMmXzfffddyOP/85//uH0sWLDA3d63b58vW7Zsvqeffjpku7Zt2/oKFSrknkemTZvmHjdz5syQ7bR/rZ8wYUJgXYkSJXw5cuTw/f7774F1J06c8OXPn9/3yCOPBNbp9cb2Z/add95x67dt2+Zu79ixw5clSxbfv//975Dtjhw54itcuLA71vj49xf9nH/99ddu/fPPPx9Yp/exYMGCvlOnToW85zqX/uOJy9atW32VKlVy+9SSM2dO916PHz/evVdxOXfunDvPU6ZM8WXOnNl34MCBkOPR+fRbtWqV2/fIkSND9rFz5073fH369HG39VnQdnPmzPElxocffugep89/QuicaPtrrrnGfb79vv32W7den5u4aPujR4+6/3/Gjh0b4/3S5zzYiBEj3Prdu3cn+rOm33Pnzh2ynbz88stun//9738T/f8i4CW08F6AvkHrsqAulak1ICkdd/T3RT181Tqly27FihVzrTlAJH311VfuUrMuFUfvNS9ffvllgjsy6VKrWgbVeqgWKz1248aNST42tehpP7osq/9v1FqlURqqVasW2EathpUqVXKXvXXJ1r+oDCB49AldKtb/w2oJ9teZ6tK/Wsruvfded8z+/eXLl89tG7w/7V+XuKO3WGu9WhP99Pp1rNEvXyeEWuX0XDqe4OfWPtWKndDW8vbt24fcVouoykF06dyvR48etnfvXvvoo4/cbZ2T1157zZUCXGi0hDJlyrjWxqVLl7pL5WqB/e6776xbt26u9Te4HELlBmpp1/nPnDmzez/1+tQq/Msvv8T5HHof9P6ppTP4XOg9UIcy/7m48sorXamDWvX1GUxoK3hS6fzodfiplVWC3++jR4+649Gx6XOlReUPag2O7f8HnZ9gse0zoZ81nTddsdG/VcHnrVmzZu5+vWdARkbgvQD9odIfWfVITir9A/PWW2+50Ltp0yY3FI4uPQGRpHpMhYjol3VVD6l/qHX/haimUTWItWrVcpe6VdOoAKSe/NFLABKjbdu2bj8apUGX3y+++GJXGxlclqBL2T/88IMLUsGLttWXzOBLyKpP3bVrl7skLQrPqlP2h3v//nTpXyE7+j51uTj6JWkFuej0hTYpr9t/mV6XvqM/t+p6Y7scHhu9n7GtC34v/TXNukTvD0q6FK/QmhAqmVBtri6bf/zxx64spF27drZ27dpAXemOHTvcc+icjx071tV06/30P2d850jnQu+fOi5GPxf6fPnPRd68eV2IUxh8+umnrWLFii7sqbwmvjphf3Dctm2bJUb091vvdfTXohIO/VuhUgV9iVFJiV63asFje80J2Wds2/m3Dd5O503/tkQ/ZzovktDPEOBVjNJwAfp27P+GHBt1chkwYICr6dI/lmpxUt2Wv1OPvtWr9eSnn35ytV1AWqF/RFevXu3C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yGHVqlWz5cuXx7ntkiVLLCoqKsayadOmkO1mzpxpFSpUsOzZs7ufs2fPToVXAgAAgLQoooF3+vTp9vjjj1v//v1t3bp1Vr9+fWvWrJnt2LEj3sdt3rzZdu/eHVjKli0buG/VqlXWrl0769ixo23YsMH9bNu2ra1evToVXhEAAADSmogG3lGjRlnnzp3twQcftKuvvtrGjBljxYoVs9deey3exxUsWNAKFy4cWDJnzhy4T/to3Lix9evXz8qXL+9+NmrUyK0HAABAxhOxwHv69Glbu3atNWnSJGS9bq9cuTLex1apUsWKFCniguzixYtD7lMLb/R9Nm3aNN59njp1yg4fPhyyAAAAwBsiFnj37dtn586ds0KFCoWs1+09e/bE+hiF3IkTJ7oa3VmzZlm5cuVc6F22bFlgGz02MfuUoUOHWt68eQOLWpkBAADgDVkifQDqdBbM5/PFWOengKvFr06dOrZz5057+eWX7YYbbkjSPkVlD7169QrcVgsvoRcAAMAbItbCW6BAAVd7G73lde/evTFaaONTu3Zt27JlS+C2anoTu0+N5pAnT56QBQAAAN4QscCbLVs2NwzZokWLQtbrdt26dRO8H43uoFKH4Fbf6Pv8/PPPE7VPAAAAeEdESxpURqBhw6pXr+6CqupzNSRZly5dAqUGu3btsilTprjbGmmhZMmSVrFiRdfp7b333nP1vFr8evTo4cobhg8fbq1atbK5c+faF198YStWrIjY6wQAAEAGDbwaL3f//v02ZMgQN55upUqVbMGCBVaiRAl3v9YFj8mrkNu7d28XgnPmzOmC7/z586158+aBbdSS++GHH9qAAQNs4MCBVqZMGTfeb61atSLyGgEAAJDBO6117drVLbGZPHlyyO0+ffq45ULuvPNOtwAAAAARn1oYAAAASEkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeRuAFAACApxF4AQAA4GkEXgAAAHgagRcAAACeFvHAO2HCBCtVqpTlyJHDqlWrZsuXL49z21mzZlnjxo3tsssuszx58lidOnVs4cKFIdtMnjzZoqKiYiwnT55MhVcDAACAtCaigXf69On2+OOPW//+/W3dunVWv359a9asme3YsSPW7ZctW+YC74IFC2zt2rXWsGFDa9mypXtsMIXh3bt3hywK1AAAAMh4skTyyUeNGmWdO3e2Bx980N0eM2aMa7F97bXXbOjQoTG21/3BXnzxRZs7d67NmzfPqlSpElivFt3ChQunwisAAABAWhexFt7Tp0+7VtomTZqErNftlStXJmgf58+ftyNHjlj+/PlD1h89etRKlChhV1xxhd16660xWoABAACQcUQs8O7bt8/OnTtnhQoVClmv23v27EnQPkaOHGnHjh2ztm3bBtaVL1/e1fF+/PHHNm3aNFfKUK9ePduyZUuc+zl16pQdPnw4ZAEAAIA3RLSkwV9+EMzn88VYFxuF2WeffdaVNBQsWDCwvnbt2m7xU9itWrWqjRs3zl555ZVY96XyicGDByfrdQAAACBtilgLb4ECBSxz5swxWnP37t0bo9U3ts5uqv2dMWOG3XzzzfFumylTJqtRo0a8Lbz9+vWzQ4cOBZadO3cm8tUAAAAgrYpY4M2WLZsbhmzRokUh63W7bt268bbs3nffffbBBx9YixYtLvg8ajFev369FSlSJM5tsmfP7kZ2CF4AAADgDREtaejVq5d17NjRqlev7sbUnThxohuSrEuXLoGW1127dtmUKVMCYffee++1sWPHurIFf+twzpw5LW/evO53lSbovrJly7paXJUxKPC++uqrEXylAAAAyJCBt127drZ//34bMmSIGyu3UqVKboxdjbAgWhc8Ju8bb7xhZ8+etccee8wtfp06dXId1eTgwYP28MMPuzCsEKzhyjR+b82aNSPwCgEAAGAZvdNa165d3RIbf4j1W7JkyQX3N3r0aLcAAAAAaWJqYQAAACAlEXgBAADgaQReAAAAeBqBFwAAAJ5G4AUAAICnEXgBAADgaQReAAAAeBqBFwAAAJ5G4AUAAICnEXgBAADgaQReAAAAeBqBFwAAAJ5G4AUAAICnEXgBAADgaQReAAAAeBqBFwAAAJ5G4AUAAICnEXgB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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sales_channel_revenue.plot(\n", + " kind=\"bar\",\n", + " figsize=(8,5),\n", + " title=\"Total Revenue by Sales Channel\",\n", + " ylabel=\"Total Revenue\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "432ebf9b-88b4-46a6-84c5-9d63bc30fcf6", + "metadata": {}, + "outputs": [], + "source": [ + "values=\"total_claim_amount\"" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e09e79e6-9ed7-4f50-998c-d3ec1f5e0dae", + "metadata": {}, + "outputs": [], + "source": [ + "values=\"customer_lifetime_value\"" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "344ab40f-0075-4ef0-a981-13df31c59466", + "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", + "
educationBachelorCollegeDoctorHigh School or BelowMaster
gender
F7874.277748.827328.518675.228157.05
M7703.608052.467415.338149.698168.83
\n", + "
" + ], + "text/plain": [ + "education Bachelor College Doctor High School or Below Master\n", + "gender \n", + "F 7874.27 7748.82 7328.51 8675.22 8157.05\n", + "M 7703.60 8052.46 7415.33 8149.69 8168.83" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create pivot table: Average Customer Lifetime Value by Gender and Education\n", + "\n", + "clv_gender_education = pd.pivot_table(\n", + " df,\n", + " values=\"customer_lifetime_value\",\n", + " index=\"gender\",\n", + " columns=\"education\",\n", + " aggfunc=\"mean\"\n", + ")\n", + "\n", + "# Round values to 2 decimal places\n", + "clv_gender_education = clv_gender_education.round(2)\n", + "\n", + "clv_gender_education" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "165b7407-b360-4a25-9d7a-12a6e73a6752", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gender education \n", + "F High School or Below 8675.22\n", + "M Master 8168.83\n", + "F Master 8157.05\n", + "M High School or Below 8149.69\n", + " College 8052.46\n", + "F Bachelor 7874.27\n", + " College 7748.82\n", + "M Bachelor 7703.60\n", + " Doctor 7415.33\n", + "F Doctor 7328.51\n", + "dtype: float64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clv_gender_education.stack().sort_values(ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "651b4534-70f5-41a9-ac80-278544fe0e7b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIfCAYAAACGgsbLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAakdJREFUeJzt3QmcjfX////X2PedLNm37IkWlC2yREpSkYhEyi6RQpaUCiFLG5KUJGn5EClliywRkmQtomTfOf/b8/37n/M958wMM9NcZsw87rfbYc51Xee63uc6y3W9zvv1fl0RPp/PZwAAAACAeJUiflcHAAAAACDYAgAAAACP0LMFAAAAAB4g2AIAAAAADxBsAQAAAIAHCLYAAAAAwAMEWwAAAADgAYItAAAAAPAAwRYAAAAAeIBgC7gCxo4daxEREVa+fHn2dxQuXrxo06dPt3r16lmuXLksderUlidPHmvSpIl99tlnbr4XXnjhBZs7d26SfE0GDx7s3nN///13tMt8++23bhn9H2zcuHFWokQJS5MmjZt/+PDhGG93+fLlbttRPaZ27drulhj07NnTPbdffvkl2mUGDBjgllm7dm2M11ukSBFr166dXWn+13L27NlXZHsbNmywDh06WPHixS19+vTuVrJkSevUqZP9+OOPllASav97KbrPabipU6e65aK7Xe7xouX0+U1oX375ZbTtSIqvMZI2gi3gCnjnnXfc/5s2bbIffviBfR7k9OnT1rhxY2vbtq0LsCZOnGiLFy+2SZMmWf78+e2+++5zAZcXknKwFRM33HCDrVixwv3vt379euvWrZvVqVPHvQ6anzlz5lgFW88//3yUwdaECRPcLTFQoBD82QynAP/dd9+166+/PmT/wGzy5MlWpUoV913WvXt3+/zzz+2LL76wHj16uO+4G2+80bZv386uSiBTpkxxn9vw29X0Plawpe+RqHzyySf23HPPXfE2AXGVKs6PBBAj+pX3p59+sjvvvNOdkLz99tt28803X9G95/P5XFCjX58Tm169etmCBQts2rRp9vDDD4fMa968uT311FN26tSpBGtfYnby5EnLkCFDnB+fJUsWu+WWW0Km6WRZOnbsaDfddJPFp7Jly1pioV5mPT/1qCroTpUq9HD41Vdf2d69e+3pp59OsDYmRsuWLbMuXbq47zP1oqn3069u3br2xBNP2EcffZQov2ti68KFC3b+/HlLmzatXU303q5ataolVZUrV07oJgCxQs8W4DEFV/Liiy9a9erV7YMPPnAnyXLu3DnXm9OmTZtIj1PPgE5YFIz4HT161Pr06WNFixZ1JzkFChRwvyafOHEiUirIk08+6XqHypQp404WFMyIfi1UsJcjRw53sq1fO9VGBWTBzpw5Y71797a8efO6E/qaNWvamjVrokzh2L9/v0sfuvbaa1271D5tRycql6LHvfXWW9agQYNIgZafUpMqVqwYkiazc+fOy6bZrFu3zqUhav/q+auXTCeIOoH27yPtN+0Xf5pNcIrbzz//bM2aNbPs2bNbunTpXA+Hfx+Gb/f99993J+X58uWzTJkyWdOmTe2vv/6yY8eO2WOPPeZSI3V75JFH7Pjx4yHr0H5Xb4/Wr9db22vRooX9/vvvIcupbTqJ+u6779z7SK9J+/bt7b8I32/axkMPPeT+1ntE84Jf60WLFtntt9/u3jfafo0aNezrr78OzFfaj4Jj0XsgPH0pPI1Qr6Pmv/zyy/bSSy+595b2gZb59ddf3eejX79+7rXLmjWr3XPPPXbgwIFIz+PDDz+0atWqWcaMGd3+1/tJr39Merf0Hvzf//4XZe+A3jetW7d2P1Tos6DXSO3QZ0fb+/TTTy+7jdi8Z2Oyjy9HbdV3hj632pe1atUK2RcKLrVd9XSEGzJkiEvh/fPPP6NdvwLTlClTut6t4EArmHqj9ZqF/+h01113uX2nz5NOmGfNmhXlvvrmm2/s8ccfd5+ZnDlzuh9dwtuk90bfvn0D30+33nqrrVq1Ksr2xOT7yf9eHDlypA0bNswto9dfbYnO66+/7r4X9R2j916FChXc49W2qD67q1evtttuu821t1ixYu6YEJ4irbTWhg0bumX0/Dt37uy+R+KbjiX6QUX7V58ZbVOfuXD6/OtzGV2acjA9F6Ug+7/LsmXL5n7MmTdvXshn9Y477nDflVpGxyd9xoOPYdqm9q0Ep0H6P0NRHYN2797tvrv83/da76uvvhqyf/2v8SuvvGKjRo1yr7Geuz7LK1eu/E/7E7gkHwDPnDx50pc1a1bfjTfe6O6/9dZbimh8U6dODSzTs2dPX/r06X1HjhwJeeyECRPcshs2bHD3T5w44bv++ut9uXLl8o0aNcq3aNEi32uvvebWX7duXd/FixcDj9XjChQo4KtYsaLv/fff9y1evNj3888/u3nt2rXzvf32276FCxe629ChQ932n3/++ZDtP/jgg74UKVL4+vXr5/vqq698Y8aM8RUsWNBtr23btoHl9u3b56YXLlzYN3nyZNcurTNt2rRuW5eitqmtEydOjNH+nDJlilt+x44dIdO/+eYbN13/y/Hjx305c+b0Va1a1Tdr1izfkiVLfB9++KGvc+fOvs2bN7tlVqxY4Z5348aN3d+6bdq0yc375ZdffJkzZ/YVL17c9+677/q++OILtz+0jZdeeinSdvXc9Vznz5/vmzRpki9Tpky+OnXq+OrXr+/r06eP2396XMqUKX1du3YNaXvHjh19qVOn9vXu3ds9Xvvkuuuu811zzTW+/fv3B5arVauWL0eOHG5fjxs3zm1bzys6gwYNcm07ePBgtMuE7zc9/2effdZN077WPvntt9/cvOnTp/siIiJ8d999t2/OnDm+zz77zNekSRP3nPSay549e9zz0+O1jH+/+t/beg66+el19O+/pk2b+j7//HPfe++95557qVKlfG3atPG1b9/e97///S+wX7VcsOHDh7t2aTk9XtutVq2aL2PGjIHXMzpHjx71ZciQwT2nYIcOHXLv3wceeMDdP3z4sHt9tQ/0WdLrpNdVn49p06aFPFbPJfjzEdP3bEz38eVeS70/mjVr5h6rfVmiRAlflixZfNu3b3fLnTlzxpc3b15f69atQx5/7tw5X/78+X333XdftNs4f/68+8xo/8aG9lmaNGl8t912m/scav9pf/rfZ+H7qlixYu59tGDBAvedmT17dvd5CqZ9rH311FNPuc+XvhP1nafnGpfvJ/97UevQtmbPnu3WG/66BdN3t7679Hz0HEePHu2+nx955JGQ5fSe1/dRyZIl3ftY37tdunRx2wt+/+jznidPHtcG7Ysvv/zSvU6FChWK9F6Jin//rVy50r2ewTe9dn46Vug5ah/o86Pnqe8L7Xc9Xn8H72ftu+i+X4Lp86rX5NFHH/V9+umn7nOr9es45ad9r/2k79Rvv/3W7Y+iRYuGvL76zmnRooVbv/87RLfTp09H+Rk7cOCA22e5c+d269Pr8eSTT7rHP/7445Fe4yJFivgaNmzomzt3rrtVqFDBvcf0OQe8QLAFeEgn6vpy1wFAjh075k4YddLhp2BKy7zxxhshj73pppt8VapU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saVPn95atmxpEydOjO82AgAAAEDS79lSquA111wTaXqePHlIIwQAAACAuAZb1apVs0GDBtnp06cD006dOmXPP/+8mwcAAAAAiEMa4ZgxY6xRo0Z27bXXWqVKlVw1wvXr11u6dOlswYIF7FMAAAAAiEuwVaFCBdu2bZu999579ssvv5jP57MHHnjAWrdu7cZtAQAAAADikEb43XffWerUqa1jx4726quv2qhRo+zRRx910zQvrkaMGOF6yXr06BGYpkBu8ODBrrS8AjkV5di0aVPI486cOWNdu3a1XLlyWcaMGe2uu+6yvXv3hizz77//Wps2bSxr1qzupr9VRREAAAAAEk2wVadOHTt06FCk6UeOHHHz4mL16tX2xhtvWMWKFUOmjxw50gVz48ePd8vkzZvX6tevb8eOHQsso+Dsk08+sQ8++MCWLl1qx48ftyZNmtiFCxcCy7Rq1cqlOs6fP9/d9LcCLgAAAABINMGWepvUAxXun3/+cT1LsaXgSCmIb775pmXPnj1kOxofNmDAAGvevLmVL1/epk2b5ioevv/++4EA7+2333Y9bPXq1bPKlSu79MaNGzfaokWL3DJbtmxxAdZbb73lCnjopm19/vnntnXr1li3FwAAAADidcyWAh5RoNWuXTtLmzZtYJ56kTZs2GDVq1e32HriiSfszjvvdMHSsGHDAtN37Nhh+/fvtzvuuCMwTdusVauWLV++3Dp16mRr1qyxc+fOhSyjlEMFZlqmQYMGtmLFCpc6ePPNNweWueWWW9w0LVO6dOko26X0RN38jh49GuvnBgAAACD5inGwpeDE3+OUOXPmkGIYadKkcQGMxnHFhlL/1q5d61IEwynQkvBreun+rl27Asto28E9Yv5l/I/X/7oGWDhN8y8T3RgylbMHAAAAAE+DrSlTprj/ixQpYn369IlTymCwPXv2WPfu3e2rr75yZeOjE56yGF0a46WWiWr5y62nf//+1qtXr5CerYIFC15yuwAAAAAQ5zFbffv2DQlS1MuksVUKmmJDKYAHDhywKlWqWKpUqdxtyZIlNnbsWPe3v0crvPdJj/HPU8GMs2fPumqDl1rmr7/+irT9gwcPRuo1C6aUxSxZsoTcAAAAAMCzYKtZs2b27rvvur9VPv2mm25yBSo0feLEiTFez+233+4KWagyoP9WtWpVVyxDfxcrVswFSgsX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AIDk0bOlYKtkyZK2d+9e71oEAAAAAMkt2EqRIoULtv755x/vWgQAAAAAyXHMlkq8P/XUU/bzzz970yIAAAAASI7VCB966CE7efKkVapUydKkSeMubBxMFzsGAAAAgOQu1sHWmDFjvGkJAAAAACTnYKtt27betAQAAAAAkvOYLdm+fbs9++yz9uCDD7rra8n8+fNt06ZN8d0+AAAAAEgePVtLliyxRo0aWY0aNey7776z4cOHW548eWzDhg321ltv2ezZs71pKQDALl68aGfPnmVPIFlLlyrCTp/3JXQzACD+g61+/frZsGHDrFevXpY5c+bA9Dp16thrr70W29UBAGIoTcYI27Ztmwu4gORsVIM89vXvx23OlhNGyAUgSQVbGzdutPfffz/S9Ny5c3P9LQDwUMEq6SxlypRWsGBBd91DIDny+Xx2JtXf1iRNSnf/4y0nErpJABB/wVa2bNls3759VrRo0ZDp69atswIFCsR2dQCAGEiVLsKyXZvW/bCVIUMG9hmStRTpM1v2HGa3F7tgX2w7SUohgEQr1j+NtmrVyp5++mnbv3+/RUREuHSWZcuWWZ8+fezhhx/2ppUAkMylShthESki3PUNAZhFpEpjqVNGWPZ09PICSLxi/Q2lghiFChVyvVjHjx+3smXLWs2aNa169equQiEAwBsRukXoXwDmPgsRloKPBICklEaYOnVqmzFjhg0ZMsSlDqpnq3LlylayZElvWggAAAAAyaFnS6XfpXjx4taiRQtr2bIlgRYAINH69ttvXY/g4cOHE7opVqRIERszZkxCNwMAkFiDrfr167s0QpWA//nnn71pFQAAV7GpU6e6glLhVq9ebY899liCtAkAcBUEW3/++af17dvXvv/+e6tYsaK7jRw50vbu3etNCwEASCKoJgkAyUusg61cuXLZk08+6SoQbt++3e6//3579913XWpE3bp1vWklAABB11nSj3zFihWz9OnTW6VKlWz27NmB/fPll19aqVKl3Lw6derYzp07Q/bd4MGD7frrrw+ZptQ+HceCvfPOO1auXDlLmzat5cuXzx37/EaNGmUVKlSwjBkzuuuedenSxRWN8qctPvLII3bkyBGXvqibthlVGuHu3butWbNmlilTJsuSJYtLzf/rr78itXX69OnusVmzZrUHHnjAjh07xvsBAK4C/6leqq61pXTCF198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f//+Cd0sAEASRrAFAEgWRo8e7W4AAFwpVCMEAAAAAA8QbAEAAACABwi2AAAAAMADBFsAAAAA4AGCLQAAAADwAMEWAAAAAHiAYAsAAAAAPMB1tgDgKlZhWoUrur2NbTfG+jHt2rWzadOmub9TpUplOXLksIoVK9qDDz7o5qVIET+/+xUpUsR69OjhbgAAJAb0bAEAPNewYUPbt2+f7dy50/73v/9ZnTp1rHv37takSRM7f/58onoFzp49m9BNAAAkEQRbAADPpU2b1vLmzWsFChSwG264wZ555hn79NNPXeA1depUt8zu3butWbNmlilTJsuSJYu1bNnS/vrrr5D1zJs3z6pWrWrp0qWzXLlyWfPmzd302rVr265du6xnz54WERHhbn4ff/yxlStXzrVBvV+vvvpqyDo1bdiwYa6XLWvWrNaxY0feEQCAeEGwBQBIEHXr1rVKlSrZnDlzzOfz2d13322HDh2yJUuW2MKFC2379u12//33B5b/4osvXHB155132rp16+zrr792gZdoHddee60NGTLE9aDpJmvWrHFB2wMPPGAbN260wYMH23PPPRcI8PxefvllK1++vFte8wEAiA+M2QIAJJjrrrvONmzYYIsWLXL/79ixwwoWLOjmTZ8+3fVIrV692m688UYbPny4C5qef/75wOMVrInGgaVMmdIyZ87setD8Ro0aZbfffnsggCpVqpRt3rzZBVfqyQoO/Pr06XMFnzkAIDmgZwsAkGDUo6WUvy1btrggyx9oSdmyZS1btmxunqxfv94FTrGhx9aoUSNkmu5v27bNLly4EJjm7yEDACA+EWwBABKMgqGiRYsGgq5wwdPTp08f6/VHtV5NC5cxY8ZYrxsAgMsh2AIAJIjFixe7cVT33nuv68VSgYw9e/YE5ivd78iRI1amTBl3X+XiNU4rOmnSpAnprRKtd+nSpSHTli9f7tIJlXYIAICXGLMFAPDcmTNnbP/+/S4YUoXB+fPn24gRI1zp94cffthda0vBVOvWrW3MmDGuHHyXLl2sVq1agRS/QYMGuTTC4sWLu7FbWkbVDPv27RuoKvjdd9+5eao8qGqFvXv3duO9hg4d6optrFixwsaPH28TJkzgVQcAeI5gCwCuYnG5yHBCUHCVL18+d1Hj7Nmzu8IWY8eOtbZt2wYuajx37lzr2rWr1axZ003TtbnGjRsXWIfKu3/00UcucHrxxRddeXgt66dKhJ06dXLBmII7pQuqzPysWbNs4MCB7nFqg5YLLo4BAIBXCLYAAJ5SmfXwUutRKVSokLv21qWo9Lv/2lrhbrnlFvvpp58iTVeaom7R0YWWAQDwAmO2AAAAAMADBFsAAAAA4AGCLQAAAADwAMEWAAAAAHiAYAsAAAAAPECwBQAAAAAeINgCAAAAAA8QbAEAAACABwi2AAAAAMADBFsAgAQ3depUy5YtW6we065dO7v77rvtStq5c6dFRETY+vXrE93+SGhXY5sBwGupPN8CAMAzW64rc0X3bplftsQ6IDp8+LDNnTs3ZPq3335rderUsX///dedoN9///3WuHFj89qFCxds5MiRNm3aNNu1a5elT5/eSpUqZZ06dbJHHnnEkiMFScHPPWPGjFa6dGkbMGCANW/ePEHbBgBXO4ItAECCU9Cjm9cGDx5sb7zxho0fP96qVq1qR48etR9//NEFfUnd2bNnLU2aNFHOy5Ili23dutX9fezYMZsyZYq1bNnSNm3a5AIvAEDckEYIAEiUKWjDhg2zPHnyWObMme3RRx+1fv362fXXXx/psa+88orly5fPcubMaU888YSdO3cu2u189tln1qVLF7vvvvusaNGiVqlSJevQoYP16tUrsMzFixftpZdeshIlSljatGmtUKFCNnz48JD1/P77765nLkOGDG4dK1asCJn/8ccfW7ly5dzjixQpYq+++mrIfAV3Dz/8sGXPnt2to1GjRrZt27ZY7bONGzda3bp1XZCq5/7YY4/Z8ePHI6VZjhgxwvLnz+968KKj1Mi8efO6W8mSJd2+T5EihW3YsCEkWOvbt68VKFDA9X7dfPPNrofyUiZOnGjFixd3QZ6CtunTpwfm9e7d25o2bRq4P2bMGNeOL774IjBNj5k8eXKs9gsAJCYEWwCARGfGjBkuwFHQs2bNGhfw6MQ93DfffGPbt293/ys1UEGbbtFRMLF48WI7ePBgtMv079/fbfe5556zzZs32/vvv2/XXHNNyDJKsevTp48bu6Ug5sEHH7Tz58+7eWqveoUeeOABFxCpN03rCm6XAiH1qM2bN88Faj6fz6VRXipQDHby5Elr2LChC9ZWr15tH330kS1atMiefPLJkOW+/vpr27Jliy1cuNA+//zzGKdaal/KDTfcEJiuVMNly5bZBx98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994LBFV6jGgb+/btC9xfsGCBPfTQQ9atWzfbvHmzTZ482aUsDh8+PGTbgwYNcsHWxo0bI7ULAIC4YMwWAOCKaNOmjfXv39927tzpepKWLVvmUgu//fbbwDL33ntvyGPefvtty5MnjwuSypcvb7t377aSJUu63i+to3DhwoFlc+fO7f5Xr1jevHkD0xVU9evXz40LE/VsDR061Pr27esCLL9WrVoRZAEA4hXBFgDgisiVK5fdeeedrliGz+dzf2taMKUMPvfcc7Zy5Ur7+++/Az1aCrIUbKnYRv369a106dLWsGFDl2Z4xx13XHK7a9ascb1cwT1ZFy5ccGPGTp48aRkyZHDTqlat6snzBgAkXwRbAIArRul5GnMlr7/+eqT5TZs2deO43nzzTcufP78LthRkaayWf+zXjh077H//+58tWrTIWrZsafXq1bPZs2dHu02tQ2O0mjdvHmmexnD5aawWAADxiWALAHDFqDfKHzg1aNAgZN4///xjW7ZscWOqbrvtNjdt6dKlkdaRJUsWu//++92tRYsWbp2HDh2yHDlyWOrUqV2vVTAFaBrfVaJECU+fGwAA4Qi2AABXTMqUKV1A5f87WPbs2V0FwjfeeMNVG1TqoMZaBRs9erSbd/3117viGR999JEbn6VxWqJiGSqsUaNGDUubNq1b58CBA126oXrM7rvvPve4DRs2uEIYVB0EAHiJYAsArmJxuchwQlPPVFQUBKlghqoGKnVQ47JUfbB27dqBZTJlymQvvfSSbdu2zQVrN954o3355ZfusfLqq6+6aoZKQyxQoIArxqEetM8//9yGDBliI0eOdL1f1113nT366KNX7DkDAJIngi0AgKdUZv1S5s6dG/hb469UeTCYimn4dezY0d2iozFfuoVTwBWethjdNgAAiC9cZwsAAAAAPECwBQAAAAAeINgCAAAAAA8QbAEAAACABwi2AOAqoRIOFHIA/B8I94mwi9Q2AZCIEWwBwFXg/Bmf+S76AhcEBpI73/mzdu6Cz/49fTGhmwIA0aL0OwBcBc6f9tnhvWfsYP6D7jpR/utKAcmNencvnjpm/x76277+/bidPk/XFoDEi2ALAK4Su388bUWrXLBdu3YldFOABPXn3ydcoDVnywleCQCJGsEWAFwlzp30WcmSJUklRLJ3z4zF9GgBuCoQbAHAVUTpg+nSpUvoZgAJ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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clv_gender_education.plot(\n", + " kind=\"bar\",\n", + " figsize=(10,6),\n", + " title=\"Average Customer Lifetime Value by Gender and Education\",\n", + " ylabel=\"Average Customer Lifetime Value\"\n", + ")" + ] + }, { "cell_type": "markdown", "id": "640993b2-a291-436c-a34d-a551144f8196", @@ -146,9 +1574,9 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python [conda env:base] *", "language": "python", - "name": "python3" + "name": "conda-base-py" }, "language_info": { "codemirror_mode": { @@ -160,7 +1588,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.13.9" } }, "nbformat": 4,