{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0c6ca4a7",
   "metadata": {},
   "source": [
    "# Práctica 1: Limpieza y transformación de datos en Online Retail\n",
    "\n",
    "**Alumno:** Eduardo Alonso Sánchez  \n",
    "**Boleta:** 2023630155  \n",
    "**Grupo:** 7CV4  \n",
    "**Unidad de aprendizaje:** C703 - Big Data | Big Data  \n",
    "**Docente:** Tania Rodríguez Sarabia  \n",
    "**Periodo escolar:** 20271\n",
    "\n",
    "La boleta termina en **0155**. La consigna pide convertir los últimos cuatro dígitos a entero, por lo que `digitos_boleta = 155` se usa para módulos y paridad. Se conserva `identificador = \"0155\"` para búsquedas, etiquetas y nombres de archivo. Así se evita perder el cero inicial en las salidas legibles.\n",
    "\n",
    "Fuentes técnicas: [UCI Online Retail](https://archive.ics.uci.edu/dataset/352/online%2Bretail), [repositorio de Databricks indicado en la consigna](https://github.com/databricks/Spark-The-Definitive-Guide/tree/master/data/retail-data/all), [duplicados en pandas](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html), [conversión de fechas](https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html) y [recorte con `clip`](https://pandas.pydata.org/docs/reference/api/pandas.Series.clip.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d661365d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:14.844903Z",
     "iopub.status.busy": "2026-09-06T23:48:14.844788Z",
     "iopub.status.idle": "2026-09-06T23:48:15.453952Z",
     "shell.execute_reply": "2026-09-06T23:48:15.453354Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Alumno: Eduardo Alonso Sánchez\n",
      "Boleta: 2023630155\n",
      "Dígitos únicos (entero): 155\n",
      "Identificador escrito: 0155\n",
      "Fecha de ejecución: 2026-09-06 17:48:15.451783\n",
      "Python: 3.12.14 | pandas: 2.2.3 | numpy: 2.3.5\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "from urllib.request import urlretrieve\n",
    "import hashlib\n",
    "import json\n",
    "import platform\n",
    "import warnings\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from IPython.display import display\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "pd.set_option(\"display.max_rows\", 160)\n",
    "pd.set_option(\"display.max_columns\", 30)\n",
    "pd.set_option(\"display.width\", 160)\n",
    "sns.set_theme(style=\"whitegrid\", palette=\"deep\")\n",
    "\n",
    "nombre = \"Eduardo Alonso Sánchez\"\n",
    "boleta_completa = \"2023630155\"\n",
    "identificador = boleta_completa[-4:]\n",
    "digitos_boleta = int(identificador)\n",
    "\n",
    "ROOT = Path.cwd()\n",
    "RAW_DIR = ROOT / \"datos\" / \"raw\"\n",
    "PROCESSED_DIR = ROOT / \"datos\" / \"processed\"\n",
    "ASSETS_DIR = ROOT / \"assets\"\n",
    "for carpeta in (RAW_DIR, PROCESSED_DIR, ASSETS_DIR):\n",
    "    carpeta.mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "DATA_URL = \"https://raw.githubusercontent.com/databricks/Spark-The-Definitive-Guide/master/data/retail-data/all/online-retail-dataset.csv\"\n",
    "RAW_PATH = RAW_DIR / \"online-retail-dataset.csv\"\n",
    "if not RAW_PATH.exists():\n",
    "    print(\"Descargando dataset indicado por la consigna...\")\n",
    "    urlretrieve(DATA_URL, RAW_PATH)\n",
    "\n",
    "print(f\"Alumno: {nombre}\")\n",
    "print(f\"Boleta: {boleta_completa}\")\n",
    "print(f\"Dígitos únicos (entero): {digitos_boleta}\")\n",
    "print(f\"Identificador escrito: {identificador}\")\n",
    "print(f\"Fecha de ejecución: {pd.Timestamp.now()}\")\n",
    "print(f\"Python: {platform.python_version()} | pandas: {pd.__version__} | numpy: {np.__version__}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af8e486e",
   "metadata": {},
   "source": [
    "## Punto 2. Carga y exploración inicial"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b9265dd1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:15.455519Z",
     "iopub.status.busy": "2026-09-06T23:48:15.455252Z",
     "iopub.status.idle": "2026-09-06T23:48:16.200250Z",
     "shell.execute_reply": "2026-09-06T23:48:16.199776Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Archivo: /home/eddndev/Documents/ESCOM/BD/01-limpieza-datos-retail/datos/raw/online-retail-dataset.csv\n",
      "SHA-256: a2f79bbdd4463df6db8a3f5a50b9c980ae8f645a370bf5e2c0d6097f9e817b05\n",
      "Dimensión original: (541909, 8)\n",
      "\n",
      "Primeras 10 filas:\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>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>InvoiceDate</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>CustomerID</th>\n",
       "      <th>Country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536365</td>\n",
       "      <td>85123A</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536365</td>\n",
       "      <td>71053</td>\n",
       "      <td>WHITE METAL LANTERN</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536365</td>\n",
       "      <td>84406B</td>\n",
       "      <td>CREAM CUPID HEARTS COAT HANGER</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>2.75</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029G</td>\n",
       "      <td>KNITTED UNION FLAG HOT WATER BOTTLE</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029E</td>\n",
       "      <td>RED WOOLLY HOTTIE WHITE HEART.</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>536365</td>\n",
       "      <td>22752</td>\n",
       "      <td>SET 7 BABUSHKA NESTING BOXES</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>7.65</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>536365</td>\n",
       "      <td>21730</td>\n",
       "      <td>GLASS STAR FROSTED T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>4.25</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>536366</td>\n",
       "      <td>22633</td>\n",
       "      <td>HAND WARMER UNION JACK</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:28</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>536366</td>\n",
       "      <td>22632</td>\n",
       "      <td>HAND WARMER RED POLKA DOT</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:28</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>536367</td>\n",
       "      <td>84879</td>\n",
       "      <td>ASSORTED COLOUR BIRD ORNAMENT</td>\n",
       "      <td>32</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>1.69</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  InvoiceNo StockCode                          Description  Quantity     InvoiceDate  UnitPrice  CustomerID         Country\n",
       "0    536365    85123A   WHITE HANGING HEART T-LIGHT HOLDER         6  12/1/2010 8:26       2.55     17850.0  United Kingdom\n",
       "1    536365     71053                  WHITE METAL LANTERN         6  12/1/2010 8:26       3.39     17850.0  United Kingdom\n",
       "2    536365    84406B       CREAM CUPID HEARTS COAT HANGER         8  12/1/2010 8:26       2.75     17850.0  United Kingdom\n",
       "3    536365    84029G  KNITTED UNION FLAG HOT WATER BOTTLE         6  12/1/2010 8:26       3.39     17850.0  United Kingdom\n",
       "4    536365    84029E       RED WOOLLY HOTTIE WHITE HEART.         6  12/1/2010 8:26       3.39     17850.0  United Kingdom\n",
       "5    536365     22752         SET 7 BABUSHKA NESTING BOXES         2  12/1/2010 8:26       7.65     17850.0  United Kingdom\n",
       "6    536365     21730    GLASS STAR FROSTED T-LIGHT HOLDER         6  12/1/2010 8:26       4.25     17850.0  United Kingdom\n",
       "7    536366     22633               HAND WARMER UNION JACK         6  12/1/2010 8:28       1.85     17850.0  United Kingdom\n",
       "8    536366     22632            HAND WARMER RED POLKA DOT         6  12/1/2010 8:28       1.85     17850.0  United Kingdom\n",
       "9    536367     84879        ASSORTED COLOUR BIRD ORNAMENT        32  12/1/2010 8:34       1.69     13047.0  United Kingdom"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Información del dataframe:\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 541909 entries, 0 to 541908\n",
      "Data columns (total 8 columns):\n",
      " #   Column       Non-Null Count   Dtype  \n",
      "---  ------       --------------   -----  \n",
      " 0   InvoiceNo    541909 non-null  string \n",
      " 1   StockCode    541909 non-null  string \n",
      " 2   Description  540455 non-null  object \n",
      " 3   Quantity     541909 non-null  int64  \n",
      " 4   InvoiceDate  541909 non-null  object \n",
      " 5   UnitPrice    541909 non-null  float64\n",
      " 6   CustomerID   406829 non-null  float64\n",
      " 7   Country      541909 non-null  object \n",
      "dtypes: float64(2), int64(1), object(3), string(2)\n",
      "memory usage: 33.1+ MB\n",
      "\n",
      "Estadísticas descriptivas:\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>count</th>\n",
       "      <th>unique</th>\n",
       "      <th>top</th>\n",
       "      <th>freq</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>InvoiceNo</th>\n",
       "      <td>541909</td>\n",
       "      <td>25900</td>\n",
       "      <td>573585</td>\n",
       "      <td>1114</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>StockCode</th>\n",
       "      <td>541909</td>\n",
       "      <td>4070</td>\n",
       "      <td>85123A</td>\n",
       "      <td>2313</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Description</th>\n",
       "      <td>540455</td>\n",
       "      <td>4223</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>2369</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantity</th>\n",
       "      <td>541909.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.55225</td>\n",
       "      <td>218.081158</td>\n",
       "      <td>-80995.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>80995.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>InvoiceDate</th>\n",
       "      <td>541909</td>\n",
       "      <td>23260</td>\n",
       "      <td>10/31/2011 14:41</td>\n",
       "      <td>1114</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UnitPrice</th>\n",
       "      <td>541909.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4.611114</td>\n",
       "      <td>96.759853</td>\n",
       "      <td>-11062.06</td>\n",
       "      <td>1.25</td>\n",
       "      <td>2.08</td>\n",
       "      <td>4.13</td>\n",
       "      <td>38970.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CustomerID</th>\n",
       "      <td>406829.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15287.69057</td>\n",
       "      <td>1713.600303</td>\n",
       "      <td>12346.0</td>\n",
       "      <td>13953.0</td>\n",
       "      <td>15152.0</td>\n",
       "      <td>16791.0</td>\n",
       "      <td>18287.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Country</th>\n",
       "      <td>541909</td>\n",
       "      <td>38</td>\n",
       "      <td>United Kingdom</td>\n",
       "      <td>495478</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                count unique                                 top    freq         mean          std       min      25%      50%      75%      max\n",
       "InvoiceNo      541909  25900                              573585    1114          NaN          NaN       NaN      NaN      NaN      NaN      NaN\n",
       "StockCode      541909   4070                              85123A    2313          NaN          NaN       NaN      NaN      NaN      NaN      NaN\n",
       "Description    540455   4223  WHITE HANGING HEART T-LIGHT HOLDER    2369          NaN          NaN       NaN      NaN      NaN      NaN      NaN\n",
       "Quantity     541909.0    NaN                                 NaN     NaN      9.55225   218.081158  -80995.0      1.0      3.0     10.0  80995.0\n",
       "InvoiceDate    541909  23260                    10/31/2011 14:41    1114          NaN          NaN       NaN      NaN      NaN      NaN      NaN\n",
       "UnitPrice    541909.0    NaN                                 NaN     NaN     4.611114    96.759853 -11062.06     1.25     2.08     4.13  38970.0\n",
       "CustomerID   406829.0    NaN                                 NaN     NaN  15287.69057  1713.600303   12346.0  13953.0  15152.0  16791.0  18287.0\n",
       "Country        541909     38                      United Kingdom  495478          NaN          NaN       NaN      NaN      NaN      NaN      NaN"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sha256_raw = hashlib.sha256(RAW_PATH.read_bytes()).hexdigest()\n",
    "df = pd.read_csv(\n",
    "    RAW_PATH,\n",
    "    encoding=\"utf-8\",\n",
    "    dtype={\"InvoiceNo\": \"string\", \"StockCode\": \"string\"},\n",
    ")\n",
    "columnas_fuente = df.columns.tolist()\n",
    "filas_originales = len(df)\n",
    "\n",
    "print(f\"Archivo: {RAW_PATH}\")\n",
    "print(f\"SHA-256: {sha256_raw}\")\n",
    "print(f\"Dimensión original: {df.shape}\")\n",
    "print(\"\\nPrimeras 10 filas:\")\n",
    "display(df.head(10))\n",
    "print(\"\\nInformación del dataframe:\")\n",
    "df.info()\n",
    "print(\"\\nEstadísticas descriptivas:\")\n",
    "display(df.describe(include=\"all\").transpose())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c8932450",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:16.201539Z",
     "iopub.status.busy": "2026-09-06T23:48:16.201426Z",
     "iopub.status.idle": "2026-09-06T23:48:16.220814Z",
     "shell.execute_reply": "2026-09-06T23:48:16.220405Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "N = 155 % 100 + 100 = 155\n",
      "df_visualizacion se limita a la presentación; la limpieza continúa sobre df completo.\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>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>InvoiceDate</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>CustomerID</th>\n",
       "      <th>Country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536365</td>\n",
       "      <td>85123A</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536365</td>\n",
       "      <td>71053</td>\n",
       "      <td>WHITE METAL LANTERN</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536365</td>\n",
       "      <td>84406B</td>\n",
       "      <td>CREAM CUPID HEARTS COAT HANGER</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>2.75</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029G</td>\n",
       "      <td>KNITTED UNION FLAG HOT WATER BOTTLE</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536365</td>\n",
       "      <td>84029E</td>\n",
       "      <td>RED WOOLLY HOTTIE WHITE HEART.</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>536365</td>\n",
       "      <td>22752</td>\n",
       "      <td>SET 7 BABUSHKA NESTING BOXES</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>7.65</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>536365</td>\n",
       "      <td>21730</td>\n",
       "      <td>GLASS STAR FROSTED T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:26</td>\n",
       "      <td>4.25</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>536366</td>\n",
       "      <td>22633</td>\n",
       "      <td>HAND WARMER UNION JACK</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:28</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>536366</td>\n",
       "      <td>22632</td>\n",
       "      <td>HAND WARMER RED POLKA DOT</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:28</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>536367</td>\n",
       "      <td>84879</td>\n",
       "      <td>ASSORTED COLOUR BIRD ORNAMENT</td>\n",
       "      <td>32</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>1.69</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>536367</td>\n",
       "      <td>22745</td>\n",
       "      <td>POPPY'S PLAYHOUSE BEDROOM</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>2.10</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>536367</td>\n",
       "      <td>22748</td>\n",
       "      <td>POPPY'S PLAYHOUSE KITCHEN</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>2.10</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>536367</td>\n",
       "      <td>22749</td>\n",
       "      <td>FELTCRAFT PRINCESS CHARLOTTE DOLL</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>3.75</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>536367</td>\n",
       "      <td>22310</td>\n",
       "      <td>IVORY KNITTED MUG COSY</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>1.65</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>536367</td>\n",
       "      <td>84969</td>\n",
       "      <td>BOX OF 6 ASSORTED COLOUR TEASPOONS</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>4.25</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>536367</td>\n",
       "      <td>22623</td>\n",
       "      <td>BOX OF VINTAGE JIGSAW BLOCKS</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>4.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>536367</td>\n",
       "      <td>22622</td>\n",
       "      <td>BOX OF VINTAGE ALPHABET BLOCKS</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>9.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>536367</td>\n",
       "      <td>21754</td>\n",
       "      <td>HOME BUILDING BLOCK WORD</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>5.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>536367</td>\n",
       "      <td>21755</td>\n",
       "      <td>LOVE BUILDING BLOCK WORD</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>5.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>536367</td>\n",
       "      <td>21777</td>\n",
       "      <td>RECIPE BOX WITH METAL HEART</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>7.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>536367</td>\n",
       "      <td>48187</td>\n",
       "      <td>DOORMAT NEW ENGLAND</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>7.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>536368</td>\n",
       "      <td>22960</td>\n",
       "      <td>JAM MAKING SET WITH JARS</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>4.25</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>536368</td>\n",
       "      <td>22913</td>\n",
       "      <td>RED COAT RACK PARIS FASHION</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>4.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>536368</td>\n",
       "      <td>22912</td>\n",
       "      <td>YELLOW COAT RACK PARIS FASHION</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>4.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>536368</td>\n",
       "      <td>22914</td>\n",
       "      <td>BLUE COAT RACK PARIS FASHION</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:34</td>\n",
       "      <td>4.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>536369</td>\n",
       "      <td>21756</td>\n",
       "      <td>BATH BUILDING BLOCK WORD</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:35</td>\n",
       "      <td>5.95</td>\n",
       "      <td>13047.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>536370</td>\n",
       "      <td>22728</td>\n",
       "      <td>ALARM CLOCK BAKELIKE PINK</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>3.75</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>536370</td>\n",
       "      <td>22727</td>\n",
       "      <td>ALARM CLOCK BAKELIKE RED</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>3.75</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>536370</td>\n",
       "      <td>22726</td>\n",
       "      <td>ALARM CLOCK BAKELIKE GREEN</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>3.75</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>536370</td>\n",
       "      <td>21724</td>\n",
       "      <td>PANDA AND BUNNIES STICKER SHEET</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>0.85</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>536370</td>\n",
       "      <td>21883</td>\n",
       "      <td>STARS GIFT TAPE</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>0.65</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>536370</td>\n",
       "      <td>10002</td>\n",
       "      <td>INFLATABLE POLITICAL GLOBE</td>\n",
       "      <td>48</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>0.85</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>536370</td>\n",
       "      <td>21791</td>\n",
       "      <td>VINTAGE HEADS AND TAILS CARD GAME</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>1.25</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>536370</td>\n",
       "      <td>21035</td>\n",
       "      <td>SET/2 RED RETROSPOT TEA TOWELS</td>\n",
       "      <td>18</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>2.95</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>536370</td>\n",
       "      <td>22326</td>\n",
       "      <td>ROUND SNACK BOXES SET OF4 WOODLAND</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>2.95</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>536370</td>\n",
       "      <td>22629</td>\n",
       "      <td>SPACEBOY LUNCH BOX</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>1.95</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>536370</td>\n",
       "      <td>22659</td>\n",
       "      <td>LUNCH BOX I LOVE LONDON</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>1.95</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>536370</td>\n",
       "      <td>22631</td>\n",
       "      <td>CIRCUS PARADE LUNCH BOX</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>1.95</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>536370</td>\n",
       "      <td>22661</td>\n",
       "      <td>CHARLOTTE BAG DOLLY GIRL DESIGN</td>\n",
       "      <td>20</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>0.85</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>536370</td>\n",
       "      <td>21731</td>\n",
       "      <td>RED TOADSTOOL LED NIGHT LIGHT</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>1.65</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>536370</td>\n",
       "      <td>22900</td>\n",
       "      <td>SET 2 TEA TOWELS I LOVE LONDON</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>2.95</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>536370</td>\n",
       "      <td>21913</td>\n",
       "      <td>VINTAGE SEASIDE JIGSAW PUZZLES</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>3.75</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>536370</td>\n",
       "      <td>22540</td>\n",
       "      <td>MINI JIGSAW CIRCUS PARADE</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>0.42</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>536370</td>\n",
       "      <td>22544</td>\n",
       "      <td>MINI JIGSAW SPACEBOY</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>0.42</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>536370</td>\n",
       "      <td>22492</td>\n",
       "      <td>MINI PAINT SET VINTAGE</td>\n",
       "      <td>36</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>0.65</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>536370</td>\n",
       "      <td>POST</td>\n",
       "      <td>POSTAGE</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 8:45</td>\n",
       "      <td>18.00</td>\n",
       "      <td>12583.0</td>\n",
       "      <td>France</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>536371</td>\n",
       "      <td>22086</td>\n",
       "      <td>PAPER CHAIN KIT 50'S CHRISTMAS</td>\n",
       "      <td>80</td>\n",
       "      <td>12/1/2010 9:00</td>\n",
       "      <td>2.55</td>\n",
       "      <td>13748.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>536372</td>\n",
       "      <td>22632</td>\n",
       "      <td>HAND WARMER RED POLKA DOT</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:01</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>536372</td>\n",
       "      <td>22633</td>\n",
       "      <td>HAND WARMER UNION JACK</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:01</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>536373</td>\n",
       "      <td>85123A</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>536373</td>\n",
       "      <td>71053</td>\n",
       "      <td>WHITE METAL LANTERN</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>536373</td>\n",
       "      <td>84406B</td>\n",
       "      <td>CREAM CUPID HEARTS COAT HANGER</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>2.75</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>536373</td>\n",
       "      <td>20679</td>\n",
       "      <td>EDWARDIAN PARASOL RED</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>4.95</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>536373</td>\n",
       "      <td>37370</td>\n",
       "      <td>RETRO COFFEE MUGS ASSORTED</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>536373</td>\n",
       "      <td>21871</td>\n",
       "      <td>SAVE THE PLANET MUG</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>536373</td>\n",
       "      <td>21071</td>\n",
       "      <td>VINTAGE BILLBOARD DRINK ME MUG</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>536373</td>\n",
       "      <td>21068</td>\n",
       "      <td>VINTAGE BILLBOARD LOVE/HATE MUG</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>536373</td>\n",
       "      <td>82483</td>\n",
       "      <td>WOOD 2 DRAWER CABINET WHITE FINISH</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>4.95</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>536373</td>\n",
       "      <td>82486</td>\n",
       "      <td>WOOD S/3 CABINET ANT WHITE FINISH</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>6.95</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>536373</td>\n",
       "      <td>82482</td>\n",
       "      <td>WOODEN PICTURE FRAME WHITE FINISH</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>2.10</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>536373</td>\n",
       "      <td>82494L</td>\n",
       "      <td>WOODEN FRAME ANTIQUE WHITE</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>536373</td>\n",
       "      <td>84029G</td>\n",
       "      <td>KNITTED UNION FLAG HOT WATER BOTTLE</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>536373</td>\n",
       "      <td>84029E</td>\n",
       "      <td>RED WOOLLY HOTTIE WHITE HEART.</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>536373</td>\n",
       "      <td>22752</td>\n",
       "      <td>SET 7 BABUSHKA NESTING BOXES</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>7.65</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>536373</td>\n",
       "      <td>21730</td>\n",
       "      <td>GLASS STAR FROSTED T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:02</td>\n",
       "      <td>4.25</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>VICTORIAN SEWING BOX LARGE</td>\n",
       "      <td>32</td>\n",
       "      <td>12/1/2010 9:09</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>536375</td>\n",
       "      <td>85123A</td>\n",
       "      <td>WHITE HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>536375</td>\n",
       "      <td>71053</td>\n",
       "      <td>WHITE METAL LANTERN</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>68</th>\n",
       "      <td>536375</td>\n",
       "      <td>84406B</td>\n",
       "      <td>CREAM CUPID HEARTS COAT HANGER</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>2.75</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>536375</td>\n",
       "      <td>20679</td>\n",
       "      <td>EDWARDIAN PARASOL RED</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>4.95</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>536375</td>\n",
       "      <td>37370</td>\n",
       "      <td>RETRO COFFEE MUGS ASSORTED</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>536375</td>\n",
       "      <td>21871</td>\n",
       "      <td>SAVE THE PLANET MUG</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>536375</td>\n",
       "      <td>21071</td>\n",
       "      <td>VINTAGE BILLBOARD DRINK ME MUG</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>536375</td>\n",
       "      <td>21068</td>\n",
       "      <td>VINTAGE BILLBOARD LOVE/HATE MUG</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>1.06</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>536375</td>\n",
       "      <td>82483</td>\n",
       "      <td>WOOD 2 DRAWER CABINET WHITE FINISH</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>4.95</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>536375</td>\n",
       "      <td>82486</td>\n",
       "      <td>WOOD S/3 CABINET ANT WHITE FINISH</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>6.95</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>536375</td>\n",
       "      <td>82482</td>\n",
       "      <td>WOODEN PICTURE FRAME WHITE FINISH</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>2.10</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>536375</td>\n",
       "      <td>82494L</td>\n",
       "      <td>WOODEN FRAME ANTIQUE WHITE</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>2.55</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>536375</td>\n",
       "      <td>84029G</td>\n",
       "      <td>KNITTED UNION FLAG HOT WATER BOTTLE</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>536375</td>\n",
       "      <td>84029E</td>\n",
       "      <td>RED WOOLLY HOTTIE WHITE HEART.</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>3.39</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>536375</td>\n",
       "      <td>22752</td>\n",
       "      <td>SET 7 BABUSHKA NESTING BOXES</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>7.65</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>536375</td>\n",
       "      <td>21730</td>\n",
       "      <td>GLASS STAR FROSTED T-LIGHT HOLDER</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>4.25</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>HOT WATER BOTTLE TEA AND SYMPATHY</td>\n",
       "      <td>48</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>RED HANGING HEART T-LIGHT HOLDER</td>\n",
       "      <td>64</td>\n",
       "      <td>12/1/2010 9:32</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>536377</td>\n",
       "      <td>22632</td>\n",
       "      <td>HAND WARMER RED POLKA DOT</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:34</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>536377</td>\n",
       "      <td>22633</td>\n",
       "      <td>HAND WARMER UNION JACK</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:34</td>\n",
       "      <td>1.85</td>\n",
       "      <td>17850.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>JUMBO BAG PINK POLKADOT</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>JUMBO  BAG BAROQUE BLACK WHITE</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>536378</td>\n",
       "      <td>21033</td>\n",
       "      <td>JUMBO BAG CHARLIE AND LOLA TOYS</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>2.95</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>536378</td>\n",
       "      <td>20723</td>\n",
       "      <td>STRAWBERRY CHARLOTTE BAG</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>0.85</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>536378</td>\n",
       "      <td>84997B</td>\n",
       "      <td>RED 3 PIECE RETROSPOT CUTLERY SET</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>3.75</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>91</th>\n",
       "      <td>536378</td>\n",
       "      <td>84997C</td>\n",
       "      <td>BLUE 3 PIECE POLKADOT CUTLERY SET</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>3.75</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>536378</td>\n",
       "      <td>21094</td>\n",
       "      <td>SET/6 RED SPOTTY PAPER PLATES</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>0.85</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>93</th>\n",
       "      <td>536378</td>\n",
       "      <td>20725</td>\n",
       "      <td>LUNCH BAG RED RETROSPOT</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>1.65</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>94</th>\n",
       "      <td>536378</td>\n",
       "      <td>21559</td>\n",
       "      <td>STRAWBERRY LUNCH BOX WITH CUTLERY</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>2.55</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>536378</td>\n",
       "      <td>22352</td>\n",
       "      <td>LUNCH BOX WITH CUTLERY RETROSPOT</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>2.55</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>536378</td>\n",
       "      <td>21212</td>\n",
       "      <td>PACK OF 72 RETROSPOT CAKE CASES</td>\n",
       "      <td>120</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>0.42</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>536378</td>\n",
       "      <td>21975</td>\n",
       "      <td>PACK OF 60 DINOSAUR CAKE CASES</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>0.55</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>536378</td>\n",
       "      <td>21977</td>\n",
       "      <td>PACK OF 60 PINK PAISLEY CAKE CASES</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>0.55</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>536378</td>\n",
       "      <td>84991</td>\n",
       "      <td>60 TEATIME FAIRY CAKE CASES</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>0.55</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>536378</td>\n",
       "      <td>84519A</td>\n",
       "      <td>TOMATO CHARLIE+LOLA COASTER SET</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>2.95</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>536378</td>\n",
       "      <td>85183B</td>\n",
       "      <td>CHARLIE &amp; LOLA WASTEPAPER BIN FLORA</td>\n",
       "      <td>48</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>1.25</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>536378</td>\n",
       "      <td>85071B</td>\n",
       "      <td>RED CHARLIE+LOLA PERSONAL DOORSIGN</td>\n",
       "      <td>96</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>0.38</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103</th>\n",
       "      <td>536378</td>\n",
       "      <td>21931</td>\n",
       "      <td>JUMBO STORAGE BAG SUKI</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104</th>\n",
       "      <td>536378</td>\n",
       "      <td>21929</td>\n",
       "      <td>JUMBO BAG PINK VINTAGE PAISLEY</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>105</th>\n",
       "      <td>536380</td>\n",
       "      <td>22961</td>\n",
       "      <td>JAM MAKING SET PRINTED</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.45</td>\n",
       "      <td>17809.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>536381</td>\n",
       "      <td>22139</td>\n",
       "      <td>RETROSPOT TEA SET CERAMIC 11 PC</td>\n",
       "      <td>23</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>4.25</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>536381</td>\n",
       "      <td>84854</td>\n",
       "      <td>GIRLY PINK TOOL SET</td>\n",
       "      <td>5</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>4.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>536381</td>\n",
       "      <td>22411</td>\n",
       "      <td>JUMBO SHOPPER VINTAGE RED PAISLEY</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>109</th>\n",
       "      <td>536381</td>\n",
       "      <td>82567</td>\n",
       "      <td>AIRLINE LOUNGE,METAL SIGN</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.10</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>536381</td>\n",
       "      <td>21672</td>\n",
       "      <td>WHITE SPOT RED CERAMIC DRAWER KNOB</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.25</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>536381</td>\n",
       "      <td>22774</td>\n",
       "      <td>RED DRAWER KNOB ACRYLIC EDWARDIAN</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.25</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>536381</td>\n",
       "      <td>22771</td>\n",
       "      <td>CLEAR DRAWER KNOB ACRYLIC EDWARDIAN</td>\n",
       "      <td>24</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.25</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>536381</td>\n",
       "      <td>71270</td>\n",
       "      <td>PHOTO CLIP LINE</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.25</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>114</th>\n",
       "      <td>536381</td>\n",
       "      <td>22262</td>\n",
       "      <td>FELT EGG COSY CHICKEN</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>0.85</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>115</th>\n",
       "      <td>536381</td>\n",
       "      <td>22637</td>\n",
       "      <td>PIGGY BANK RETROSPOT</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>536381</td>\n",
       "      <td>21934</td>\n",
       "      <td>SKULL SHOULDER BAG</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.65</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>536381</td>\n",
       "      <td>21169</td>\n",
       "      <td>YOU'RE CONFUSING ME METAL SIGN</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.69</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>118</th>\n",
       "      <td>536381</td>\n",
       "      <td>21166</td>\n",
       "      <td>COOK WITH WINE METAL SIGN</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>536381</td>\n",
       "      <td>21175</td>\n",
       "      <td>GIN + TONIC DIET METAL SIGN</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.10</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>536381</td>\n",
       "      <td>37444A</td>\n",
       "      <td>YELLOW BREAKFAST CUP AND SAUCER</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>121</th>\n",
       "      <td>536381</td>\n",
       "      <td>37444C</td>\n",
       "      <td>PINK BREAKFAST CUP AND SAUCER</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>536381</td>\n",
       "      <td>22086</td>\n",
       "      <td>PAPER CHAIN KIT 50'S CHRISTMAS</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>123</th>\n",
       "      <td>536381</td>\n",
       "      <td>22083</td>\n",
       "      <td>PAPER CHAIN KIT RETROSPOT</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>536381</td>\n",
       "      <td>84971S</td>\n",
       "      <td>SMALL HEART FLOWERS HOOK</td>\n",
       "      <td>6</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>0.85</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>536381</td>\n",
       "      <td>71270</td>\n",
       "      <td>PHOTO CLIP LINE</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.25</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>536381</td>\n",
       "      <td>47580</td>\n",
       "      <td>TEA TIME DES TEA COSY</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>127</th>\n",
       "      <td>536381</td>\n",
       "      <td>22261</td>\n",
       "      <td>FELT EGG COSY WHITE RABBIT</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>0.85</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>536381</td>\n",
       "      <td>84832</td>\n",
       "      <td>ZINC WILLIE WINKIE  CANDLE STICK</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>0.85</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>129</th>\n",
       "      <td>536381</td>\n",
       "      <td>22644</td>\n",
       "      <td>CERAMIC CHERRY CAKE MONEY BANK</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.45</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>130</th>\n",
       "      <td>536381</td>\n",
       "      <td>21533</td>\n",
       "      <td>RETROSPOT LARGE MILK JUG</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>4.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>131</th>\n",
       "      <td>536381</td>\n",
       "      <td>21557</td>\n",
       "      <td>SET OF 6 FUNKY BEAKERS</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>132</th>\n",
       "      <td>536381</td>\n",
       "      <td>15056BL</td>\n",
       "      <td>EDWARDIAN PARASOL BLACK</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>5.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>133</th>\n",
       "      <td>536381</td>\n",
       "      <td>15056N</td>\n",
       "      <td>EDWARDIAN PARASOL NATURAL</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>5.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>536381</td>\n",
       "      <td>22646</td>\n",
       "      <td>CERAMIC STRAWBERRY CAKE MONEY BANK</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.45</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>135</th>\n",
       "      <td>536381</td>\n",
       "      <td>22176</td>\n",
       "      <td>BLUE OWL SOFT TOY</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>2.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>136</th>\n",
       "      <td>536381</td>\n",
       "      <td>22438</td>\n",
       "      <td>BALLOON ART MAKE YOUR OWN FLOWERS</td>\n",
       "      <td>1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>137</th>\n",
       "      <td>536381</td>\n",
       "      <td>21731</td>\n",
       "      <td>RED TOADSTOOL LED NIGHT LIGHT</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.65</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>138</th>\n",
       "      <td>536381</td>\n",
       "      <td>22778</td>\n",
       "      <td>GLASS CLOCHE SMALL</td>\n",
       "      <td>3</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>3.95</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>139</th>\n",
       "      <td>536381</td>\n",
       "      <td>22719</td>\n",
       "      <td>GUMBALL MONOCHROME COAT RACK</td>\n",
       "      <td>36</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>1.06</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>536381</td>\n",
       "      <td>21523</td>\n",
       "      <td>DOORMAT FANCY FONT HOME SWEET HOME</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>6.75</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>C536379</td>\n",
       "      <td>D</td>\n",
       "      <td>Discount</td>\n",
       "      <td>-1</td>\n",
       "      <td>12/1/2010 9:41</td>\n",
       "      <td>27.50</td>\n",
       "      <td>14527.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>536382</td>\n",
       "      <td>10002</td>\n",
       "      <td>INFLATABLE POLITICAL GLOBE</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>0.85</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>536382</td>\n",
       "      <td>21912</td>\n",
       "      <td>VINTAGE SNAKES &amp; LADDERS</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>3.75</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>536382</td>\n",
       "      <td>21832</td>\n",
       "      <td>CHOCOLATE CALCULATOR</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>1.65</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>145</th>\n",
       "      <td>536382</td>\n",
       "      <td>22411</td>\n",
       "      <td>JUMBO SHOPPER VINTAGE RED PAISLEY</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>1.95</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>146</th>\n",
       "      <td>536382</td>\n",
       "      <td>22379</td>\n",
       "      <td>RECYCLING BAG RETROSPOT</td>\n",
       "      <td>10</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>2.10</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>536382</td>\n",
       "      <td>22381</td>\n",
       "      <td>TOY TIDY PINK POLKADOT</td>\n",
       "      <td>50</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>1.85</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>536382</td>\n",
       "      <td>22798</td>\n",
       "      <td>ANTIQUE GLASS DRESSING TABLE POT</td>\n",
       "      <td>8</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>2.95</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>536382</td>\n",
       "      <td>22726</td>\n",
       "      <td>ALARM CLOCK BAKELIKE GREEN</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>3.75</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150</th>\n",
       "      <td>536382</td>\n",
       "      <td>22926</td>\n",
       "      <td>IVORY GIANT GARDEN THERMOMETER</td>\n",
       "      <td>12</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>5.95</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>151</th>\n",
       "      <td>536382</td>\n",
       "      <td>22839</td>\n",
       "      <td>3 TIER CAKE TIN GREEN AND CREAM</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>14.95</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>152</th>\n",
       "      <td>536382</td>\n",
       "      <td>22838</td>\n",
       "      <td>3 TIER CAKE TIN RED AND CREAM</td>\n",
       "      <td>2</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>14.95</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>153</th>\n",
       "      <td>536382</td>\n",
       "      <td>22783</td>\n",
       "      <td>SET 3 WICKER OVAL BASKETS W LIDS</td>\n",
       "      <td>4</td>\n",
       "      <td>12/1/2010 9:45</td>\n",
       "      <td>16.95</td>\n",
       "      <td>16098.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>C536383</td>\n",
       "      <td>35004C</td>\n",
       "      <td>SET OF 3 COLOURED  FLYING DUCKS</td>\n",
       "      <td>-1</td>\n",
       "      <td>12/1/2010 9:49</td>\n",
       "      <td>4.65</td>\n",
       "      <td>15311.0</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    InvoiceNo StockCode                          Description  Quantity     InvoiceDate  UnitPrice  CustomerID         Country\n",
       "0      536365    85123A   WHITE HANGING HEART T-LIGHT HOLDER         6  12/1/2010 8:26       2.55     17850.0  United Kingdom\n",
       "1      536365     71053                  WHITE METAL LANTERN         6  12/1/2010 8:26       3.39     17850.0  United Kingdom\n",
       "2      536365    84406B       CREAM CUPID HEARTS COAT HANGER         8  12/1/2010 8:26       2.75     17850.0  United Kingdom\n",
       "3      536365    84029G  KNITTED UNION FLAG HOT WATER BOTTLE         6  12/1/2010 8:26       3.39     17850.0  United Kingdom\n",
       "4      536365    84029E       RED WOOLLY HOTTIE WHITE HEART.         6  12/1/2010 8:26       3.39     17850.0  United Kingdom\n",
       "5      536365     22752         SET 7 BABUSHKA NESTING BOXES         2  12/1/2010 8:26       7.65     17850.0  United Kingdom\n",
       "6      536365     21730    GLASS STAR FROSTED T-LIGHT HOLDER         6  12/1/2010 8:26       4.25     17850.0  United Kingdom\n",
       "7      536366     22633               HAND WARMER UNION JACK         6  12/1/2010 8:28       1.85     17850.0  United Kingdom\n",
       "8      536366     22632            HAND WARMER RED POLKA DOT         6  12/1/2010 8:28       1.85     17850.0  United Kingdom\n",
       "9      536367     84879        ASSORTED COLOUR BIRD ORNAMENT        32  12/1/2010 8:34       1.69     13047.0  United Kingdom\n",
       "10     536367     22745           POPPY'S PLAYHOUSE BEDROOM          6  12/1/2010 8:34       2.10     13047.0  United Kingdom\n",
       "11     536367     22748            POPPY'S PLAYHOUSE KITCHEN         6  12/1/2010 8:34       2.10     13047.0  United Kingdom\n",
       "12     536367     22749    FELTCRAFT PRINCESS CHARLOTTE DOLL         8  12/1/2010 8:34       3.75     13047.0  United Kingdom\n",
       "13     536367     22310              IVORY KNITTED MUG COSY          6  12/1/2010 8:34       1.65     13047.0  United Kingdom\n",
       "14     536367     84969   BOX OF 6 ASSORTED COLOUR TEASPOONS         6  12/1/2010 8:34       4.25     13047.0  United Kingdom\n",
       "15     536367     22623        BOX OF VINTAGE JIGSAW BLOCKS          3  12/1/2010 8:34       4.95     13047.0  United Kingdom\n",
       "16     536367     22622       BOX OF VINTAGE ALPHABET BLOCKS         2  12/1/2010 8:34       9.95     13047.0  United Kingdom\n",
       "17     536367     21754             HOME BUILDING BLOCK WORD         3  12/1/2010 8:34       5.95     13047.0  United Kingdom\n",
       "18     536367     21755             LOVE BUILDING BLOCK WORD         3  12/1/2010 8:34       5.95     13047.0  United Kingdom\n",
       "19     536367     21777          RECIPE BOX WITH METAL HEART         4  12/1/2010 8:34       7.95     13047.0  United Kingdom\n",
       "20     536367     48187                  DOORMAT NEW ENGLAND         4  12/1/2010 8:34       7.95     13047.0  United Kingdom\n",
       "21     536368     22960             JAM MAKING SET WITH JARS         6  12/1/2010 8:34       4.25     13047.0  United Kingdom\n",
       "22     536368     22913          RED COAT RACK PARIS FASHION         3  12/1/2010 8:34       4.95     13047.0  United Kingdom\n",
       "23     536368     22912       YELLOW COAT RACK PARIS FASHION         3  12/1/2010 8:34       4.95     13047.0  United Kingdom\n",
       "24     536368     22914         BLUE COAT RACK PARIS FASHION         3  12/1/2010 8:34       4.95     13047.0  United Kingdom\n",
       "25     536369     21756             BATH BUILDING BLOCK WORD         3  12/1/2010 8:35       5.95     13047.0  United Kingdom\n",
       "26     536370     22728            ALARM CLOCK BAKELIKE PINK        24  12/1/2010 8:45       3.75     12583.0          France\n",
       "27     536370     22727            ALARM CLOCK BAKELIKE RED         24  12/1/2010 8:45       3.75     12583.0          France\n",
       "28     536370     22726           ALARM CLOCK BAKELIKE GREEN        12  12/1/2010 8:45       3.75     12583.0          France\n",
       "29     536370     21724      PANDA AND BUNNIES STICKER SHEET        12  12/1/2010 8:45       0.85     12583.0          France\n",
       "30     536370     21883                     STARS GIFT TAPE         24  12/1/2010 8:45       0.65     12583.0          France\n",
       "31     536370     10002          INFLATABLE POLITICAL GLOBE         48  12/1/2010 8:45       0.85     12583.0          France\n",
       "32     536370     21791   VINTAGE HEADS AND TAILS CARD GAME         24  12/1/2010 8:45       1.25     12583.0          France\n",
       "33     536370     21035      SET/2 RED RETROSPOT TEA TOWELS         18  12/1/2010 8:45       2.95     12583.0          France\n",
       "34     536370     22326  ROUND SNACK BOXES SET OF4 WOODLAND         24  12/1/2010 8:45       2.95     12583.0          France\n",
       "35     536370     22629                  SPACEBOY LUNCH BOX         24  12/1/2010 8:45       1.95     12583.0          France\n",
       "36     536370     22659              LUNCH BOX I LOVE LONDON        24  12/1/2010 8:45       1.95     12583.0          France\n",
       "37     536370     22631             CIRCUS PARADE LUNCH BOX         24  12/1/2010 8:45       1.95     12583.0          France\n",
       "38     536370     22661      CHARLOTTE BAG DOLLY GIRL DESIGN        20  12/1/2010 8:45       0.85     12583.0          France\n",
       "39     536370     21731        RED TOADSTOOL LED NIGHT LIGHT        24  12/1/2010 8:45       1.65     12583.0          France\n",
       "40     536370     22900      SET 2 TEA TOWELS I LOVE LONDON         24  12/1/2010 8:45       2.95     12583.0          France\n",
       "41     536370     21913       VINTAGE SEASIDE JIGSAW PUZZLES        12  12/1/2010 8:45       3.75     12583.0          France\n",
       "42     536370     22540           MINI JIGSAW CIRCUS PARADE         24  12/1/2010 8:45       0.42     12583.0          France\n",
       "43     536370     22544                 MINI JIGSAW SPACEBOY        24  12/1/2010 8:45       0.42     12583.0          France\n",
       "44     536370     22492              MINI PAINT SET VINTAGE         36  12/1/2010 8:45       0.65     12583.0          France\n",
       "45     536370      POST                              POSTAGE         3  12/1/2010 8:45      18.00     12583.0          France\n",
       "46     536371     22086      PAPER CHAIN KIT 50'S CHRISTMAS         80  12/1/2010 9:00       2.55     13748.0  United Kingdom\n",
       "47     536372     22632            HAND WARMER RED POLKA DOT         6  12/1/2010 9:01       1.85     17850.0  United Kingdom\n",
       "48     536372     22633               HAND WARMER UNION JACK         6  12/1/2010 9:01       1.85     17850.0  United Kingdom\n",
       "49     536373    85123A   WHITE HANGING HEART T-LIGHT HOLDER         6  12/1/2010 9:02       2.55     17850.0  United Kingdom\n",
       "50     536373     71053                  WHITE METAL LANTERN         6  12/1/2010 9:02       3.39     17850.0  United Kingdom\n",
       "51     536373    84406B       CREAM CUPID HEARTS COAT HANGER         8  12/1/2010 9:02       2.75     17850.0  United Kingdom\n",
       "52     536373     20679                EDWARDIAN PARASOL RED         6  12/1/2010 9:02       4.95     17850.0  United Kingdom\n",
       "53     536373     37370           RETRO COFFEE MUGS ASSORTED         6  12/1/2010 9:02       1.06     17850.0  United Kingdom\n",
       "54     536373     21871                  SAVE THE PLANET MUG         6  12/1/2010 9:02       1.06     17850.0  United Kingdom\n",
       "55     536373     21071       VINTAGE BILLBOARD DRINK ME MUG         6  12/1/2010 9:02       1.06     17850.0  United Kingdom\n",
       "56     536373     21068      VINTAGE BILLBOARD LOVE/HATE MUG         6  12/1/2010 9:02       1.06     17850.0  United Kingdom\n",
       "57     536373     82483   WOOD 2 DRAWER CABINET WHITE FINISH         2  12/1/2010 9:02       4.95     17850.0  United Kingdom\n",
       "58     536373     82486    WOOD S/3 CABINET ANT WHITE FINISH         4  12/1/2010 9:02       6.95     17850.0  United Kingdom\n",
       "59     536373     82482    WOODEN PICTURE FRAME WHITE FINISH         6  12/1/2010 9:02       2.10     17850.0  United Kingdom\n",
       "60     536373    82494L          WOODEN FRAME ANTIQUE WHITE          6  12/1/2010 9:02       2.55     17850.0  United Kingdom\n",
       "61     536373    84029G  KNITTED UNION FLAG HOT WATER BOTTLE         6  12/1/2010 9:02       3.39     17850.0  United Kingdom\n",
       "62     536373    84029E       RED WOOLLY HOTTIE WHITE HEART.         6  12/1/2010 9:02       3.39     17850.0  United Kingdom\n",
       "63     536373     22752         SET 7 BABUSHKA NESTING BOXES         2  12/1/2010 9:02       7.65     17850.0  United Kingdom\n",
       "64     536373     21730    GLASS STAR FROSTED T-LIGHT HOLDER         6  12/1/2010 9:02       4.25     17850.0  United Kingdom\n",
       "65     536374     21258           VICTORIAN SEWING BOX LARGE        32  12/1/2010 9:09      10.95     15100.0  United Kingdom\n",
       "66     536375    85123A   WHITE HANGING HEART T-LIGHT HOLDER         6  12/1/2010 9:32       2.55     17850.0  United Kingdom\n",
       "67     536375     71053                  WHITE METAL LANTERN         6  12/1/2010 9:32       3.39     17850.0  United Kingdom\n",
       "68     536375    84406B       CREAM CUPID HEARTS COAT HANGER         8  12/1/2010 9:32       2.75     17850.0  United Kingdom\n",
       "69     536375     20679                EDWARDIAN PARASOL RED         6  12/1/2010 9:32       4.95     17850.0  United Kingdom\n",
       "70     536375     37370           RETRO COFFEE MUGS ASSORTED         6  12/1/2010 9:32       1.06     17850.0  United Kingdom\n",
       "71     536375     21871                  SAVE THE PLANET MUG         6  12/1/2010 9:32       1.06     17850.0  United Kingdom\n",
       "72     536375     21071       VINTAGE BILLBOARD DRINK ME MUG         6  12/1/2010 9:32       1.06     17850.0  United Kingdom\n",
       "73     536375     21068      VINTAGE BILLBOARD LOVE/HATE MUG         6  12/1/2010 9:32       1.06     17850.0  United Kingdom\n",
       "74     536375     82483   WOOD 2 DRAWER CABINET WHITE FINISH         2  12/1/2010 9:32       4.95     17850.0  United Kingdom\n",
       "75     536375     82486    WOOD S/3 CABINET ANT WHITE FINISH         4  12/1/2010 9:32       6.95     17850.0  United Kingdom\n",
       "76     536375     82482    WOODEN PICTURE FRAME WHITE FINISH         6  12/1/2010 9:32       2.10     17850.0  United Kingdom\n",
       "77     536375    82494L          WOODEN FRAME ANTIQUE WHITE          6  12/1/2010 9:32       2.55     17850.0  United Kingdom\n",
       "78     536375    84029G  KNITTED UNION FLAG HOT WATER BOTTLE         6  12/1/2010 9:32       3.39     17850.0  United Kingdom\n",
       "79     536375    84029E       RED WOOLLY HOTTIE WHITE HEART.         6  12/1/2010 9:32       3.39     17850.0  United Kingdom\n",
       "80     536375     22752         SET 7 BABUSHKA NESTING BOXES         2  12/1/2010 9:32       7.65     17850.0  United Kingdom\n",
       "81     536375     21730    GLASS STAR FROSTED T-LIGHT HOLDER         6  12/1/2010 9:32       4.25     17850.0  United Kingdom\n",
       "82     536376     22114    HOT WATER BOTTLE TEA AND SYMPATHY        48  12/1/2010 9:32       3.45     15291.0  United Kingdom\n",
       "83     536376     21733     RED HANGING HEART T-LIGHT HOLDER        64  12/1/2010 9:32       2.55     15291.0  United Kingdom\n",
       "84     536377     22632            HAND WARMER RED POLKA DOT         6  12/1/2010 9:34       1.85     17850.0  United Kingdom\n",
       "85     536377     22633               HAND WARMER UNION JACK         6  12/1/2010 9:34       1.85     17850.0  United Kingdom\n",
       "86     536378     22386              JUMBO BAG PINK POLKADOT        10  12/1/2010 9:37       1.95     14688.0  United Kingdom\n",
       "87     536378    85099C       JUMBO  BAG BAROQUE BLACK WHITE        10  12/1/2010 9:37       1.95     14688.0  United Kingdom\n",
       "88     536378     21033      JUMBO BAG CHARLIE AND LOLA TOYS        10  12/1/2010 9:37       2.95     14688.0  United Kingdom\n",
       "89     536378     20723             STRAWBERRY CHARLOTTE BAG        10  12/1/2010 9:37       0.85     14688.0  United Kingdom\n",
       "90     536378    84997B    RED 3 PIECE RETROSPOT CUTLERY SET        12  12/1/2010 9:37       3.75     14688.0  United Kingdom\n",
       "91     536378    84997C    BLUE 3 PIECE POLKADOT CUTLERY SET         6  12/1/2010 9:37       3.75     14688.0  United Kingdom\n",
       "92     536378     21094        SET/6 RED SPOTTY PAPER PLATES        12  12/1/2010 9:37       0.85     14688.0  United Kingdom\n",
       "93     536378     20725              LUNCH BAG RED RETROSPOT        10  12/1/2010 9:37       1.65     14688.0  United Kingdom\n",
       "94     536378     21559    STRAWBERRY LUNCH BOX WITH CUTLERY         6  12/1/2010 9:37       2.55     14688.0  United Kingdom\n",
       "95     536378     22352    LUNCH BOX WITH CUTLERY RETROSPOT          6  12/1/2010 9:37       2.55     14688.0  United Kingdom\n",
       "96     536378     21212      PACK OF 72 RETROSPOT CAKE CASES       120  12/1/2010 9:37       0.42     14688.0  United Kingdom\n",
       "97     536378     21975       PACK OF 60 DINOSAUR CAKE CASES        24  12/1/2010 9:37       0.55     14688.0  United Kingdom\n",
       "98     536378     21977   PACK OF 60 PINK PAISLEY CAKE CASES        24  12/1/2010 9:37       0.55     14688.0  United Kingdom\n",
       "99     536378     84991          60 TEATIME FAIRY CAKE CASES        24  12/1/2010 9:37       0.55     14688.0  United Kingdom\n",
       "100    536378    84519A      TOMATO CHARLIE+LOLA COASTER SET         6  12/1/2010 9:37       2.95     14688.0  United Kingdom\n",
       "101    536378    85183B  CHARLIE & LOLA WASTEPAPER BIN FLORA        48  12/1/2010 9:37       1.25     14688.0  United Kingdom\n",
       "102    536378    85071B   RED CHARLIE+LOLA PERSONAL DOORSIGN        96  12/1/2010 9:37       0.38     14688.0  United Kingdom\n",
       "103    536378     21931               JUMBO STORAGE BAG SUKI        10  12/1/2010 9:37       1.95     14688.0  United Kingdom\n",
       "104    536378     21929       JUMBO BAG PINK VINTAGE PAISLEY        10  12/1/2010 9:37       1.95     14688.0  United Kingdom\n",
       "105    536380     22961               JAM MAKING SET PRINTED        24  12/1/2010 9:41       1.45     17809.0  United Kingdom\n",
       "106    536381     22139     RETROSPOT TEA SET CERAMIC 11 PC         23  12/1/2010 9:41       4.25     15311.0  United Kingdom\n",
       "107    536381     84854                  GIRLY PINK TOOL SET         5  12/1/2010 9:41       4.95     15311.0  United Kingdom\n",
       "108    536381     22411    JUMBO SHOPPER VINTAGE RED PAISLEY        10  12/1/2010 9:41       1.95     15311.0  United Kingdom\n",
       "109    536381     82567            AIRLINE LOUNGE,METAL SIGN         2  12/1/2010 9:41       2.10     15311.0  United Kingdom\n",
       "110    536381     21672   WHITE SPOT RED CERAMIC DRAWER KNOB         6  12/1/2010 9:41       1.25     15311.0  United Kingdom\n",
       "111    536381     22774    RED DRAWER KNOB ACRYLIC EDWARDIAN        24  12/1/2010 9:41       1.25     15311.0  United Kingdom\n",
       "112    536381     22771  CLEAR DRAWER KNOB ACRYLIC EDWARDIAN        24  12/1/2010 9:41       1.25     15311.0  United Kingdom\n",
       "113    536381     71270                      PHOTO CLIP LINE         1  12/1/2010 9:41       1.25     15311.0  United Kingdom\n",
       "114    536381     22262                FELT EGG COSY CHICKEN         1  12/1/2010 9:41       0.85     15311.0  United Kingdom\n",
       "115    536381     22637                PIGGY BANK RETROSPOT          1  12/1/2010 9:41       2.55     15311.0  United Kingdom\n",
       "116    536381     21934                   SKULL SHOULDER BAG        10  12/1/2010 9:41       1.65     15311.0  United Kingdom\n",
       "117    536381     21169      YOU'RE CONFUSING ME METAL SIGN          3  12/1/2010 9:41       1.69     15311.0  United Kingdom\n",
       "118    536381     21166           COOK WITH WINE METAL SIGN          1  12/1/2010 9:41       1.95     15311.0  United Kingdom\n",
       "119    536381     21175          GIN + TONIC DIET METAL SIGN         2  12/1/2010 9:41       2.10     15311.0  United Kingdom\n",
       "120    536381    37444A      YELLOW BREAKFAST CUP AND SAUCER         1  12/1/2010 9:41       2.95     15311.0  United Kingdom\n",
       "121    536381    37444C       PINK BREAKFAST CUP AND SAUCER          1  12/1/2010 9:41       2.95     15311.0  United Kingdom\n",
       "122    536381     22086      PAPER CHAIN KIT 50'S CHRISTMAS          4  12/1/2010 9:41       2.95     15311.0  United Kingdom\n",
       "123    536381     22083            PAPER CHAIN KIT RETROSPOT         1  12/1/2010 9:41       2.95     15311.0  United Kingdom\n",
       "124    536381    84971S            SMALL HEART FLOWERS HOOK          6  12/1/2010 9:41       0.85     15311.0  United Kingdom\n",
       "125    536381     71270                      PHOTO CLIP LINE         3  12/1/2010 9:41       1.25     15311.0  United Kingdom\n",
       "126    536381     47580                TEA TIME DES TEA COSY         2  12/1/2010 9:41       2.55     15311.0  United Kingdom\n",
       "127    536381     22261          FELT EGG COSY WHITE RABBIT          1  12/1/2010 9:41       0.85     15311.0  United Kingdom\n",
       "128    536381     84832     ZINC WILLIE WINKIE  CANDLE STICK         1  12/1/2010 9:41       0.85     15311.0  United Kingdom\n",
       "129    536381     22644       CERAMIC CHERRY CAKE MONEY BANK         1  12/1/2010 9:41       1.45     15311.0  United Kingdom\n",
       "130    536381     21533             RETROSPOT LARGE MILK JUG         1  12/1/2010 9:41       4.95     15311.0  United Kingdom\n",
       "131    536381     21557               SET OF 6 FUNKY BEAKERS         2  12/1/2010 9:41       2.95     15311.0  United Kingdom\n",
       "132    536381   15056BL              EDWARDIAN PARASOL BLACK         2  12/1/2010 9:41       5.95     15311.0  United Kingdom\n",
       "133    536381    15056N            EDWARDIAN PARASOL NATURAL         2  12/1/2010 9:41       5.95     15311.0  United Kingdom\n",
       "134    536381     22646   CERAMIC STRAWBERRY CAKE MONEY BANK         4  12/1/2010 9:41       1.45     15311.0  United Kingdom\n",
       "135    536381     22176                    BLUE OWL SOFT TOY         1  12/1/2010 9:41       2.95     15311.0  United Kingdom\n",
       "136    536381     22438    BALLOON ART MAKE YOUR OWN FLOWERS         1  12/1/2010 9:41       1.95     15311.0  United Kingdom\n",
       "137    536381     21731        RED TOADSTOOL LED NIGHT LIGHT         2  12/1/2010 9:41       1.65     15311.0  United Kingdom\n",
       "138    536381     22778                   GLASS CLOCHE SMALL         3  12/1/2010 9:41       3.95     15311.0  United Kingdom\n",
       "139    536381     22719         GUMBALL MONOCHROME COAT RACK        36  12/1/2010 9:41       1.06     15311.0  United Kingdom\n",
       "140    536381     21523   DOORMAT FANCY FONT HOME SWEET HOME        10  12/1/2010 9:41       6.75     15311.0  United Kingdom\n",
       "141   C536379         D                             Discount        -1  12/1/2010 9:41      27.50     14527.0  United Kingdom\n",
       "142    536382     10002          INFLATABLE POLITICAL GLOBE         12  12/1/2010 9:45       0.85     16098.0  United Kingdom\n",
       "143    536382     21912             VINTAGE SNAKES & LADDERS         8  12/1/2010 9:45       3.75     16098.0  United Kingdom\n",
       "144    536382     21832                 CHOCOLATE CALCULATOR        12  12/1/2010 9:45       1.65     16098.0  United Kingdom\n",
       "145    536382     22411    JUMBO SHOPPER VINTAGE RED PAISLEY        10  12/1/2010 9:45       1.95     16098.0  United Kingdom\n",
       "146    536382     22379             RECYCLING BAG RETROSPOT         10  12/1/2010 9:45       2.10     16098.0  United Kingdom\n",
       "147    536382     22381               TOY TIDY PINK POLKADOT        50  12/1/2010 9:45       1.85     16098.0  United Kingdom\n",
       "148    536382     22798     ANTIQUE GLASS DRESSING TABLE POT         8  12/1/2010 9:45       2.95     16098.0  United Kingdom\n",
       "149    536382     22726           ALARM CLOCK BAKELIKE GREEN         4  12/1/2010 9:45       3.75     16098.0  United Kingdom\n",
       "150    536382     22926       IVORY GIANT GARDEN THERMOMETER        12  12/1/2010 9:45       5.95     16098.0  United Kingdom\n",
       "151    536382     22839      3 TIER CAKE TIN GREEN AND CREAM         2  12/1/2010 9:45      14.95     16098.0  United Kingdom\n",
       "152    536382     22838        3 TIER CAKE TIN RED AND CREAM         2  12/1/2010 9:45      14.95     16098.0  United Kingdom\n",
       "153    536382     22783     SET 3 WICKER OVAL BASKETS W LIDS         4  12/1/2010 9:45      16.95     16098.0  United Kingdom\n",
       "154   C536383    35004C      SET OF 3 COLOURED  FLYING DUCKS        -1  12/1/2010 9:49       4.65     15311.0  United Kingdom"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "N = digitos_boleta % 100 + 100\n",
    "df_visualizacion = df.head(N).copy()\n",
    "print(f\"N = {digitos_boleta} % 100 + 100 = {N}\")\n",
    "print(\"df_visualizacion se limita a la presentación; la limpieza continúa sobre df completo.\")\n",
    "display(df_visualizacion)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a8dc4bf",
   "metadata": {},
   "source": [
    "## Punto 3. Limpieza de valores nulos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b1a277db",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:16.221949Z",
     "iopub.status.busy": "2026-09-06T23:48:16.221845Z",
     "iopub.status.idle": "2026-09-06T23:48:16.486193Z",
     "shell.execute_reply": "2026-09-06T23:48:16.485722Z"
    }
   },
   "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>Nulos</th>\n",
       "      <th>Porcentaje</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>InvoiceNo</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>StockCode</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Description</th>\n",
       "      <td>1454</td>\n",
       "      <td>0.268311</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantity</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>InvoiceDate</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UnitPrice</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CustomerID</th>\n",
       "      <td>135080</td>\n",
       "      <td>24.926694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Country</th>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Nulos  Porcentaje\n",
       "InvoiceNo         0    0.000000\n",
       "StockCode         0    0.000000\n",
       "Description    1454    0.268311\n",
       "Quantity          0    0.000000\n",
       "InvoiceDate       0    0.000000\n",
       "UnitPrice         0    0.000000\n",
       "CustomerID   135080   24.926694\n",
       "Country           0    0.000000"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CustomerID imputados con 10155: 135,080\n",
      "Description imputadas con NO_DESCRIPCION_0155: 1,454\n",
      "Filas eliminadas por InvoiceNo nulo: 0\n",
      "Filas restantes: 541,909\n"
     ]
    }
   ],
   "source": [
    "nulos_conteo_inicial = df.isna().sum()\n",
    "nulos_porcentaje_inicial = (nulos_conteo_inicial / len(df) * 100).round(6)\n",
    "reporte_nulos = pd.DataFrame({\"Nulos\": nulos_conteo_inicial, \"Porcentaje\": nulos_porcentaje_inicial})\n",
    "display(reporte_nulos)\n",
    "\n",
    "nulos_customer = int(df[\"CustomerID\"].isna().sum())\n",
    "nulos_description = int(df[\"Description\"].isna().sum())\n",
    "nulos_invoice = int(df[\"InvoiceNo\"].isna().sum())\n",
    "\n",
    "# 155 es impar: la estrategia asignada es imputar CustomerID con 10000 + 155 = 10155.\n",
    "customer_id_imputado = 10000 + digitos_boleta\n",
    "df[\"CustomerID\"] = df[\"CustomerID\"].fillna(customer_id_imputado).astype(\"Int64\")\n",
    "df[\"Description\"] = df[\"Description\"].fillna(f\"NO_DESCRIPCION_{identificador}\")\n",
    "df = df.dropna(subset=[\"InvoiceNo\"]).copy()\n",
    "\n",
    "print(f\"CustomerID imputados con {customer_id_imputado}: {nulos_customer:,}\")\n",
    "print(f\"Description imputadas con NO_DESCRIPCION_{identificador}: {nulos_description:,}\")\n",
    "print(f\"Filas eliminadas por InvoiceNo nulo: {nulos_invoice:,}\")\n",
    "print(f\"Filas restantes: {len(df):,}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a4b73c7",
   "metadata": {},
   "source": [
    "## Punto 4. Duplicados y redundancia"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6728cae7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:16.487647Z",
     "iopub.status.busy": "2026-09-06T23:48:16.487494Z",
     "iopub.status.idle": "2026-09-06T23:48:16.819017Z",
     "shell.execute_reply": "2026-09-06T23:48:16.818445Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Duplicados exactos detectados: 5,268\n",
      "Antes: 541,909 | Después: 531,225\n",
      "Eliminados por clave ['InvoiceNo', 'StockCode', 'CustomerID']: 10,684 (1.971549%)\n"
     ]
    }
   ],
   "source": [
    "# La columna de auditoría se agrega sin alterar la definición de duplicado exacto.\n",
    "df[\"Fila_Original\"] = df.index.astype(\"int64\") + 1  # posición ordinal del registro en el CSV\n",
    "duplicados_exactos = int(df.duplicated(subset=columnas_fuente, keep=\"first\").sum())\n",
    "filas_antes_duplicados = len(df)\n",
    "clave_negocio = [\"InvoiceNo\", \"StockCode\", \"CustomerID\"]\n",
    "\n",
    "# 155 es impar: se conserva la primera fila por la clave crítica indicada.\n",
    "df = df.drop_duplicates(subset=clave_negocio, keep=\"first\").copy()\n",
    "filas_despues_duplicados = len(df)\n",
    "eliminadas_redundancia = filas_antes_duplicados - filas_despues_duplicados\n",
    "porcentaje_redundancia = eliminadas_redundancia / filas_antes_duplicados * 100\n",
    "\n",
    "print(f\"Duplicados exactos detectados: {duplicados_exactos:,}\")\n",
    "print(f\"Antes: {filas_antes_duplicados:,} | Después: {filas_despues_duplicados:,}\")\n",
    "print(f\"Eliminados por clave {clave_negocio}: {eliminadas_redundancia:,} ({porcentaje_redundancia:.6f}%)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44f80a6b",
   "metadata": {},
   "source": [
    "## Punto 5. Validación y corrección de tipos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5cc10ec1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:16.820140Z",
     "iopub.status.busy": "2026-09-06T23:48:16.820034Z",
     "iopub.status.idle": "2026-09-06T23:48:17.013467Z",
     "shell.execute_reply": "2026-09-06T23:48:17.012956Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "InvoiceDate           datetime64[ns]\n",
      "Quantity                       int64\n",
      "UnitPrice                    float64\n",
      "Transaccion_Valida              bool\n",
      "Es_Cancelacion               boolean\n",
      "dtype: object\n",
      "Fechas no convertibles: 0\n",
      "Transacciones válidas (criterio original): 519,582\n",
      "Registros de cancelación: 9,139\n"
     ]
    }
   ],
   "source": [
    "df[\"InvoiceDate\"] = pd.to_datetime(df[\"InvoiceDate\"], format=\"%m/%d/%Y %H:%M\", errors=\"coerce\")\n",
    "df[\"Quantity\"] = pd.to_numeric(df[\"Quantity\"], errors=\"coerce\")\n",
    "df[\"UnitPrice\"] = pd.to_numeric(df[\"UnitPrice\"], errors=\"coerce\")\n",
    "\n",
    "# Se preservan los valores de origen antes del capping para auditar devoluciones y ventas.\n",
    "df[\"Quantity_Original\"] = df[\"Quantity\"]\n",
    "df[\"UnitPrice_Original\"] = df[\"UnitPrice\"]\n",
    "df[\"Total_Transaccion_Original\"] = df[\"Quantity_Original\"] * df[\"UnitPrice_Original\"]\n",
    "df[\"Transaccion_Valida\"] = (df[\"Quantity_Original\"] > 0) & (df[\"UnitPrice_Original\"] > 0)\n",
    "df[\"Es_Cancelacion\"] = df[\"InvoiceNo\"].str.upper().str.startswith(\"C\", na=False)\n",
    "\n",
    "print(df[[\"InvoiceDate\", \"Quantity\", \"UnitPrice\", \"Transaccion_Valida\", \"Es_Cancelacion\"]].dtypes)\n",
    "print(f\"Fechas no convertibles: {df['InvoiceDate'].isna().sum():,}\")\n",
    "print(f\"Transacciones válidas (criterio original): {df['Transaccion_Valida'].sum():,}\")\n",
    "print(f\"Registros de cancelación: {df['Es_Cancelacion'].sum():,}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd991712",
   "metadata": {},
   "source": [
    "## Punto 6. Detección y manejo de outliers\n",
    "\n",
    "El IQR se usa para **detectar** valores atípicos. Como el último dígito es 5, la corrección asignada consiste en limitar `Quantity` a los percentiles 5 y 95. Esta transformación es útil para comparar distribuciones, pero altera el significado de cantidades negativas. Por eso se conservan `Quantity_Original`, `Total_Transaccion_Original`, `Transaccion_Valida` y `Es_Cancelacion`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "1b4c0c80",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:17.014645Z",
     "iopub.status.busy": "2026-09-06T23:48:17.014531Z",
     "iopub.status.idle": "2026-09-06T23:48:17.048277Z",
     "shell.execute_reply": "2026-09-06T23:48:17.047782Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Q1=1, Q3=10, IQR=9; límites IQR=[-12.5, 23.5]\n",
      "Outliers detectados por IQR: 58,337\n",
      "Capping p5=1, p95=30; filas modificadas: 36,222\n",
      "Cancelaciones afectadas por capping: 9,139\n",
      "Cantidades negativas convertidas a positivas: 10,475 de 10,475\n"
     ]
    }
   ],
   "source": [
    "Q1 = df[\"Quantity_Original\"].quantile(0.25)\n",
    "Q3 = df[\"Quantity_Original\"].quantile(0.75)\n",
    "IQR = Q3 - Q1\n",
    "limite_inferior_iqr = Q1 - 1.5 * IQR\n",
    "limite_superior_iqr = Q3 + 1.5 * IQR\n",
    "mascara_outlier_iqr = ~df[\"Quantity_Original\"].between(limite_inferior_iqr, limite_superior_iqr)\n",
    "outliers_iqr = int(mascara_outlier_iqr.sum())\n",
    "\n",
    "p5 = df[\"Quantity_Original\"].quantile(0.05)\n",
    "p95 = df[\"Quantity_Original\"].quantile(0.95)\n",
    "df[\"Quantity\"] = df[\"Quantity_Original\"].clip(lower=p5, upper=p95)\n",
    "df[\"Cantidad_Capeada\"] = df[\"Quantity\"].ne(df[\"Quantity_Original\"])\n",
    "df[\"Total_Transaccion\"] = df[\"Quantity\"] * df[\"UnitPrice\"]\n",
    "df[\"Transaccion_Valida_Ajustada\"] = (df[\"Quantity\"] > 0) & (df[\"UnitPrice\"] > 0)\n",
    "\n",
    "filas_capeadas = int(df[\"Cantidad_Capeada\"].sum())\n",
    "cancelaciones_capeadas = int((df[\"Cantidad_Capeada\"] & df[\"Es_Cancelacion\"]).sum())\n",
    "negativas_originales = int((df[\"Quantity_Original\"] < 0).sum())\n",
    "negativas_convertidas_positivas = int(((df[\"Quantity_Original\"] < 0) & (df[\"Quantity\"] > 0)).sum())\n",
    "\n",
    "print(f\"Q1={Q1:g}, Q3={Q3:g}, IQR={IQR:g}; límites IQR=[{limite_inferior_iqr:g}, {limite_superior_iqr:g}]\")\n",
    "print(f\"Outliers detectados por IQR: {outliers_iqr:,}\")\n",
    "print(f\"Capping p5={p5:g}, p95={p95:g}; filas modificadas: {filas_capeadas:,}\")\n",
    "print(f\"Cancelaciones afectadas por capping: {cancelaciones_capeadas:,}\")\n",
    "print(f\"Cantidades negativas convertidas a positivas: {negativas_convertidas_positivas:,} de {negativas_originales:,}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ef995063",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:17.049623Z",
     "iopub.status.busy": "2026-09-06T23:48:17.049505Z",
     "iopub.status.idle": "2026-09-06T23:48:18.466271Z",
     "shell.execute_reply": "2026-09-06T23:48:18.465761Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABD8AAAGdCAYAAAAVJdgMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcZFJREFUeJzt3Xl4Dff7//FXEgmCNPZdrRE7tTSlm61U7UVb3WxFlWrpQpWiRbWqSvVDq2hrX1pa1NLaVZRGUbtISCwJIiKJyDa/P75yfo5zIieR5CTj+biuXpU598zc85713GfmPS6GYRgCAAAAAAAwKVdnJwAAAAAAAJCVKH4AAAAAAABTo/gBAAAAAABMjeIHAAAAAAAwNYofAAAAAADA1Ch+AAAAAAAAU6P4AQAAAAAATI3iBwAAAAAAMDWKHwCQi/3www/66KOPFBYW5uxUACBbbNmyRWPGjNG+ffucnQoAIBfJ4+wEAOQO8fHx+uSTT6yG5c2bV4UKFVL58uVVt25dValSxe64V69e1ZdffqlatWrpueeey6aM057/+fPnNWvWLDVs2FCdOnXK9rzsSU9bbd++XRMnTlS/fv1UsmTJbMvxTpMmTZKnp6eGDh3qtBxyioxu69nRhqwnc7tf1m9YWJjee+89Va9eXfXr18/WeWdGGzv7fOgM9+MyA8iZuPMDgEMSEhK0dOlSq/9+/PFHzZw5UyNGjFC7du3UpUsXbd++3WbcmJgYLV26VLt27crQvC9fvqwxY8Zo5cqVGRo/tflfuXJFS5cu1d9//52h6WYFR9vq2rVr+vDDD9W0aVMNGzYs2/KzZ+XKlVqzZo1Tc8guaW2LGd3Ws6MN75f1dK/Hi9zqflm/H3zwgTw9PfXVV18pT57s/Q0vM9r4Xs+HudH9uMwAcibu/ACQLp6ennrvvfckSUlJSYqKitLJkye1Y8cOHTlyRK+99ppGjhypXr16Wcbx9vbW2LFjVaFChQzN89q1a1q6dKliY2P17LPPpnv8e51/dnI01/HjxytPnjyaOnWq3Nzcsi2/+11a22Ju2tbM6l6PF8i5Fi1apL///lsLFixQ0aJFnZ0OHMRxEUBOQfEDQLp4eHjohRdesBkeGxurTz/9VEuXLtXkyZPVqFEj1a5dW5JUsGBBu+NkF2fPPz0cyTU6OlqNGzfWoEGDVLhw4WzLDWnLTdsakNsUKFBA3333nerVq+fsVJAOHBcB5BQUPwBkCk9PT40fP17h4eHasmWL5syZo2nTpklpPO+bmJioP/74Q6dOndL169dVunRpNWzYUHXq1JEkbdu2TatWrZIkHTp0SGPGjLGM2717d9WpU8em746///5bu3fv1tWrV9W/f3/lz5/foeeNd+7cqb///lvx8fGqXbu22rRpI3d3d6uYY8eOadGiRWrZsqWeeOIJm2lMmDBBXl5eGjJkiM1nhmFo9+7dCggI0LVr11S6dGn5+fmpZs2alpi0no2OjY3Vn3/+qbNnzyooKEgVKlRQ69atVaJECau4O9tk37592rFjh27cuKHq1aurffv2yps3b6ptYU94eLjWrVunc+fOqVixYmrbtq0efPDBu46TnJysv/76SwEBAYqKilKRIkX06KOPqm7duumatyNtl+Lo0aPat2+fQkND5e7urho1aqhVq1Y2y5veNnJkW0xr/WWkDR1dnnuZR3rWU1r7rCOcuY6yc5mPHz+uhQsXqlGjRurYsaPdmG+//Vbnzp3Tu+++q4IFC6bZdjlh/d65XrL62JmS/5kzZ3To0CEFBARk6fbpzGNdarLjGOjIeszIOI72u5We81RYWJh+//13m3V0v/R9AyBjKH4AyFSvvfaatmzZor/++kuGYcjFxcXyvG+bNm2sLnyCgoLUt29fnTt3zmY6bdu21VdffaXDhw9r3bp1kqTg4GAFBwdbYh5++GHVqVPH0ndHYmKidu7cqV9//dUS8+yzz6pw4cJ255/CMAwNGzZMa9eutRr+/fffa86cOVa3V4eGhmrp0qUqVaqU3Qv4FStWqGTJkjYX8GfPntXQoUN15MgRm3Fefvllffjhh9Jtz0bby3X//v0aMmSILl26ZDX8888/19ixY9W5c2fLsJQ2SUpKUkBAgJYsWWI1zvz587Vo0SIVKlTIJh97duzYoaFDhyomJsYybMaMGfr0009THSckJERvvvmmzTJ/9dVXat++vT799FObi2R7HG275ORkde/eXf/9959NXNmyZfXdd99Zdcqb3jZyZFu82/pLbxumd3kyMg+lcz05ss/eTU5YR9m5zA8++KDWr1+vzZs3q127djZ9VJw/f15ffvmlHnroIYcKHzll/d5+zN22bVuWHjuzc/uUk491qcnqY2B61mNGxkntuJjR89S2bdv01ltvKTY21jJsxowZmjx5slauXKnChQtT/ABgF8UPAJmqbt26cnd317Vr1xQeHn7Xt5B88cUXOnfunKpWraqnnnpK3t7eunjxov755x8dP35ckvTEE08oOTlZM2bMUN26ddW1a1fL+Hf+krdx40ZFR0frmWeeUa1ateTp6amyZctaXSDZkzLe008/rdq1ays8PFyrVq3SkSNH9N577+n777+/pzaJjo5Wnz59FBISIm9vb7Vr107ly5fXpUuX5O/vr1OnTqU5jUuXLmngwIGKjIxUlSpV1Lp1a+XLl087d+7Uvn37NHLkSJUrV06NGjWyu2zt27dXzZo1dfXqVS1btkwnTpzQt99+q+HDh6c577CwML311luKiYlRrVq11Lx5c0nS5s2bNWrUKCUlJdmMExMTo379+ik4OFgPPfSQmjZtKi8vL128eFFr167VmjVrVKZMmTTnn562S05O1n///afGjRurTp06KlWqlK5du6Zt27bpv//+07Bhw7R69WqbeTjaRunZFjOjDdO7PNmxnhzZZ+8mJ6yj7FzmfPnyqUuXLpo/f762bt2qVq1aWX2+YsUKJScn68UXX0yz7XLi+s3qY2d2b5/OPNalJjuPgelZj5m57tNznrp48aLefvttxcbGqnbt2pZ1tGXLFn3wwQd21xEAWBgA4IDo6GjDx8fHaNKkSZqxzZo1M3x8fIzjx48bhmEYISEhho+PjzFkyBCruPbt2xt169Y1YmJibKZx7Ngxy79PnTpl+Pj4GMOHD7c7v4MHDxo+Pj6Gj4+PsW7dOpvPU5v/7eMtX77c6rPQ0FCjUaNGho+Pj/Hff/9Zhm/atMnw8fExZs6caTeX+vXrG23atLEaNnv2bMPHx8fo0KGDERERYTPOyZMn08x12rRpho+Pj/Hyyy8bcXFxluHJycnGmDFjDB8fH6NPnz42y1a9enVj69atVtM6dOiQ4ePjY7Rv397uMtxp6tSpho+PjzFw4EAjISHBMjw+Pt7o37+/4ePjY7Rq1cpqnLlz56baTpGRkUbz5s2N+vXrG/Hx8Xedd3raLjk52Th69KhNTHJysjFkyBDDx8fHOHz4sGV4RtoorW0xtfWXkTZM7/Jkx3pydJ9NTU5YR9m9zEFBQUb16tWNfv36WQ1PTEw0Hn/8caNZs2Zp7gdGDlu/2XXszO51lR1tnNoxIjXZcQxMz3rMyDhpnYPTs39/8cUXlmklJiZahicmJhqDBg2yu44AIAV3fgDIdImJiZKU5ltIqlevrlOnTumff/7RY489ZvNZelWvXl1PP/10userXLmyunXrZjWsbNmy6tmzp2bNmqXdu3erVq1a6Z5uim3btkmSRo4cabeD0qpVq6Y5jd27d0uS3nrrLatnoF1cXPTOO+9o5cqV2rt3rxITE61urW/QoIHNLea1a9dW8eLFdeHCBYfy37NnjyTp7bfftpq2u7u7hg0bpq1bt9qMs2XLFunW7eDjx4+XYRjSrUeMDMOQu7u7YmNjdfbsWZtHN26XnrZzcXGRr6+vDh06pL///lthYWG6efOmDMPQlStXJEknTpyweUY+M9ooLRlpw/QuT3asp3vdZ3PCOsruZa5YsaKaNm2qnTt36vz58ypTpox0a9u+ePGiBg8e7NAjETlx/Wb1sTO715Uzj3WpyY5jYEbWY2au+/Ts3ynraOjQoVbXGG5ubnrrrbf0xx9/ODRPAPcnih8AMlVsbKyioqIkKc03kbzzzjs6e/as+vXrp1KlSql+/fqqV6+eWrZsmWbncvY4UkSwx8fHx+7wlIvlsLCwDE03RcrFW3o63LtTSg6+vr42nxUqVEjly5fX6dOndfXqVRUvXtzyWcWKFe1Oz9vbW2fOnHF43nny5LF74V61alWbfgx06/l+Sfr555/vOu3o6Oi7fp6etrt586aGDRt214vf25/jT5EZbZSWjLRhepcnO9bTve6zOWEdZfcyS1LPnj21a9cuLV++3NIXwbJly5QnT567dsJ8u5y4frP62Jnd68qZx7rUZMcxMCPrMTPXfXr27/DwcLm7u9sdp3LlynbXEQCk4AgBIFPt3r1bSUlJKl26tIoUKXLX2FKlSmnZsmU6cuSI/P39dfjwYc2bN0+fffaZevXqpREjRqRr3vnz589QzgkJCXaHx8fHSw7cwZLCMAy703J1dbWaXkakTCO9uaaMdy9cXFyUnJyspKQkm+knJSUpOTnZ7jiS9MEHH8jDwyPVaZcrV+6u805P233//ff6448/VKRIET311FMqX7688ufPL1dXVwUEBOjXX3+1/Cprbx5ZKSNtmN7lyY71dK/7bE5YR9m9zJLUvHlzlS5dWitXrtTgwYN1+fJlbd++XU899ZTNm5rulndOW79ZfezM7nXlzGNdarLjGJiR9ZhZ617p3L9dXFyUlJSUrnUEACkofgDINPHx8Zo5c6YkqWXLlg6PV7NmTcttuMnJyXrnnXc0b948tWrVSo0aNbJcGNm7aMsMhw8fVkJCgs2t5wcOHJAklS9f3jIsX7580q1e6u90+vRpuxeEFStWVEhIiPz9/dWuXbsM5Vi+fHmFhoZq//79evLJJ60+u3jxoi5cuKCCBQvK29s7Q9NPa97nzp3TwYMHbTpUPXDggN2LzYoVKyo0NFSVKlXS448/nuF5p6ftdu7cKUlavHixza+CZ8+ezXAOt8votpiRNkzv8mTnekprn01NTlhH2b3MuvVFsEePHvrqq6+0bds2HTlyRElJSQ51dJoiJ67f7Dh2Zue6cuaxLjXZcQxMz3q8l3EyQ7ly5XTu3DkdPnxYDRo0sPrs0KFDFD8A3FXW/9wF4L5w8uRJ9e3bV4cPH1aBAgXUt2/fNMdZvny5IiMjrYa5urpaLpJTXlPp6ekp3XotZFa4ePGipk2bZvVlae/evVq+fLlcXFysLmhTbp3esGGDVe7Xr1/X+PHj7U6/bdu2kqSJEyfq8OHDVp9FR0dr8+bNaeaYUvD47LPPdPHiRcvwmJgYjR49WklJSXriiSey5C6GlHl/+umnioiIsAyPiIjQpEmT7I6TcpH+0Ucf6cSJEzafh4eH67fffktz3ulpu5S+UO68vXzv3r1avHhxmvNyREa3xYy0YXqXJzvWk6P7bGpywjrK7mVO0aNHD7m7u2vJkiVauXKlfHx81LhxY4eXKyeu36w+dmb3unLmsS412XEMTM96vJdxMkPKdCdPnqxr165ZhkdGRmry5MlZMk8A5sGdHwDS5caNGxozZox06xe1qKgonTx5UqdPn5ZuffGYNm2apVO/u5k8ebLGjx+vGjVqqHz58nJzc9OxY8d0/Phxubm5WX7VKVmypIoWLaqAgAD16tVL5cuXl4uLi7p3735P/WikKFu2rObMmaMtW7aoZs2aCg8P1759+5SUlKQePXpY/YJVvnx51a1bVwcPHlS7du308MMPKyEhQf/884/y5s1rt+PCzp07a+XKlQoICFC3bt1Uv359lS9fXpcvX9bBgwdVu3ZttWjR4q45du/eXYsWLVJgYKCeeeYZNWrUSPny5VNAQIDCw8Pl6empwYMH33NbpDbvn376SYcOHVK7du3UqFEjGYahffv2KU+ePFYdsN6+zL/++qv8/f3VsWNH1a9fX+XKlVN8fLxCQ0N17NgxVatWTR06dLjrvNPTdo888oj++usvvfjii5bXTZ45c0b79+9X+fLlFRIScs9tkdFtMSNtmN7lyY715Og+m5qcsI6ye5lTFCtWTK1bt9a6deskSePGjUvXcuXE9Zsdx87sXFfOPNalJjuOgelZj/cyTmZ47rnn9OOPP2r//v1q27atZR39888/cnNzU968ebPlUUYAuRNHBwDpcvPmTS1dulRLly7V8uXLtWHDBp0+fVqenp7q2rWrfv31V4d/8enevbs8PT114MABrVmzRqtXr9bx48dVunRpTZkyxarTuWHDhsnNzU27d+/WsmXLtHTp0ky7Tf6RRx7R22+/raCgIP3222/as2ePkpKS1L59e40ePdom/tNPP1XZsmV15coVrVu3Tps2bZKnp6dmz55t9wI+T548+u6779SxY0dJUkBAgFavXq1du3ZJDj4iVKBAAc2bN08NGjRQdHS0tm7dqvXr1ys8PFwVKlTQ999/r8qVK2dKe9ypYMGC+u6771S5cmVdvXpVmzZt0h9//KE8efLo66+/tvucu5ubm2bPnq0XX3xRefLk0f79+/Xbb79pw4YNOnz4sIoVK2Zpj7tJT9v17t1bTz31lOLi4rR582atWrVK+/fvV9euXTVgwIBMa4+MbIsZacP0Lk92rKf07LP25IR1lN3LfLuePXtKtzopdmT7v11OXL9ZfezM7nXlzGNdarLjGJje9ZjRcTJDoUKFNGfOHFWsWFERERHauHGjNm3aJDc3N02bNk2JiYmWu78A4E4uRlY9RA/AVBITE7V8+XKrYR4eHpY3jVSrVi3VXtajo6P122+/qUKFCmrWrJnVZ/Hx8Tp69KhCQkLk4uKi0qVLq169enY7SwsLC1NAQICioqKUnJysZs2aqUKFCoqIiNCGDRtUpUoVNWnSxOH53znexYsXFRAQoPj4eNWuXfuub4+5efOm9uzZo/DwcJUqVUoPP/yw3N3dtXz5chUoUCDVZ7PDwsJ04MABRUdHq3Tp0qpTp44KFizoUFulSPklMzk5WRUqVFC9evVs2j6tNlm3bp1iYmLUvXv3VJfxTomJidq3b5/OnTunYsWKyc/PT3nz5tXKlSuVN29etW/f3u54165d07///qvLly/Ly8tLZcuWla+vb7p/nUur7VIcO3ZMJ0+elKurq+rWrWt5E86ePXvUqFEjVatW7Z7bKLVtMa31l5E2dHR57mUeSsd6Ss8+mxpnriNnLbMknTp1Ss8884xeeeUVjRo1Kl3jpsgJ6/fQoUPq1q2bunXrpgkTJmTLsTM711VWtrEjx/jUZPYxMCPrMSPjOHoOvtPd9u+EhATt27dP58+fV7FixfTII4/o2LFj6t69u9q0aaPp06enq20B3B8ofgAAAGSDQYMG6c8//9Rvv/2W6qtCc4M7vwAjd8rIeswJ637Pnj2qUaOGvLy8LMOuXLmiQYMG6d9//9XYsWP1wgsvOCU3ADkbfX4AAABkkd27d+v333/XiRMntH//fvn5+eXqwgfgbGvXrtWAAQNUp04dlS1bVpcuXdL+/fsVExOjsmXL3tNjRgDMjeIHAABAFjl+/LiWLl0qSfL29taHH37o7JSAXM3Pz0/r16/X33//bTW8Zs2amjp1qgoUKOC03ADkbDz2AgAAkEWOHz+ugIAAFS5cWH5+fvL29nZ2Svcsrb4akDtkZD3mlHV/8+ZN/ffffwoNDZWLi4uqVq2qGjVqyMXFxWk5Acj5KH4AAAAAAABT41W3AAAAAADA1Ch+AAAAAAAAU6P4AQAAAAAATI3iBwAAAAAAMDWKHwAAAAAAwNQofgAAAAAAAFOj+AEAAAAAAEyN4gcAAAAAADA1ih8AAAAAAMDUKH4AAAAAAABTo/gBAAAAAABMjeIHAAAAAAAwNYofAAAAAADA1Ch+AAAAAAAAU6P4AQAAAAAATI3iBwAAAAAAMDWKHwAAAAAAwNQofgAAAAAAAFOj+AEAAAAAAEyN4gcAAAAAADA1ih8AAAAAAMDUKH4AAAAAAABTo/gBAAAAAABMjeIHAAAAAAAwNYofAAAAAADA1Ch+AAAAAAAAU6P4AQAAAGST69ev6+jRo7p+/bqzUwGA+4qLYRiGs5MAcH8KDg6Wq6urKlSo4OxUHHKv+WbX8ua2dgWA+0ViYqJeeeUVubm56fvvv5eHh4ezU3KauLg4BQUFqVy5cipUqJCz0wFwH6D4AdMICwtTRESESpUqpcKFC9/z9E6fPi13d3eVL18+U/LLbIZh6MKFC7px44aKFSumBx54wNkp2XW3duzRo4c8PT01f/58h+KdzV6+2Tl+TpsPAGSW+Ph4BQYGWv52c3NTwYIFVbx4cbm7uzs1t8w0ceJE+fv7a+HChff9F/5Dhw6pW7dumjlzplq1auXsdNJ07Ngx2fva5O3trdKlS2fqvGJjY3X27FkVKFDAKddDly5dUlRUlEqWLKmCBQvajcnO9oiMjFRkZKRKliyp/Pnz3zU2OjpaYWFhKly4sIoUKZKpeSD3y+PsBIDM8vrrr+vw4cPq0KGDpkyZcs/Te/vtt1WsWDF9//33mZJfZomJidE333yjlStXytXVVQ888IDOnz+vKlWq6I033lDLli2dnaKVu7VjxYoVlS9fPofjnc1evtk5PgCY1YULF9S5c2cVLVpUxYsXl2EYun79uq5cuaIaNWro2WefVbdu3eTqmnuf2D548KCOHDmiOXPm3PeFD0nKnz+/fH19U/1yndN07dpVXl5eKlmypNXw1q1ba/DgwZkyj40bN2rNmjXau3evrl69qieeeEKzZ8/OlGk74tChQ/roo4908uRJlSxZUhcvXlSbNm00duxYm202q9sjPj5eP/30k5YsWaLY2Fjlz59fFy5cUJMmTfTOO++oVq1aVvE3btzQ+PHjtW7dOpUuXVphYWF66KGHNHHiRJsccf+i+AFTOHz4sA4fPqzatWtr48aNunbtWo69E+JeREdH66WXXtLly5f1xRdfqFmzZtKtXwi++eYbDRo0SO+8845ee+01Z6fqkM8++8zZKaTLveab25YXALJb165d9c4771j+joqK0vLly/XJJ59ozZo1+u6775Q3b16n5phRdevW1YIFC5ydRo5RtWpVrV692tlppEuHDh00atSoLJv+1q1b1a5dO3322Wdq3Lhxls3HnnPnzql3796qUaOGdu3aJS8vL50+fVq9e/fW0KFDNXfuXJtxsrI9IiIidOPGDf30008qVaqUJceBAweqV69e2rBhg9WdHR9++KF27typlStXqmrVqoqIiFCvXr00YMAArVy5Um5ublmSJ3KX3Fs+B26zbNkyFS9eXNOnT1dSUlKqJ9PAwECFhIRIkhISEhQUFKQrV67YxB0/flxxcXGKiYnR0aNHdfToUZ06dcomLikpSWfPntXp06eVkJBgd55JSUm6ePGiQkJClJycbPN5ZGSkjh49qmvXrqW5nBMmTNCJEyf0v//9z1L4kCRPT0+98847eu655zR16lQdOHDAalnCwsJsphUSEmJ1i3HKsJTlTW08ZWI7BgcH6+zZsw7FBwYGKjg42G4+ly9f1tGjR1NdB7eLi4tTYGCgzp0759CyBQcH6+LFi3bzvV1ERIROnz6t+Ph4SVJoaKhN+9ob39G2VDrWDwCYhZeXl/r27atPP/1Ue/bs0fTp0+3GXb9+XYGBgQoPD091WjExMQoKCrJ7vk0578TExEi3HdPtnVdSztspx/sUCQkJOnr0qCIiIrIkR916NPT48eOpjm9PdHS0AgMDbTpYTck35b/AwEDFxsbazcnRtklPbFxcnE3Hr3eOHxkZqcDAQJu2vl1ycrKCg4Mt58TExMS7roeM5JpdJk6cqLZt22baXaLpWcbFixfr+vXrGj16tLy8vCRJlStX1qBBg7Rr1y7t3r07U3JyVKlSpTR48GBL4UOSypYtq1dffVVRUVHat2+fZfipU6e0Zs0a9e3bV1WrVpUkFSlSRO+++66OHj2qDRs2ZGvuyLm48wO53o0bN7R27Vq9/PLLKlu2rFq2bKnly5frlVdesYl94403VLlyZb3wwgsaO3asJOn8+fNq1aqVpkyZYvk1ady4cbpw4YIuXbqkESNGSJJKlCih7777Trp1op01a5bmz58vV1dXeXh4KDY2VoMGDVKfPn0s81u4cKFmzJhheXb58uXLev755/Xmm29a5rVp0yZ9+OGH+uyzz9SpU6dUlzMiIkKrV6/W448/rjp16tiNGTRokJYtW6YffvhBU6dOlSQ9//zz6tKli8aMGWMVO2nSJJ0+fVrr16+3DPvpp5+0Z88e6dZF0fnz51W8eHF99NFHevTRRzO9Hd977z2rvinuFj9v3jytXbtW27dvt7n1cvjw4Tp79qz+/PPPVNvvxo0bmjRpkn755RcVKVJEUVFReuCBB/Tee++pXbt2NsvWtWtXTZw4UfHx8WrRooXGjx9vk69uXcyOGDFCmzdvVunSpZWcnKz3339fv//+u44ePapNmzZZYu2N72hbpmf9AIDZtGvXTjNmzNDSpUs1bNgwy6+4Z8+e1bhx47Rnzx6VKlVKly9fVpUqVTRx4kRVr15dknTt2jWNGDFCO3bsUNmyZXX9+nUVKVJEI0aMsBw7Dxw4oN69e2v27NmWxw6io6Pl5uamESNGqGvXrpZcNm/erJEjR2rdunWqUqWKZfiVK1fUuXNnjR49Wi+99JJleGblqFuPhp47d87qi19qzpw5o48//li7d+9WiRIlFBsbq+rVq+ujjz5SlSpVFBUVZTnXpuRw6dIltWzZUhMmTLCca9PTNumJPXnypE2fHynjf/fdd/rjjz+0bds23bhxQ8nJyRo/frzV+VqSduzYodGjR+vq1asqWrSoypYtqw8//FCdO3fWyJEj1atXr1TbJz25pkhMTFRQUJB064t4ah3WHj16NM31I0kPPPCAypQp41BsRqR3fbi7u6tatWpW06hZs6Yk6c8//9Qjjzxi9Zkz2iOlqHV7vyLbtm2TJKsfBiXp4Ycflru7u7Zs2WKz7eD+RPEDud7vv/+u2NhYPffcc5Kknj176tVXX9WBAwdUr149m/jQ0FBt2LBB69atU968ebV792717t1bixcvtpwkFy1apE6dOqXa98TEiRO1ZMkSTZ06VU899ZQkacuWLRo8eLDy5s2rF198UYcPH9b48eM1duxYvfDCC9KtXzkWLFhg6bRJtzqG8vX1lbe3912XMyAgQElJSfLz80s1plSpUqpQoYL+/vvvdLVhig8++MDq7xs3bmjy5Ml66623tHbtWqtnJjOjHe90t/gXX3xRy5cv16pVq/Tyyy9bhp8+fVr+/v4aPHjwXZ8Ff++997Rr1y5999138vPzU1JSkiZNmqS3335bBQoU0BNPPGGJDQkJsSxbvnz59O+//6Y63eHDh+vgwYNavny5ateurfj4eH300UeWiwFHONKWSuf6AQCzadiwoZYvX67AwED5+Pjo8uXL6tmzp8qXL68///xTJUuWVFxcnN5//3317t1ba9asUZEiRTR58mQdPXrUEqNbd93t2LHDpnA8a9Ys9e/fX1OmTFFycrKmTJmikSNHqlixYnr88cfTnXNm51ipUiUVKFAgzfmGh4erZ8+eKl26tNavX2/pNHPPnj06deqUqlSpoqJFi9rcKXvy5En1799fEydO1KRJkzLcNvfajnPmzFGfPn00fvx4JSUl6e2339aHH36opk2bWq6XAgMDNWjQILVo0UKfffaZ8ubNq2PHjunLL79Mc/oZzXXx4sXavn27oqKiFBcXp/bt22vEiBFWj1onJiaqc+fODs27S5cu+vTTT9OVb0Y4soweHh5KTExUfHy81Q8vKXcDnT592ma62dEekZGRlg7+Dxw4oFmzZqlv375WPwSm5HbnW+48PDxUunRpu7nj/sRjL8j1li1bphYtWlhui/Pz81OVKlW0bNkyu/Hnzp3TiBEjLAf2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1qpVq/TSSy+pQ4cO6tmzpxo2bGjpRyM0NFTz589X7dq1bV7rWatWLb399tvq3r27oqOjNX36dBUqVEhvvfWWJaZChQpq1aqVvvnmG3l7e6t06dLauHGj3UcmMztHR191261bN+3cuVPvv/++AgMD1aRJE0VHR+uPP/6Qj4+PevfurW7duumNN97Q2LFj1aFDB507d07z5s1Tp06dtHTpUptpOtI2GYnNqJdeekm//fabBg0apOHDh6tMmTLasmWL5a4DR3/UcCTXBQsWaN++fWrbtq3Kly+vyMhIrVq1Shs3btSQIUPk4+Njib2XPi5CQkIUHR0t3So8REdHWx4ZKVmypIoUKWKJTc9rjx1dHz179lTnzp1Vs2ZNRUVFacmSJfrvv/80d+5cqx+asqM9fvzxR/3777966qmnVL58ed24cUP+/v766aef9MQTT1jdTeLl5aWRI0fqww8/VJkyZdSiRQsdPnxY06dPV69evWzu+sX9i+IHcqWIiAhdu3ZNXbp0STXG09NTHTp00IkTJ5ScnCxXV1dVqVLFbn8YpUuXtjpQS9KAAQOUmJio+fPnKzY2VsWLF7fccfHYY49pzZo1WrJkiRYuXKi4uDiVK1dOfn5+lteRvvzyy6pRo4Z+/fVXrVq1Snny5FHVqlX1888/W83L0Vfdphg8eLBatWqln3/+WXPmzNH169d18uRJFS5cWGvXrrXp16Jp06aaOXOmli5dqilTpqh+/fr6/PPP9fXXX1udyPLly6effvpJs2bN0vfff29pv7Zt22r79u0qXry4JTaz2rFixYqW53gdiU/xwgsvaPPmzapdu7Z8fX0darcePXqocuXKWrp0qaZOnap8+fKpbdu2evXVV60uJlJbttTyfeWVV1SmTBktX75cX3zxhWrVqqXPP/9c77//vtWr4lIb39G2TM/6sTcfAMjJPDw85OvrqyNHjmjEiBFyc3NTgQIFVLZsWb3wwgtq27atzfnN1dVVX3zxhf744w+tX79eO3fuVP78+VW5cmWNGjVKdevWlST99NNPWrVqldasWaOLFy+qSJEieuWVV/Tss8/aPObYvHlzJSQk6IcfftDVq1fVuHFjDRgwwOZV4pMnT9b//vc/LV68WAULFlS3bt3UpEkTbd682eqcktk5OvqqW1dXV3311Vdas2aNNm7cqO3bt6tUqVJq2bKl5YeW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jTLp2U/Z92E2mb1N3/4WJ3vYR4DMMXbsWPn6+jo7jVwrLi5OQUFBqlSpUq6+a8GZzNKGQUFBGjlypLPTgEnkmOJHnTp1VKpUKS1evFjjxo2zuh03OTlZv/zyi0qVKqU6derc87QWL17s8LSA3KJjx4769ttvZRiG8uTJo0WLFmn8+PFydXVVYmKi5s+fL93q86No0aLq2LGjVq1apb1796pkyZJavHixxowZo1KlSmX7SfKrr77S0KFDpVt3fBQpUkR79+5N937Kvg+zyextuk6dOipRooS2bNmip556yuoz9hEg81SsWNFuwRKOiY2NlWEY8vX1laenp7PTyZVoQ9s3iqT3UYu6deta9VHh6PjVqlWzPNIydOhQq0dfUq53U+LsKVeunOWRlv79+1s9+tK/f3+ruLTUq1fP6tGXevXqObQMnTp1sjz6Mnv2bKtHX2bPnm0Vl5aMtmNWyDEdnrq5uWnAgAHy9/fXRx99pCNHjig2NlbHjh3Tjz/+qL1792rAgAFyc3PL8LSOHDmijz76SP7+/g5PC8gtPDw81K1bNxmGoYSEBPn7+2vw4MH63//+p27duunq1avSrf5ABgwYIA8PDw0YMEB79uzRAw88YNlfGjVqpH379mVr7r169bLkFx8fLy8vL+3Zsyfd+yn7Pswms7dpNzc39enTR8eOHdPEiRPZRwAApmKvY9OU/+4Wl9pwPz8/9e7d26qj0buNL0krV660/HvLli1WOWzZssVu3O3WrVtn+be/v7/V+LcXEW6PSy03wzCsxjcMw6FluL0fj5kzZ1pNI6W/jzvjUstBGWzHrJBj7vyQpMcee0xjxozR7Nmz9eabb1qGFylSRO+//74ee+yxe55WqVKlNGbMmHRNC8gtUqrBK1asUHJysk6cOKETJ05YPvf29tbQoUMt2//t+4lhGPr777+dkndKR60poqKiMryfsu/DbDJ7m27atKleeuklbdiwgX0EAGA6aXWomdYX7nsdPyfkYIZlyAo5qvihWxd5TZs21aFDhxQREaECBQrI1dVVtWrVuudpFSlSRHXq1OEXLZha//791atXL61evVoHDx7UzZs3Va1aNTVs2FD16tWz2f5v308uX76syMhIeXt7W/UNsHbtWp05c0YJCQlyc3Oz9MeRUV5eXnrmmWd05swZxcXFqVq1avL29lbhwoVVrFixe95P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8LRkyZK6cuWKkpKSLMPCwsLk6upq9Xz7/v379dBDD1mNm/L37c9XOSsuLZcuXdK///6rVq1aKSYmRv/995/CwsJs4o4eParY2Fg1aNDAZp4nT57U9evXnRrnqMjISI0aNUrvv/++ihUrZjcmICBAxYsXt+p3IG/evKpVq5ZV2zorzhH2HpOJioqyeS41ICDAbtvqju3IWXFZJSAgQPXq1bO6zb169ery9PTMlvmnxtPTU40aNbIZfue6u3jxos6dO2e3DSMjIxUUFOTUOEfFx8frvffe02uvvZbq40YBAQFydXVV3bp1rYY3aNDAZptyRpwj/vjjD9WpU0elSpVSYGCgTp48qfj4eLvLWr9+favnTGvXri13d3eb3JwR54iSJUvanEPCwsJUqlQpy99nz57VpUuX7G5Hly5dUmhoqFPjssqlS5cUEhJid/5RUVEKDAzM0vmbzc2bN3X48GGdPn1aCQkJzk7HFA4cOKDExES715eHDh1SYmKi03LLja5fv66DBw8qNDRUycnJzk4nx2jYsKFNn1dRUVGSZHWtExAQoDx58qhOnTqWYS4uLqpfv75Tr9VyikceecTmccmUdrTXT8/ly5d18OBBhYeHZ1uOudWlS5ckyeq7YkBAgKpWrWq1jRYpUkQPPvigAgICsjynLC9+9OvXT/nz59e7776r7du3a8WKFZoyZYoGDx6s0qVLW+LCw8NtOvvz8vJS3rx5rS4AnRWXlpQvK4cPH1aLFi00atQoPfPMM+rRo4fOnDljNT9JNvNM+Tvlc2fFOWrcuHGqXr26unbtmmqMvbZNmWda6yA74jLi2LFj+uOPP9S8eXPLsKSkJF2+fNlmnsWKFZOLi4tlns6Ky0r22trFxSVT2jqzrVq1SiEhIVbrLq39ImUZnBXnqC+//FJubm567bXXUo0JDw+Xt7e3zQm+ePHiVvu/s+IcERQUpPz58+v5559X//799cYbb8jPz09Lly61WdY7O790c3NT0aJFbY4VzohzxMiRI7V161bNnDlTO3fu1MyZM7V582arflzMsv2mV2rzT2n7nHbsyem2bdumESNGqFevXmrSpIm+/fZbZXF3cKZ3t30kISFBERERTsosd/rxxx81ZswYPfvss3riiSe0bt06Z6eUIxmGoa+//lre3t5WxeHw8HAVLlxYefJYv+ciJ16r5QQJCQn63//+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+fPnG7t27TLmzZtnNGrUyBg2bJhV3MGDB406deoYH3/8sbFr1y7j448/NurUqWMcOnQoR8RllRMnThj169c3Ro0aZezatcuYPHmyUatWLbuvuIZ9ISEhRvv27Y158+YZ27dvN1atWmV07drVaNKkiXH06FFnp5djhYSEGHv37jV+//13w8fHx5gxY4axd+9e49ixY1ZxmzZtMmrWrGl88803xs6dO40hQ4YYfn5+xvnz552We05y+vRpY+/evcaSJUsMHx8f48cffzT27t1rBAYGWmK2bNlivPDCC8aSJUuMnTt3GgsXLjSaN29utGnTxoiIiHBq/jmBv7+/UatWLaNXr14216gXL160ip0xY4bx0EMPGcuWLTO2bNlidO/e3ejUqZPNK17vR+vXrzd8fX2NoUOH2rTjlStXLHGzZs0yhgwZYvzyyy/Gjh07jFmzZhkNGzY0+vTpYyQmJjp1GXKCjz/+2Bg5cqTx66+/Grt27TIWLlxotG7d2nj66adtXsk8aNAgo2XLlsbvv/9urF271njyySdtrm+yiouRDV167927V6tXr9b58+dVoEAB1apVSz179rS57e/q1auaM2eODh8+rEKFCqljx45q3bq1zfScFeeIwMBA/fDDDzp79qxKlSql9u3b69FHH7WJ+/fff7Vw4UKFh4frwQcfVJ8+fezeKuysuPRISkrSSy+9pJdeeknPPPOM1WfJyclavny5Nm/erMTERD388MN69dVXlTdv3hwRl5Z+/frZrWTq1vOVt98xc+XKFc2ZM0dHjx6Vl5eXunTpYvVmEWfHZZXY2FjNnTtXAQEB8vDwUJs2bdS5c2dLZ7rOEBYWprfeesvuZxUrVtSkSZOshp08eVI//PCDQkJCVLp0ab388suqVauWzbjOikuv119/XY888ojd21/XrVuntWvXKjY2VnXr1lW/fv3s/lLvrLi0xMfHa+HChfrrr7+UJ08e1atXT6+++qry589vFRcdHa25c+fq33//Vd68efX000+rY8eONtNzVlxaEhMTtWbNGu3YsUNXrlxR0aJF9dhjj6lDhw42d+odO3ZMP/zwg86dO6eyZcvq1VdftfurqLPiskpgYKDmzZunkJAQlSpVSi+99JLVqxyRttDQUC1ZskTHjh1TgQIF5Ovrq549e1o6OIethQsX2u3wvWbNmpZn3VPs2bNHy5Yt0+XLl1W1alX16dPH6jGY+1nKm6zu1LRpUw0ZMsTy93///aeff/5ZwcHBKlKkiBo0aKDu3bvftZ+6+8WKFSu0cuVKu5/ZuyZfs2aN1q1bp7i4ONWrV099+/bNlv7hcrrvv/9ef/zxh93P3njjDavvcdu2bdP69esVFhamkiVL6vHHH1fbtm2des2bUyQnJ2vDhg3aunWr5Y0uTZo0UceOHW3214SEBC1cuFA7d+6Ui4uLHn/8cb3wwgt2O+bNbNlS/AAAAAAAAHCWLO/zAwAAAAAAwJkofgAAAAAAAFOj+AEAAAAAAEyN4gcAAAAAADA1ih8AAAAAAMDUKH4AAAAAAABTo/gBAAAAAABMjeIHAAAAAAAwNYofALJEjx491KtXL4di33zzTbVu3TpT558V0wQA4H506NAhVa9eXX/88UeasZcuXVL16tU1f/78TJt/Zk8zPcuTE2VFGwP3A4ofQC73559/auDAgXr00UdVu3ZtPf744+rZs6d+/PFHRUVFZem8O3XqpL59+2bpPAAAuF9ERkZqxowZ6tq1qx566CHVr19fbdu21bBhw7R79+4snfe+fftUvXp1bdmyJUvnc7+gPYGcJ4+zEwCQMUlJSXr//fe1fv16vfbaa3r//fdVtmxZRUZGatOmTfr6668VEhKiUaNGOSW/ZcuWOWW+AADkRseOHVP//v1VsGBBDR06VE2aNJGnp6dOnjypn376Sb169dLGjRv14IMPZntuderU0fHjx7N9vlnFbMsDwDEUP4BcaubMmfrtt980bdo0Pf3005bhJUqU0IsvvqjWrVtr8+bNTs0RAACkLTY2Vq+//rry58+vpUuXqlChQpbPateurcmTJ8vPz0+urty0DQAZxREUyIViYmI0b948NWrUyKrwcbsSJUro+eeft/w9aNAgVa9eXdWrV1eNGjX0yCOP6M0339Tp06etxmvbtq0GDRqk06dPq1evXqpXr54ee+wxzZw5U4ZhWOIaNWqkY8eOaefOnZbptmjRwvK5vT4/kpOTNXPmTD355JOqW7euXnjhBR05csRu/o7mm55pAgCQE/388886f/68hg4dalX4uF2XLl1Uvnx5SdLFixct58jq1aurdu3aevrpp/W///1PiYmJlnH++usvVa9eXX/99ZcWLVqkFi1aqE6dOnruued06NAhS9zq1av14osvSpIGDhxome73338v3aWPjDNnzmjgwIFq0KCB/Pz8NGHCBCUkJNjk7mi+6ZmmPY7Ox97y/Pzzz6pevboCAwPtTnPBggWWYQkJCZo+fbratGmjevXqqXnz5nrnnXd09uxZh9ozK9ojPdME7lfc+QHkQv/8849iY2P1+OOPOzzON998Y/l3fHy8Tp8+rU8//VT9+vXTr7/+qoIFC1o+v3btmqZOnaoRI0aoXLlyWr58uT799FNVrFhRzzzzjHTrWdZOnTqpWLFilpN5WiZOnKglS5ZozJgxatu2rc6fP6/PP/9ccXFxGc43PdMEACAn2rFjh1xcXPTYY485FF+qVCmrxzYiIyO1c+dOjR49WomJiRoyZIhV/MqVK1W1alUtX75csbGxGj58uAYNGqQ///xTHh4e6tSpk8qWLasXX3xRs2bNUvPmzdPMISIiQi+++KJKlCihRYsWqWzZstq0aZOmTJmS4XzTM83MaJeMmj59upYsWaJp06bpoYce0vXr1/X333/rhx9+0OjRo9Nsz6xoj+xadiA3484PIBc6f/68JKl06dIZGt/Dw0O+vr6aMGGCzp07p127dll9fuDAAX344Yfy9fVVwYIF1bt3b/n4+Gjp0qUZzvnChQtauHChXn75ZfXo0UNeXl7y9fXVuHHj9O+//2Yo33uZJgAAOcX58+dVqFChVO/6SIu3t7fat2+v559/3u65OikpSa+//rqKFi2q8uXL691331V4eLi2bt2a4Zznz5+viIgITZs2TTVq1JCXl5eeffZZlS1bNsP53ss00zOfe/X333+rfv36atasmfLnz68SJUqoffv2Gj16dKbmmRVtDNzPuPMDuE+EhoZqxowZ8vf31+XLl61ugTxz5oxVrK+vr0qVKmU1zMfHR/v378/w/Pfs2aPk5GSrR2MkqVy5cvL19bV5M40j+aZ3mgAAmMXatWu1cOFCHT9+XDExMVaPpsbGxsrT09Py95NPPmk1brVq1SRJISEhGZ7/7t27VaVKFVWoUMFqeKtWrfTtt99mKN/0TtOe9LRLRlWvXl0///yzvv76a7Vt21ZVqlSRi4tLuqaRFe2RHcsO5Gbc+QHkQmXKlJFu3fngiJiYGPXs2VMnT57UV199pb///lvHjh2Tv7+/JNk8C1q8eHGbaRQoUOCeigmRkZGSpKJFi9p8VqxYsQzlm55pAgCQU5UpU0bXr19XdHS0Q/GrV6/WsGHD9PDDD+vXX3/VoUOHdPz4ccujDWmd11MeHb3X87q9c629c7Kj+aZnmvakt10ccXsBIcV7772nnj17avHixXrmmWfUtGlTjRgxwtLnR2blmRVtDNzPKH4AuVDDhg3l6emp7du3OxTv7++vsLAwvfvuu6pfv74KFCggFxcXhYaG2o1P768XjvD29pYkXblyxeazy5cvZyjf9EwTAICc6rHHHpNhGA6f11evXq0qVapo6NChKlu2rNzd3aVbd03ak1XndXvnWnvnZEfzTc807Ulvu9wu5ZGjmJgYq+FhYWE2sQULFtQHH3ygnTt36vfff9fgwYO1c+dO9ezZ06E+x7KiPe5l2YH7BcUPIBcqUKCAevfurX379mnjxo12Y8LDw7VkyRKrYR4eHlZ/r169+p7yyJ8/v+Lj4x2KbdKkiVxdXW1ev3v+/HkdO3bM7jhp5ZuRaQIAkNN07dpVZcqU0YwZM1K9++OXX36xekzlznNkdHS0/vzzzwznkPJIhKPndT8/PwUGBto8OpNaDo7km95pZnQ+9qS8SefkyZNWw7ds2ZLqOC4uLqpcubJefPFFDRw4UJcuXVJwcLDkQHtmRXtk9jYBmA3FDyCXeuONN9S+fXsNGzZMM2bMUHBwsOLj4xUeHq5FixapU6dOlte1PfTQQ/L29tZXX32lc+fOKSIiQvPmzVNERMQ95eDj46MTJ04oJCTE7m2htytTpox69uypBQsWaMWKFYqKitLx48c1ZswY1a9f3yrW0XzTM00AAHIqT09P/e9//1N0dLSef/55bdq0SdeuXdPNmzd1+PBhjRgxQiNGjFBycrIkqUWLFjp69KgWL16smJgYnThxQm+88YaaNGmS4RwqVKigfPnyaefOnbpx40aa8a+++qoKFy6st956S8eOHdP169f1888/69y5czaxjuabnmnacy/t4uvrq7p162r27Nk6duyYoqKitHz5coWHh9vE9u/fXz///LNCQkIsb6T7/fffVbJkSVWsWFFKoz2zoj2yYpsAzIbiB5BLubm56YsvvtC0adN0+PBh9ezZUw899JCeffZZrVmzRq+//rrlOc/ChQvr22+/VUJCgtq3b68OHTro4sWLGjNmzD3l8MYbb6hWrVrq2LGjfH19bToevdMHH3ygAQMGaMaMGXr00Uf10Ucf6a233rJ5djU9+To6TQAAcjJfX1/99ttvatOmjWbOnKknn3xSTZo00fDhw5WQkKD58+dbOr7s2bOnhg4dqu+++06PPPKIRowYob59+6pevXoZnn/BggU1btw47dmzR40aNVL16tXv+ir7YsWKacGCBSpatKief/55tWrVSocPH9bw4cNtYh3NNz3TtOde22Xq1KkqX768evToobZt2yo0NFSDBw+2iRs+fLgCAgLUp08fNWzYUH369NGDDz6ohQsXKl++fFIa7ZkV7ZEV2wRgNi5GWj/XAgAAAIBJHDp0SN26ddPMmTPVqlUrZ6cDIJtw5wcAAACA+0ZKp6YpHacDuD9Q/AAAAABwX4iLi9P69etVoEAB+fj4ODsdANkoj7MTAAAAAICsFhoaqrZt26pChQr6/PPP5eXl5eyUAGQj+vwAAAAAAACmxmMvAAAAAADA1Ch+AAAAAAAAU6P4AQAAAAAATI3iBwAAAAAAMDWKHwAAAAAAwNQofgAAAAAAAFOj+AEAAAAAAEyN4gcAAAAAADA1ih8AAAAAAMDU/h91DUZdOw9BowAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1100x420 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cinco registros con mayor total original (sin capping):\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>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity_Original</th>\n",
       "      <th>UnitPrice_Original</th>\n",
       "      <th>Total_Transaccion_Original</th>\n",
       "      <th>Es_Cancelacion</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>540421</th>\n",
       "      <td>581483</td>\n",
       "      <td>23843</td>\n",
       "      <td>PAPER CRAFT , LITTLE BIRDIE</td>\n",
       "      <td>80995</td>\n",
       "      <td>2.08</td>\n",
       "      <td>168469.60</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61619</th>\n",
       "      <td>541431</td>\n",
       "      <td>23166</td>\n",
       "      <td>MEDIUM CERAMIC TOP STORAGE JAR</td>\n",
       "      <td>74215</td>\n",
       "      <td>1.04</td>\n",
       "      <td>77183.60</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222680</th>\n",
       "      <td>556444</td>\n",
       "      <td>22502</td>\n",
       "      <td>PICNIC BASKET WICKER 60 PIECES</td>\n",
       "      <td>60</td>\n",
       "      <td>649.50</td>\n",
       "      <td>38970.00</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15017</th>\n",
       "      <td>537632</td>\n",
       "      <td>AMAZONFEE</td>\n",
       "      <td>AMAZON FEE</td>\n",
       "      <td>1</td>\n",
       "      <td>13541.33</td>\n",
       "      <td>13541.33</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299982</th>\n",
       "      <td>A563185</td>\n",
       "      <td>B</td>\n",
       "      <td>Adjust bad debt</td>\n",
       "      <td>1</td>\n",
       "      <td>11062.06</td>\n",
       "      <td>11062.06</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       InvoiceNo  StockCode                     Description  Quantity_Original  UnitPrice_Original  Total_Transaccion_Original  Es_Cancelacion\n",
       "540421    581483      23843     PAPER CRAFT , LITTLE BIRDIE              80995                2.08                   168469.60           False\n",
       "61619     541431      23166  MEDIUM CERAMIC TOP STORAGE JAR              74215                1.04                    77183.60           False\n",
       "222680    556444      22502  PICNIC BASKET WICKER 60 PIECES                 60              649.50                    38970.00           False\n",
       "15017     537632  AMAZONFEE                      AMAZON FEE                  1            13541.33                    13541.33           False\n",
       "299982   A563185          B                 Adjust bad debt                  1            11062.06                    11062.06           False"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cinco registros con mayor total ajustado (dataframe transformado):\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>InvoiceNo</th>\n",
       "      <th>StockCode</th>\n",
       "      <th>Description</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Total_Transaccion</th>\n",
       "      <th>Es_Cancelacion</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>222681</th>\n",
       "      <td>C556445</td>\n",
       "      <td>M</td>\n",
       "      <td>Manual</td>\n",
       "      <td>1</td>\n",
       "      <td>38970.00</td>\n",
       "      <td>38970.00</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222680</th>\n",
       "      <td>556444</td>\n",
       "      <td>22502</td>\n",
       "      <td>PICNIC BASKET WICKER 60 PIECES</td>\n",
       "      <td>30</td>\n",
       "      <td>649.50</td>\n",
       "      <td>19485.00</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>524602</th>\n",
       "      <td>C580605</td>\n",
       "      <td>AMAZONFEE</td>\n",
       "      <td>AMAZON FEE</td>\n",
       "      <td>1</td>\n",
       "      <td>17836.46</td>\n",
       "      <td>17836.46</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43702</th>\n",
       "      <td>C540117</td>\n",
       "      <td>AMAZONFEE</td>\n",
       "      <td>AMAZON FEE</td>\n",
       "      <td>1</td>\n",
       "      <td>16888.02</td>\n",
       "      <td>16888.02</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43703</th>\n",
       "      <td>C540118</td>\n",
       "      <td>AMAZONFEE</td>\n",
       "      <td>AMAZON FEE</td>\n",
       "      <td>1</td>\n",
       "      <td>16453.71</td>\n",
       "      <td>16453.71</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       InvoiceNo  StockCode                     Description  Quantity  UnitPrice  Total_Transaccion  Es_Cancelacion\n",
       "222681   C556445          M                          Manual         1   38970.00           38970.00            True\n",
       "222680    556444      22502  PICNIC BASKET WICKER 60 PIECES        30     649.50           19485.00           False\n",
       "524602   C580605  AMAZONFEE                      AMAZON FEE         1   17836.46           17836.46            True\n",
       "43702    C540117  AMAZONFEE                      AMAZON FEE         1   16888.02           16888.02            True\n",
       "43703    C540118  AMAZONFEE                      AMAZON FEE         1   16453.71           16453.71            True"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 2, figsize=(11, 4.2))\n",
    "sns.boxplot(x=df[\"Quantity_Original\"], ax=axes[0], color=\"#2C8BB3\", showfliers=True)\n",
    "axes[0].set_title(\"Antes: Quantity original\")\n",
    "axes[0].set_xlabel(\"Cantidad\")\n",
    "sns.boxplot(x=df[\"Quantity\"], ax=axes[1], color=\"#762042\", showfliers=True)\n",
    "axes[1].set_title(f\"Después: capping p5={p5:g}, p95={p95:g}\")\n",
    "axes[1].set_xlabel(\"Cantidad ajustada\")\n",
    "fig.suptitle(\"Distribución de cantidades antes y después del capping\")\n",
    "fig.tight_layout()\n",
    "boxplot_path = ASSETS_DIR / f\"boxplot_cantidad_{identificador}.png\"\n",
    "fig.savefig(boxplot_path, dpi=180, bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "\n",
    "columnas_top = [\"InvoiceNo\", \"StockCode\", \"Description\", \"Quantity_Original\", \"UnitPrice_Original\", \"Total_Transaccion_Original\", \"Es_Cancelacion\"]\n",
    "top5_original = df.nlargest(5, \"Total_Transaccion_Original\")[columnas_top]\n",
    "print(\"Cinco registros con mayor total original (sin capping):\")\n",
    "display(top5_original)\n",
    "\n",
    "columnas_top_ajustado = [\"InvoiceNo\", \"StockCode\", \"Description\", \"Quantity\", \"UnitPrice\", \"Total_Transaccion\", \"Es_Cancelacion\"]\n",
    "top5_ajustado = df.nlargest(5, \"Total_Transaccion\")[columnas_top_ajustado]\n",
    "print(\"Cinco registros con mayor total ajustado (dataframe transformado):\")\n",
    "display(top5_ajustado)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b1cc3ff5",
   "metadata": {},
   "source": [
    "## Punto 7. Normalización y estandarización"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "977816bd",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:18.467531Z",
     "iopub.status.busy": "2026-09-06T23:48:18.467417Z",
     "iopub.status.idle": "2026-09-06T23:48:19.205219Z",
     "shell.execute_reply": "2026-09-06T23:48:19.204747Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Productos con múltiples descripciones antes de unificar: 1,324\n",
      "StockCode que contiene 0155: 1 productos, 7 filas\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>Filas</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Categoría</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>PRODUCTO_NORMAL</th>\n",
       "      <td>477266</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PRODUCTO_ESPECIAL</th>\n",
       "      <td>53925</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>REGALO_0155</th>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    Filas\n",
       "Categoría                \n",
       "PRODUCTO_NORMAL    477266\n",
       "PRODUCTO_ESPECIAL   53925\n",
       "REGALO_0155            34"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[\"Country\"] = (\n",
    "    df[\"Country\"].astype(\"string\").str.replace(r\"\\s+\", \" \", regex=True).str.strip().str.upper()\n",
    ")\n",
    "\n",
    "descripciones_por_producto = df.groupby(\"StockCode\")[\"Description\"].nunique(dropna=True)\n",
    "productos_descripcion_multiple = int((descripciones_por_producto > 1).sum())\n",
    "\n",
    "mascara_identificador_stock = df[\"StockCode\"].str.contains(identificador, regex=False, na=False)\n",
    "filas_stock_identificador = int(mascara_identificador_stock.sum())\n",
    "productos_stock_identificador = int(df.loc[mascara_identificador_stock, \"StockCode\"].nunique())\n",
    "\n",
    "if mascara_identificador_stock.any():\n",
    "    moda_por_stock = (\n",
    "        df.loc[mascara_identificador_stock]\n",
    "        .groupby(\"StockCode\")[\"Description\"]\n",
    "        .agg(lambda serie: serie.mode().iloc[0] if not serie.mode().empty else serie.iloc[0])\n",
    "    )\n",
    "    df.loc[mascara_identificador_stock, \"Description\"] = (\n",
    "        df.loc[mascara_identificador_stock, \"StockCode\"].map(moda_por_stock)\n",
    "        + f\" [UNIFICADO_{identificador}]\"\n",
    "    )\n",
    "\n",
    "stock_minuscula = df[\"StockCode\"].str.lower()\n",
    "contiene_gift = stock_minuscula.str.contains(\"gift\", regex=False, na=False)\n",
    "contiene_letras = df[\"StockCode\"].str.contains(r\"[A-Za-z]\", regex=True, na=False)\n",
    "df[\"Categoria_Producto\"] = np.select(\n",
    "    [contiene_gift, contiene_letras],\n",
    "    [f\"REGALO_{identificador}\", \"PRODUCTO_ESPECIAL\"],\n",
    "    default=\"PRODUCTO_NORMAL\",\n",
    ")\n",
    "\n",
    "print(f\"Productos con múltiples descripciones antes de unificar: {productos_descripcion_multiple:,}\")\n",
    "print(f\"StockCode que contiene {identificador}: {productos_stock_identificador:,} productos, {filas_stock_identificador:,} filas\")\n",
    "display(df[\"Categoria_Producto\"].value_counts().rename_axis(\"Categoría\").to_frame(\"Filas\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b841f739",
   "metadata": {},
   "source": [
    "## Punto 8. Segmentación de clientes y gasto"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9dd09f16",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:19.206567Z",
     "iopub.status.busy": "2026-09-06T23:48:19.206458Z",
     "iopub.status.idle": "2026-09-06T23:48:19.479549Z",
     "shell.execute_reply": "2026-09-06T23:48:19.479092Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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YP369WjdujXs7OyQm5uLK1euSIeNTJ48WbqsKnmp0i+VP6rUaGoV3sqc0W7VqpVSfcXFxSE0NFThPEdHR7liXCKRIDQ0FKmpqXB2di7yS0Bpj1MWC+/iY+FNJYmFN5Fif/75p8xDZt728ccfy9UHN2/exLVr15CYmAgrKys0aNBA7qE0eFMQ//PPPwgPD4eRkRGaNWuGdu3aycUVFBSgefPmcHd3x7p166RDPZKTk3HixAk8evQIBQUFsLOzg5+fX5F3ZFM2L1X7pfJDa4U3aQ8L7+Jj4U0liYU3UekUHh6OQYMGYeHChejcuTPHWFOJUaVGU2uMNxEREVFplJOTg6+//lpjtzom0gS17mpCREREVBq1bNkSDRs25PMvqFThGW8iIiIqlwqfYMznOlBpwTPeREREZURBfj701HgeREXDJxgXD19nJYeFNxERURmhp6+PHV/9jMToJ7pOhcqp6s72GLx8pq7TKLfULrxfvXqFkJAQhIaGIi0tDZs2bQLePGrV398fxsbGmsiTiIiIACRGP0H8nQe6ToOIikGtwjslJQXDhg1DTEwMbG1t8eTJ//8Gfv36dYjFYj6tkYiIiIhI3Ysrg4KCYGJigmPHjuHEiRMy83r37o3du3ermx8RERERUbmg1hnvM2fO4I8//oCdnZ3cvLp16yr9uHgiIiIiovJOrTPemZmZMkX327fryc/PR0FBgXrZERERERGVE2oV3jVq1MDNmzel028X3mFhYbC3t1cvOyIiIiKickKtwrtbt2744Ycf8N9//8m0R0VFYcGCBfjoo4/UzY+IiIiIqFxQa4z3+PHjcfnyZfTt2xe2trYoKChAjx49EB0dDU9PT4wePVpzmRIRERERlWFqFd7m5ubYvn07tm3bhjNnzsDAwACmpqaYPHkyRowYwXt4ExERERG9ofYDdExMTPD555/j888/10xGRERERETlkFpjvImIiIiISDkqnfHevHmzyisYOXKkyssQEREREZU3KhXeCxYsUHkFLLyJiIiIiFQsvC9cuCAzLZFIsGTJEtja2qJTp06oWrUqkpOTcfLkSTx79gzTpk3TdL5ERERERGWSSoV3tWrVZKZ//PFHtG7dGn369JG21alTB40aNcKePXvwxx9/YNasWZrLloiIiIiojFLr4spDhw6hS5cuCud16dIFBw8eVKd7IiIiIqJyQ63C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zWVKRERERFSGqVV4BwQE4PHjx/j111+xZcsWAEBgYCAMDAwwefJkdOjQQVN5EhERERGVaWoV3gAwfvx49OzZE//++y+SkpJgZWWFdu3awc7OTjMZEhERERGVA2oX3nhzB5NBgwZpoisiIiIionJJY4+MJyIiIiKioql9xjshIQH79+/H06dPkZmZKTd/2bJl6q6CiIiIiKjMU6vwPn78OKZMmYK8vDxUqVIFZmZmmsuMiIiIiKgcUavwXrRoEQICAvDtt9/CxsZGc1kREREREZUzahXeiYmJmDlzJiwtLTWXERERERFROaTWxZXu7u5ITU3VXDZEREREROWUWoX39OnTsWjRIhbfREREREQfoNZQE29vb4wZMwbdu3dHvXr1UK1aNYhEIpmYoKAgdXMkIiIiIirz1Cq8Q0NDMW7cOGRlZeHVq1e8qwkRERERURHUKrznzZsHPz8/fPvtt6hevbrmsiIiIiIiKmfUKryfPHmCrVu3wsrKSnMZERERERGVQ2pdXOnm5ob09HTNZUNEREREVE6pVXjPnj0bS5cuZfFNRERERPQBag01+euvv5CRkQE/Pz80btxY4V1NFi5cqG6ORERERERlnlqF97///gsAMDExwf3793H//n1N5UVEREREVK6oVXhfvHhRc5kQEREREZVjao3xJiIiIiIi5bDwJiIiIiLSArWGmgwYMOCDMcHBweqsgoiIiIioXFD6jPft27fl2oyNjWX+GBkZITU1FREREcjPz4exsbGm8yUiIiIiKpOUPuM9cuRIrFixAu3atZO2/fnnnwpjo6OjsWzZMsyePVszWRIRERERlXFKn/GeNm0aJk+ejP37938w1tnZGWPGjMH//vc/dfMjIiIiIioXlC68hwwZgj/++APLli1TKr5evXq4du2aOrkREREREZUbKt3VpHHjxti7d69Ssf/88w/MzMyKlZRYLMbLly8hFovfG5eXl4eMjIwP9lfa44iIiIio/FP5ribW1tbSfys6+52dnY2oqChcu3YNo0ePVqnvu3fvIjg4GEePHkVaWhpWr16Nzp07y8WJxWL8/PPP2L9/P/T09GBubo7vvvsOAQEBZSqOiIiIiCoOtW4nuHbtWrk2U1NT1KlTB7NmzcInn3yiUn87duxA/fr1ERgYiEGDBhUZt2jRIpw6dQohISFwdHTErl27MHXqVNSoUQNN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WMrcUBMHBwccOHAAvr6+sLS0RHJyMmrWrImVK1eiY8eOMrHff/89pk+fjq5du8La2hppaWn4/vvv0aZNm1IRR0REREQVh0gooyPn8/PzER8fDysrK5ibm783Ni0tDenp6ahVq9Z7L27UVZwyIiIiAABeXl5q9VMRDdh6HpGJGbpOg8op9+oWCB7eTtdpUAWyovs4xN95oOs0qJyq3cAFkw+t1XUaZYoqNVqZO+NdSF9fH3Z2dkrFWlpawtLSstTGEREREVH5V+bGeBMRERERlUUsvImIiIiItICFNxERERGRFrDwJiIiIiLSAhbeRERERERawMKbiIiIiEgLWHgTEREREWkBC28iIiIiIi1g4U1EREREpAUsvImIiIiItICFNxERERGRFrDwJiIiIiLSAhbeRERERERawMKbiIiIiEgLWHgTEREREWkBC28iIiIiIi1g4U1EREREpAUsvImIiIiItICFNxERERGRFrDwJiIiIiLSAhbeRERERERawMKbiIiIiEgLWHgTEREREWkBC28iIiIiIi1g4U1EREREpAUsvImIiIiItICFNxERERGRFrDwJiIiIiLSAhbeRERERERawMKbiIiIiEgLWHgTEREREWkBC28iIiIiIi1g4U1EREREpAUsvImIiIiItMBA1wmUVy9evMCRI0eQkpICFxcXBAQEwNDQUNdpEREREZGO8Ix3Cbh9+zYCAgJw69YtmJubY926dRg6dChyc3N1nRoRERER6QgL7xIwe/ZstG7dGitXrsS4ceOwbds2PHz4EFu2bNF1akRERESkIyy8NSwqKgpRUVHo16+ftM3a2hodO3bE4cOHdZobEREREekOC28Ni4yMBAC4ubnJtLu6uuLhw4cQi8U6yoyIiIiIdIkXV2pYeno6AMDCwkKmvUqVKsjPz0dmZiaqVq2qcr8SiQSCICA8PFxjuVYEIpEIE93MkOdioutUqJwy0NNDREQEBEHQdSpUAYhEIjSfNgQFkjxdp0LllJ6hAY9pKpJIJBCJRErFsvAuIe++YAunlf2PeVfhcsVdviKzNjXSdQpUAfC9SdpiXtVS1ylQBcBjmvJEIhELb10pPJudmpoKMzMzaXtqaioMDQ3lzoQry9vbW2M5EhEREZH2cYy3hnl6egIA7t69K9N+584duLm5wcCA33WIiIiIKiIW3hrm4OAAHx8fbNu2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",
      "text/plain": [
       "<Figure size 750x450 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Umbral = 2023630155 % 50 + 10 = 15\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>Transacciones</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Categoria_Cliente</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>BAJO_VALOR</th>\n",
       "      <td>341842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ALTO_VALOR</th>\n",
       "      <td>189383</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   Transacciones\n",
       "Categoria_Cliente               \n",
       "BAJO_VALOR                341842\n",
       "ALTO_VALOR                189383"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[\"Total_Venta_Original\"] = df[\"Total_Transaccion_Original\"]\n",
    "df[\"Total_Venta\"] = df[\"Total_Transaccion\"]  # total ajustado por la estrategia de capping asignada\n",
    "umbral = int(boleta_completa) % 50 + 10\n",
    "df[\"Categoria_Cliente\"] = np.where(df[\"Total_Venta\"] < umbral, \"BAJO_VALOR\", \"ALTO_VALOR\")\n",
    "conteo_categorias_cliente = df[\"Categoria_Cliente\"].value_counts().reindex([\"BAJO_VALOR\", \"ALTO_VALOR\"])\n",
    "\n",
    "ax = conteo_categorias_cliente.plot(kind=\"bar\", figsize=(7.5, 4.5), color=[\"#2C8BB3\", \"#762042\"])\n",
    "ax.set_title(f\"Transacciones por categoría de cliente (umbral ajustado = {umbral})\")\n",
    "ax.set_xlabel(\"Categoría\")\n",
    "ax.set_ylabel(\"Número de registros\")\n",
    "ax.tick_params(axis=\"x\", rotation=0)\n",
    "for contenedor in ax.containers:\n",
    "    ax.bar_label(contenedor, fmt=\"{:,.0f}\")\n",
    "plt.tight_layout()\n",
    "categorias_path = ASSETS_DIR / f\"categorias_cliente_{identificador}.png\"\n",
    "plt.savefig(categorias_path, dpi=180, bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "\n",
    "print(f\"Umbral = {int(boleta_completa)} % 50 + 10 = {umbral}\")\n",
    "display(conteo_categorias_cliente.to_frame(\"Transacciones\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb3b2fc6",
   "metadata": {},
   "source": [
    "## Punto 9. Exportación y calidad\n",
    "\n",
    "El CSV conserva las columnas originales y columnas de auditoría. `Total_Venta` refleja la cantidad capeada porque la consigna ordena continuar con el dataframe transformado. `Total_Venta_Original` conserva el importe observado en el archivo. Las cancelaciones siguen identificadas por `Es_Cancelacion`; no se reinterpretan como ventas reales aunque el p5 convierta su cantidad ajustada en positiva."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b7469841",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-06T23:48:19.480760Z",
     "iopub.status.busy": "2026-09-06T23:48:19.480654Z",
     "iopub.status.idle": "2026-09-06T23:48:23.958670Z",
     "shell.execute_reply": "2026-09-06T23:48:23.958141Z"
    }
   },
   "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>Valor</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Filas_originales</th>\n",
       "      <td>541909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Filas_finales</th>\n",
       "      <td>531225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Transacciones_validas</th>\n",
       "      <td>519582</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Transacciones_validas_ajustadas</th>\n",
       "      <td>528721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cancelaciones</th>\n",
       "      <td>9139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Clientes_unicos_incluye_imputado</th>\n",
       "      <td>4373</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Clientes_reales_sin_imputado</th>\n",
       "      <td>4372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Productos_unicos</th>\n",
       "      <td>4070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Total_ventas_positivas_originales</th>\n",
       "      <td>10587015.733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Total_ventas_positivas_ajustadas</th>\n",
       "      <td>8446757.503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Total_neto_original</th>\n",
       "      <td>9683331.923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Total_neto_ajustado</th>\n",
       "      <td>8424633.383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Filas_con_identificador_0155</th>\n",
       "      <td>134566</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Completitud_porcentaje</th>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Consistencia_clave_porcentaje</th>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Consistencia_cancelacion_porcentaje</th>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Consistencia_rango_capeado_porcentaje</th>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Consistencia_paises_porcentaje</th>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Duplicados_exactos_detectados</th>\n",
       "      <td>5268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Filas_eliminadas_por_clave</th>\n",
       "      <td>10684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Outliers_IQR</th>\n",
       "      <td>58337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Filas_capeadas</th>\n",
       "      <td>36222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cancelaciones_capeadas</th>\n",
       "      <td>9139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>p5_Quantity</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>p95_Quantity</th>\n",
       "      <td>30.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Umbral_cliente</th>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SHA256_dataset_original</th>\n",
       "      <td>a2f79bbdd4463df6db8a3f5a50b9c980ae8f645a370bf5...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                                                   Valor\n",
       "Filas_originales                                                                  541909\n",
       "Filas_finales                                                                     531225\n",
       "Transacciones_validas                                                             519582\n",
       "Transacciones_validas_ajustadas                                                   528721\n",
       "Cancelaciones                                                                       9139\n",
       "Clientes_unicos_incluye_imputado                                                    4373\n",
       "Clientes_reales_sin_imputado                                                        4372\n",
       "Productos_unicos                                                                    4070\n",
       "Total_ventas_positivas_originales                                           10587015.733\n",
       "Total_ventas_positivas_ajustadas                                             8446757.503\n",
       "Total_neto_original                                                          9683331.923\n",
       "Total_neto_ajustado                                                          8424633.383\n",
       "Filas_con_identificador_0155                                                      134566\n",
       "Completitud_porcentaje                                                             100.0\n",
       "Consistencia_clave_porcentaje                                                      100.0\n",
       "Consistencia_cancelacion_porcentaje                                                100.0\n",
       "Consistencia_rango_capeado_porcentaje                                              100.0\n",
       "Consistencia_paises_porcentaje                                                     100.0\n",
       "Duplicados_exactos_detectados                                                       5268\n",
       "Filas_eliminadas_por_clave                                                         10684\n",
       "Outliers_IQR                                                                       58337\n",
       "Filas_capeadas                                                                     36222\n",
       "Cancelaciones_capeadas                                                              9139\n",
       "p5_Quantity                                                                          1.0\n",
       "p95_Quantity                                                                        30.0\n",
       "Umbral_cliente                                                                        15\n",
       "SHA256_dataset_original                a2f79bbdd4463df6db8a3f5a50b9c980ae8f645a370bf5..."
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CSV limpio: /home/eddndev/Documents/ESCOM/BD/01-limpieza-datos-retail/datos/processed/online_retail_limpio_Eduardo_Alonso_Sanchez_0155.csv (91.28 MiB)\n",
      "Reporte JSON: /home/eddndev/Documents/ESCOM/BD/01-limpieza-datos-retail/datos/processed/reporte_estadistico_0155.json\n",
      "Filas con el identificador escrito 0155: 134,566\n"
     ]
    }
   ],
   "source": [
    "columnas_busqueda = [\"InvoiceNo\", \"StockCode\", \"Description\", \"CustomerID\", \"Country\"]\n",
    "contiene_identificador = pd.Series(False, index=df.index)\n",
    "for columna in columnas_busqueda:\n",
    "    contiene_identificador |= df[columna].astype(\"string\").str.contains(identificador, regex=False, na=False)\n",
    "filas_con_identificador = int(contiene_identificador.sum())\n",
    "\n",
    "completitud = float((1 - df.isna().sum().sum() / df.size) * 100)\n",
    "consistencia_clave = float((1 - df.duplicated(subset=clave_negocio).mean()) * 100)\n",
    "consistencia_cancelacion = float((df[\"Es_Cancelacion\"] == df[\"InvoiceNo\"].str.upper().str.startswith(\"C\", na=False)).mean() * 100)\n",
    "consistencia_rango_capeado = float(df[\"Quantity\"].between(p5, p95).mean() * 100)\n",
    "consistencia_paises = float((df[\"Country\"] == df[\"Country\"].str.strip().str.upper()).mean() * 100)\n",
    "\n",
    "ventas_positivas_originales = float(df.loc[df[\"Total_Transaccion_Original\"] > 0, \"Total_Transaccion_Original\"].sum())\n",
    "ventas_positivas_ajustadas = float(df.loc[df[\"Total_Transaccion\"] > 0, \"Total_Transaccion\"].sum())\n",
    "ventas_netas_originales = float(df[\"Total_Transaccion_Original\"].sum())\n",
    "ventas_netas_ajustadas = float(df[\"Total_Transaccion\"].sum())\n",
    "\n",
    "reporte = {\n",
    "    \"Filas_originales\": filas_originales,\n",
    "    \"Filas_finales\": len(df),\n",
    "    \"Transacciones_validas\": int(df[\"Transaccion_Valida\"].sum()),\n",
    "    \"Transacciones_validas_ajustadas\": int(df[\"Transaccion_Valida_Ajustada\"].sum()),\n",
    "    \"Cancelaciones\": int(df[\"Es_Cancelacion\"].sum()),\n",
    "    \"Clientes_unicos_incluye_imputado\": int(df[\"CustomerID\"].nunique()),\n",
    "    \"Clientes_reales_sin_imputado\": int(df.loc[df[\"CustomerID\"] != customer_id_imputado, \"CustomerID\"].nunique()),\n",
    "    \"Productos_unicos\": int(df[\"StockCode\"].nunique()),\n",
    "    \"Total_ventas_positivas_originales\": ventas_positivas_originales,\n",
    "    \"Total_ventas_positivas_ajustadas\": ventas_positivas_ajustadas,\n",
    "    \"Total_neto_original\": ventas_netas_originales,\n",
    "    \"Total_neto_ajustado\": ventas_netas_ajustadas,\n",
    "    \"Filas_con_identificador_0155\": filas_con_identificador,\n",
    "    \"Completitud_porcentaje\": completitud,\n",
    "    \"Consistencia_clave_porcentaje\": consistencia_clave,\n",
    "    \"Consistencia_cancelacion_porcentaje\": consistencia_cancelacion,\n",
    "    \"Consistencia_rango_capeado_porcentaje\": consistencia_rango_capeado,\n",
    "    \"Consistencia_paises_porcentaje\": consistencia_paises,\n",
    "    \"Duplicados_exactos_detectados\": duplicados_exactos,\n",
    "    \"Filas_eliminadas_por_clave\": eliminadas_redundancia,\n",
    "    \"Outliers_IQR\": outliers_iqr,\n",
    "    \"Filas_capeadas\": filas_capeadas,\n",
    "    \"Cancelaciones_capeadas\": cancelaciones_capeadas,\n",
    "    \"p5_Quantity\": float(p5),\n",
    "    \"p95_Quantity\": float(p95),\n",
    "    \"Umbral_cliente\": umbral,\n",
    "    \"SHA256_dataset_original\": sha256_raw,\n",
    "}\n",
    "\n",
    "csv_path = PROCESSED_DIR / f\"online_retail_limpio_Eduardo_Alonso_Sanchez_{identificador}.csv\"\n",
    "json_path = PROCESSED_DIR / f\"reporte_estadistico_{identificador}.json\"\n",
    "metricas_csv_path = PROCESSED_DIR / f\"reporte_estadistico_{identificador}.csv\"\n",
    "top5_path = PROCESSED_DIR / f\"top5_transacciones_originales_{identificador}.csv\"\n",
    "top5_ajustado_path = PROCESSED_DIR / f\"top5_transacciones_ajustadas_{identificador}.csv\"\n",
    "\n",
    "df.to_csv(csv_path, index=False, date_format=\"%Y-%m-%d %H:%M:%S\")\n",
    "json_path.write_text(json.dumps(reporte, ensure_ascii=False, indent=2), encoding=\"utf-8\")\n",
    "pd.DataFrame([reporte]).to_csv(metricas_csv_path, index=False)\n",
    "top5_original.to_csv(top5_path, index=False)\n",
    "top5_ajustado.to_csv(top5_ajustado_path, index=False)\n",
    "\n",
    "display(pd.DataFrame.from_dict(reporte, orient=\"index\", columns=[\"Valor\"]))\n",
    "print(f\"CSV limpio: {csv_path} ({csv_path.stat().st_size / 1024**2:.2f} MiB)\")\n",
    "print(f\"Reporte JSON: {json_path}\")\n",
    "print(f\"Filas con el identificador escrito {identificador}: {filas_con_identificador:,}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91d7d450",
   "metadata": {},
   "source": [
    "## Conclusiones\n",
    "\n",
    "La limpieza deja una clave de negocio sin repeticiones y elimina los nulos mediante la estrategia asignada. La principal limitación es el capping en el percentil 5: como `p5 = 1`, las cantidades negativas se vuelven positivas. Esto puede servir para estabilizar una distribución destinada a ciertos modelos, pero sesga el ingreso y no debe presentarse como venta real. El archivo exportado conserva los valores originales y las banderas necesarias para separar ventas, devoluciones y cancelaciones durante la revisión."
   ]
  }
 ],
 "metadata": {
  "colab": {
   "name": "practica_01_limpieza_datos_0155.ipynb",
   "provenance": []
  },
  "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.12.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
