{ "cells": [ { "cell_type": "markdown", "id": "f26f3b0a", "metadata": {}, "source": [ "# Abstract\n", "Customer segmentation is a vital strategy for businesses seeking to tailor their marketing efforts and enhance customer satisfaction. By dividing customers into distinct groups based on shared characteristics, such as purchasing behavior, demographics, or preferences, businesses can better understand and meet the unique needs of each segment. This paper explores the process of customer segmentation and its significance in modern marketing. Through the application of data analysis techniques, including RFM (Recency, Frequency, Monetary) analysis and clustering algorithms such as K-means, businesses can identify meaningful customer segments and develop targeted marketing strategies to improve customer acquisition, retention, and loyalty." ] }, { "cell_type": "markdown", "id": "2e92a67b", "metadata": {}, "source": [ "# Introduction\n", "This notebook aims at analyzing the content of an E-commerce database that lists purchases made by ∼\n", " 4000 customers over a period of one year (from 2010/12/01 to 2011/12/09)." ] }, { "cell_type": "markdown", "id": "ed5bcfa8", "metadata": {}, "source": [ "# Importing Required Libraries \n", "Numpy For linear algebra |\n", "Pandas For Data processing, CSV file I/O (e.g. pd.read_csv) |\n", "Matplotlib For Data Visualizations" ] }, { "cell_type": "code", "execution_count": 1, "id": "7f9c254b", "metadata": {}, "outputs": [], "source": [ "import numpy as np \n", "import pandas as pd \n", "\n", "import time, warnings\n", "import datetime as dt\n", "\n", "import matplotlib.pyplot as plt\n", "from pandas.plotting import scatter_matrix\n", "%matplotlib inline\n", "import seaborn as sns\n", "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "eab85e79", "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", "
InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountry
053636585123AWHITE HANGING HEART T-LIGHT HOLDER612/1/2010 8:262.5517850United Kingdom
153636571053WHITE METAL LANTERN612/1/2010 8:263.3917850United Kingdom
253636584406BCREAM CUPID HEARTS COAT HANGER812/1/2010 8:262.7517850United Kingdom
353636584029GKNITTED UNION FLAG HOT WATER BOTTLE612/1/2010 8:263.3917850United Kingdom
453636584029ERED WOOLLY HOTTIE WHITE HEART.612/1/2010 8:263.3917850United Kingdom
...........................
54190458158722613PACK OF 20 SPACEBOY NAPKINS1212/9/2011 12:500.8512680France
54190558158722899CHILDREN'S APRON DOLLY GIRL612/9/2011 12:502.1012680France
54190658158723254CHILDRENS CUTLERY DOLLY GIRL412/9/2011 12:504.1512680France
54190758158723255CHILDRENS CUTLERY CIRCUS PARADE412/9/2011 12:504.1512680France
54190858158722138BAKING SET 9 PIECE RETROSPOT312/9/2011 12:504.9512680France
\n", "

541909 rows × 8 columns

\n", "
" ], "text/plain": [ " InvoiceNo StockCode Description Quantity \\\n", "0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 \n", "1 536365 71053 WHITE METAL LANTERN 6 \n", "2 536365 84406B CREAM CUPID HEARTS COAT HANGER 8 \n", "3 536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 \n", "4 536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 \n", "... ... ... ... ... \n", "541904 581587 22613 PACK OF 20 SPACEBOY NAPKINS 12 \n", "541905 581587 22899 CHILDREN'S APRON DOLLY GIRL 6 \n", "541906 581587 23254 CHILDRENS CUTLERY DOLLY GIRL 4 \n", "541907 581587 23255 CHILDRENS CUTLERY CIRCUS PARADE 4 \n", "541908 581587 22138 BAKING SET 9 PIECE RETROSPOT 3 \n", "\n", " InvoiceDate UnitPrice CustomerID Country \n", "0 12/1/2010 8:26 2.55 17850 United Kingdom \n", "1 12/1/2010 8:26 3.39 17850 United Kingdom \n", "2 12/1/2010 8:26 2.75 17850 United Kingdom \n", "3 12/1/2010 8:26 3.39 17850 United Kingdom \n", "4 12/1/2010 8:26 3.39 17850 United Kingdom \n", "... ... ... ... ... \n", "541904 12/9/2011 12:50 0.85 12680 France \n", "541905 12/9/2011 12:50 2.10 12680 France \n", "541906 12/9/2011 12:50 4.15 12680 France \n", "541907 12/9/2011 12:50 4.15 12680 France \n", "541908 12/9/2011 12:50 4.95 12680 France \n", "\n", "[541909 rows x 8 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "file_path = r'D:\\Customer Segmentation\\retail_Dataset.csv'\n", "retail_df = pd.read_csv(file_path,encoding=\"ISO-8859-1\",dtype={'CustomerID': str,'InvoiceID': str})\n", "retail_df" ] }, { "cell_type": "markdown", "id": "78e92810", "metadata": {}, "source": [ "# This dataframe contains 8 variables that correspond to: \n", "\n", "**InvoiceNo**: Invoice number. Nominal, a 6-digit integral number uniquely assigned to each transaction.
\n", "**StockCode**: Product (item) code. Nominal, a 5-digit integral number uniquely assigned to each distinct product.
\n", "**Description**: Product (item) name. Nominal.
\n", "**Quantity**: The quantities of each product (item) per transaction. Numeric.\t
\n", "**InvoiceDate**: Invice Date and time. Numeric, the day and time when each transaction was generated.
\n", "**UnitPrice**: Unit price. Numeric, Product price per unit in sterling.
\n", "**CustomerID**: Customer number. Nominal, a 5-digit integral number uniquely assigned to each customer.
\n", "**Country**: Country name. Nominal, the name of the country where each customer resides.
" ] }, { "cell_type": "markdown", "id": "8f680171", "metadata": {}, "source": [ "# Creating a new column \"Amount\" by multiplying \"Quantity\" and \"Unit Price\"" ] }, { "cell_type": "code", "execution_count": 4, "id": "c0a32fe6", "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", "
InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountryAmount
053636585123AWHITE HANGING HEART T-LIGHT HOLDER612/1/2010 8:262.5517850United Kingdom15.30
153636571053WHITE METAL LANTERN612/1/2010 8:263.3917850United Kingdom20.34
253636584406BCREAM CUPID HEARTS COAT HANGER812/1/2010 8:262.7517850United Kingdom22.00
353636584029GKNITTED UNION FLAG HOT WATER BOTTLE612/1/2010 8:263.3917850United Kingdom20.34
453636584029ERED WOOLLY HOTTIE WHITE HEART.612/1/2010 8:263.3917850United Kingdom20.34
553636522752SET 7 BABUSHKA NESTING BOXES212/1/2010 8:267.6517850United Kingdom15.30
653636521730GLASS STAR FROSTED T-LIGHT HOLDER612/1/2010 8:264.2517850United Kingdom25.50
753636622633HAND WARMER UNION JACK612/1/2010 8:281.8517850United Kingdom11.10
853636622632HAND WARMER RED POLKA DOT612/1/2010 8:281.8517850United Kingdom11.10
953636784879ASSORTED COLOUR BIRD ORNAMENT3212/1/2010 8:341.6913047United Kingdom54.08
\n", "
" ], "text/plain": [ " InvoiceNo StockCode Description Quantity \\\n", "0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 \n", "1 536365 71053 WHITE METAL LANTERN 6 \n", "2 536365 84406B CREAM CUPID HEARTS COAT HANGER 8 \n", "3 536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 \n", "4 536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 \n", "5 536365 22752 SET 7 BABUSHKA NESTING BOXES 2 \n", "6 536365 21730 GLASS STAR FROSTED T-LIGHT HOLDER 6 \n", "7 536366 22633 HAND WARMER UNION JACK 6 \n", "8 536366 22632 HAND WARMER RED POLKA DOT 6 \n", "9 536367 84879 ASSORTED COLOUR BIRD ORNAMENT 32 \n", "\n", " InvoiceDate UnitPrice CustomerID Country Amount \n", "0 12/1/2010 8:26 2.55 17850 United Kingdom 15.30 \n", "1 12/1/2010 8:26 3.39 17850 United Kingdom 20.34 \n", "2 12/1/2010 8:26 2.75 17850 United Kingdom 22.00 \n", "3 12/1/2010 8:26 3.39 17850 United Kingdom 20.34 \n", "4 12/1/2010 8:26 3.39 17850 United Kingdom 20.34 \n", "5 12/1/2010 8:26 7.65 17850 United Kingdom 15.30 \n", "6 12/1/2010 8:26 4.25 17850 United Kingdom 25.50 \n", "7 12/1/2010 8:28 1.85 17850 United Kingdom 11.10 \n", "8 12/1/2010 8:28 1.85 17850 United Kingdom 11.10 \n", "9 12/1/2010 8:34 1.69 13047 United Kingdom 54.08 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df[\"Amount\"]= retail_df[\"Quantity\"]*retail_df[\"UnitPrice\"]\n", "retail_df.head(10)" ] }, { "cell_type": "markdown", "id": "6ed835d3", "metadata": {}, "source": [ "# Counting Null Fields" ] }, { "cell_type": "code", "execution_count": 8, "id": "03651bb3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "InvoiceNo 0\n", "StockCode 0\n", "Description 1454\n", "Quantity 0\n", "InvoiceDate 0\n", "UnitPrice 0\n", "CustomerID 135080\n", "Country 0\n", "Amount 0\n", "dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df.isnull().sum()" ] }, { "cell_type": "markdown", "id": "b9e4014e", "metadata": {}, "source": [ "# Datatypes of Features" ] }, { "cell_type": "code", "execution_count": 9, "id": "47000c08", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "InvoiceNo object\n", "StockCode object\n", "Description object\n", "Quantity int64\n", "InvoiceDate object\n", "UnitPrice float64\n", "CustomerID object\n", "Country object\n", "Amount float64\n", "dtype: object" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df.dtypes " ] }, { "cell_type": "markdown", "id": "615e63c6", "metadata": {}, "source": [ "# Brief summary for columns whose data types are NOT NUMBER" ] }, { "cell_type": "code", "execution_count": 10, "id": "075d9f9a", "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", "
InvoiceNoStockCodeDescriptionInvoiceDateCustomerIDCountry
count541909541909540455541909406829541909
unique259004070422323260437238
top57358585123AWHITE HANGING HEART T-LIGHT HOLDER10/31/2011 14:4117841United Kingdom
freq11142313236911147983495478
\n", "
" ], "text/plain": [ " InvoiceNo StockCode Description \\\n", "count 541909 541909 540455 \n", "unique 25900 4070 4223 \n", "top 573585 85123A WHITE HANGING HEART T-LIGHT HOLDER \n", "freq 1114 2313 2369 \n", "\n", " InvoiceDate CustomerID Country \n", "count 541909 406829 541909 \n", "unique 23260 4372 38 \n", "top 10/31/2011 14:41 17841 United Kingdom \n", "freq 1114 7983 495478 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df.describe(exclude=\"number\")" ] }, { "cell_type": "markdown", "id": "2573a449", "metadata": {}, "source": [ "# We can notice that most of the transactions are from the country United Kingdom" ] }, { "cell_type": "markdown", "id": "b03ad662", "metadata": {}, "source": [ "# Summary for columns whose data types are NUMBER\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "11b9768d", "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", "
QuantityUnitPriceAmount
count541909.000000541909.000000541909.000000
mean9.5522504.61111417.987795
std218.08115896.759853378.810824
min-80995.000000-11062.060000-168469.600000
25%1.0000001.2500003.400000
50%3.0000002.0800009.750000
75%10.0000004.13000017.400000
max80995.00000038970.000000168469.600000
\n", "
" ], "text/plain": [ " Quantity UnitPrice Amount\n", "count 541909.000000 541909.000000 541909.000000\n", "mean 9.552250 4.611114 17.987795\n", "std 218.081158 96.759853 378.810824\n", "min -80995.000000 -11062.060000 -168469.600000\n", "25% 1.000000 1.250000 3.400000\n", "50% 3.000000 2.080000 9.750000\n", "75% 10.000000 4.130000 17.400000\n", "max 80995.000000 38970.000000 168469.600000" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df.describe() " ] }, { "cell_type": "markdown", "id": "237e0977", "metadata": {}, "source": [ "# Number of rows and columns" ] }, { "cell_type": "code", "execution_count": 12, "id": "a8658e1d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(541909, 9)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df.shape" ] }, { "cell_type": "markdown", "id": "53dcedc5", "metadata": {}, "source": [ "# Converting a column's datatype to datetime" ] }, { "cell_type": "code", "execution_count": 13, "id": "f031e29a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "InvoiceNo object\n", "StockCode object\n", "Description object\n", "Quantity int64\n", "InvoiceDate datetime64[ns]\n", "UnitPrice float64\n", "CustomerID object\n", "Country object\n", "Amount float64\n", "dtype: object" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df[\"InvoiceDate\"] = pd.to_datetime(retail_df[\"InvoiceDate\"])\n", "retail_df.dtypes" ] }, { "cell_type": "code", "execution_count": 14, "id": "b022ac86", "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", "
InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountryAmount
053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010-12-01 08:26:002.5517850United Kingdom15.30
153636571053WHITE METAL LANTERN62010-12-01 08:26:003.3917850United Kingdom20.34
253636584406BCREAM CUPID HEARTS COAT HANGER82010-12-01 08:26:002.7517850United Kingdom22.00
353636584029GKNITTED UNION FLAG HOT WATER BOTTLE62010-12-01 08:26:003.3917850United Kingdom20.34
453636584029ERED WOOLLY HOTTIE WHITE HEART.62010-12-01 08:26:003.3917850United Kingdom20.34
\n", "
" ], "text/plain": [ " InvoiceNo StockCode Description Quantity \\\n", "0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 \n", "1 536365 71053 WHITE METAL LANTERN 6 \n", "2 536365 84406B CREAM CUPID HEARTS COAT HANGER 8 \n", "3 536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 \n", "4 536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 \n", "\n", " InvoiceDate UnitPrice CustomerID Country Amount \n", "0 2010-12-01 08:26:00 2.55 17850 United Kingdom 15.30 \n", "1 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "2 2010-12-01 08:26:00 2.75 17850 United Kingdom 22.00 \n", "3 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "4 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df.head()" ] }, { "cell_type": "markdown", "id": "7df0d29e", "metadata": {}, "source": [ "# Fetching proportions of Country with the parameter \"normalize=True\"" ] }, { "cell_type": "code", "execution_count": 15, "id": "02d8e504", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Country\n", "United Kingdom 0.914320\n", "Germany 0.017521\n", "France 0.015790\n", "EIRE 0.015124\n", "Spain 0.004674\n", "Netherlands 0.004375\n", "Belgium 0.003818\n", "Switzerland 0.003694\n", "Portugal 0.002803\n", "Australia 0.002323\n", "Norway 0.002004\n", "Italy 0.001482\n", "Channel Islands 0.001399\n", "Finland 0.001283\n", "Cyprus 0.001148\n", "Sweden 0.000853\n", "Unspecified 0.000823\n", "Austria 0.000740\n", "Denmark 0.000718\n", "Japan 0.000661\n", "Poland 0.000629\n", "Israel 0.000548\n", "USA 0.000537\n", "Hong Kong 0.000531\n", "Singapore 0.000423\n", "Iceland 0.000336\n", "Canada 0.000279\n", "Greece 0.000269\n", "Malta 0.000234\n", "United Arab Emirates 0.000125\n", "European Community 0.000113\n", "RSA 0.000107\n", "Lebanon 0.000083\n", "Lithuania 0.000065\n", "Brazil 0.000059\n", "Czech Republic 0.000055\n", "Bahrain 0.000035\n", "Saudi Arabia 0.000018\n", "Name: proportion, dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df.Country.value_counts(normalize=True) " ] }, { "cell_type": "markdown", "id": "1ffac4c8", "metadata": {}, "source": [ "# Proportion of UK Customers" ] }, { "cell_type": "code", "execution_count": 16, "id": "2c3d06bd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.903476669716377" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_df[retail_df[\"Country\"]==\"United Kingdom\"].CustomerID.nunique() / retail_df.CustomerID.nunique()\n" ] }, { "cell_type": "markdown", "id": "5b36cfdd", "metadata": {}, "source": [ "# Observations:\n", "90% of the customers are from UK" ] }, { "cell_type": "markdown", "id": "65e3f309", "metadata": {}, "source": [ "# Forming a sub-sample which includes only the customers from UK" ] }, { "cell_type": "code", "execution_count": 17, "id": "77a2b97d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(495478, 9)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_uk = retail_df[retail_df['Country']=='United Kingdom']\n", "retail_uk.shape" ] }, { "cell_type": "markdown", "id": "68a84c28", "metadata": {}, "source": [ "# Removing Cancelled Orders" ] }, { "cell_type": "code", "execution_count": 18, "id": "e4b921ac", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(486286, 9)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_uk = retail_uk[retail_uk['Quantity']>0]\n", "retail_uk.shape" ] }, { "cell_type": "markdown", "id": "09adb3c9", "metadata": {}, "source": [ "# Removing rows where customerID are NA since going to do CUSTOMER SEGMENTATION\n", "\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "5d0bae06", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(354345, 9)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_uk.dropna(subset=['CustomerID'],how='all',inplace=True) \n", "\n", "retail_uk.shape" ] }, { "cell_type": "markdown", "id": "bc5b4348", "metadata": {}, "source": [ "# Average total quantity ordered by a customer" ] }, { "cell_type": "code", "execution_count": 20, "id": "9a277a4f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1088.87324662076" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(retail_uk.groupby(\"CustomerID\").Quantity.sum())" ] }, { "cell_type": "markdown", "id": "49a69157", "metadata": {}, "source": [ "# Average Total amount spent by a customer" ] }, { "cell_type": "code", "execution_count": 21, "id": "6087cdf5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1863.9101132364192" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(retail_uk.groupby(\"CustomerID\").Amount.sum())" ] }, { "cell_type": "markdown", "id": "1a1311ba", "metadata": {}, "source": [ "# Explore the unique values of each attribute" ] }, { "cell_type": "code", "execution_count": 22, "id": "ebcd554b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Summary: \n", "Number of invoices: 16649\n", "Number of products bought: 3645\n", "Number of customers: 3921\n", "Average quantity of product purchased by a customer: 1089.0\n", "Average revenue generated per customer: 1863.91\n", "Average product quantity sold per transaction: 12.0\n", "Average revenue generated per transaction: 20.63\n" ] } ], "source": [ "print(\"Summary: \")\n", "print(\"Number of invoices: \", retail_uk['InvoiceNo'].nunique())\n", "print(\"Number of products bought: \",retail_uk['StockCode'].nunique())\n", "print(\"Number of customers:\", retail_uk['CustomerID'].nunique() )\n", "print(\"Average quantity of product purchased by a customer: \", round(np.mean(retail_uk.groupby(\"CustomerID\").Quantity.sum()), 0))\n", "print(\"Average revenue generated per customer: \", round(np.mean(retail_uk.groupby(\"CustomerID\").Amount.sum()), 2))\n", "print(\"Average product quantity sold per transaction: \", round(retail_uk.Quantity.mean(), 0))\n", "print(\"Average revenue generated per transaction: \", round(retail_uk.Amount.mean(), 2) )" ] }, { "cell_type": "code", "execution_count": 23, "id": "a83a080d", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABDkAAAIjCAYAAAAJE8DTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACzTUlEQVR4nOzdeXhM5///8deZiSQjq0gk9iAREUEIihZFG2tRu9iXFlVLqaIlqRahtJa2liJobW2pUkRRSy0llGgrttg/oihJGkkjmTm/P/LL+XYkyJB3J8brcV25LrOduec5Sud25r4VVVVVEBERERERERE95XTWHgARERERERERUUHgJAcRERERERER2QROchARERERERGRTeAkBxERERERERHZBE5yEBEREREREZFN4CQHEREREREREdkETnIQERERERERkU3gJAcRERERERER2QROchARERERERGRTeAkBxERERHRf6hJkyZo0qSJtYdBRGSTOMlBREREVAj89ttv6NSpE8qXLw9HR0eULl0aL730EubNm2ftoT21mjRpAkVR4O/vn+ft27dvh6IoUBQF3377rcXHv3btGiIjI3H8+PEnHCkRERUUTnIQERERWdmBAwcQGhqKuLg4DBo0CJ9++ikGDhwInU6HOXPmWHt4TzVHR0ecO3cOhw8fznXbypUr4ejo+NjHvnbtGt5//32LJzl+/PFH/Pjjj4/9vERE9GB21h4AERER0bNuypQpcHNzQ2xsLNzd3c1uu3HjhnUGZUWqquKff/6BwWB44mNVqlQJWVlZWL16NerWratd/88//+C7775D69atsW7duid+nvxIS0tD0aJFYW9v/588HxHRs4hnchARERFZWUJCAoKCgnJNcABAiRIltF9fvHgRiqJg2bJlue6nKAoiIyO1y5GRkVAUBWfOnEHPnj3h5uYGLy8vTJw4Eaqq4sqVK2jXrh1cXV3h4+ODWbNmmR1v9+7dUBQFX3/9Nd5//32ULl0aLi4u6NSpE5KTk5GRkYGRI0eiRIkScHZ2Rr9+/ZCRkWF2jOjoaDRt2hQlSpSAg4MDqlativnz5+cau6+vL9q0aYNt27YhNDQUBoMBCxcuROPGjVGjRo08mwUEBCAsLOwhVf9P9+7dsXbtWphMJu26TZs2IS0tDV26dMnzMf/73//Qv39/eHt7w8HBAUFBQVi6dKlZnzp16gAA+vXrp33tJee9adKkCapVq4ajR4+iUaNGKFq0KCZMmKDddv+aHP/88w8iIyNRuXJlODo6omTJknj11VeRkJCg3WfNmjWoXbs2XFxc4OrqiuDgYJ7pQ0R0H57JQURERGRl5cuXx8GDB/H777+jWrVqBXrsrl27IjAwEFFRUdi8eTM+/PBDeHh4YOHChWjatCmmT5+OlStXYsyYMahTpw4aNWpk9vhp06bBYDBg3LhxOHfuHObNm4ciRYpAp9Phzp07iIyMxC+//IJly5ahQoUKmDRpkvbY+fPnIygoCK+88grs7OywadMmDB06FCaTCW+88YbZ85w+fRrdu3fH66+/jkGDBiEgIADOzs4YNGhQri6xsbE4c+YM3nvvvXw16NGjByIjI7F79240bdoUALBq1So0a9bMbBIpx59//onnnnsOiqJg2LBh8PLywtatWzFgwACkpKRg5MiRCAwMxOTJkzFp0iS89tpreOGFFwAADRo00I7z119/oWXLlujWrRt69uwJb2/vPMdnNBrRpk0b7Ny5E926dcOIESPw999/Y/v27fj9999RqVIlbN++Hd27d0ezZs0wffp0AEB8fDz279+PESNG5KsDEdEzQSUiIiIiq/rxxx9VvV6v6vV6tX79+urYsWPVbdu2qffu3TO734ULF1QAanR0dK5jAFAjIiK0yxERESoA9bXXXtOuy8rKUsuUKaMqiqJGRUVp19+5c0c1GAxqnz59tOt27dqlAlCrVatmNo7u3buriqKoLVu2NHv++vXrq+XLlze7Li0tLdc4w8LC1IoVK5pdV758eRWAGhMTY3Z9UlKS6ujoqL7zzjtm1w8fPlx1cnJSU1NTcx3/3xo3bqwGBQWpqqqqoaGh6oABA7TXa29vry5fvlx7nd988432uAEDBqglS5ZUb926ZXa8bt26qW5ubtrrio2NfeD70bhxYxWAumDBgjxva9y4sXZ56dKlKgD1448/znVfk8mkqqqqjhgxQnV1dVWzsrIe+pqJiJ51/LoKERERkZW99NJLOHjwIF555RXExcVhxowZCAsLQ+nSpbFx48YnOvbAgQO1X+v1eoSGhkJVVQwYMEC73t3dHQEBATh//nyux/fu3RtFihTRLterVw+qqqJ///5m96tXrx6uXLmCrKws7bp/r6mRnJyMW7duoXHjxjh//jySk5PNHl+h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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Summary data\n", "metrics = {\n", " 'Number of Invoices': 16649,\n", " 'Number of Products Bought': 3645,\n", " 'Number of Customers': 3921,\n", " 'Average Quantity per Customer': 1089.0,\n", " 'Average Revenue per Customer (£)': 1863.91,\n", " 'Average Quantity per Transaction': 12.0,\n", " 'Average Revenue per Transaction (£)': 20.63\n", "}\n", "\n", "# Create lists to store metric names and values\n", "metric_names = list(metrics.keys())\n", "metric_values = list(metrics.values())\n", "\n", "# Create a bar plot\n", "plt.figure(figsize=(10, 6))\n", "plt.barh(metric_names, metric_values, color='skyblue')\n", "plt.xlabel('Metrics')\n", "plt.ylabel('Values')\n", "plt.title('Summary Metrics')\n", "plt.gca().invert_yaxis() # Invert y-axis to have the highest value at the top\n", "plt.grid(axis='x', linestyle='--', alpha=0.7) # Add gridlines for better readability\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 20, "id": "a11b842f", "metadata": {}, "outputs": [], "source": [ "#The average revenue generated per customer (£293.3) suggests a decent level of customer loyalty or repeat business. Higher average revenue per customer often indicates stronger customer relationships and potential for upselling or cross-selling strategies." ] }, { "cell_type": "markdown", "id": "8f84df6f", "metadata": {}, "source": [ "# check for NaN's values to see if dataset is ready to go\n", "\n" ] }, { "cell_type": "code", "execution_count": 24, "id": "a7b7e792", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Index: 354345 entries, 0 to 541893\n", "Data columns (total 9 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 InvoiceNo 354345 non-null object \n", " 1 StockCode 354345 non-null object \n", " 2 Description 354345 non-null object \n", " 3 Quantity 354345 non-null int64 \n", " 4 InvoiceDate 354345 non-null datetime64[ns]\n", " 5 UnitPrice 354345 non-null float64 \n", " 6 CustomerID 354345 non-null object \n", " 7 Country 354345 non-null object \n", " 8 Amount 354345 non-null float64 \n", "dtypes: datetime64[ns](1), float64(2), int64(1), object(5)\n", "memory usage: 27.0+ MB\n" ] } ], "source": [ "\n", "retail_uk.info()" ] }, { "cell_type": "markdown", "id": "7ebe4c88", "metadata": {}, "source": [ "# Create a new column called date which contains the date of invoice only" ] }, { "cell_type": "code", "execution_count": 25, "id": "83b33941", "metadata": {}, "outputs": [], "source": [ "retail_uk['date'] = pd.DatetimeIndex(retail_uk['InvoiceDate']).date" ] }, { "cell_type": "code", "execution_count": 26, "id": "30d29b85", "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", "
InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountryAmountdate
053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010-12-01 08:26:002.5517850United Kingdom15.302010-12-01
153636571053WHITE METAL LANTERN62010-12-01 08:26:003.3917850United Kingdom20.342010-12-01
253636584406BCREAM CUPID HEARTS COAT HANGER82010-12-01 08:26:002.7517850United Kingdom22.002010-12-01
353636584029GKNITTED UNION FLAG HOT WATER BOTTLE62010-12-01 08:26:003.3917850United Kingdom20.342010-12-01
453636584029ERED WOOLLY HOTTIE WHITE HEART.62010-12-01 08:26:003.3917850United Kingdom20.342010-12-01
\n", "
" ], "text/plain": [ " InvoiceNo StockCode Description Quantity \\\n", "0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 \n", "1 536365 71053 WHITE METAL LANTERN 6 \n", "2 536365 84406B CREAM CUPID HEARTS COAT HANGER 8 \n", "3 536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 \n", "4 536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 \n", "\n", " InvoiceDate UnitPrice CustomerID Country Amount \\\n", "0 2010-12-01 08:26:00 2.55 17850 United Kingdom 15.30 \n", "1 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "2 2010-12-01 08:26:00 2.75 17850 United Kingdom 22.00 \n", "3 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "4 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "\n", " date \n", "0 2010-12-01 \n", "1 2010-12-01 \n", "2 2010-12-01 \n", "3 2010-12-01 \n", "4 2010-12-01 " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_uk.head()" ] }, { "cell_type": "code", "execution_count": 27, "id": "a31b4bac", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "datetime.date(2010, 12, 1)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "min(retail_uk['date'])" ] }, { "cell_type": "code", "execution_count": 28, "id": "a0a6f3a2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "datetime.date(2011, 12, 9)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max(retail_uk['date'])" ] }, { "cell_type": "code", "execution_count": 29, "id": "493a82f3", "metadata": {}, "outputs": [], "source": [ "retail_uk['date'] = pd.to_datetime(retail_uk['date'])" ] }, { "cell_type": "code", "execution_count": 30, "id": "bfd104d2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Frequency of transactions in each month:\n", "month\n", "January 18161\n", "February 17759\n", "March 24014\n", "April 20866\n", "May 25203\n", "June 23714\n", "July 23599\n", "August 23105\n", "September 35636\n", "October 43735\n", "November 58809\n", "December 39744\n", "dtype: int64\n" ] } ], "source": [ "retail_uk['month'] = retail_uk['date'].dt.month\n", "\n", "# Group the DataFrame by the 'month' column and count the number of transactions in each month\n", "monthly_transaction_counts = retail_uk.groupby('month').size()\n", "\n", "# Optionally, you can convert the month number to month names for better readability\n", "# You can create a dictionary to map month numbers to month names\n", "month_names = {1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'}\n", "\n", "# Map month numbers to month names\n", "monthly_transaction_counts.index = monthly_transaction_counts.index.map(month_names)\n", "\n", "print(\"Frequency of transactions in each month:\")\n", "print(monthly_transaction_counts)" ] }, { "cell_type": "code", "execution_count": 31, "id": "0ab124b7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Frequency of transactions in each month and year (sorted):\n", "year_month\n", "Apr 2011 20866\n", "Aug 2011 23105\n", "Dec 2010 23943\n", "Dec 2011 15801\n", "Feb 2011 17759\n", "Jan 2011 18161\n", "Jul 2011 23599\n", "Jun 2011 23714\n", "Mar 2011 24014\n", "May 2011 25203\n", "Nov 2011 58809\n", "Oct 2011 43735\n", "Sep 2011 35636\n", "dtype: int64\n" ] } ], "source": [ "retail_uk['date'] = pd.to_datetime(retail_uk['date'])\n", "\n", "# Extract month and year from the date column\n", "retail_uk['year_month'] = retail_uk['date'].dt.strftime('%b %Y')\n", "\n", "# Group the DataFrame by the 'year_month' column and count the number of transactions in each month-year combination\n", "monthly_transaction_counts = retail_uk.groupby('year_month').size()\n", "\n", "# Sort the data month and year-wise\n", "monthly_transaction_counts = monthly_transaction_counts.sort_index()\n", "\n", "print(\"Frequency of transactions in each month and year (sorted):\")\n", "print(monthly_transaction_counts)" ] }, { "cell_type": "code", "execution_count": 29, "id": "b485f742", "metadata": {}, "outputs": [], "source": [ "#We can now see that in november ,the amount of orders has been the highest" ] }, { "cell_type": "code", "execution_count": 32, "id": "1454f34c", "metadata": {}, "outputs": [ { "data": { "image/png": "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95zWrVtntVm0aJGeeOIJ5c+fXz169FBgYKB27typ+fPnq0ePHnr66acVHh6u6dOnq0KFCk7bnz59uurUqaOCBQtet+bt27erZs2a8vX1VZ8+feTh4aHPPvtMderU0fLlyxUSEqLmzZsrZ86c6tWrl1q3bq3GjRsre/bsGe6nVM8884xKlCihDz/8UMYY6/nu379fHTt2VGBgoLZv367PP/9c27dv19q1a9MEB88++6yCgoI0ePBgbdq0SZMmTVK+fPn00UcfWc/viSeeULly5TRw4EB5eXlp7969TiFlfHy8Jk2apNatW+ull17S2bNn9cUXXygsLEx//PGHypcvb7Xt1KmTpkyZokaNGunFF1/U5cuX9fvvv2vt2rWqVKmSvvrqK7344ouqUqWKOnfuLEkqXrz4dftgwIABeu+991S/fn298sor2r17tz799FOtX79eq1atkoeHh9U2NjZWDRs2VPPmzfXss89q9uzZeuONN1S2bFk1atRIkjRx4kR1795dTz/9tHr06KGEhARt2bJF69atu27Yc7UPPvhADodDb7zxho4fP65Ro0apfv362rx5s3x8fNSuXTsNHDhQM2fOdLqMMykpSbNnz1aLFi3k7e1908epVauWChUqpBkzZmjgwIGSpJkzZyp79uzpXkp28eJF1alTR3v37lXXrl0VFBSkWbNmqUOHDjpz5ox69Ojh1H7GjBk6e/asunTpIofDoaFDh6p58+bav3+/PDw81KVLFx09elSLFi3SV199lW6NN9vG9ezfv18//PCDnnnmGQUFBSkmJkafffaZateurR07dqhAgQJO7W/lfeCLL75Qly5dVK1aNfXs2VP79+/Xk08+qdy5c6tw4cI37e/US/TeeOMN1atXTz169FC1atXUpUsXSVKXLl00ZcoUdezYUd27d9eBAwc0duxYRUVFOe2HU6ZMUfbs2RUREaHs2bNryZIl6tevn+Lj4zVs2DCnxzx16pQaNWqkVq1aqW3btv/qvRUAcAcwAADcJyZPnmwkpftjjDFLly41kswDDzxgLly4YN0vJSXFlChRwoSFhZmUlBRr+YULF0xQUJB5/PHHrWVNmzY13t7e5uDBg9ayHTt2GHd3d3P1x+6BAweMJDN58uQ0dUoy/fv3t2536tTJ5M+f35w8edKpXatWrYyfn59Va2r9JUuWNImJiVa70aNHG0lm69atxhhjLl++bIKCgkzRokVNbGys0zavfn6tW7c2BQoUMMnJydayTZs2XbfuqzVt2tR4enqaffv2WcuOHj1qcuTIYWrVqpWmH4YNG3bD7V1r1qxZRpJZunSptax///5GkmndunWa9lf/PlN98803RpJZsWJFmm288MILTm2bNWtm8uTJY90eOXKkkWROnDhx3RovX77s9HswxpjY2FgTEBDgtP0lS5YYSaZ79+5ptnH17yNbtmymffv2adqk7tcHDhwwxhhz/Phx4+npaRo0aOD0uxs7dqyRZL788ktrWe3atY0kM23aNGtZYmKiCQwMNC1atLCWPfXUU6Z06dLXfa7Xk7pPFixY0MTHx1vLv/vuOyPJjB492loWGhpqQkJCnO4/d+7cNL/n9KT+3k6cOGFef/118+CDD1rrKleubDp27GiMufLaCg8Pt9aNGjXKSDJff/21tSwpKcmEhoaa7NmzWzWn7qd58uQxp0+fttr++OOPRpKZN2+etSw8PNykd4h9O9tIT0JCgtPvM3WbXl5eZuDAgdayW30fSEpKMvny5TPly5d3avf5558bSaZ27do3rCfV33//bbJly2Zy585tPDw8rO3//vvvRpKZPn26U/vIyMg0y9N7fXbp0sVkzZrVJCQkWMtS99cJEybcUm0AgDsfl+8BAO4748aN06JFi5x+rta+fXv5+PhYtzdv3qw9e/aoTZs2OnXqlE6ePKmTJ0/q/PnzqlevnlasWKGUlBQlJydr4cKFatq0qYoUKWLdv2TJkgoLC8tQrcYYzZkzR//5z39kjLEe++TJkwoLC1NcXJw2bdrkdJ+OHTvK09PTul2zZk1JV860kK5cVnfgwAH17NkzzVhOV58x9Pzzz+vo0aNOl5tNnz5dPj4+atGixXVrTk5O1q+//qqmTZvqgQcesJbnz59fbdq00cqVK61LIv8XXn755TTLrv59JiQk6OTJk6pataokpem/9LZRs2ZNnTp1yqo7td9+/PFHpaSkpFuHu7u79XtISUnR6dOndfnyZVWqVMnpMefMmSOHw6H+/fun2UZ6l37dzG+//aakpCT17NnTaSy0l156Sb6+vmlmRMuePbvatm1r3fb09FSVKlWs/SX1+f7zzz+3dJlZep5//nnlyJHDuv30008rf/78+vnnn53arFu3Tvv27bOWTZ8+XYULF1bt2rVv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AAAAAGA7QikAAAAAAADYjlAKAAAAAAAAtiOUAgAAAAAAgO0IpQAAAAAAAGA7QikAAAAAAADYjlAKAAAAAAAAtnNpKDVgwAA5HA6nn0ceecRan5CQoPDwcOXJk0fZs2dXixYtFBMT47SNQ4cOqUmTJsqaNavy5cun3r176/Lly05tli1bpooVK8rLy0sPPvigpkyZkqaWcePGqVixYvL29lZISIj++OOP/8lzBgAAAAAAwB1wplTp0qV17Ngx62flypXWul69emnevHmaNWuWli9frqNHj6p58+bW+uTkZDVp0kRJSUlavXq1pk6dqilTpqhfv35WmwMHDqhJkyaqW7euNm/erJ49e+rFF1/UwoULrTYzZ85URESE+vfvr02bNunRRx9VWFiYjh8/bk8nAAAAAAAA3GccxhjjqgcfMGCAfvjhB23evDnNuri4OPn7+2vGjBl6+umnJUm7du1SyZIltWbNGlWtWlW//PKLnnjiCR09elQBAQGSpAkTJuiNN97QiRMn5OnpqTfeeEMLFizQtm3brG23atVKZ86cUWRkpCQpJCRElStX1tixYyVJKSkpKly4sLp166Y333zzlp5LfHy8/Pz8FBcXJ19f33/TLQAAAACAWzAk6qSrS7glb1bI6+oSAFvdakbi8jOl9uzZowIFCuiBBx7Qc889p0OHDkmSNm7cqEuXLql+/fpW20ceeURFihTRmjVrJElr1qxR2bJlrUBKksLCwhQfH6/t27dbba7eRmqb1G0kJSVp48aNTm3c3NxUv359qw0AAAAAAAAyVxZXPnhISIimTJmihx9+WMeOHdN7772nmjVratu2bYqOjpanp6dy5szpdJ+AgABFR0dLkqKjo50CqdT1qetu1CY+Pl4XL15UbGyskpOT022za9eu69aemJioxMRE63Z8fPztPXkAAAAAAID7mEtDqUaNGln/L1eunEJCQlS0aFF999138vHxcWFlNzd48GC99957ri4DAAAAAADgruTyy/euljNnTj300EPau3evAgMDlZSUpDNnzji1iYmJUWBgoCQpMDAwzWx8qbdv1sbX11c+Pj7Kmzev3N3d022Tuo309O3bV3FxcdbP4cOHM/ScAQAAAAAA7kd3VCh17tw57du3T/nz51dwcLA8PDy0ePFia/3u3bt16NAhhYaGSpJCQ0O1detWp1nyFi1aJF9f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59SpUyc999xzTgOfAwAAAAAAAOnJUCglSVmyZFHbtm0zsxYAAAAAAADcJzIUSk2bNu2G659//vkMFQMAAAAAAID7Q4YGOu/Ro4fTz6uvvqoOHTqoc+fO6tmz5y1v59NPP1W5cuXk6+srX19fhYaG6pdffrHWJyQkKDw8XHny5FH27NnVokULxcTEOG3j0KFDatKkibJmzap8+fKpd+/eunz5slObZcuWqWLFivLy8tKDDz6oKVOmpKll3LhxKlasmLy9vRUSEqI//vjjtvoEAAAAAAAAty5DoVRsbKzTz7lz57R7927VqFHjtgY6L1SokIYMGaKNGzdqw4YNeuyxx/TUU09p+/btkqRevXpp3rx5mjVrlpYvX66jR4+qefPm1v2Tk5PVpEkTJSUlafXq1Zo6daqmTJmifv36WW0OHDigJk2aqG7dutq8ebN69uypF198UQsXLrTazJw5UxEREerfv782bdqkRx99VGFhYTp+/HhGugcAAAAAAAA34TDGmMza2IYNG9S2bVvt2rUrw9vInTu3hg0bpqefflr+/v6aMWOGnn76aUnSrl27VLJkSa1Zs0ZVq1bVL7/8oieeeEJHjx5VQECAJGnChAl64403dOLECXl6euqNN97QggULtG3bNusxWrVqpTNnzigyMlKSFBISosqVK2vs2LGSpJSUFBUuXFjdunXTm2++eUt1x8fHy8/PT3FxcfL19c3w8wcAAAAA3JohUSddXcItebNCXleXcEvulv6U6NPMltn9easZSYbOlLqeLFmy6OjRoxm6b3Jysr799ludP39eoaGh2rhxoy5duqT69etbbR555BEVKVJEa9askSStWbNGZcuWtQIpSQoLC1N8fLx1ttWaNWuctpHaJnUbSUlJ2rhxo1MbNzc31a9f32oDAAAAAACAzJWhgc5/+uknp9vGGB07dkxjx45V9erVb2tbW7duVWhoqBISEpQ9e3Z9//33KlWqlDZv3ixPT0/lzJnTqX1AQICio6MlSdHR0U6BVOr61HU3ahMfH6+LFy8qNjZWycnJ6ba50RlfiYmJSkxMtG7Hx8ff1vMGAAAAAAC4n2UolGratKnTbYfDIX9/fz322GMaPnz4bW3r4Ycf1ubNmxUXF6fZs2erffv2Wr58eUbKstXgwYP13nvvuboMAAAAAACAu1KGQqmUlJRMK8DT01MPPvig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fNeaM2eOFi9erKVLl6pUqVIuqPrOtnnzZnl6euqjjz5St27d5HA49Pzzz+vw4cNyc3NTcnKyU3uHw6FDhw5p+fLlKlu2rIuqvjMlJCRo0aJFaty4sWbNmiU/Pz9NnjxZU6ZMkaR099Hdu3frwoULWrNmDe+f6di7d69GjRql8PBwRURE6LffflP37t0lyZpV82pJSUlq3769EhIStHLlSvr0GikpKVq+fLmqVq2qzz//XKGhofrll1/03nvvSVK6r/nY2FglJSVp7dq19Od1xMbGWrMSV6hQQdOmTdPEiROVnJyc7uveGKPevXtrwYIFWrZsmcqUKeOiyu88xhjt379foaGh6tGjh2bOnKlDhw6pXr161+3P2NhYlSlTRtu3b2cfTUdycrJ+/fVXPfDAA9q+fbuefvrpmx7b79y5U1u3btWyZcs4drpGQkKCJk6cqEqVKmnFihU6duyYnnnmGR05cuS695k3b54iIyO1ePFiZty9hjFGZ86cUbVq1fT6669r06ZN2rVrl1599VXt3Lkz3fvEx8frqaee0t69e++f17xrMzHcyKVLl8zixYudBjGtVKmSeeihh8yqVavS/Rb15MmT1jdU93qimlEbN240a9assW537tzZZM2a1cyYMcPpdN/Ub6suXrxIn97AjBkzzMyZM40xV75ZqV69unnggQesM3xu5bR0/NfN+vPafjx+/PhNv8G63y1evNj6/5w5c0zdunVNnTp1zMGDB40xN76sB8527dplzVR29OhR06xZM1OrVi2nM6auxfvn9V24cMFERESYdevWmXPnzpmPP/7YlClTxnTr1s1qc+3+uXnz5vvmm9PbkbqfnT592tpHT506ZSIiIkxISIjTGVPXe43Tn+k7fvy46dq1q/nll19MbGysadOmjalWrZr59NNPrc/4a/t08eLFzMB3HRcuXHA6U3zdunXWwNtX74NJSUlpjvXZR9O3adMmp5lJr3dsn+r8+fPmzJkzdpZ410hMTDTTp0833333nTHmyozZDz30kAkNDb3u8ea+ffusISeQ1pkzZ5wGfv/nn39MYGBgmjOmLly4kOa+98trnlDqDpfemFCVKlUyJUqUMKtXrzbGXNnRp0+f7vTBxR9VN3d1H1394ZWUlGRiY2PNiBEjTExMjAsrvPukpKSYvXv3pglSEhISzKZNm9J9s8X13ag/o6Ki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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 6))\n", "monthly_transaction_counts.plot(kind='bar', color='skyblue')\n", "plt.title('Frequency of Transactions by Month and Year')\n", "plt.xlabel('Month and Year')\n", "plt.ylabel('Frequency')\n", "plt.xticks(rotation=45, ha='right') # Rotate x-axis labels for better readability\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "9d7e9e5b", "metadata": {}, "source": [ "# Creating Recency DataFrame\n", "group by customers and check the last date of purchase" ] }, { "cell_type": "code", "execution_count": 33, "id": "c3a18f8d", "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", "
CustomerIDLastPurshaceDate
0123462011-01-18
1127472011-12-07
2127482011-12-09
3127492011-12-06
4128202011-12-06
5128212011-05-09
6128222011-09-30
7128232011-09-26
8128242011-10-11
9128262011-12-07
10128272011-12-04
11128282011-12-07
12128292011-01-07
13128302011-11-02
14128312011-03-22
15128322011-11-07
16128332011-07-17
17128342011-03-02
18128362011-10-11
19128372011-06-19
\n", "
" ], "text/plain": [ " CustomerID LastPurshaceDate\n", "0 12346 2011-01-18\n", "1 12747 2011-12-07\n", "2 12748 2011-12-09\n", "3 12749 2011-12-06\n", "4 12820 2011-12-06\n", "5 12821 2011-05-09\n", "6 12822 2011-09-30\n", "7 12823 2011-09-26\n", "8 12824 2011-10-11\n", "9 12826 2011-12-07\n", "10 12827 2011-12-04\n", "11 12828 2011-12-07\n", "12 12829 2011-01-07\n", "13 12830 2011-11-02\n", "14 12831 2011-03-22\n", "15 12832 2011-11-07\n", "16 12833 2011-07-17\n", "17 12834 2011-03-02\n", "18 12836 2011-10-11\n", "19 12837 2011-06-19" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "recency_df = retail_uk.groupby(by='CustomerID', as_index=False)['date'].max()\n", "recency_df.columns = ['CustomerID','LastPurshaceDate']\n", "recency_df.head(20)" ] }, { "cell_type": "markdown", "id": "68e28686", "metadata": {}, "source": [ "# Calculating Recency" ] }, { "cell_type": "code", "execution_count": 34, "id": "e396c640", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " CustomerID LastPurshaceDate Recency\n", "0 12346 2011-01-18 325\n", "1 12747 2011-12-07 2\n", "2 12748 2011-12-09 0\n", "3 12749 2011-12-06 3\n", "4 12820 2011-12-06 3\n", "... ... ... ...\n", "3916 18280 2011-03-07 277\n", "3917 18281 2011-06-12 180\n", "3918 18282 2011-12-02 7\n", "3919 18283 2011-12-06 3\n", "3920 18287 2011-10-28 42\n", "\n", "[3921 rows x 3 columns]\n" ] } ], "source": [ "now = dt.date(2011,12,9)\n", "now = pd.Timestamp('2011-12-9')\n", "\n", "# Calculate recency in days\n", "recency_df['Recency'] = (now - recency_df['LastPurshaceDate']).dt.days\n", "\n", "# Print the DataFrame to verify the result\n", "print(recency_df)" ] }, { "cell_type": "code", "execution_count": 35, "id": "e88dfbd5", "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", "
CustomerIDLastPurshaceDateRecency
0123462011-01-18325
1127472011-12-072
2127482011-12-090
3127492011-12-063
4128202011-12-063
\n", "
" ], "text/plain": [ " CustomerID LastPurshaceDate Recency\n", "0 12346 2011-01-18 325\n", "1 12747 2011-12-07 2\n", "2 12748 2011-12-09 0\n", "3 12749 2011-12-06 3\n", "4 12820 2011-12-06 3" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "recency_df.head()" ] }, { "cell_type": "markdown", "id": "b002b0ea", "metadata": {}, "source": [ "# ...\n", "This calculation will result in the 'Recency' column containing the number of days between the last purchase date for each customer and December 9, 2011 (the now date). This metric represents how recent each customer's last purchase was relative to the specified date." ] }, { "cell_type": "markdown", "id": "f1ec8d90", "metadata": {}, "source": [ "# Dropping LastPurchaseDate as it is not needed anymore" ] }, { "cell_type": "code", "execution_count": 36, "id": "0e5cc540", "metadata": {}, "outputs": [], "source": [ "recency_df.drop('LastPurshaceDate',axis=1,inplace=True)" ] }, { "cell_type": "markdown", "id": "0f25a2ef", "metadata": {}, "source": [ "# Creating Frequency DataFrame\n", "dropping duplicates" ] }, { "cell_type": "code", "execution_count": 35, "id": "87e384ef", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(354345, 12)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "retail_uk.shape" ] }, { "cell_type": "code", "execution_count": 37, "id": "f1a27bad", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " InvoiceNo StockCode Description Quantity \\\n", "0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 \n", "1 536365 71053 WHITE METAL LANTERN 6 \n", "2 536365 84406B CREAM CUPID HEARTS COAT HANGER 8 \n", "3 536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 \n", "4 536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 \n", "... ... ... ... ... \n", "541889 581585 22466 FAIRY TALE COTTAGE NIGHT LIGHT 12 \n", "541890 581586 22061 LARGE CAKE STAND HANGING STRAWBERY 8 \n", "541891 581586 23275 SET OF 3 HANGING OWLS OLLIE BEAK 24 \n", "541892 581586 21217 RED RETROSPOT ROUND CAKE TINS 24 \n", "541893 581586 20685 DOORMAT RED RETROSPOT 10 \n", "\n", " InvoiceDate UnitPrice CustomerID Country Amount \\\n", "0 2010-12-01 08:26:00 2.55 17850 United Kingdom 15.30 \n", "1 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "2 2010-12-01 08:26:00 2.75 17850 United Kingdom 22.00 \n", "3 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "4 2010-12-01 08:26:00 3.39 17850 United Kingdom 20.34 \n", "... ... ... ... ... ... \n", "541889 2011-12-09 12:31:00 1.95 15804 United Kingdom 23.40 \n", "541890 2011-12-09 12:49:00 2.95 13113 United Kingdom 23.60 \n", "541891 2011-12-09 12:49:00 1.25 13113 United Kingdom 30.00 \n", "541892 2011-12-09 12:49:00 8.95 13113 United Kingdom 214.80 \n", "541893 2011-12-09 12:49:00 7.08 13113 United Kingdom 70.80 \n", "\n", " date month year_month \n", "0 2010-12-01 12 Dec 2010 \n", "1 2010-12-01 12 Dec 2010 \n", "2 2010-12-01 12 Dec 2010 \n", "3 2010-12-01 12 Dec 2010 \n", "4 2010-12-01 12 Dec 2010 \n", "... ... ... ... \n", "541889 2011-12-09 12 Dec 2011 \n", "541890 2011-12-09 12 Dec 2011 \n", "541891 2011-12-09 12 Dec 2011 \n", "541892 2011-12-09 12 Dec 2011 \n", "541893 2011-12-09 12 Dec 2011 \n", "\n", "[353082 rows x 12 columns]\n" ] } ], "source": [ "# Assuming retail_uk is the DataFrame name\n", "duplicate_transactions = retail_uk[retail_uk.duplicated(subset=['CustomerID', 'InvoiceNo'], keep=False)]\n", "\n", "# Display the duplicate transactions\n", "print(duplicate_transactions)\n" ] }, { "cell_type": "code", "execution_count": 38, "id": "7a8835b8", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountryAmountdatemonthyear_monthProductCount
053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010-12-01 08:26:002.5517850United Kingdom15.302010-12-0112Dec 20107
753636622633HAND WARMER UNION JACK62010-12-01 08:28:001.8517850United Kingdom11.102010-12-0112Dec 20102
953636784879ASSORTED COLOUR BIRD ORNAMENT322010-12-01 08:34:001.6913047United Kingdom54.082010-12-0112Dec 201012
2153636822960JAM MAKING SET WITH JARS62010-12-01 08:34:004.2513047United Kingdom25.502010-12-0112Dec 20104
2553636921756BATH BUILDING BLOCK WORD32010-12-01 08:35:005.9513047United Kingdom17.852010-12-0112Dec 20101
..........................................
54186358158223552BICYCLE PUNCTURE REPAIR KIT62011-12-09 12:21:002.0817581United Kingdom12.482011-12-0912Dec 20112
54186558158320725LUNCH BAG RED RETROSPOT402011-12-09 12:23:001.4513777United Kingdom58.002011-12-0912Dec 20112
54186758158420832RED FLOCK LOVE HEART PHOTO FRAME722011-12-09 12:25:000.7213777United Kingdom51.842011-12-0912Dec 20112
54186958158522481BLACK TEA TOWEL CLASSIC DESIGN122011-12-09 12:31:000.3915804United Kingdom4.682011-12-0912Dec 201121
54189058158622061LARGE CAKE STAND HANGING STRAWBERY82011-12-09 12:49:002.9513113United Kingdom23.602011-12-0912Dec 20114
\n", "

16649 rows × 13 columns

\n", "
" ], "text/plain": [ " InvoiceNo StockCode Description Quantity \\\n", "0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 \n", "7 536366 22633 HAND WARMER UNION JACK 6 \n", "9 536367 84879 ASSORTED COLOUR BIRD ORNAMENT 32 \n", "21 536368 22960 JAM MAKING SET WITH JARS 6 \n", "25 536369 21756 BATH BUILDING BLOCK WORD 3 \n", "... ... ... ... ... \n", "541863 581582 23552 BICYCLE PUNCTURE REPAIR KIT 6 \n", "541865 581583 20725 LUNCH BAG RED RETROSPOT 40 \n", "541867 581584 20832 RED FLOCK LOVE HEART PHOTO FRAME 72 \n", "541869 581585 22481 BLACK TEA TOWEL CLASSIC DESIGN 12 \n", "541890 581586 22061 LARGE CAKE STAND HANGING STRAWBERY 8 \n", "\n", " InvoiceDate UnitPrice CustomerID Country Amount \\\n", "0 2010-12-01 08:26:00 2.55 17850 United Kingdom 15.30 \n", "7 2010-12-01 08:28:00 1.85 17850 United Kingdom 11.10 \n", "9 2010-12-01 08:34:00 1.69 13047 United Kingdom 54.08 \n", "21 2010-12-01 08:34:00 4.25 13047 United Kingdom 25.50 \n", "25 2010-12-01 08:35:00 5.95 13047 United Kingdom 17.85 \n", "... ... ... ... ... ... \n", "541863 2011-12-09 12:21:00 2.08 17581 United Kingdom 12.48 \n", "541865 2011-12-09 12:23:00 1.45 13777 United Kingdom 58.00 \n", "541867 2011-12-09 12:25:00 0.72 13777 United Kingdom 51.84 \n", "541869 2011-12-09 12:31:00 0.39 15804 United Kingdom 4.68 \n", "541890 2011-12-09 12:49:00 2.95 13113 United Kingdom 23.60 \n", "\n", " date month year_month ProductCount \n", "0 2010-12-01 12 Dec 2010 7 \n", "7 2010-12-01 12 Dec 2010 2 \n", "9 2010-12-01 12 Dec 2010 12 \n", "21 2010-12-01 12 Dec 2010 4 \n", "25 2010-12-01 12 Dec 2010 1 \n", "... ... ... ... ... \n", "541863 2011-12-09 12 Dec 2011 2 \n", "541865 2011-12-09 12 Dec 2011 2 \n", "541867 2011-12-09 12 Dec 2011 2 \n", "541869 2011-12-09 12 Dec 2011 21 \n", "541890 2011-12-09 12 Dec 2011 4 \n", "\n", "[16649 rows x 13 columns]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "# Assuming retail_uk is the DataFrame name\n", "# Calculate the count of products for each transaction\n", "retail_uk['ProductCount'] = retail_uk.groupby(['CustomerID', 'InvoiceNo'])['StockCode'].transform('count')\n", "\n", "# Filter out duplicate transactions\n", "filtered_retail_uk = retail_uk.drop_duplicates(subset=['CustomerID', 'InvoiceNo'])\n", "\n", "# Display the filtered DataFrame\n", "filtered_retail_uk\n" ] }, { "cell_type": "code", "execution_count": 39, "id": "9e5d99a1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(16649, 13)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filtered_retail_uk.shape" ] }, { "cell_type": "markdown", "id": "fecb7351", "metadata": {}, "source": [ "# ...\n", "After executing this code, the filtered_retail_uk DataFrame will contain only unique combinations of 'InvoiceNo' and 'CustomerID', effectively removing duplicate transactions associated with the same customer invoice." ] }, { "cell_type": "markdown", "id": "d0c9ed19", "metadata": {}, "source": [ "# Calculating frequency of purchases" ] }, { "cell_type": "code", "execution_count": 40, "id": "a57ae081", "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", "
CustomerIDFrequency
0123461
11274711
212748210
3127495
4128204
\n", "
" ], "text/plain": [ " CustomerID Frequency\n", "0 12346 1\n", "1 12747 11\n", "2 12748 210\n", "3 12749 5\n", "4 12820 4" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frequency_df = filtered_retail_uk.groupby(by=['CustomerID'], as_index=False)['InvoiceNo'].count()\n", "frequency_df.columns = ['CustomerID','Frequency']\n", "frequency_df.head()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" } }, "nbformat": 4, "nbformat_minor": 5 }