You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1556 lines
136 KiB
1556 lines
136 KiB
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div>\n",
|
|
" <span>\n",
|
|
" <p align=\"left\">\n",
|
|
" <img align=\"left\" style=\"padding-right: 5px\" valign=\"center\" src=\"https://ga-dash.s3.amazonaws.com/production/assets/logo-9f88ae6c9c3871690e33280fcf557f33.png\" width=\"28px\">\n",
|
|
" </p>\n",
|
|
" </span>\n",
|
|
" <span>\n",
|
|
" <h1>Consumer Sales Lab</h1>\n",
|
|
" </span>\n",
|
|
"</div>\n",
|
|
"\n",
|
|
"<font color='red'><strong>Important!!</font></strong>: This lab is fairly challenging and may take longer than 60m to complete. Because of this, we've included a <a href='#shortcut'>shortcut cell</a> that _skips the EDA section_ of this lab and lets you get right to the analysis section. Work with your instructor and use your best judgement to use your time wisely to focus on the areas you'd like to practice.\n",
|
|
"\n",
|
|
"This lab can be conducted in one of two ways:\n",
|
|
"\n",
|
|
"- <a href=\"#eda\">EDA</a> _and_ <a href=\"#analysis\">Analysis</a>\n",
|
|
"- <a href=\"#analysis\">Analysis</a> only\n",
|
|
"\n",
|
|
"The <a href=\"#eda\">EDA</a> section covers the following topics:\n",
|
|
"\n",
|
|
"- <a href='#import'>Importing</a> data from csvs\n",
|
|
"- <a href=\"#nulls\">Handling nulls</a>\n",
|
|
"- <a href='#dtypes'>Casting different Dtypes</a>\n",
|
|
"- <a href=\"#join\">Complex joining</a> of star-schema tables\n",
|
|
"\n",
|
|
"The <a href=\"#analysis\">Analysis</a> section covers the following topics:\n",
|
|
"\n",
|
|
"- <a href='#fe'>Feature engineering</a>\n",
|
|
"- <a href=\"#visualization\">Visualization and Reporting</a>\n",
|
|
"\n",
|
|
"<details>\n",
|
|
" <summary>Table of Contents</summary>\n",
|
|
" <ul>\n",
|
|
" <li><a href=\"#eda\">EDA</a></li>\n",
|
|
" <ul>\n",
|
|
" <li><a href='#import'>Import</a></li>\n",
|
|
" <li><a href=\"#nulls\">Nulls</a></li>\n",
|
|
" <li><a href='#dtypes'>Dtypes</a></li>\n",
|
|
" <li><a href=\"#join\">Join</a></li>\n",
|
|
" </ul>\n",
|
|
" <li><a href=\"#analysis\">Analysis</a></li>\n",
|
|
" <ul>\n",
|
|
" <li><a href='#fe'>Feature Engineering</a></li>\n",
|
|
" <li><a href=\"#visualization\">Visualization and Reporting</a></li>\n",
|
|
" <ul>\n",
|
|
" <li><a href='#1a'>1.A</a></li>\n",
|
|
" <li><a href=\"#1b\">1.B</a></li>\n",
|
|
" <li><a href='#1c'>1.C</a></li>\n",
|
|
" <li><a href=\"#2a\">2.A</a></li>\n",
|
|
" <li><a href=\"#3a\">3.A</a></li>\n",
|
|
" </ul>\n",
|
|
" </ul>\n",
|
|
" </ul>\n",
|
|
"</details>\n",
|
|
"<details>\n",
|
|
" <summary>Background</summary>\n",
|
|
" <ul>\n",
|
|
" <li>Originally adapted from <a href=\"https://sense-demo.qlik.com/sense/app/372cbc85-f7fb-4db6-a620-9a5367845dce\">qlik</a>, we'll be performing EDA on a consumer data set.</li>\n",
|
|
" </ul>\n",
|
|
"</details>\n",
|
|
"<details id='prompts'>\n",
|
|
" <summary>Prompts</summary>\n",
|
|
" <br>\n",
|
|
" Your boss, Joanna, has requested a report on the following:\n",
|
|
" <ol>\n",
|
|
" <li>Product Sales</li>\n",
|
|
" <ol>\n",
|
|
" <li>Gross margin analysis by product group.</li>\n",
|
|
" <li>Sales by product group, top 10 product groups only.</li>\n",
|
|
" <li>Sales, by year/month, year over year</li>\n",
|
|
" </ol>\n",
|
|
" <li>Sales Reps</li>\n",
|
|
" <ol>\n",
|
|
" <li>Sum of Sales and sales quantity, by rep, by customer</li>\n",
|
|
" </ol>\n",
|
|
" <li>Supply Chain</li>\n",
|
|
" <ol>\n",
|
|
" <li>Inventory vs Lead Time for all products</li>\n",
|
|
" </ol>\n",
|
|
" </ol>\n",
|
|
"</details>\n",
|
|
"<details id='dictionary'>\n",
|
|
" <summary>Data Dictionary</summary>\n",
|
|
" <br>\n",
|
|
" <!-- table created with https://www.tablesgenerator.com/html_tables please see ../assets/dictionary.tgn file -->\n",
|
|
" <table>\n",
|
|
" <tr>\n",
|
|
" <th>Table</th>\n",
|
|
" <th>Field</th>\n",
|
|
" <th>Description</th>\n",
|
|
" <th>PK</th>\n",
|
|
" <th>FK</th>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Item master.xls</td>\n",
|
|
" <td>Item Number</td>\n",
|
|
" <td>Foreign key to Sales.Item Number field. Unique identifier for item</td>\n",
|
|
" <td>Y</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Item master.xls</td>\n",
|
|
" <td>Product Group</td>\n",
|
|
" <td>Group for the product, i.e. Frozen Foods, Deli, etc</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Item master.xls</td>\n",
|
|
" <td>Product Line</td>\n",
|
|
" <td>Product line, i.e. Food, Drink, etc</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Item master.xls</td>\n",
|
|
" <td>Product Sub Group</td>\n",
|
|
" <td>Detail field for the Product Group field, i.e. Produce -> Fresh Vegetables</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Item master.xls</td>\n",
|
|
" <td>Product Type</td>\n",
|
|
" <td>Type of product and additional detail at the sub group level, i.e. 'Breakfast Foods'</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Manager</td>\n",
|
|
" <td>Name of manager</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr> \n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Manager Number</td>\n",
|
|
" <td>ID of manager</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Path</td>\n",
|
|
" <td>Order through which sales passes through reps, separated by hyphens. Correlates with Sales Rep ID key.</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Sales Rep Name</td>\n",
|
|
" <td>Primary sales rep name</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Sales Rep Name 1</td>\n",
|
|
" <td>Secondary sales rep name (nullable)</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Sales Rep Name 2</td>\n",
|
|
" <td>Tertiary sales rep name (nullable)</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Sales Rep Name 3</td>\n",
|
|
" <td>Quaterinary sales rep name (nullable)</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales rep.csv</td>\n",
|
|
" <td>Sales Rep ID</td>\n",
|
|
" <td>Foreign key to Sales. UID for path.</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>Y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Customers.xlsx</td>\n",
|
|
" <td>Customer</td>\n",
|
|
" <td>Name of customer</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Customers.xlsx</td>\n",
|
|
" <td>Customer Number</td>\n",
|
|
" <td>Unique identifier for customer name, keys to Sales.Customer Number</td>\n",
|
|
" <td>Y</td>\n",
|
|
" <td>Y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Customers.xlsx</td>\n",
|
|
" <td>City Code</td>\n",
|
|
" <td>City ID, foreign key for City.City Code</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>Y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Cities.xlsx</td>\n",
|
|
" <td>City</td>\n",
|
|
" <td>Name of city</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Cities.xlsx</td>\n",
|
|
" <td>City Code</td>\n",
|
|
" <td>ID of city name</td>\n",
|
|
" <td>Y</td>\n",
|
|
" <td>Y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Cities.xlsx</td>\n",
|
|
" <td>Region</td>\n",
|
|
" <td>Sales region (i.e. USA, Nordic, etc)</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Cities.xlsx</td>\n",
|
|
" <td>Latitude</td>\n",
|
|
" <td>Latitude of city</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Cities.xlsx</td>\n",
|
|
" <td>Longitude</td>\n",
|
|
" <td>Longitude of city</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Cities.xlsx</td>\n",
|
|
" <td>Desc</td>\n",
|
|
" <td>String description of city, including city, state (if applicable), and country</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>%KEY</td>\n",
|
|
" <td>Primary key of table</td>\n",
|
|
" <td>Y</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Cost</td>\n",
|
|
" <td>Total cost of sale for transaction [USD]</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Customer Number</td>\n",
|
|
" <td>Customer number, keys to Customer.Customer Number</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>Y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Date</td>\n",
|
|
" <td>Date of sale</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>GrossSales</td>\n",
|
|
" <td>Gross sale for invoice [USD]</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Invoice Date</td>\n",
|
|
" <td>Date of invoice</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Item Desc</td>\n",
|
|
" <td>Description of invoiced item</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Item Number</td>\n",
|
|
" <td>ID of invoiced item (product) - not a primary key. Keys to Item.Item Number</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>Y</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Margin</td>\n",
|
|
" <td>Percent gross margin of line item sale</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Order Number</td>\n",
|
|
" <td>ID of the order placed</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Promised Delivery Date</td>\n",
|
|
" <td>Agreed date of delivery</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Sales</td>\n",
|
|
" <td>Gross sale for invoice [USD], less cost of sale</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Sales Qty</td>\n",
|
|
" <td>Qty of invoiced item sold (see Item Number, Item Desc)</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>N</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Sales.xlsx</td>\n",
|
|
" <td>Sales Rep Number</td>\n",
|
|
" <td>Sales rep ID credited with sale</td>\n",
|
|
" <td>N</td>\n",
|
|
" <td>Y</td>\n",
|
|
" </tr>\n",
|
|
"</table>\n",
|
|
"</details>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='eda'></div>\n",
|
|
"<h2>EDA</h2>\n",
|
|
"\n",
|
|
"Before we create our charts/reports for Joanna, we'll need to sanity check our input data. We'll get to the analysis (feature engineering) and visualization and reporting in just a bit."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='import'></div>\n",
|
|
"<h3>Import Data</h3>\n",
|
|
"Read in the data. Check the raw file to make sure you understand quote characters, delimiters, and encoding. You will need to use the encoding flag here since we are dealing with international character sets."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Conduct any library imports here\n",
|
|
"import pandas as pd\n",
|
|
"from matplotlib.ticker import FormatStrFormatter\n",
|
|
"import matplotlib\n",
|
|
"matplotlib.use('nbagg')\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"%matplotlib inline"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Read in your sales, cities, customers, item_master, and sales_rep csvs here.\n",
|
|
"sales = pd.read_csv('../data/sales.csv')\n",
|
|
"cities = pd.read_csv('../data/cities.csv', encoding = \"ISO-8859-1\")\n",
|
|
"customers = pd.read_csv('../data/customers.csv', encoding = \"ISO-8859-1\")\n",
|
|
"item_master = pd.read_csv('../data/item_master.csv')\n",
|
|
"sales_rep = pd.read_csv('../data/sales_rep.csv')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"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>%KEY</th>\n",
|
|
" <th>Cost</th>\n",
|
|
" <th>Customer Number</th>\n",
|
|
" <th>Date</th>\n",
|
|
" <th>GrossSales</th>\n",
|
|
" <th>Invoice Date</th>\n",
|
|
" <th>Invoice Number</th>\n",
|
|
" <th>Item Desc</th>\n",
|
|
" <th>Item Number</th>\n",
|
|
" <th>Margin</th>\n",
|
|
" <th>Order Number</th>\n",
|
|
" <th>Promised Delivery Date</th>\n",
|
|
" <th>Sales</th>\n",
|
|
" <th>Sales Qty</th>\n",
|
|
" <th>Sales Rep Number</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>3428</td>\n",
|
|
" <td>-513.15</td>\n",
|
|
" <td>10012226</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>-573.3835</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>318960</td>\n",
|
|
" <td>Cutting Edge Sliced Ham</td>\n",
|
|
" <td>10696</td>\n",
|
|
" <td>-37.29</td>\n",
|
|
" <td>115785</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>-550.44</td>\n",
|
|
" <td>-1.0</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>3429</td>\n",
|
|
" <td>-105.93</td>\n",
|
|
" <td>10012226</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>-204.6638</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>318960</td>\n",
|
|
" <td>Washington Cranberry Juice</td>\n",
|
|
" <td>10009</td>\n",
|
|
" <td>-90.54</td>\n",
|
|
" <td>115785</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>-196.47</td>\n",
|
|
" <td>-2.0</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>3430</td>\n",
|
|
" <td>-88.07</td>\n",
|
|
" <td>10012226</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>-165.8016</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>318960</td>\n",
|
|
" <td>Moms Sliced Ham</td>\n",
|
|
" <td>10385</td>\n",
|
|
" <td>-71.10</td>\n",
|
|
" <td>115785</td>\n",
|
|
" <td>1/12/2012</td>\n",
|
|
" <td>-159.17</td>\n",
|
|
" <td>-3.0</td>\n",
|
|
" <td>180</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" %KEY Cost Customer Number Date GrossSales Invoice Date \\\n",
|
|
"0 3428 -513.15 10012226 1/12/2012 -573.3835 1/12/2012 \n",
|
|
"1 3429 -105.93 10012226 1/12/2012 -204.6638 1/12/2012 \n",
|
|
"2 3430 -88.07 10012226 1/12/2012 -165.8016 1/12/2012 \n",
|
|
"\n",
|
|
" Invoice Number Item Desc Item Number Margin \\\n",
|
|
"0 318960 Cutting Edge Sliced Ham 10696 -37.29 \n",
|
|
"1 318960 Washington Cranberry Juice 10009 -90.54 \n",
|
|
"2 318960 Moms Sliced Ham 10385 -71.10 \n",
|
|
"\n",
|
|
" Order Number Promised Delivery Date Sales Sales Qty Sales Rep Number \n",
|
|
"0 115785 1/12/2012 -550.44 -1.0 180 \n",
|
|
"1 115785 1/12/2012 -196.47 -2.0 180 \n",
|
|
"2 115785 1/12/2012 -159.17 -3.0 180 "
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"sales.head(3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='nulls'></div>\n",
|
|
"<h3>Nulls</h3>\n",
|
|
"Check for nulls and missing values in all imported tables. If you are filling missing values, state your reasoning for dropping and/or imputing data."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Sales nulls: 0\n",
|
|
"Customer nulls: 0\n",
|
|
"Item Master nulls: 0\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# No nulls in Sales\n",
|
|
"print(f'Sales nulls: {sales.isnull().sum().sum()}')\n",
|
|
"print(f'Customer nulls: {customers.isnull().sum().sum()}')\n",
|
|
"print(f'Item Master nulls: {item_master.isnull().sum().sum()}')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"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>Manager</th>\n",
|
|
" <th>Manager Number</th>\n",
|
|
" <th>Path</th>\n",
|
|
" <th>Sales Rep Name</th>\n",
|
|
" <th>Sales Rep Name1</th>\n",
|
|
" <th>Sales Rep Name2</th>\n",
|
|
" <th>Sales Rep Name3</th>\n",
|
|
" <th>Sales Rep ID</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>104</td>\n",
|
|
" <td>Amanda Honda-Amalia Craig</td>\n",
|
|
" <td>Amalia Craig</td>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>Amalia Craig</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>103</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>104</td>\n",
|
|
" <td>Amanda Honda-Cart Lynch</td>\n",
|
|
" <td>Cart Lynch</td>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>Cart Lynch</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>112</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>104</td>\n",
|
|
" <td>Amanda Honda-Molly McKenzie</td>\n",
|
|
" <td>Molly McKenzie</td>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>Molly McKenzie</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>159</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>104</td>\n",
|
|
" <td>Amanda Honda-Sheila Hein</td>\n",
|
|
" <td>Sheila Hein</td>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>Sheila Hein</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>176</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>109</td>\n",
|
|
" <td>Brenda Gibson-Dennis Johnson</td>\n",
|
|
" <td>Dennis Johnson</td>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>Dennis Johnson</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>121</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>109</td>\n",
|
|
" <td>Brenda Gibson-Ken Roberts</td>\n",
|
|
" <td>Ken Roberts</td>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>Ken Roberts</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>145</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>109</td>\n",
|
|
" <td>Brenda Gibson-Robert Kim</td>\n",
|
|
" <td>Robert Kim</td>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>Robert Kim</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>163</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>109</td>\n",
|
|
" <td>Brenda Gibson-William Fisher</td>\n",
|
|
" <td>William Fisher</td>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>William Fisher</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>185</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>21</th>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>134</td>\n",
|
|
" <td>John Greg-David Laychak</td>\n",
|
|
" <td>David Laychak</td>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>David Laychak</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>118</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>22</th>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>134</td>\n",
|
|
" <td>John Greg-Kathy Clinton</td>\n",
|
|
" <td>Kathy Clinton</td>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>Kathy Clinton</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>144</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>23</th>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>134</td>\n",
|
|
" <td>John Greg-Sandra Barone</td>\n",
|
|
" <td>Sandra Barone</td>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>Sandra Barone</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>170</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>24</th>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>134</td>\n",
|
|
" <td>John Greg-Viginia Mountain</td>\n",
|
|
" <td>Viginia Mountain</td>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>Viginia Mountain</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>184</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>41</th>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>169</td>\n",
|
|
" <td>Samantha Allen-Brad Taylor</td>\n",
|
|
" <td>Brad Taylor</td>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>Brad Taylor</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>108</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>42</th>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>169</td>\n",
|
|
" <td>Samantha Allen-Karl Anderson</td>\n",
|
|
" <td>Karl Anderson</td>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>Karl Anderson</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>143</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>43</th>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>169</td>\n",
|
|
" <td>Samantha Allen-Odessa Morris</td>\n",
|
|
" <td>Odessa Morris</td>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>Odessa Morris</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>160</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>44</th>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>169</td>\n",
|
|
" <td>Samantha Allen-Stephanie Reagan</td>\n",
|
|
" <td>Stephanie Reagan</td>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>Stephanie Reagan</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>179</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>52</th>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>181</td>\n",
|
|
" <td>Stewart Wind-Carolyn Halmon</td>\n",
|
|
" <td>Carolyn Halmon</td>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>Carolyn Halmon</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>111</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>53</th>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>181</td>\n",
|
|
" <td>Stewart Wind-John Davis</td>\n",
|
|
" <td>John Davis</td>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>John Davis</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>132</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>54</th>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>181</td>\n",
|
|
" <td>Stewart Wind-Micheal Williams</td>\n",
|
|
" <td>Micheal Williams</td>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>Micheal Williams</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>157</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>55</th>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>181</td>\n",
|
|
" <td>Stewart Wind-Ronald Golinski</td>\n",
|
|
" <td>Ronald Golinski</td>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>Ronald Golinski</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>166</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>59</th>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>104</td>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>Amanda Honda</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>104</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>60</th>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>109</td>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>Brenda Gibson</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>109</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>61</th>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>134</td>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>John Greg</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>134</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>62</th>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>169</td>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>Samantha Allen</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>169</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>63</th>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>181</td>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>Stewart Wind</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>181</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Manager Manager Number Path \\\n",
|
|
"0 Amanda Honda 104 Amanda Honda-Amalia Craig \n",
|
|
"1 Amanda Honda 104 Amanda Honda-Cart Lynch \n",
|
|
"2 Amanda Honda 104 Amanda Honda-Molly McKenzie \n",
|
|
"3 Amanda Honda 104 Amanda Honda-Sheila Hein \n",
|
|
"4 Brenda Gibson 109 Brenda Gibson-Dennis Johnson \n",
|
|
"5 Brenda Gibson 109 Brenda Gibson-Ken Roberts \n",
|
|
"6 Brenda Gibson 109 Brenda Gibson-Robert Kim \n",
|
|
"7 Brenda Gibson 109 Brenda Gibson-William Fisher \n",
|
|
"21 John Greg 134 John Greg-David Laychak \n",
|
|
"22 John Greg 134 John Greg-Kathy Clinton \n",
|
|
"23 John Greg 134 John Greg-Sandra Barone \n",
|
|
"24 John Greg 134 John Greg-Viginia Mountain \n",
|
|
"41 Samantha Allen 169 Samantha Allen-Brad Taylor \n",
|
|
"42 Samantha Allen 169 Samantha Allen-Karl Anderson \n",
|
|
"43 Samantha Allen 169 Samantha Allen-Odessa Morris \n",
|
|
"44 Samantha Allen 169 Samantha Allen-Stephanie Reagan \n",
|
|
"52 Stewart Wind 181 Stewart Wind-Carolyn Halmon \n",
|
|
"53 Stewart Wind 181 Stewart Wind-John Davis \n",
|
|
"54 Stewart Wind 181 Stewart Wind-Micheal Williams \n",
|
|
"55 Stewart Wind 181 Stewart Wind-Ronald Golinski \n",
|
|
"59 Amanda Honda 104 Amanda Honda \n",
|
|
"60 Brenda Gibson 109 Brenda Gibson \n",
|
|
"61 John Greg 134 John Greg \n",
|
|
"62 Samantha Allen 169 Samantha Allen \n",
|
|
"63 Stewart Wind 181 Stewart Wind \n",
|
|
"\n",
|
|
" Sales Rep Name Sales Rep Name1 Sales Rep Name2 Sales Rep Name3 \\\n",
|
|
"0 Amalia Craig Amanda Honda Amalia Craig NaN \n",
|
|
"1 Cart Lynch Amanda Honda Cart Lynch NaN \n",
|
|
"2 Molly McKenzie Amanda Honda Molly McKenzie NaN \n",
|
|
"3 Sheila Hein Amanda Honda Sheila Hein NaN \n",
|
|
"4 Dennis Johnson Brenda Gibson Dennis Johnson NaN \n",
|
|
"5 Ken Roberts Brenda Gibson Ken Roberts NaN \n",
|
|
"6 Robert Kim Brenda Gibson Robert Kim NaN \n",
|
|
"7 William Fisher Brenda Gibson William Fisher NaN \n",
|
|
"21 David Laychak John Greg David Laychak NaN \n",
|
|
"22 Kathy Clinton John Greg Kathy Clinton NaN \n",
|
|
"23 Sandra Barone John Greg Sandra Barone NaN \n",
|
|
"24 Viginia Mountain John Greg Viginia Mountain NaN \n",
|
|
"41 Brad Taylor Samantha Allen Brad Taylor NaN \n",
|
|
"42 Karl Anderson Samantha Allen Karl Anderson NaN \n",
|
|
"43 Odessa Morris Samantha Allen Odessa Morris NaN \n",
|
|
"44 Stephanie Reagan Samantha Allen Stephanie Reagan NaN \n",
|
|
"52 Carolyn Halmon Stewart Wind Carolyn Halmon NaN \n",
|
|
"53 John Davis Stewart Wind John Davis NaN \n",
|
|
"54 Micheal Williams Stewart Wind Micheal Williams NaN \n",
|
|
"55 Ronald Golinski Stewart Wind Ronald Golinski NaN \n",
|
|
"59 Amanda Honda Amanda Honda NaN NaN \n",
|
|
"60 Brenda Gibson Brenda Gibson NaN NaN \n",
|
|
"61 John Greg John Greg NaN NaN \n",
|
|
"62 Samantha Allen Samantha Allen NaN NaN \n",
|
|
"63 Stewart Wind Stewart Wind NaN NaN \n",
|
|
"\n",
|
|
" Sales Rep ID \n",
|
|
"0 103 \n",
|
|
"1 112 \n",
|
|
"2 159 \n",
|
|
"3 176 \n",
|
|
"4 121 \n",
|
|
"5 145 \n",
|
|
"6 163 \n",
|
|
"7 185 \n",
|
|
"21 118 \n",
|
|
"22 144 \n",
|
|
"23 170 \n",
|
|
"24 184 \n",
|
|
"41 108 \n",
|
|
"42 143 \n",
|
|
"43 160 \n",
|
|
"44 179 \n",
|
|
"52 111 \n",
|
|
"53 132 \n",
|
|
"54 157 \n",
|
|
"55 166 \n",
|
|
"59 104 \n",
|
|
"60 109 \n",
|
|
"61 134 \n",
|
|
"62 169 \n",
|
|
"63 181 "
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Sales Rep looks like we just don't have a 2nd or 3rd sales rep for that territory/path.\n",
|
|
"sales_rep[ sales_rep['Sales Rep Name2'].isnull() | sales_rep['Sales Rep Name3'].isnull() ]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"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>City</th>\n",
|
|
" <th>City Code</th>\n",
|
|
" <th>Region</th>\n",
|
|
" <th>Latitude</th>\n",
|
|
" <th>Longitude</th>\n",
|
|
" <th>Desc</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>94</th>\n",
|
|
" <td>Yokohama</td>\n",
|
|
" <td>95</td>\n",
|
|
" <td>Japan</td>\n",
|
|
" <td>35.455592</td>\n",
|
|
" <td>139.572196</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" City City Code Region Latitude Longitude Desc\n",
|
|
"94 Yokohama 95 Japan 35.455592 139.572196 NaN"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Don't think we'll be using the Desc field, so we'll leave this as-is\n",
|
|
"cities[cities['Desc'].isnull()]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='dtypes'></div>\n",
|
|
"<h3>Dtypes</h3>\n",
|
|
"Review all imported tables and convert the data types if necessary, according to the rules in the following table:\n",
|
|
"<br><br>\n",
|
|
"<table>\n",
|
|
" <tr>\n",
|
|
" <th>Name</th>\n",
|
|
" <th>Dtype</th>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Primary or Foreign Keys</td>\n",
|
|
" <td>int64 or int32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Currency</td>\n",
|
|
" <td>float64</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Text fields</td>\n",
|
|
" <td>object (string)</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Discrete, non-negative values</td>\n",
|
|
" <td>int64 or int32</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td>Dates</td>\n",
|
|
" <td>datetime64[ns] (Timestamp object)</td>\n",
|
|
" </tr>\n",
|
|
"</table>\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"%KEY int64\n",
|
|
"Cost float64\n",
|
|
"Customer Number int64\n",
|
|
"Date datetime64[ns]\n",
|
|
"GrossSales float64\n",
|
|
"Invoice Date datetime64[ns]\n",
|
|
"Invoice Number int64\n",
|
|
"Item Desc object\n",
|
|
"Item Number int64\n",
|
|
"Margin float64\n",
|
|
"Order Number int64\n",
|
|
"Promised Delivery Date datetime64[ns]\n",
|
|
"Sales float64\n",
|
|
"Sales Qty int64\n",
|
|
"Sales Rep Number int64\n",
|
|
"dtype: object"
|
|
]
|
|
},
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Dtypes look good as-is with the exception of the datetime fields in the sales df.\n",
|
|
"# This might take a minute to run since we have quite a few rows.\n",
|
|
"sales['Promised Delivery Date'] = pd.to_datetime(sales['Promised Delivery Date'])\n",
|
|
"sales['Invoice Date'] = pd.to_datetime(sales['Invoice Date'])\n",
|
|
"sales['Promised Delivery Date'] = pd.to_datetime(sales['Promised Delivery Date'])\n",
|
|
"sales['Date'] = pd.to_datetime(sales['Date'])\n",
|
|
"# Let's get the qty as an int since we can't have fractional qtys\n",
|
|
"sales['Sales Qty'] = sales['Sales Qty'].astype('int64')\n",
|
|
"\n",
|
|
"sales.dtypes"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='join'></div>\n",
|
|
"<h3>Join</h3>\n",
|
|
"Join all your tables together and store the joined result into a dataframe named <code>cs</code>. You'll need this for the <a href=\"#visualization\">reporting and visualization</a> section below. \n",
|
|
"\n",
|
|
"Use the <a href=\"#dictionary\">data dictionary</a> for guidance."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cs = pd.merge(sales, item_master, how='left', left_on='Item Number', right_on='Item Number') \\\n",
|
|
" .merge(sales_rep, how='left', left_on='Sales Rep Number', right_on='Sales Rep ID') \\\n",
|
|
" .merge(customers, how='left', left_on='Customer Number', right_on='Customer Number') \\\n",
|
|
" .merge(cities, how='inner', left_on='City Code', right_on='City Code')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='Analysis'></div>\n",
|
|
"<h2>Analysis</h2>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='fe'></div>\n",
|
|
"<h3>Feature Engineering</h3>\n",
|
|
"<ul>\n",
|
|
" <li>Create a new column, <code>GrossMargin</code>, which is the <code>GrossSales</code> minus the <code>Cost</code>, all divided by <code>GrossSales</code>. Store this value as a float (percentage).</li>\n",
|
|
" <li>Create a new column, <code>ShipDiff</code>, which is the difference between the <code>Promised Delivery Date</code> and the <code>Invoice Date</code>, in <code>seconds</code>.</li>\n",
|
|
" <li>Drop the <code>%KEY</code>, <code>Sales Rep Number</code>, <code>Manager Number</code>, <code>Path</code>, <code>Sales Rep ID</code>, and <code>Desc</code>.</li>\n",
|
|
"</ul>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cs['GrossMargin'] = (cs['GrossSales'] - cs['Cost']) / cs['GrossSales']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cs['ShipDiff'] = (cs['Promised Delivery Date'] - cs['Invoice Date']).dt.seconds"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cs.drop(['%KEY', 'Sales Rep Number', 'Manager Number', 'Path', 'Sales Rep ID', 'Desc'], axis=1, inplace=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='visualization'></div>\n",
|
|
"<h2>Reporting and Visualization</h2>\n",
|
|
"Create charts or reports according to the <a href=\"#prompts\">prompts</a>.\n",
|
|
"\n",
|
|
"<b>Use your best judgement to create visualizations or reports to best answer the questions. As yourself questions such as:</b>\n",
|
|
"<ul>\n",
|
|
" <li>Is the data I'm using categorical or continuous?</li>\n",
|
|
" <li>Am I looking at timeseries data?</li>\n",
|
|
" <li>Am I representing a part-of-a-whole relationship?</li>\n",
|
|
" <li>Do I have many data points? If so, could I report or chart a subset of that data?</li>\n",
|
|
"</ul>\n",
|
|
"\n",
|
|
"<b>There's no right or wrong answer to these questions. As you solve them, focus on this progression:</b>\n",
|
|
"<ul>\n",
|
|
" <li>First, create a pandas report with a dataframe or list of values that attempts to answer the prompt.</li>\n",
|
|
" <li>If you get that done, try charting it out using a pandas charting method, like <code>.plot()</code></li>\n",
|
|
" <li>If you get that done, look at how you might make your chart <i>more information dense</i></li>\n",
|
|
" <ul>\n",
|
|
" <li>Increase chart ink area</li>\n",
|
|
" <li>Reduce visual clutter</li>\n",
|
|
" <li>Use color to convey meaning</li>\n",
|
|
" <li>Increase information density with shape, size, color</li>\n",
|
|
" <li>Use callouts to highlight anomalies in your data or points of interest</li>\n",
|
|
" </ul>\n",
|
|
" <li>If you get that done, look at graduating from the <a href=\"https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html\">pandas plotting methods</a> to <a href=\"https://matplotlib.org/\">matplotlib</a>, which is the backend for pandas plotting. This will allow you more control over your plots but the learning curve is fairly steep. Hang in there!</li>\n",
|
|
"</ul>\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<img src=\"https://cdn.wikimg.net/en/strategywiki/images/7/70/SMB3-warpzone.png\" height=\"150\" width=\"150\">\n",
|
|
"\n",
|
|
"<div id='shortcut'></div>\n",
|
|
"<font color='red'><strong>Shortcut cell</font></strong>: if you'd like to bypass the EDA section, please run the cell below to import a pre-cleaned dataset into variable `cs` for charting purposes:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Shortcut cell\n",
|
|
"cs = pd.read_csv('../data/pre_cleaned_data.csv', \n",
|
|
" infer_datetime_format=True, \n",
|
|
" parse_dates=['Date', 'Invoice Date', 'Promised Delivery Date']\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='1a'></div>\n",
|
|
"<h3>1.A</h3>\n",
|
|
"Gross Margin by product group."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"cs.groupby(['Product Group'])['GrossMargin'].mean().sort_values().plot(kind='barh')\n",
|
|
"plt.title('Gross Margin by Product Group')\n",
|
|
"plt.xlabel('Gross Margin [%]');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='1b'></div>\n",
|
|
"<h3>1.B</h3>\n",
|
|
"Sales by product group, top 10 product groups only."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"cs.groupby(['Product Type'])['GrossSales'].sum()\\\n",
|
|
" .apply(lambda x: x/1000000)\\\n",
|
|
" .sort_values(ascending=False)\\\n",
|
|
" .head(10)\\\n",
|
|
" .plot(kind='bar');\n",
|
|
"plt.title('Sales [MM USD] by Product Type')\n",
|
|
"plt.ylabel('Sales [MM USD]');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='1c'></div>\n",
|
|
"<h3>1.C</h3>\n",
|
|
"Sales, by year/month, year over year"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"(cs.groupby([cs['Date'].dt.year, cs['Date'].dt.month])['GrossSales'].sum().unstack().T/1000000).plot()\n",
|
|
"plt.ylabel('Sales [Million USD]')\n",
|
|
"plt.xlabel('Month')\n",
|
|
"plt.title('Monthly Sales, YOY');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='2a'></div>\n",
|
|
"<h3>2.A</h3>\n",
|
|
"Sum of Sales and sales quantity, by rep, by customer. Top 10 customer gross sales only. Formatted as a data frame, not a chart."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"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></th>\n",
|
|
" <th>GrossSales</th>\n",
|
|
" <th>Sales Qty</th>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Sales Rep Name</th>\n",
|
|
" <th>Customer</th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>Stewart Wind</th>\n",
|
|
" <th>PageWave</th>\n",
|
|
" <td>5.867753e+06</td>\n",
|
|
" <td>232848</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th rowspan=\"2\" valign=\"top\">Judy Thurman</th>\n",
|
|
" <th>Paracel</th>\n",
|
|
" <td>5.665680e+06</td>\n",
|
|
" <td>28360</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Deak-Perera Group.</th>\n",
|
|
" <td>5.326473e+06</td>\n",
|
|
" <td>27784</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Stewart Wind</th>\n",
|
|
" <th>Talarian</th>\n",
|
|
" <td>4.442953e+06</td>\n",
|
|
" <td>177012</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th rowspan=\"2\" valign=\"top\">Lee Chin</th>\n",
|
|
" <th>Userland</th>\n",
|
|
" <td>3.747440e+06</td>\n",
|
|
" <td>111200</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Target</th>\n",
|
|
" <td>3.410170e+06</td>\n",
|
|
" <td>101601</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Stewart Wind</th>\n",
|
|
" <th>Acer</th>\n",
|
|
" <td>2.816532e+06</td>\n",
|
|
" <td>109296</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Judy Thurman</th>\n",
|
|
" <th>Tandy Corporation</th>\n",
|
|
" <td>2.551884e+06</td>\n",
|
|
" <td>11872</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Lee Chin</th>\n",
|
|
" <th>Boston and Albany Railroad Company</th>\n",
|
|
" <td>2.075920e+06</td>\n",
|
|
" <td>61600</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>Cheryle Sincock</th>\n",
|
|
" <th>Matradi</th>\n",
|
|
" <td>1.730093e+06</td>\n",
|
|
" <td>100072</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" GrossSales Sales Qty\n",
|
|
"Sales Rep Name Customer \n",
|
|
"Stewart Wind PageWave 5.867753e+06 232848\n",
|
|
"Judy Thurman Paracel 5.665680e+06 28360\n",
|
|
" Deak-Perera Group. 5.326473e+06 27784\n",
|
|
"Stewart Wind Talarian 4.442953e+06 177012\n",
|
|
"Lee Chin Userland 3.747440e+06 111200\n",
|
|
" Target 3.410170e+06 101601\n",
|
|
"Stewart Wind Acer 2.816532e+06 109296\n",
|
|
"Judy Thurman Tandy Corporation 2.551884e+06 11872\n",
|
|
"Lee Chin Boston and Albany Railroad Company 2.075920e+06 61600\n",
|
|
"Cheryle Sincock Matradi 1.730093e+06 100072"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"cs.groupby(['Sales Rep Name', 'Customer'])[['GrossSales', 'Sales Qty']].sum()\\\n",
|
|
" .sort_values('GrossSales', ascending=False)\\\n",
|
|
" .head(10)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div id='3a'></div>\n",
|
|
"<h3>3.A</h3>\n",
|
|
"Scatter plot of mean Gross Margin vs Gross Sales, by Product Sub Group"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def gsgm(s):\n",
|
|
" '''\n",
|
|
" Scales gross sales and margin for plotting purposes\n",
|
|
" '''\n",
|
|
" if s.name == 'GrossSales':\n",
|
|
" return(s)\n",
|
|
" elif s.name == 'GrossMargin':\n",
|
|
" return(s*100)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"cs.groupby(['Product Sub Group'])[['GrossMargin', 'GrossSales']]\\\n",
|
|
" .mean()\\\n",
|
|
" .apply(lambda x: gsgm(x))\\\n",
|
|
" .plot\\\n",
|
|
" .scatter('GrossSales', 'GrossMargin');\n",
|
|
"plt.title('Mean Gross Margin vs Gross Sales');"
|
|
]
|
|
}
|
|
],
|
|
"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.7.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|