Skip to content

Instantly share code, notes, and snippets.

@audhiaprilliant
Last active April 13, 2023 16:37
Show Gist options
  • Save audhiaprilliant/0055ceeb47489f5f48332a4686278e52 to your computer and use it in GitHub Desktop.
Save audhiaprilliant/0055ceeb47489f5f48332a4686278e52 to your computer and use it in GitHub Desktop.
Clustering Algorithm for Mixed Data Type
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# K-prototype Cluster Algorithm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import module"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Import module for data manipulation\n",
"import pandas as pd\n",
"# Import module for linear algebra\n",
"import numpy as np\n",
"# Import module for data visualization\n",
"from plotnine import *\n",
"import plotnine\n",
"\n",
"# Import module for k-protoype cluster\n",
"from kmodes.kprototypes import KPrototypes"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Ignore warnings\n",
"import warnings\n",
"warnings.filterwarnings('ignore', category = FutureWarning)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# Format scientific notation from Pandas\n",
"pd.set_option('display.float_format', lambda x: '%.3f' % x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Data source: http://eforexcel.com/wp/downloads-18-sample-csv-files-data-sets-for-testing-sales/"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('data/10000 Sales Records.csv')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dimension data: 10000 rows and 14 columns\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Region</th>\n",
" <th>Country</th>\n",
" <th>Item Type</th>\n",
" <th>Sales Channel</th>\n",
" <th>Order Priority</th>\n",
" <th>Order Date</th>\n",
" <th>Order ID</th>\n",
" <th>Ship Date</th>\n",
" <th>Units Sold</th>\n",
" <th>Unit Price</th>\n",
" <th>Unit Cost</th>\n",
" <th>Total Revenue</th>\n",
" <th>Total Cost</th>\n",
" <th>Total Profit</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>Chad</td>\n",
" <td>Office Supplies</td>\n",
" <td>Online</td>\n",
" <td>L</td>\n",
" <td>1/27/2011</td>\n",
" <td>292494523</td>\n",
" <td>2/12/2011</td>\n",
" <td>4484</td>\n",
" <td>651.210</td>\n",
" <td>524.960</td>\n",
" <td>2920025.640</td>\n",
" <td>2353920.640</td>\n",
" <td>566105.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Europe</td>\n",
" <td>Latvia</td>\n",
" <td>Beverages</td>\n",
" <td>Online</td>\n",
" <td>C</td>\n",
" <td>12/28/2015</td>\n",
" <td>361825549</td>\n",
" <td>1/23/2016</td>\n",
" <td>1075</td>\n",
" <td>47.450</td>\n",
" <td>31.790</td>\n",
" <td>51008.750</td>\n",
" <td>34174.250</td>\n",
" <td>16834.500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Middle East and North Africa</td>\n",
" <td>Pakistan</td>\n",
" <td>Vegetables</td>\n",
" <td>Offline</td>\n",
" <td>C</td>\n",
" <td>1/13/2011</td>\n",
" <td>141515767</td>\n",
" <td>2/1/2011</td>\n",
" <td>6515</td>\n",
" <td>154.060</td>\n",
" <td>90.930</td>\n",
" <td>1003700.900</td>\n",
" <td>592408.950</td>\n",
" <td>411291.950</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>Democratic Republic of the Congo</td>\n",
" <td>Household</td>\n",
" <td>Online</td>\n",
" <td>C</td>\n",
" <td>9/11/2012</td>\n",
" <td>500364005</td>\n",
" <td>10/6/2012</td>\n",
" <td>7683</td>\n",
" <td>668.270</td>\n",
" <td>502.540</td>\n",
" <td>5134318.410</td>\n",
" <td>3861014.820</td>\n",
" <td>1273303.590</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Europe</td>\n",
" <td>Czech Republic</td>\n",
" <td>Beverages</td>\n",
" <td>Online</td>\n",
" <td>C</td>\n",
" <td>10/27/2015</td>\n",
" <td>127481591</td>\n",
" <td>12/5/2015</td>\n",
" <td>3491</td>\n",
" <td>47.450</td>\n",
" <td>31.790</td>\n",
" <td>165647.950</td>\n",
" <td>110978.890</td>\n",
" <td>54669.060</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Region Country \\\n",
"0 Sub-Saharan Africa Chad \n",
"1 Europe Latvia \n",
"2 Middle East and North Africa Pakistan \n",
"3 Sub-Saharan Africa Democratic Republic of the Congo \n",
"4 Europe Czech Republic \n",
"\n",
" Item Type Sales Channel Order Priority Order Date Order ID \\\n",
"0 Office Supplies Online L 1/27/2011 292494523 \n",
"1 Beverages Online C 12/28/2015 361825549 \n",
"2 Vegetables Offline C 1/13/2011 141515767 \n",
"3 Household Online C 9/11/2012 500364005 \n",
"4 Beverages Online C 10/27/2015 127481591 \n",
"\n",
" Ship Date Units Sold Unit Price Unit Cost Total Revenue Total Cost \\\n",
"0 2/12/2011 4484 651.210 524.960 2920025.640 2353920.640 \n",
"1 1/23/2016 1075 47.450 31.790 51008.750 34174.250 \n",
"2 2/1/2011 6515 154.060 90.930 1003700.900 592408.950 \n",
"3 10/6/2012 7683 668.270 502.540 5134318.410 3861014.820 \n",
"4 12/5/2015 3491 47.450 31.790 165647.950 110978.890 \n",
"\n",
" Total Profit \n",
"0 566105.000 \n",
"1 16834.500 \n",
"2 411291.950 \n",
"3 1273303.590 \n",
"4 54669.060 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print('Dimension data: {} rows and {} columns'.format(len(df), len(df.columns)))\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Region', 'Country', 'Item Type', 'Sales Channel', 'Order Priority',\n",
" 'Order Date', 'Order ID', 'Ship Date', 'Units Sold', 'Unit Price',\n",
" 'Unit Cost', 'Total Revenue', 'Total Cost', 'Total Profit'],\n",
" dtype='object')"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 10000 entries, 0 to 9999\n",
"Data columns (total 14 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Region 10000 non-null object \n",
" 1 Country 10000 non-null object \n",
" 2 Item Type 10000 non-null object \n",
" 3 Sales Channel 10000 non-null object \n",
" 4 Order Priority 10000 non-null object \n",
" 5 Order Date 10000 non-null object \n",
" 6 Order ID 10000 non-null int64 \n",
" 7 Ship Date 10000 non-null object \n",
" 8 Units Sold 10000 non-null int64 \n",
" 9 Unit Price 10000 non-null float64\n",
" 10 Unit Cost 10000 non-null float64\n",
" 11 Total Revenue 10000 non-null float64\n",
" 12 Total Cost 10000 non-null float64\n",
" 13 Total Profit 10000 non-null float64\n",
"dtypes: float64(5), int64(2), object(7)\n",
"memory usage: 1.1+ MB\n"
]
}
],
"source": [
"df.info()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Region 7\n",
"Country 185\n",
"Item Type 12\n",
"Sales Channel 2\n",
"Order Priority 4\n",
"Order Date 2691\n",
"Ship Date 2719\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.select_dtypes('object').nunique()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Europe 2633\n",
"Sub-Saharan Africa 2603\n",
"Asia 1469\n",
"Middle East and North Africa 1264\n",
"Central America and the Caribbean 1019\n",
"Australia and Oceania 797\n",
"North America 215\n",
"Name: Region, dtype: int64 \n",
"\n",
"United Kingdom 72\n",
"Lithuania 72\n",
"Moldova 71\n",
"Croatia 70\n",
"Seychelles 70\n",
" ..\n",
"Slovakia 42\n",
"Greenland 41\n",
"Tajikistan 40\n",
"Saint Lucia 39\n",
"Mali 35\n",
"Name: Country, Length: 185, dtype: int64 \n",
"\n",
"Personal Care 888\n",
"Household 875\n",
"Clothes 872\n",
"Baby Food 842\n",
"Office Supplies 837\n",
"Vegetables 836\n",
"Cosmetics 834\n",
"Cereal 825\n",
"Snacks 816\n",
"Meat 798\n",
"Fruits 795\n",
"Beverages 782\n",
"Name: Item Type, dtype: int64 \n",
"\n",
"Online 5061\n",
"Offline 4939\n",
"Name: Sales Channel, dtype: int64 \n",
"\n",
"C 2555\n",
"H 2503\n",
"L 2494\n",
"M 2448\n",
"Name: Order Priority, dtype: int64 \n",
"\n",
"1/28/2012 13\n",
"3/3/2012 12\n",
"8/16/2014 11\n",
"10/28/2016 11\n",
"7/15/2012 11\n",
" ..\n",
"5/30/2014 1\n",
"10/11/2010 1\n",
"2/26/2016 1\n",
"7/15/2010 1\n",
"5/29/2012 1\n",
"Name: Order Date, Length: 2691, dtype: int64 \n",
"\n",
"9/30/2014 12\n",
"7/23/2015 11\n",
"2/21/2010 11\n",
"10/28/2012 11\n",
"3/24/2016 11\n",
" ..\n",
"4/23/2017 1\n",
"12/24/2015 1\n",
"5/10/2011 1\n",
"5/20/2010 1\n",
"3/6/2010 1\n",
"Name: Ship Date, Length: 2719, dtype: int64 \n",
"\n"
]
}
],
"source": [
"# Summary statistics of numerical variable\n",
"for i in df.select_dtypes('object').columns:\n",
" print(df[i].value_counts(),'\\n')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Order ID</th>\n",
" <th>Units Sold</th>\n",
" <th>Unit Price</th>\n",
" <th>Unit Cost</th>\n",
" <th>Total Revenue</th>\n",
" <th>Total Cost</th>\n",
" <th>Total Profit</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>10000.000</td>\n",
" <td>10000.000</td>\n",
" <td>10000.000</td>\n",
" <td>10000.000</td>\n",
" <td>10000.000</td>\n",
" <td>10000.000</td>\n",
" <td>10000.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>549871874.366</td>\n",
" <td>5002.856</td>\n",
" <td>268.143</td>\n",
" <td>188.807</td>\n",
" <td>1333355.131</td>\n",
" <td>938265.784</td>\n",
" <td>395089.347</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>260783511.133</td>\n",
" <td>2873.246</td>\n",
" <td>217.944</td>\n",
" <td>176.446</td>\n",
" <td>1465026.174</td>\n",
" <td>1145914.069</td>\n",
" <td>377554.961</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>100089156.000</td>\n",
" <td>2.000</td>\n",
" <td>9.330</td>\n",
" <td>6.920</td>\n",
" <td>167.940</td>\n",
" <td>124.560</td>\n",
" <td>43.380</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>321806669.000</td>\n",
" <td>2530.750</td>\n",
" <td>109.280</td>\n",
" <td>56.670</td>\n",
" <td>288551.078</td>\n",
" <td>164785.530</td>\n",
" <td>98329.140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>548566305.000</td>\n",
" <td>4962.000</td>\n",
" <td>205.700</td>\n",
" <td>117.110</td>\n",
" <td>800051.210</td>\n",
" <td>481605.840</td>\n",
" <td>289099.020</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>775998103.500</td>\n",
" <td>7472.000</td>\n",
" <td>437.200</td>\n",
" <td>364.690</td>\n",
" <td>1819143.390</td>\n",
" <td>1183821.520</td>\n",
" <td>566422.708</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>999934232.000</td>\n",
" <td>10000.000</td>\n",
" <td>668.270</td>\n",
" <td>524.960</td>\n",
" <td>6680026.920</td>\n",
" <td>5241725.600</td>\n",
" <td>1738178.390</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Order ID Units Sold Unit Price Unit Cost Total Revenue \\\n",
"count 10000.000 10000.000 10000.000 10000.000 10000.000 \n",
"mean 549871874.366 5002.856 268.143 188.807 1333355.131 \n",
"std 260783511.133 2873.246 217.944 176.446 1465026.174 \n",
"min 100089156.000 2.000 9.330 6.920 167.940 \n",
"25% 321806669.000 2530.750 109.280 56.670 288551.078 \n",
"50% 548566305.000 4962.000 205.700 117.110 800051.210 \n",
"75% 775998103.500 7472.000 437.200 364.690 1819143.390 \n",
"max 999934232.000 10000.000 668.270 524.960 6680026.920 \n",
"\n",
" Total Cost Total Profit \n",
"count 10000.000 10000.000 \n",
"mean 938265.784 395089.347 \n",
"std 1145914.069 377554.961 \n",
"min 124.560 43.380 \n",
"25% 164785.530 98329.140 \n",
"50% 481605.840 289099.020 \n",
"75% 1183821.520 566422.708 \n",
"max 5241725.600 1738178.390 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Region 0\n",
"Country 0\n",
"Item Type 0\n",
"Sales Channel 0\n",
"Order Priority 0\n",
"Order Date 0\n",
"Order ID 0\n",
"Ship Date 0\n",
"Units Sold 0\n",
"Unit Price 0\n",
"Unit Cost 0\n",
"Total Revenue 0\n",
"Total Cost 0\n",
"Total Profit 0\n",
"dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Check missing value\n",
"df.isna().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Explanatory data analysis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Distribution of region"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Region</th>\n",
" <th>Total</th>\n",
" <th>Percentage</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>North America</td>\n",
" <td>215</td>\n",
" <td>0.021</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Australia and Oceania</td>\n",
" <td>797</td>\n",
" <td>0.080</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Central America and the Caribbean</td>\n",
" <td>1019</td>\n",
" <td>0.102</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Middle East and North Africa</td>\n",
" <td>1264</td>\n",
" <td>0.126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Asia</td>\n",
" <td>1469</td>\n",
" <td>0.147</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>2603</td>\n",
" <td>0.260</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Europe</td>\n",
" <td>2633</td>\n",
" <td>0.263</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Region Total Percentage\n",
"0 North America 215 0.021\n",
"1 Australia and Oceania 797 0.080\n",
"2 Central America and the Caribbean 1019 0.102\n",
"3 Middle East and North Africa 1264 0.126\n",
"4 Asia 1469 0.147\n",
"5 Sub-Saharan Africa 2603 0.260\n",
"6 Europe 2633 0.263"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_region = pd.DataFrame(df['Region'].value_counts()).reset_index()\n",
"df_region['Percentage'] = df_region['Region'] / df['Region'].value_counts().sum()\n",
"df_region.rename(columns = {'index':'Region', 'Region':'Total'}, inplace = True)\n",
"df_region = df_region.sort_values('Total', ascending = True).reset_index(drop = True)\n",
"df_region"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"df_region = df.groupby('Region').agg({\n",
" 'Region': 'count',\n",
" 'Units Sold': 'mean',\n",
" 'Total Revenue': 'mean',\n",
" 'Total Cost': 'mean',\n",
" 'Total Profit': 'mean'\n",
" }\n",
").rename(columns = {'Region': 'Total'}).reset_index().sort_values('Total', ascending = True)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Region</th>\n",
" <th>Total</th>\n",
" <th>Units Sold</th>\n",
" <th>Total Revenue</th>\n",
" <th>Total Cost</th>\n",
" <th>Total Profit</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>North America</td>\n",
" <td>215</td>\n",
" <td>5373.358</td>\n",
" <td>1559778.805</td>\n",
" <td>1097008.967</td>\n",
" <td>462769.838</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Australia and Oceania</td>\n",
" <td>797</td>\n",
" <td>4986.769</td>\n",
" <td>1317192.267</td>\n",
" <td>910578.451</td>\n",
" <td>406613.816</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Central America and the Caribbean</td>\n",
" <td>1019</td>\n",
" <td>5081.063</td>\n",
" <td>1369509.041</td>\n",
" <td>973672.093</td>\n",
" <td>395836.948</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Middle East and North Africa</td>\n",
" <td>1264</td>\n",
" <td>5116.219</td>\n",
" <td>1357304.982</td>\n",
" <td>953884.180</td>\n",
" <td>403420.803</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Asia</td>\n",
" <td>1469</td>\n",
" <td>5015.488</td>\n",
" <td>1365082.080</td>\n",
" <td>965215.983</td>\n",
" <td>399866.097</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>2603</td>\n",
" <td>4967.808</td>\n",
" <td>1287190.079</td>\n",
" <td>903155.468</td>\n",
" <td>384034.611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Europe</td>\n",
" <td>2633</td>\n",
" <td>4920.385</td>\n",
" <td>1322207.396</td>\n",
" <td>932158.169</td>\n",
" <td>390049.226</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Region Total Units Sold Total Revenue \\\n",
"5 North America 215 5373.358 1559778.805 \n",
"1 Australia and Oceania 797 4986.769 1317192.267 \n",
"2 Central America and the Caribbean 1019 5081.063 1369509.041 \n",
"4 Middle East and North Africa 1264 5116.219 1357304.982 \n",
"0 Asia 1469 5015.488 1365082.080 \n",
"6 Sub-Saharan Africa 2603 4967.808 1287190.079 \n",
"3 Europe 2633 4920.385 1322207.396 \n",
"\n",
" Total Cost Total Profit \n",
"5 1097008.967 462769.838 \n",
"1 910578.451 406613.816 \n",
"2 973672.093 395836.948 \n",
"4 953884.180 403420.803 \n",
"0 965215.983 399866.097 \n",
"6 903155.468 384034.611 \n",
"3 932158.169 390049.226 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_region"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 800x480 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<ggplot: (165534255171)>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plotnine.options.figure_size = (8, 4.8)\n",
"(\n",
" ggplot(data = df_region)+\n",
" geom_bar(aes(x = 'Region',\n",
" y = 'Total'),\n",
" fill = np.where(df_region['Region'] == 'Asia', '#981220', '#80797c'),\n",
" stat = 'identity')+\n",
" geom_text(aes(x = 'Region',\n",
" y = 'Total',\n",
" label = 'Total'),\n",
" size = 10,\n",
" nudge_y = 120)+\n",
" labs(title = 'Region that has the highest purchases')+\n",
" xlab('Region')+\n",
" ylab('Frequency')+\n",
" scale_x_discrete(limits = df_region['Region'].tolist())+\n",
" theme_minimal()+\n",
" coord_flip()\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Distribution of item type"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['North America',\n",
" 'Australia and Oceania',\n",
" 'Central America and the Caribbean',\n",
" 'Middle East and North Africa',\n",
" 'Asia',\n",
" 'Sub-Saharan Africa',\n",
" 'Europe',\n",
" 'All']"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Order the index of cross tabulation\n",
"order_region = df_region['Region'].to_list()\n",
"order_region.append('All')\n",
"order_region"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Region</th>\n",
" <th>Baby Food</th>\n",
" <th>Beverages</th>\n",
" <th>Cereal</th>\n",
" <th>Clothes</th>\n",
" <th>Cosmetics</th>\n",
" <th>Fruits</th>\n",
" <th>Household</th>\n",
" <th>Meat</th>\n",
" <th>Office Supplies</th>\n",
" <th>Personal Care</th>\n",
" <th>Snacks</th>\n",
" <th>Vegetables</th>\n",
" <th>All</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>North America</td>\n",
" <td>21</td>\n",
" <td>20</td>\n",
" <td>16</td>\n",
" <td>21</td>\n",
" <td>20</td>\n",
" <td>15</td>\n",
" <td>20</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>17</td>\n",
" <td>16</td>\n",
" <td>12</td>\n",
" <td>215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Australia and Oceania</td>\n",
" <td>65</td>\n",
" <td>50</td>\n",
" <td>69</td>\n",
" <td>77</td>\n",
" <td>75</td>\n",
" <td>55</td>\n",
" <td>78</td>\n",
" <td>61</td>\n",
" <td>50</td>\n",
" <td>76</td>\n",
" <td>72</td>\n",
" <td>69</td>\n",
" <td>797</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Central America and the Caribbean</td>\n",
" <td>74</td>\n",
" <td>92</td>\n",
" <td>77</td>\n",
" <td>84</td>\n",
" <td>77</td>\n",
" <td>81</td>\n",
" <td>104</td>\n",
" <td>75</td>\n",
" <td>94</td>\n",
" <td>82</td>\n",
" <td>89</td>\n",
" <td>90</td>\n",
" <td>1019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Middle East and North Africa</td>\n",
" <td>105</td>\n",
" <td>96</td>\n",
" <td>104</td>\n",
" <td>111</td>\n",
" <td>99</td>\n",
" <td>104</td>\n",
" <td>128</td>\n",
" <td>101</td>\n",
" <td>103</td>\n",
" <td>112</td>\n",
" <td>95</td>\n",
" <td>106</td>\n",
" <td>1264</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Asia</td>\n",
" <td>132</td>\n",
" <td>108</td>\n",
" <td>121</td>\n",
" <td>116</td>\n",
" <td>125</td>\n",
" <td>111</td>\n",
" <td>116</td>\n",
" <td>114</td>\n",
" <td>132</td>\n",
" <td>137</td>\n",
" <td>120</td>\n",
" <td>137</td>\n",
" <td>1469</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>235</td>\n",
" <td>220</td>\n",
" <td>211</td>\n",
" <td>229</td>\n",
" <td>203</td>\n",
" <td>230</td>\n",
" <td>218</td>\n",
" <td>207</td>\n",
" <td>207</td>\n",
" <td>223</td>\n",
" <td>221</td>\n",
" <td>199</td>\n",
" <td>2603</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Europe</td>\n",
" <td>210</td>\n",
" <td>196</td>\n",
" <td>227</td>\n",
" <td>234</td>\n",
" <td>235</td>\n",
" <td>199</td>\n",
" <td>211</td>\n",
" <td>223</td>\n",
" <td>231</td>\n",
" <td>241</td>\n",
" <td>203</td>\n",
" <td>223</td>\n",
" <td>2633</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>All</td>\n",
" <td>842</td>\n",
" <td>782</td>\n",
" <td>825</td>\n",
" <td>872</td>\n",
" <td>834</td>\n",
" <td>795</td>\n",
" <td>875</td>\n",
" <td>798</td>\n",
" <td>837</td>\n",
" <td>888</td>\n",
" <td>816</td>\n",
" <td>836</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Region Baby Food Beverages Cereal Clothes \\\n",
"0 North America 21 20 16 21 \n",
"1 Australia and Oceania 65 50 69 77 \n",
"2 Central America and the Caribbean 74 92 77 84 \n",
"3 Middle East and North Africa 105 96 104 111 \n",
"4 Asia 132 108 121 116 \n",
"5 Sub-Saharan Africa 235 220 211 229 \n",
"6 Europe 210 196 227 234 \n",
"7 All 842 782 825 872 \n",
"\n",
" Cosmetics Fruits Household Meat Office Supplies Personal Care Snacks \\\n",
"0 20 15 20 17 20 17 16 \n",
"1 75 55 78 61 50 76 72 \n",
"2 77 81 104 75 94 82 89 \n",
"3 99 104 128 101 103 112 95 \n",
"4 125 111 116 114 132 137 120 \n",
"5 203 230 218 207 207 223 221 \n",
"6 235 199 211 223 231 241 203 \n",
"7 834 795 875 798 837 888 816 \n",
"\n",
" Vegetables All \n",
"0 12 215 \n",
"1 69 797 \n",
"2 90 1019 \n",
"3 106 1264 \n",
"4 137 1469 \n",
"5 199 2603 \n",
"6 223 2633 \n",
"7 836 10000 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_item = pd.crosstab(df['Region'], df['Item Type'], margins = True).reindex(order_region, axis = 0).reset_index()\n",
"# Remove index name\n",
"df_item.columns.name = None\n",
"df_item"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data pre-processing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Remove unused columns for the next analysis `Country`, `Order Date`, `Order ID`, and `Ship Date`"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"df.drop(['Country', 'Order Date', 'Order ID', 'Ship Date'], axis = 1, inplace = True)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dimension data: 10000 rows and 10 columns\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Region</th>\n",
" <th>Item Type</th>\n",
" <th>Sales Channel</th>\n",
" <th>Order Priority</th>\n",
" <th>Units Sold</th>\n",
" <th>Unit Price</th>\n",
" <th>Unit Cost</th>\n",
" <th>Total Revenue</th>\n",
" <th>Total Cost</th>\n",
" <th>Total Profit</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>Office Supplies</td>\n",
" <td>Online</td>\n",
" <td>L</td>\n",
" <td>4484</td>\n",
" <td>651.210</td>\n",
" <td>524.960</td>\n",
" <td>2920025.640</td>\n",
" <td>2353920.640</td>\n",
" <td>566105.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Europe</td>\n",
" <td>Beverages</td>\n",
" <td>Online</td>\n",
" <td>C</td>\n",
" <td>1075</td>\n",
" <td>47.450</td>\n",
" <td>31.790</td>\n",
" <td>51008.750</td>\n",
" <td>34174.250</td>\n",
" <td>16834.500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Middle East and North Africa</td>\n",
" <td>Vegetables</td>\n",
" <td>Offline</td>\n",
" <td>C</td>\n",
" <td>6515</td>\n",
" <td>154.060</td>\n",
" <td>90.930</td>\n",
" <td>1003700.900</td>\n",
" <td>592408.950</td>\n",
" <td>411291.950</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>Household</td>\n",
" <td>Online</td>\n",
" <td>C</td>\n",
" <td>7683</td>\n",
" <td>668.270</td>\n",
" <td>502.540</td>\n",
" <td>5134318.410</td>\n",
" <td>3861014.820</td>\n",
" <td>1273303.590</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Europe</td>\n",
" <td>Beverages</td>\n",
" <td>Online</td>\n",
" <td>C</td>\n",
" <td>3491</td>\n",
" <td>47.450</td>\n",
" <td>31.790</td>\n",
" <td>165647.950</td>\n",
" <td>110978.890</td>\n",
" <td>54669.060</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Region Item Type Sales Channel Order Priority \\\n",
"0 Sub-Saharan Africa Office Supplies Online L \n",
"1 Europe Beverages Online C \n",
"2 Middle East and North Africa Vegetables Offline C \n",
"3 Sub-Saharan Africa Household Online C \n",
"4 Europe Beverages Online C \n",
"\n",
" Units Sold Unit Price Unit Cost Total Revenue Total Cost Total Profit \n",
"0 4484 651.210 524.960 2920025.640 2353920.640 566105.000 \n",
"1 1075 47.450 31.790 51008.750 34174.250 16834.500 \n",
"2 6515 154.060 90.930 1003700.900 592408.950 411291.950 \n",
"3 7683 668.270 502.540 5134318.410 3861014.820 1273303.590 \n",
"4 3491 47.450 31.790 165647.950 110978.890 54669.060 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print('Dimension data: {} rows and {} columns'.format(len(df), len(df.columns)))\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Cluster analysis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Thanks to https://github.com/aryancodify/Clustering"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Categorical columns : ['Region', 'Item Type', 'Sales Channel', 'Order Priority']\n",
"Categorical columns position : [0, 1, 2, 3]\n"
]
}
],
"source": [
"# Get the position of categorical columns\n",
"catColumnsPos = [df.columns.get_loc(col) for col in list(df.select_dtypes('object').columns)]\n",
"print('Categorical columns : {}'.format(list(df.select_dtypes('object').columns)))\n",
"print('Categorical columns position : {}'.format(catColumnsPos))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"dfMatrix = df.to_numpy()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([['Sub-Saharan Africa', 'Office Supplies', 'Online', ...,\n",
" 2920025.64, 2353920.64, 566105.0],\n",
" ['Europe', 'Beverages', 'Online', ..., 51008.75, 34174.25,\n",
" 16834.5],\n",
" ['Middle East and North Africa', 'Vegetables', 'Offline', ...,\n",
" 1003700.9, 592408.95, 411291.95],\n",
" ...,\n",
" ['Sub-Saharan Africa', 'Vegetables', 'Offline', ..., 388847.44,\n",
" 229507.32, 159340.12],\n",
" ['Sub-Saharan Africa', 'Meat', 'Online', ..., 3672974.34,\n",
" 3174991.14, 497983.2],\n",
" ['Asia', 'Snacks', 'Offline', ..., 55081.38, 35175.84, 19905.54]],\n",
" dtype=object)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfMatrix"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Error of initialization: https://github.com/nicodv/kmodes/blob/master/README.rst#faq"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cluster initiation: 1\n",
"Cluster initiation: 2\n",
"Cluster initiation: 3\n",
"Cluster initiation: 4\n",
"Cluster initiation: 5\n"
]
}
],
"source": [
"# Choosing optimal K\n",
"cost = []\n",
"for cluster in range(1, 10):\n",
" try:\n",
" kprototype = KPrototypes(n_jobs = -1, n_clusters = cluster, init = 'Huang', random_state = 0)\n",
" kprototype.fit_predict(dfMatrix, categorical = catColumnsPos)\n",
" cost.append(kprototype.cost_)\n",
" print('Cluster initiation: {}'.format(cluster))\n",
" except:\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Cluster</th>\n",
" <th>Cost</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>36016179764884296.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>9627992230178396.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>4960713581025175.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>2927463064172953.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>1975348817799526.000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Cluster Cost\n",
"0 1 36016179764884296.000\n",
"1 2 9627992230178396.000\n",
"2 3 4960713581025175.000\n",
"3 4 2927463064172953.000\n",
"4 5 1975348817799526.000"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Converting the results into a dataframe and plotting them\n",
"df_cost = pd.DataFrame({'Cluster':range(1, 6), 'Cost':cost})\n",
"df_cost.head()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 800x480 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<ggplot: (165534246675)>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plotnine.options.figure_size = (8, 4.8)\n",
"(\n",
" ggplot(data = df_cost)+\n",
" geom_line(aes(x = 'Cluster',\n",
" y = 'Cost'))+\n",
" geom_point(aes(x = 'Cluster',\n",
" y = 'Cost'))+\n",
" geom_label(aes(x = 'Cluster',\n",
" y = 'Cost',\n",
" label = 'Cluster'),\n",
" size = 10,\n",
" nudge_y = 1000) +\n",
" labs(title = 'Optimal number of cluster with Elbow Method')+\n",
" xlab('Number of Clusters k')+\n",
" ylab('Cost')+\n",
" theme_minimal()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 1, 1, ..., 1, 0, 1], dtype=uint16)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Fit the cluster\n",
"kprototype = KPrototypes(n_jobs = -1, n_clusters = 3, init = 'Huang', random_state = 0)\n",
"kprototype.fit_predict(dfMatrix, categorical = catColumnsPos)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[array([[7.90436555e+03, 5.93526513e+02, 4.57785496e+02, 4.62276055e+06,\n",
" 3.55912112e+06, 1.06363942e+06],\n",
" [4.04666949e+03, 1.63259107e+02, 1.05796869e+02, 4.67709452e+05,\n",
" 2.81142955e+05, 1.86566497e+05],\n",
" [6.09327542e+03, 3.84264504e+02, 2.75097501e+02, 1.99588812e+06,\n",
" 1.38053953e+06, 6.15348596e+05]]),\n",
" array([['Europe', 'Household', 'Offline', 'L'],\n",
" ['Sub-Saharan Africa', 'Personal Care', 'Online', 'C'],\n",
" ['Europe', 'Cosmetics', 'Online', 'H']], dtype='<U18')]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Cluster centorid\n",
"kprototype.cluster_centroids_"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Check the iteration of the clusters created\n",
"kprototype.n_iter_"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4960713581025175.0"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Check the cost of the clusters created\n",
"kprototype.cost_"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"# Add the cluster to the dataframe\n",
"df['cluster_id'] = kprototype.labels_ "
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Region</th>\n",
" <th>Total</th>\n",
" <th>Percentage</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>North America</td>\n",
" <td>215</td>\n",
" <td>0.021</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Australia and Oceania</td>\n",
" <td>797</td>\n",
" <td>0.080</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Central America and the Caribbean</td>\n",
" <td>1019</td>\n",
" <td>0.102</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Middle East and North Africa</td>\n",
" <td>1264</td>\n",
" <td>0.126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Asia</td>\n",
" <td>1469</td>\n",
" <td>0.147</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Sub-Saharan Africa</td>\n",
" <td>2603</td>\n",
" <td>0.260</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Europe</td>\n",
" <td>2633</td>\n",
" <td>0.263</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Region Total Percentage\n",
"0 North America 215 0.021\n",
"1 Australia and Oceania 797 0.080\n",
"2 Central America and the Caribbean 1019 0.102\n",
"3 Middle East and North Africa 1264 0.126\n",
"4 Asia 1469 0.147\n",
"5 Sub-Saharan Africa 2603 0.260\n",
"6 Europe 2633 0.263"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_region = pd.DataFrame(df['Region'].value_counts()).reset_index()\n",
"df_region['Percentage'] = df_region['Region'] / df['Region'].value_counts().sum()\n",
"df_region.rename(columns = {'index':'Region', 'Region':'Total'}, inplace = True)\n",
"df_region = df_region.sort_values('Total', ascending = True).reset_index(drop = True)\n",
"df_region"
]
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment