Ruptura_Projetada/estudo_itens_criticos.ipynb
2025-10-24 15:54:54 -03:00

1370 lines
91 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "d697ff2c",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n",
"c:\\Users\\joao.herculano\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\openpyxl\\worksheet\\_reader.py:329: UserWarning: Unknown extension is not supported and will be removed\n",
" warn(msg)\n"
]
}
],
"source": [
"import os\n",
"import glob\n",
"import pandas as pd\n",
"\n",
"folder_path = r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\AcerteSeuPedido\"\n",
"\n",
"file_paths = glob.glob(os.path.join(folder_path, \"*.xls\")) + glob.glob(os.path.join(folder_path, \"*.xlsx\"))\n",
"\n",
"dfs = []\n",
"\n",
"for file_path in file_paths:\n",
" try:\n",
" excel_file = pd.ExcelFile(file_path)\n",
" # Procura aba que comece com 'BOT_Itens_Críticos'\n",
" for i in excel_file.sheet_names:\n",
" if i.startswith('BOT_Itens Críticos'):\n",
" target_sheet = i\n",
" \n",
" if target_sheet:\n",
" df = pd.read_excel(excel_file, sheet_name=target_sheet, skiprows=5, usecols=lambda col: col != 'A')\n",
" df[\"source_file\"] = os.path.basename(file_path)\n",
" dfs.append(df)\n",
" else:\n",
" print(f\"[AVISO] Nenhuma aba correspondente encontrada em: {file_path}\")\n",
" \n",
" except Exception as e:\n",
" print(f\"[ERRO] Falha ao ler {file_path}: {e}\")\n",
"\n",
"if dfs:\n",
" combined_df = pd.concat(dfs, ignore_index=True)\n",
" combined_df\n",
"else:\n",
" print(\"Nenhum dado foi carregado.\")\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "bad3ffb6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(131702, 21)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"combined_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "f7a54c0d",
"metadata": {},
"outputs": [],
"source": [
"#combined_df.to_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\compiladoAcertePedido.xlsx\",index=False)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "eecd60ee",
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\compiladoAcertePedido.xlsx\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "5a671aca",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Unnamed: 0', 'CENTRO DE DISTRIBUIÇÃO', 'MATERIAL', 'DESCRIÇÃO',\n",
" 'CATEGORIA', 'DATA PREVISTA\\nREGULARIZAÇÃO',\n",
" 'Carteira Bloqueada Para Novos Pedidos?',\n",
" 'Incluir pedido?\\n(Orientação industria)', 'source_file', 'SEMANA',\n",
" 'CURVA', 'MATERIAL SUBSTITUTO', 'DESCRIÇÃO SUBSTITUTO',\n",
" 'Previsão de Atendimento\\n', 'Data de regularização ', 'Unnamed: 8',\n",
" 'Unnamed: 9', 'Unnamed: 10', 'GRID', 'Unnamed: 12',\n",
" 'Previsão de Atendimento', 'Coluna1', 'Coluna2'],\n",
" dtype='object')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "7bd2075c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>CENTRO DE DISTRIBUIÇÃO</th>\n",
" <th>MATERIAL</th>\n",
" <th>DESCRIÇÃO</th>\n",
" <th>CATEGORIA</th>\n",
" <th>DATA PREVISTA\\nREGULARIZAÇÃO</th>\n",
" <th>Carteira Bloqueada Para Novos Pedidos?</th>\n",
" <th>Incluir pedido?\\n(Orientação industria)</th>\n",
" <th>source_file</th>\n",
" <th>SEMANA</th>\n",
" <th>...</th>\n",
" <th>Previsão de Atendimento\\n</th>\n",
" <th>Data de regularização</th>\n",
" <th>Unnamed: 8</th>\n",
" <th>Unnamed: 9</th>\n",
" <th>Unnamed: 10</th>\n",
" <th>GRID</th>\n",
" <th>Unnamed: 12</th>\n",
" <th>Previsão de Atendimento</th>\n",
" <th>Coluna1</th>\n",
" <th>Coluna2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>NaN</td>\n",
" <td>CD BAHIA</td>\n",
" <td>53460.0</td>\n",
" <td>DR BOTICA COL POC/AMIZ V2 120ml</td>\n",
" <td>PERFUMARIA</td>\n",
" <td>ACIMA DE 60</td>\n",
" <td>Não</td>\n",
" <td>Não</td>\n",
" <td>Acerte-seu-pedido-Boticario-S01-1735856932687....</td>\n",
" <td>S01</td>\n",
" <td>...</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",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>NaN</td>\n",
" <td>CD BAHIA</td>\n",
" <td>59176.0</td>\n",
" <td>BOTIK GEL CONC LIMP FAC AC/GLIC V2 150g</td>\n",
" <td>LIMPEZA</td>\n",
" <td>ACIMA DE 60</td>\n",
" <td>Não</td>\n",
" <td>Não</td>\n",
" <td>Acerte-seu-pedido-Boticario-S01-1735856932687....</td>\n",
" <td>S01</td>\n",
" <td>...</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",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>NaN</td>\n",
" <td>CD BAHIA</td>\n",
" <td>50931.0</td>\n",
" <td>ESTJ NSPA 3 AMEIXAS REG/22</td>\n",
" <td>ESTOJO REGULAR</td>\n",
" <td>ACIMA DE 60</td>\n",
" <td>Não</td>\n",
" <td>Não</td>\n",
" <td>Acerte-seu-pedido-Boticario-S01-1735856932687....</td>\n",
" <td>S01</td>\n",
" <td>...</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",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>NaN</td>\n",
" <td>CD BAHIA</td>\n",
" <td>48620.0</td>\n",
" <td>DEM FLORATTA EDP FLEUR D ECLIPSE 4ml</td>\n",
" <td>DEMONSTRADOR</td>\n",
" <td>ACIMA DE 60</td>\n",
" <td>Não</td>\n",
" <td>Não</td>\n",
" <td>Acerte-seu-pedido-Boticario-S01-1735856932687....</td>\n",
" <td>S01</td>\n",
" <td>...</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",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>NaN</td>\n",
" <td>CD BAHIA</td>\n",
" <td>75478.0</td>\n",
" <td>DEM LILY EDP LOVE 4ml</td>\n",
" <td>DEMONSTRADOR</td>\n",
" <td>ACIMA DE 60</td>\n",
" <td>Não</td>\n",
" <td>Não</td>\n",
" <td>Acerte-seu-pedido-Boticario-S01-1735856932687....</td>\n",
" <td>S01</td>\n",
" <td>...</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",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 23 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 CENTRO DE DISTRIBUIÇÃO MATERIAL \\\n",
"0 NaN CD BAHIA 53460.0 \n",
"1 NaN CD BAHIA 59176.0 \n",
"2 NaN CD BAHIA 50931.0 \n",
"3 NaN CD BAHIA 48620.0 \n",
"4 NaN CD BAHIA 75478.0 \n",
"\n",
" DESCRIÇÃO CATEGORIA \\\n",
"0 DR BOTICA COL POC/AMIZ V2 120ml PERFUMARIA \n",
"1 BOTIK GEL CONC LIMP FAC AC/GLIC V2 150g LIMPEZA \n",
"2 ESTJ NSPA 3 AMEIXAS REG/22 ESTOJO REGULAR \n",
"3 DEM FLORATTA EDP FLEUR D ECLIPSE 4ml DEMONSTRADOR \n",
"4 DEM LILY EDP LOVE 4ml DEMONSTRADOR \n",
"\n",
" DATA PREVISTA\\nREGULARIZAÇÃO Carteira Bloqueada Para Novos Pedidos? \\\n",
"0 ACIMA DE 60 Não \n",
"1 ACIMA DE 60 Não \n",
"2 ACIMA DE 60 Não \n",
"3 ACIMA DE 60 Não \n",
"4 ACIMA DE 60 Não \n",
"\n",
" Incluir pedido?\\n(Orientação industria) \\\n",
"0 Não \n",
"1 Não \n",
"2 Não \n",
"3 Não \n",
"4 Não \n",
"\n",
" source_file SEMANA ... \\\n",
"0 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n",
"1 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n",
"2 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n",
"3 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n",
"4 Acerte-seu-pedido-Boticario-S01-1735856932687.... S01 ... \n",
"\n",
" Previsão de Atendimento\\n Data de regularização Unnamed: 8 Unnamed: 9 \\\n",
"0 NaN NaN NaN NaN \n",
"1 NaN NaN NaN NaN \n",
"2 NaN NaN NaN NaN \n",
"3 NaN NaN NaN NaN \n",
"4 NaN NaN NaN NaN \n",
"\n",
" Unnamed: 10 GRID Unnamed: 12 Previsão de Atendimento Coluna1 Coluna2 \n",
"0 NaN NaN NaN NaN NaN NaN \n",
"1 NaN NaN NaN NaN NaN NaN \n",
"2 NaN NaN NaN NaN NaN NaN \n",
"3 NaN NaN NaN NaN NaN NaN \n",
"4 NaN NaN NaN NaN NaN NaN \n",
"\n",
"[5 rows x 23 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ca8dedc2",
"metadata": {},
"outputs": [],
"source": [
"# Carrega o arquivo\n",
"\n",
"df = df[['MATERIAL','SEMANA','CURVA']]\n",
"df['semana_num'] = df['SEMANA'].str.extract(r'S(\\d+)').astype(int)\n",
"\n",
"# Supondo df com colunas: MATERIAL e semana ('S01', 'S02', ...)\n",
"df['semana_num'] = df['SEMANA'].str.extract(r'S(\\d+)').astype(int)\n",
"\n",
"# Ordenar os dados\n",
"df = df.sort_values(['MATERIAL', 'semana_num'])\n",
"\n",
"# Identificar rupturas de sequência para cada MATERIAL\n",
"df['grupo'] = df.groupby('MATERIAL')['semana_num'].diff().ne(1).cumsum()\n",
"\n",
"# Para cada MATERIAL + grupo, contar duração do período crítico\n",
"grupos = df.groupby(['MATERIAL', 'CURVA', 'grupo']).size().reset_index(name='duracao')\n",
"\n",
"# Agora calcular métricas por SKU\n",
"resultado = grupos.groupby('MATERIAL')['duracao'].agg(media_duracao='mean', max_duracao='max').reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "4b24bad4",
"metadata": {},
"outputs": [],
"source": [
"resultado = grupos.groupby('MATERIAL')['duracao'].agg(media_duracao='mean', max_duracao='max',cont='count').reset_index()\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ed6d7fd7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>MATERIAL</th>\n",
" <th>media_duracao</th>\n",
" <th>max_duracao</th>\n",
" <th>cont</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1004.0</td>\n",
" <td>1.456522</td>\n",
" <td>8</td>\n",
" <td>46</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1005.0</td>\n",
" <td>2.000000</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1006.0</td>\n",
" <td>1.250000</td>\n",
" <td>2</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1078.0</td>\n",
" <td>1.428571</td>\n",
" <td>3</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1080.0</td>\n",
" <td>1.000000</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3546</th>\n",
" <td>88585.0</td>\n",
" <td>1.545455</td>\n",
" <td>2</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3547</th>\n",
" <td>88646.0</td>\n",
" <td>1.200000</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3548</th>\n",
" <td>88893.0</td>\n",
" <td>1.000000</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3549</th>\n",
" <td>88997.0</td>\n",
" <td>1.166667</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3550</th>\n",
" <td>89256.0</td>\n",
" <td>1.000000</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>3551 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" MATERIAL media_duracao max_duracao cont\n",
"0 1004.0 1.456522 8 46\n",
"1 1005.0 2.000000 2 1\n",
"2 1006.0 1.250000 2 16\n",
"3 1078.0 1.428571 3 14\n",
"4 1080.0 1.000000 1 5\n",
"... ... ... ... ...\n",
"3546 88585.0 1.545455 2 11\n",
"3547 88646.0 1.200000 2 10\n",
"3548 88893.0 1.000000 1 3\n",
"3549 88997.0 1.166667 2 6\n",
"3550 89256.0 1.000000 1 4\n",
"\n",
"[3551 rows x 4 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resultado"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b555fdc8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>MATERIAL</th>\n",
" <th>CURVA</th>\n",
" <th>grupo</th>\n",
" <th>duracao</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63352</th>\n",
" <td>88997.0</td>\n",
" <td>E</td>\n",
" <td>63353</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63353</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63354</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63354</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63355</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63355</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63356</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63356</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63357</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>63357 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" MATERIAL CURVA grupo duracao\n",
"0 1004.0 A 1 2\n",
"1 1004.0 A 2 8\n",
"2 1004.0 A 3 1\n",
"3 1004.0 A 4 1\n",
"4 1004.0 A 5 2\n",
"... ... ... ... ...\n",
"63352 88997.0 E 63353 1\n",
"63353 89256.0 C 63354 1\n",
"63354 89256.0 C 63355 1\n",
"63355 89256.0 C 63356 1\n",
"63356 89256.0 C 63357 1\n",
"\n",
"[63357 rows x 4 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grupos"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "35f6424b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.int64(17)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resultado['max_duracao'].max()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "5e491a0d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Média geral de semanas em estado crítico: 1.40 ou 10 dias.\n"
]
}
],
"source": [
"media_geral = grupos['duracao'].mean()\n",
"print(f\"Média geral de semanas em estado crítico: {media_geral:.2f} ou {round(media_geral*7)} dias.\")\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "7ee00755",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.int64(17)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grupos['duracao'].max()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "c1795cb9",
"metadata": {},
"outputs": [],
"source": [
"#resultado.to_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\EstudoItensCriticos.xlsx\",index=False)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "8899d109",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>CURVA</th>\n",
" <th>media_duracao_critico</th>\n",
" <th>media_entradas_critico</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>A</td>\n",
" <td>10</td>\n",
" <td>35.852535</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>B</td>\n",
" <td>10</td>\n",
" <td>29.591413</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>C</td>\n",
" <td>10</td>\n",
" <td>17.367594</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>E</td>\n",
" <td>10</td>\n",
" <td>11.119888</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" CURVA media_duracao_critico media_entradas_critico\n",
"0 A 10 35.852535\n",
"1 B 10 29.591413\n",
"2 C 10 17.367594\n",
"3 E 10 11.119888"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Corrige o agrupamento incluindo CURVA\n",
"grupos = df.groupby(['MATERIAL', 'CURVA', 'grupo']).size().reset_index(name='duracao')\n",
"\n",
"# Duração média dos períodos críticos por CURVA\n",
"media_duracao_por_curva = grupos.groupby('CURVA')['duracao'].mean().reset_index(name='media_duracao_critico')\n",
"media_duracao_por_curva['media_duracao_critico'] = round(media_duracao_por_curva['media_duracao_critico']*7).astype('Int64') #transforma de semanas em dias\n",
"\n",
"# Quantas vezes cada SKU entrou em estado crítico\n",
"entradas_por_sku = grupos.groupby(['MATERIAL', 'CURVA']).size().reset_index(name='qtd_entradas')\n",
"\n",
"# Média de entradas por SKU da mesma CURVA\n",
"media_entradas_por_curva = entradas_por_sku.groupby('CURVA')['qtd_entradas'].mean().reset_index(name='media_entradas_critico')\n",
"\n",
"# Consolidar resultado\n",
"curva_analise = pd.merge(media_duracao_por_curva, media_entradas_por_curva, on='CURVA')\n",
"\n",
"# Exibir resultado\n",
"curva_analise\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "e3bd820a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>MATERIAL</th>\n",
" <th>CURVA</th>\n",
" <th>grupo</th>\n",
" <th>duracao</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1004.0</td>\n",
" <td>A</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63352</th>\n",
" <td>88997.0</td>\n",
" <td>E</td>\n",
" <td>63353</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63353</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63354</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63354</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63355</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63355</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63356</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63356</th>\n",
" <td>89256.0</td>\n",
" <td>C</td>\n",
" <td>63357</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>63357 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" MATERIAL CURVA grupo duracao\n",
"0 1004.0 A 1 2\n",
"1 1004.0 A 2 8\n",
"2 1004.0 A 3 1\n",
"3 1004.0 A 4 1\n",
"4 1004.0 A 5 2\n",
"... ... ... ... ...\n",
"63352 88997.0 E 63353 1\n",
"63353 89256.0 C 63354 1\n",
"63354 89256.0 C 63355 1\n",
"63355 89256.0 C 63356 1\n",
"63356 89256.0 C 63357 1\n",
"\n",
"[63357 rows x 4 columns]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grupos"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "e83b92d0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>MATERIAL</th>\n",
" <th>qtd_entradas</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1004.0</td>\n",
" <td>46</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1005.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1006.0</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1078.0</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1080.0</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3546</th>\n",
" <td>88585.0</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3547</th>\n",
" <td>88646.0</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3548</th>\n",
" <td>88893.0</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3549</th>\n",
" <td>88997.0</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3550</th>\n",
" <td>89256.0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>3551 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" MATERIAL qtd_entradas\n",
"0 1004.0 46\n",
"1 1005.0 1\n",
"2 1006.0 16\n",
"3 1078.0 14\n",
"4 1080.0 5\n",
"... ... ...\n",
"3546 88585.0 11\n",
"3547 88646.0 10\n",
"3548 88893.0 3\n",
"3549 88997.0 6\n",
"3550 89256.0 4\n",
"\n",
"[3551 rows x 2 columns]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"entradas_por_sku2 = grupos.groupby(['MATERIAL']).size().reset_index(name='qtd_entradas')\n",
"\n",
"entradas_por_sku2"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "7086d840",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Média geral de semanas em estado crítico: 1.40 ou 10 dias.\n",
"\n",
"Arquivo Excel salvo com sucesso em:\n",
"C:/Users/joao.herculano/GRUPO GINSENG/Assistência Suprimentos - 2025/CRITICOS INDUSTRIA/analise_curva_resultado20250604.xlsx\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMu5JREFUeJzt3QmcVWX9P/CHRcEFcEdNVEyKFJfcSi2D0pSQwiyXXLHUFDHTMtHEcAn3yDQtN7QUcZef/bIUCzU1F9S0XCI1+eeWoqCoqHD/r+/zep353Rlmhotn4M7A+/16XZi5c5fnnnPuvc/n2U6nSqVSSQAAACV0LnNnAACAIFgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAXRYkyZNSmeccUb64IMP6l0UaFemTZuWfvKTn6Snn3663kUBliKCBZDef//9NHDgwLTyyiunM888M02fPj2ttNJKqT176KGH0l577ZU23HDDtMwyy9R0n06dOuXKVmH8+PH5uueff75NyxbbsH///mnevHmt3i6eN54/ylGI8sV1i8Lrr7+eVlhhhfS///u/i+Txl1ZNj6t6q1Qqafjw4enee+9N/fr1a/W266+/fjrwwAMXW9mAJZtgASUUFdPi0r1797T22munnXfeOZ133nnprbfeSh3BHXfckV5++eV03HHHpXHjxqX11lsvfec730nt1Ztvvpn22GOPdPrpp6fdd989tSezZs3KvSg/+tGPUufO7esjdtVVV8379cQTT0xLmwhT7anyvyhdcMEF6dlnn01XXXVVPgYjYMRrj/cN/+e9995LP/vZz9JnPvOZ1KtXr/z5/YlPfCIdccQR6Zlnnmm4XQSvFVdcscXHib9Vh7M///nPjb4XunTpktZYY430jW98Iz355JMNt9t0003Tuuuum4NgS7bffvvUu3fv9OGHHzZcF49RfN/Yp7Q37etbDzqok08+Of3mN79JF154YRo5cmS+7qijjkqbbLJJ+tvf/pbau89//vPprrvuypXhf//73+nFF19MZ599dmqvHn300fTjH/84HXnkkaUeZ7/99kvvvvtuDlJt5bLLLsuVgL333vsj3T9eV5RpUfnud7+bpk6dmu688860tAWLMWPGpCXdCy+8kIPjNddck1ZfffV8XQSLeO3NVUJjqNTFF1+cljavvfZa+tznPpeOPvroXOmPz/AIZMOGDctDLAcMGFD6OeLzKb4XLrnkkrTPPvuk3/3ud/mzNhpxQlwXvcN33313iz2a9913X9pzzz1T165dG67/7W9/m9Zcc8388/XXX1+6nNCW/u9IBT6ywYMHp6222qrh91GjRuWK26677pq++tWv5ham5ZZbrvTzRIU1htcsu+yyqS316NEjX0IMKyq+tNqrGLYVl7KiJTEubenyyy/P+zxaEz+KqEBUVyLa2qc+9alcaYreti9+8YuL7HlYvOJzIYY0Rgv4G2+8UfP9unXrlpbU3oj4nGyp1zB6GB555JFcMW/a63nKKaekE044oXQZIkREL0Xhk5/8ZDrssMPSlVdemY499tj0rW99K39XXH311WmHHXaY7/4TJkzIvRkRQArxe9w+7vvcc8/lXqn23LvM0kePBSwiUWmLlsPoAYgWpgVViuOLLsY7Nx1/Hz0HMTzp4x//eK4E/OMf/8gViNGjR6ctt9wyd+HHuPn4EvvTn/7UbIXj5z//ee49icputGLusssueY5C4dJLL83ljZa7eI6NNtoo974055e//GXaeOON8+1i2NeIESNq6o4v5g7EEIN99903lzvKEtsoviyj5e5rX/ta6tmzZw4255xzznyPMWfOnHTSSSfleRXx/H369Mlf0HF909t9//vfz48fgSkq+v/v//2/+R6vuTkWt9xySxoyZEh+bfEcsd2jojF37twFvsb4oo8eqh133HG+v8U2in0crzvmrxxwwAHNbrfm5lhEWKll/8Q+jWF4q622Wg6yffv2TQcddNB8t9tpp53S//zP/7Q6BKO63NH7Fts6nju2fQz1qp4/Un2sRqvvBhtskJZffvn05S9/Oe/XeJ7Yhuuss04uV+znGTNmpFo89dRTuXK2yiqr5OM3Any0KFeLyfvRIh/zCeI2MeQrWqNvv/32/PfY7lGuUD1EpRDl3m677fL9onzxvmquJbjW4ypEpTUaHOJ4jqEyX/rSl9L9999f02uu5T0b5Y8hO1GxLN6Pt912W8PfimFf8f8Pf/jD/HMcD8VrL4755uZYxD6P1xl/i8eN/bb//vvnVv7Cq6++mr797W/nYTpRxs022yxdccUVNb2+eNxodPnjH/+YNt9883z/OKZvvPHG+W4bQ7q++c1v5v0fx9RnP/vZ3PJfrRh6FL000eP3sY99LN82hiU2569//Wt+jCh/c0Mp4zUvih7b+IwO//rXv/L/8Z6KQBHHWnMLUESAiM+fGKpV+Mtf/pL3Xcwvi0v0NLd0DEI96LGARSiG2hx//PH5C/Tggw/+SI8RlcpofTvkkEPyF158wcYXZnSvx3CbeNyYyxHhICqVDzzwQP6yLsSXZ1Sgo5ITLVvR6xFd71HJKXpZIixExSAqStFaHpXOww8/PFdwIjgUopISFbioOEfLWwyjiArugw8+mL/waplEHd360Woe8yPiy/3UU0/Nr+lXv/pVrjxHpTUqSz/4wQ/S1ltv3dCSF2WJ8t1zzz15W8RjPP7443mMdISVm2++ueE54nVGmItWvagwRu9RhIVaxLaKimAMkYj/474R4mKbn3XWWa3eN4achC222KLR9VGxjsp0lD2GIkXZb7rpphwuahHbOCqPre2fqOhFRT4qoTFXJsJLVECaq6xFxTm229///vdWh3y888476Qtf+EL6z3/+kw499NDcGh6vMVpZX3rppRx4q8V+i9AbwwEjOMQk9pgLE/s1Kn8x1C5WK/rFL36R928MG2tNlC/GmEdFMV5TBOhrr702D1e54YYb0m677dZwXI4dOzbv92222Sbvq6iEx5CvCFFR9hjeF0EjhqY0FZX42LbRMhzljwpqVGZvvfXWRsdNrcdVlDsqkREqIvjG+yKO72hQmDJlSqOKYnNqec+GeP7YHhEwIkxWN0wUvv71r+f3R7R+xz6P24VimFRTb7/9di579LJGKI1jOQJFhLmowMb9Y6hevJbYl/HcEViuu+66HFAilHzve99LC/LPf/4zfxbE+yHeB/E5F9s8wlHss/DKK6/k7RzHYQwriuAX4SX2VVTGi/1fiPAavRRxbEUIbKlntwim8fm8OBVhLhbJKMQxF59nf/jDH3LYKsRn2xNPPJE/e5q+xyJsxGdjvHcjQMW+LcIj1F0F+Mguv/zyaPKtPPjggy3eplevXpVPf/rTDb9/4QtfyJemDjjggMp6663X8Ptzzz2XH7tnz56VV199tdFtP/zww8qcOXMaXffGG29UevfuXTnooIMarrvzzjvzYxx55JHzPd+8efMafp49e/Z8f995550rG2ywQcPvUYZll1228uUvf7kyd+7chuvPP//8/ByXXXZZpTUnnXRSvt0hhxzS6HWss846lU6dOlVOP/30Rq9lueWWy9uk8Jvf/KbSuXPnyt13393ocS+66KL8uH/5y1/y748++mj+/fDDD290u29961v5+ihH0/0X27rwzjvvzFf2Qw89tLL88stX3nvvvVZf449//OP8eG+99Vaj62+++eZ8/ZlnntnotX/+85/P10c5mm6nas2Vqen+uemmmxZ4LBbuvffefNuJEye2ertTTjmlssIKK1SeeeaZRtcfd9xxlS5dulReeOGFRsfq6quvXnnzzTcbbjdq1Kh8/WabbVb54IMPGq7fe++987G0oO35pS99qbLJJps0ul0ct9ttt12lX79+DdfF4w8ZMqTVxxoxYsR827Wl7fv+++9XBgwYUPniF7/YcN3CHFfDhg3Lr+9f//pXw3UvvvhipUePHpUddtih1XLW+p6N28T74e9///t8t2tanrPOOmu+47wQnznV77PRo0fn2954440tPv+4cePybX7729822mbbbrttZcUVV6zMmjWr1dcYzxn3v+GGGxqumzlzZmWttdZq9Fl51FFH5dtVv+fjvdW3b9/K+uuv3/A59Kc//SnfLt4Pzb1Xmtptt93y7eNzphaxfeJ90JL4W/U2LMoTn4n//e9/876/7bbbKhtuuGH+rHvggQcabjtjxoxKt27d8nui6XssHuPpp59utI1XXXXVygknnNDo+IvjH9oLQ6FgEYtW7zKrQ0VXfdPWxZgXULTGRat1tA5Hq2a0ZkYrbSFadWOIQAwfaqp6KEi0ehVmzpyZWyijpTqGIcTvxcpR0Zobw2Kqxy1Hj0m0zDYdntCS6vHA8TqizFEXilbaQrS2x3jkeP5CtIhGS38s4xrlKy7FPIFiGFixlGrTid1R7lpUz4WJ/RbPES240Woaw3IWtJxr9Cg0XUEmyhTXRy9P9WsvJvovTJla2j/F8sDRyr6g83oULabVQ1uaE9s8XnvcvnqbR49VDA2LYRjVosU5hnoVipb5GPpWPW8kro9jKXpCWhLHdLTIR49HsR/iEts4euaixbu4f7z26CWI6z6K6u0b8xNim8brrn4v1XpcxXaJHsroVYkhYYW11lor93REr1VLQ3QW5j0b4hiIIURtKZ4/ei+b9gZUP39sixiuWL1AQfTKxLaJHo/olVmQGGpY/RzxGRLDrWIIWTG5OZ4neqBiWFsh3lvRwh+t/zEstFr0fNQyl63Y/sW8skUlenziszteawxli+Mqesyi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t9xyy0JtA2hrneKfRRdbgPYklrqMScgLM+yKhROt2dGyHi3T1UvothexPGosExstzSZ6Ug/RwxE9e7EaF7BkMccCliIxNCPOqNvc5HHaRsxdiFWU4izdbb2iVlkxFyHGlcdQHaECgLZmjgUsBWIyYIxhLlrUq+dh0PaiVygu7U0sh2vfA7CoCBawFIhJzjGpL1YOiknW1UuhAgC0BXMsAACA0syxAAAAShMsAACA0gQLAACgtCV+8nYs9xhnrYwzgVpeEQAAahfTsd9666209tprL/CM90t8sIhQ0adPn3oXAwAAOqzp06enddZZZ+kOFtFTUWyMnj171rs4AADQYcyaNSs30hd16qU6WBTDnyJUCBYAALDwaplSYPI2AABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAB07WNx1111p6NCh+RThsTbuzTffPN8pxEePHp3WWmuttNxyy6Udd9wx/fOf/6xbeQEAgHYYLGbPnp0222yzdMEFFzT79zPPPDOdd9556aKLLkp//etf0worrJB23nnn9N577y32sgIAAO30zNuDBw/Ol+ZEb8W4cePSj3/84/S1r30tX3fllVem3r17556NvfbaazGXFgAA6HBzLJ577rn08ssv5+FPhV69eqXPfOYz6b777mvxfnPmzEmzZs1qdAEAAJbgHovWRKgI0UNRLX4v/tacsWPHpjFjxqT2Zv3jflfvItABPH/6kNReOGaphWOWjsYxS0fzfDs6Zjtsj8VHNWrUqDRz5syGy/Tp0+tdJAAAWOK122Cx5ppr5v9feeWVRtfH78XfmtOtW7fUs2fPRhcAAGApDRZ9+/bNAWLy5MkN18V8iVgdatttt61r2QAAgHY0x+Ltt99O06ZNazRh+9FHH02rrLJKWnfdddNRRx2VTj311NSvX78cNE488cR8zothw4bVs9gAAEB7ChYPPfRQGjRoUMPvRx99dP7/gAMOSOPHj0/HHntsPtfFIYcckt588830uc99Lt12222pe/fudSw1AADQroLFwIED8/kqWhJn4z755JPzBQAAaL/a7RwLAACg4xAsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAYMkOFnPnzk0nnnhi6tu3b1puueXSxz/+8XTKKaekSqVS76IBAABVuqZ27IwzzkgXXnhhuuKKK9LGG2+cHnrooTR8+PDUq1evdOSRR9a7eAAAQEcIFvfee2/62te+loYMGZJ/X3/99dOECRPSAw88UO+iAQAAHWUo1HbbbZcmT56cnnnmmfz7Y489lu655540ePDgFu8zZ86cNGvWrEYXAABgKe6xOO6443Iw6N+/f+rSpUuec3HaaaelffbZp8X7jB07No0ZM2axlhMAAJZ27brH4tprr01XXXVVuvrqq9PUqVPzXIuzzz47/9+SUaNGpZkzZzZcpk+fvljLDAAAS6N23WPxwx/+MPda7LXXXvn3TTbZJP373//OvRIHHHBAs/fp1q1bvgAAAItPu+6xeOedd1Lnzo2LGEOi5s2bV7cyAQAAHazHYujQoXlOxbrrrpuXm33kkUfSueeemw466KB6Fw0AAOgoweIXv/hFPkHe4Ycfnl599dW09tprp0MPPTSNHj263kUDAAA6SrDo0aNHGjduXL4AAADtV7ueYwEAAHQMggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAAAs+cHiP//5T9p3333TqquumpZbbrm0ySabpIceeqjexQIAAKp0Te3YG2+8kbbffvs0aNCg9Pvf/z6tvvrq6Z///GdaeeWV6100AACgowSLM844I/Xp0yddfvnlDdf17du3rmUCAAA62FCoSZMmpa222ip985vfTGussUb69Kc/nS6++OJW7zNnzpw0a9asRhcAAGApDhbPPvtsuvDCC1O/fv3SH/7wh3TYYYelI488Ml1xxRUt3mfs2LGpV69eDZfo8QAAAJbiYDFv3ry0xRZbpJ/+9Ke5t+KQQw5JBx98cLroootavM+oUaPSzJkzGy7Tp09frGUGAIClUbsOFmuttVbaaKONGl33qU99Kr3wwgst3qdbt26pZ8+ejS4AAMBSHCxiRainn3660XXPPPNMWm+99epWJgAAoIMFi+9///vp/vvvz0Ohpk2blq6++ur061//Oo0YMaLeRQMAADpKsNh6663TTTfdlCZMmJAGDBiQTjnllDRu3Li0zz771LtoAABARzmPRdh1113zBQAAaL/adY8FAADQMQgWAABAaYIFAABQn2AxderU9Pjjjzf8fsstt6Rhw4al448/Pr3//vvlSwUAACz5weLQQw/N55MIzz77bNprr73S8ssvn6677rp07LHHtnUZAQCAJTFYRKjYfPPN888RJnbYYYd8jonx48enG264oa3LCAAALInBolKppHnz5uWf77jjjvSVr3wl/9ynT5/02muvtW0JAQCAJTNYbLXVVunUU09Nv/nNb9KUKVPSkCFD8vXPPfdc6t27d1uXEQAAWBKDRZz9OiZwH3HEEemEE05IG264Yb7++uuvT9ttt11blxEAAFgSz7y96aabNloVqnDWWWelLl26tEW5AACAJT1YtKR79+5t+XAAAMCSHCzmzp2bfvazn6Vrr702vfDCC/Odu2LGjBltVT4AAGBJnWMxZsyYdO6556Y999wzzZw5Mx199NHp61//eurcuXP6yU9+0valBAAAlrxgcdVVV6WLL744HXPMMalr165p7733TpdcckkaPXp0uv/++9u+lAAAwJIXLF5++eW0ySab5J9XXHHF3GsRdt111/S73/2ubUsIAAAsmcFinXXWSS+99FL++eMf/3j64x//mH9+8MEHU7du3dq2hAAAwJIZLHbbbbc0efLk/PPIkSPTiSeemPr165f233//dNBBB7V1GQEAgCVxVajTTz+94eeYwL3uuuum++67L4eLoUOHtmX5AACApeU8Fttuu22+AAAAS6eag8WkSZPS4MGD0zLLLJN/bs1Xv/rVtigbAACwpAWLYcOG5dWg1lhjjfxzSzp16pRPoAcAACw9ag4W8+bNa/ZnAACAhZ5jEaFi/Pjx6cYbb0zPP/987qHYYIMN0u67757222+//DsAALB0WajlZiuVSp4/8Z3vfCf95z//ySfJ23jjjXPAOPDAA/MytAAAwNJnoXosoqfirrvuyuewGDRoUKO/3XnnnXnuxZVXXpnPZwEAACw9FqrHYsKECen444+fL1SEL37xi+m4445LV111VVuWDwAAWNKCxd/+9re0yy67tPj3WI72sccea4tyAQAAS2qwmDFjRurdu3eLf4+/vfHGG21RLgAAYEkNFnF+iq5dW56W0aVLl/Thhx+2RbkAAIAldfJ2rAoVqz9169at2b/PmTOnrcoFAAAsqcHigAMOWOBtrAgFAABLn4UKFpdffvmiKwkAALB0zLEAAABojmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAAAsXcHi9NNPT506dUpHHXVUvYsCAAB0xGDx4IMPpl/96ldp0003rXdRAACAjhgs3n777bTPPvukiy++OK288sr1Lg4AANARg8WIESPSkCFD0o477ljvogAAAM3omtq5a665Jk2dOjUPharFnDlz8qUwa9asRVg6AACg3fdYTJ8+PX3ve99LV111VerevXtN9xk7dmzq1atXw6VPnz6LvJwAALC0a9fB4uGHH06vvvpq2mKLLVLXrl3zZcqUKem8887LP8+dO3e++4waNSrNnDmz4RLhBAAAWIqHQn3pS19Kjz/+eKPrhg8fnvr3759+9KMfpS5dusx3n27duuULAACw+LTrYNGjR480YMCARtetsMIKadVVV53vegAAoH7a9VAoAACgY2jXPRbN+fOf/1zvIgAAAE3osQAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQIAAChNsAAAAEoTLAAAgNIECwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAGDJDhZjx45NW2+9derRo0daY4010rBhw9LTTz9d72IBAAAdKVhMmTIljRgxIt1///3p9ttvTx988EH68pe/nGbPnl3vogEAAFW6pnbstttua/T7+PHjc8/Fww8/nHbYYYe6lQsAAOhAPRZNzZw5M/+/yiqr1LsoAABAR+mxqDZv3rx01FFHpe233z4NGDCgxdvNmTMnXwqzZs1aTCUEAIClV4fpsYi5Fk888US65pprFjjhu1evXg2XPn36LLYyAgDA0qpDBIsjjjgi3XrrrelPf/pTWmeddVq97ahRo/KQqeIyffr0xVZOAABYWrXroVCVSiWNHDky3XTTTenPf/5z6tu37wLv061bt3wBAAAWn67tffjT1VdfnW655ZZ8LouXX345Xx9DnJZbbrl6Fw8AAOgIQ6EuvPDCPJxp4MCBaa211mq4TJw4sd5FAwAAOtJQKAAAoP1r1z0WAABAxyBYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAJQmWAAAAKUJFgAAwNIRLC644IK0/vrrp+7du6fPfOYz6YEHHqh3kQAAgI4ULCZOnJiOPvrodNJJJ6WpU6emzTbbLO28887p1VdfrXfRAACAjhIszj333HTwwQen4cOHp4022ihddNFFafnll0+XXXZZvYsGAAB0hGDx/vvvp4cffjjtuOOODdd17tw5/37ffffVtWwAAMD/6Zrasddeey3NnTs39e7du9H18ftTTz3V7H3mzJmTL4WZM2fm/2fNmpXqad6cd+r6/HQM9T5OqzlmqYVjlo7GMUtHM6vOx2zx/JVKpWMHi49i7NixacyYMfNd36dPn7qUBxZGr3H1LgEsHMcsHY1jlo6mVzs5Zt96663Uq1evjhssVltttdSlS5f0yiuvNLo+fl9zzTWbvc+oUaPyZO/CvHnz0owZM9Kqq66aOnXqtMjLTO3pN8Le9OnTU8+ePetdHFggxywdjWOWjsYx2z5FT0WEirXXXnuBt23XwWLZZZdNW265ZZo8eXIaNmxYQ1CI34844ohm79OtW7d8qbbSSistlvKy8OKDw4cHHYljlo7GMUtH45htfxbUU9EhgkWI3ocDDjggbbXVVmmbbbZJ48aNS7Nnz86rRAEAAO1Duw8We+65Z/rvf/+bRo8enV5++eW0+eabp9tuu22+Cd0AAED9tPtgEWLYU0tDn+iYYrhanPSw6bA1aK8cs3Q0jlk6Gsdsx9epUsvaUQAAAB31BHkAAEDHIFgAAAClCRYAAEBpggWL3X333ZdPfDhkyJB6FwUW6MADD8wn1ywucbLNXXbZJf3tb3+rd9GgRbGK4siRI9MGG2yQJ8LGSceGDh2azwMF7f1ztrjEZy0di2DBYnfppZfmL7y77rorvfjii/UuDixQfLm99NJL+RIVs65du6Zdd9213sWCZj3//PP55LJ33nlnOuuss9Ljjz+el2kfNGhQGjFiRL2LBwv8nC0uEyZMqHexWBKXm2XJ8fbbb6eJEyemhx56KLeojR8/Ph1//PH1Lha0Klp811xzzfxz/H/cccelz3/+8/kcO6uvvnq9iweNHH744bm194EHHkgrrLBCw/Ubb7xxOuigg+paNqjlc5aOS48Fi9W1116b+vfvnz75yU+mfffdN1122WXJisd0tHD829/+Nm244YZ5WBS0JzNmzMi9E9EzUR0qCiuttFJdygUsHQQLFvswqAgURbfnzJkz05QpU+pdLGjVrbfemlZcccV86dGjR5o0aVLueevc2Uco7cu0adNyY0004EBH/ZwtLj/96U/rXSwWkqFQLDZPP/107pq/6aab8u8xTn3PPffMYWPgwIH1Lh60KMamX3jhhfnnN954I/3yl79MgwcPzsfzeuutV+/iQQM9wCwJn7OFVVZZpW7l4aMRLFhsIkB8+OGHae211270JRjjKs8///zUq1evupYPWhJDSmLoU+GSSy7Jx+vFF1+cTj311LqWDar169cvz6946qmn6l0UKPU5S8ekH5/FIgLFlVdemc4555z06KOPNlwee+yxHDSs/EBHEhW3GAb17rvv1rsoMF8L784775wuuOCCNHv27Pn+/uabb9alXMDSQY8Fi23sZAwh+fa3vz1fz8Tuu++eezO++93v1q180Jo5c+bkVcxCHMfRwxaTuOO8ANDeRKjYfvvt0zbbbJNOPvnktOmmm+bGndtvvz0PNXnyySfrXURo9XO2EEOmV1tttbqViYUnWLBYRHDYcccdmx3uFMHizDPPzCcciy9AaG9ilZ211lor/xyTt2Ni7HXXXWduEO1SnBRv6tSp6bTTTkvHHHNMPh9ALIsc57ZoOoYd2uPnbCFWkDSsr2PpVDHTCwAAKMkcCwAAoDTBAgAAKE2wAAAAShMsAACA0gQLAACgNMECAAAoTbAAAABKEywAAIDSBAsAAKA0wQKAhfLyyy+nkSNHpg022CB169Yt9enTJw0dOjRNnjw5/71Tp07p5ptvnu9+Bx54YBo2bFjD7wMHDsy3jUv37t3TJz7xiTR27NhUqVTS+++/n1ZbbbV0+umnN1uGU045JfXu3Tt98MEHDdf1798/lyfKB8DiJ1gAULPnn38+bbnllunOO+9MZ511Vnr88cfTbbfdlgYNGpRGjBix0I938MEHp5deeik9/fTTadSoUWn06NHpoosuSssuu2zad9990+WXXz7ffSJ4jB8/Pu2///5pmWWWydfdc8896d13303f+MY30hVXXNEmrxWAhSNYAFCzww8/PPcwPPDAA2n33XfPvQwbb7xxOvroo9P999+/0I+3/PLLpzXXXDOtt956afjw4WnTTTdNt99+e/7bt7/97fTMM8/k0FBtypQp6dlnn81/L1x66aXpW9/6Vtpvv/3SZZdd1gavFICFJVgAUJMZM2bk3onomVhhhRXm+/tKK630kR87eiHuvvvu9NRTT+XeirDJJpukrbfeer6gEL0Y2223XR76FN5666103XXX5R6OnXbaKc2cOTM/FgCLl2ABQE2mTZuWA0BRoW8Lv/zlL9OKK66Y50bssMMOad68eenII49s+Hv0SkRoePvttxtCxPXXX58OOuighttcc801qV+/frnnpEuXLmmvvfbKPRgALF6CBQA1iVDR1vbZZ5/06KOPpr/85S9p8ODB6YQTTsi9EYW99947zZ07N1177bX594kTJ6bOnTunPffcs+E20aMRvRWF+DnCSIQQABYfwQKAmkSvQMyviOFKrenRo0cejtTUm2++mXr16tXouvh9ww03zEOeIjycf/756Y477mj4e8+ePfOE7GISd/y/xx575F6O8I9//CPP7Tj22GNT165d8+Wzn/1seuedd3JPBgCLj2ABQE1WWWWVtPPOO6cLLrggzZ49u9ngED75yU+mhx9+uNHfotfhsccey5O9WxJh4Xvf+176wQ9+0Kh3JIZDxQTuW2+9Nd17773zTdqOIVTx2NHzUVxiMrnhUACLV6fKoujbBmCJFKsxbb/99jlknHzyyXkVpw8//DCv5HThhRemJ598Mk2YMCFX/s8+++w8mTpCyC9+8Yt0ww035GVl4/wTxXksNt988zRu3LhGE8TXWWeddOWVV+aeihBfUxFIXn/99XzfeI4Q57D42Mc+lsvx3e9+t1E54zYbbbRReuKJJ/LcCwAWPT0WANQsToo3derUfN6KY445Jg0YMCCHhzg5XgSLYl7EJZdckuc+xDkvdtlll3zSurvuuqshVLQkAkucn+InP/lJnsgdYvhVTNZ+4403Gk3anjRpUg4bu+2223yP86lPfSpf9FoALD56LAAAgNL0WAAAAKUJFgAAQGmCBQAAUJpgAQAAlCZYAAAApQkWAABAaYIFAABQmmABAACUJlgAAAClCRYAAEBpggUAAFCaYAEAAKSy/j91tvbGc5klHwAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 800x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPY5JREFUeJzt3QucTfXex/HfuIfMhIRMcit3Pakkl4hIKpXuCiUdJR2XLnROF1KkjkslCqXO6UKFSkVRkaJCRC4hDhUpzIz7dT+v7/95rf3s2XMx25qZvWfm8369FrPXWnut/1p7rb3/v/9txQUCgYABAAAAgA+F/LwZAAAAAITAAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAxatGiRTZ48GD766+/op2UmLd582Z7/PHHbcWKFdFOCpCr3n33XXv22Wft2LFj0U4KABBYALFo27ZtdvXVV1uhQoWsfPny0U5OTDt8+LDdcMMN9uOPP1q9evWy9J7u3bvbmWeemWpeXFycC05y0qZNm9x+Jk+enKP7yYv0eehzQdb99NNP1qVLFzvttNPcd0VGvvzyS3fd6X8AyEkEFkAOUMZRP+QlSpSw3377Lc3yVq1aWf369dN979GjR+3mm2+2q666yh555JFcSG3e9uCDD1rhwoXtjTfeyDRzhaxZtWqVC7AUBCF2qYaiR48e1rVrV7vtttvcvBdffJGgNR0bNmywv/3tb1a9enX3nVymTBlr1qyZjRkzxvbv3x9cT9/Z9957b4Y1Q+HBmQJhzfOm4sWL21lnnWWPPvqoHThwwK2zdOlSt+yf//xnhulbt26dW6d///5pvts0/8Ybb8yGswDkjiK5tB+gQDp48KANHz7cnn/++Sy/Z+3atdaxY0fr169fjqYtP0hKSrJTTjnFPvjgAzvppJN8bUsZjCJF+EpUYKEmeAp+w2t1EDuUKVbmNfS7RYGFajjDa35atmzpru9ixYpZQfPRRx/Z9ddf7zL9CsJUoHPo0CFbsGCBPfDAA67W5+WXXz7h7Wu7EydOdH8nJyfb+++/b0888YQLZlTYce6551rt2rXtrbfesqFDh6a7jTfffNP9f+uttwbnBQIB9x7dgx9++KHt3r3bTj755BNOJ5BbKN4DctA555xjEyZMsN9//z3L76lbt67df//9rhQ+FktJvZK4WJCQkOBKB8uVK+d7WyrJJLCIjDI/oSW+yHl79+51/6vgYdmyZe66PR7V5Gm9/Fij552P9GzcuNFuuukmq1q1qguYFYz17NnTevfu7TLtmpfV5pMZ0XeGAgJN2u7s2bPtwgsvdNv/448/3DpqrvbLL7+4fnPp0boKPhSEeFQz8uuvv9orr7xiR44csWnTpvlKJ5Bb8t+3DBBDHn74Yde0SbUWJ9r2Prztv/7WvJ9//tn9mMXHx9upp57qmk0po7dlyxbr1KmTq+6vWLGi/etf/0q3JuWxxx6zmjVruhK3xMREV+2u+eH7VtMAlbzpB1jrzpo1yy374YcfrEOHDm4/pUuXtjZt2mT4w5nesarD6dixY13zhJIlS1q7du1c2nUMKvGrUqWKq4XQsezcuTPNdj755BNr0aKFlSpVypXkqZZHpY/hZsyY4UoplbHS/9OnT083Xen1sTjRY/RqU1RyrM9HAVC3bt3cvPSsWbPGrrvuOitbtqxL53nnnedqYbIa7I0ePdp9Pnqv2tur2ceuXbtSraeSzyuuuMKV1F5wwQVuXZ37119/PbiOrj+V7krr1q2DTTy85h/eNpR5Uhr1+bz00ktu2auvvmqXXHKJVahQwV0nCpDHjRuXJr36fFVyq89Xn7v2k97nps9cAXaDBg3cuddnoM9i+fLladZVqb2OX9tTDZbS5pUCZybS++Cdd95xx6Xjbtq0aXCwAJ0DbUPnVDU9WW1GpmaSas5UuXJlt/9q1arZ3Xff7UrUvc9D+543b57dc8897tzqvIUu8/alz0bnUet6n5vSklkfi2+//dYuv/xyd850HzVs2NBlvkN9/vnnwftM17Hux9WrVx/32Lx9TpkyxX0P6rtI21ATT93n4XRuGzdu7M6tal303RbejFT3k64F1QYo3brvlWnPyIgRI2zPnj02adIkq1SpUprl+sz+/ve/W3bSMTdv3txd5womxEtjetfkkiVLXC11+HHoO1fXmu6Ptm3butdAXkDxHJCDlFFQ9btqLQYOHOgyENlF7W7r1KnjghZV9yuzpoypMjnK4D399NPux0iZs/PPP981h/AyovpxVwbzrrvucttQBmnUqFEuWFFGPDxjMXXqVJex0g++l4FRZkOZPWXEihYt6varjIwyNk2aNDlu+pU2ZaD69OnjMpHKBKgTttKuTMlDDz1k69evd5lGHYNK7jz//ve/XUa9ffv27jj37dvnMrH6QVcw4DXh+fTTT61z587uB3rYsGG2Y8cOu/3224OZs8z4OUZlKpQB0znu1auXO8cKaJTm9Paj9t6nn366u0aU+dL5Vuf99957z6655ppM06kgQplMHdd9993nSmlfeOEFdx6+/vprl26PzqcCGGVmlRadU2XWlKFTxlzXiLbx3HPPucyg0i3e/6JMkPoAab8q/T377LPdfJ1/bUPXlkpx1XxDmWFdbyrJ9aiGSdeqMoaa1AZdQaWXmfYoU6ZrUYGO7iOV/ur8X3zxxa6k2buXdG8pzTouZRJVo6aO/Mo033LLLRmet0jvg6+++soFe96x6HpSkKVrQ02QdKwK5nQd33HHHe6+yYxqMRXgKdjU/lVirYy02vLreg5ttqRtq/BA5y6jEnoFl7qXlPH+xz/+4eYpyMzIZ5995tKvDLfOmzL+ChhmzpwZzGzPmTPHBXMKQBV0q3ZK96OuV31uWWkq9+STT7rMtu7n7du3u3Qqo6zaFq/5onf96ntK51WftQIcXb+6jhXQeFR6r/te97oKJxRMZkTXoNJ+0UUXWW7ygj0FbKLrV2nQfa3rK7Q22gs2Qq9VBba69wcMGOBe637T+dGgHvqcgJgWAJDtXn311YBur++//z6wYcOGQJEiRQL33XdfcPnFF18cqFevXvD1xo0b3fp6XzjNf+yxx4Kv9bfm3XXXXcF5R44cCVSpUiUQFxcXGD58eHD+rl27AieddFKgW7duwXn//ve/A4UKFQp89dVXqfYzfvx4t92vv/461b617k8//ZRq3auvvjpQrFgxd2ye33//PXDyyScHWrZsmem58Y711FNPDSQlJQXnDxo0yM1v1KhR4PDhw8H5N998s9vXgQMH3Ovdu3cHEhISAj179ky13W3btgXi4+NTzT/nnHMClSpVSrWfTz/91O2natWqmZ5nP8c4Y8YMt70RI0ak+oxatGiR5nNu06ZNoEGDBsHjk2PHjgUuuuiiQK1atTLdjz5Dbe+NN95INX/WrFlp5ut4NW/+/PnBedu3bw8UL148MGDAgOC8d955x633xRdfpNmftw1tP9y+ffvSzGvfvn2gevXqqfanc9qxY0d3jJ6HH37YbTf0OtX5OHr0aJprR+kdMmRIcF6nTp1S3UtZFel9oP1q/56XXnrJza9YsWIgJSUlzXUcum56unbt6vav74hw3rnxvkeaN2/urp9Q3rLQ/eg86LslnD7L0M9U26pWrZr7PPUdkd6+vfunQoUKgR07dgTnLV++3KVb6c+Mt8/TTz891fmZOnWqmz9mzBj3+tChQ24f9evXD+zfvz+43syZM916jz76aHCerg/NGzhwYOB4kpOT3bq6PrJK6/fu3TvdZendF0pPqVKlAn/++aeb1q9fH3j22Wfd97COJ/Rcjh071r1/9uzZwXm6vnV+mjZtmmpf7777rlt33bp17rXOX4kSJQKjRo3K8rEA0UJTKCCHqcRMo7aog+DWrVuzbbt33nln8G+VgKn5h34bVRrtUUmfSpS9KnmvyYFKZ1VCqmdkeJNqCuSLL75ItR+VEKvE36OmXaoJUIm6js2jkk+VuqkEOCUl5bjpV0m0mgl5vBoANYEI7eug+SrN9ppFqKRVpbwqxQtNv86B1vXSr3OtUlGVzIfu59JLL011POnxe4wff/yxOwY1a/EofSpRDqWaGpVsq6ZGnTO9Y1HNikplNVpMeqOKhX6WOjYdU+i5UA2ESq7DP0sdt2phPCoFD78+jkelr0pbuNDO8+rEqnTo2tG29dorAfdqqVSK7enbt2+a7alpkNcnQJ+HzomOSelVaXnoNa626N9//71FItL7QM3gQkvovetVNWKhnWq9+ZmdU9WWqEbkyiuvdPdtuNBzI6oZys4+V6oFUM2WzntobUDovr37RzVaqgn1qLmUrjdd41mhGtvQ86OaJd1H3vsXL17sajJUKxPaX0RNG/XZqDY2XOh9lRHv/szpDs+qQdJ9pElNq1S7qhoddeIO/RxVw6zaw9DmUKr51P2dXjMoXRfanncMOh80h0JeQGAB5AINNagq/OP1tYjEGWeckeq1Mpj6YQ5/7oXmh7a3V2ZVzW+8H0Nv0jCJoh/58IxkqD///NM11fCawIRSRk2ZpvTaUGcl/aJ27unN945B6RdlAMOPQcGAl/7//ve/7v9atWql2Xd6ac/OY9S+lXlSRjiz/appkoJB9Y8JPxa1/U/v8wilc6FMu9reh79fbcvD3xt+zr3mGuH9MTITfj141GxFTVy8tvhKg5pTiRdYZPSZaF2v2YhH51jNRrSuggxd11pPzZy87Yma2Og8q1mR1lVTJaXleCK9D070es3o+lLGN6Mhp7N6zk+U+ihIZvv3PquM7gEFYZl1nPaEf9bKbCvD7DUXymw/Ciy85R4F7FlpyqgmjKKAPTuFB336zlVhhyb1M9K50bUTPkqdBphQQK4mkd4AGAoydDwqWPCo0ERBl4JyfT94k4IVBWFqpgfEMvpYALlApd4qiVethdrRH+/HyqOS2oykV4KZUanm/9Xy/3+GTR1iR44cme664Rklv8O4ZiSjtB7vGLwnDKufRXrtjfPSyE7esaiUM71aAPFKLTN6v4KKjEoylVGO9Po4nvSuB2VUVaKvjKCuK11D6iOgDJKCgxN5KvRTTz3lAi71V1BnfpWaqwZDpeyh21NGTv0+1DdAAwuobbr6PKg/gobNzUik98GJXq/ZIafuwbwotCbreIGF+uGsXLkyom1nNMqZChokfBQuff4KqD26j3UfqA9S+AAM+g3QdapJ/Xt0rap/Ueh9qpo09bHQoBvpDbyhez2z6xqItrzzCwzkg1qL//znP66zcTivtDZ81KDw0rrsUKNGDTeyjjKCGQU0mdGPoDpMKjOX3uhG+tEPz5Rld/pFGerQH/RwGmIytIYjVHppz85j1L7nzp3rag1Cay3Ct+c1s1ITicyOJbNzoeZFKs3MrszniVwT6iSrzJAyUqEl++HNiUI/k9AmZirBDy/hVydmjYijEX1C6R4Jr5VTLYmammhSU6trr73WdRoeNGhQhsOx+r0P/ND1pYxvJJnerMjqcXj3kPaf0XXnfVYZ3QP6DHTejyf8/lPApRJ4NakK34/XDM2jed7yE6HO6SrMWbhwoRvF63i0r4y+G7z5x0uPaio1FLAy/xpBTkPPehRMqFmTaip0z+uaT68ZlGqSvBrLUBq8QO8lsEAsoykUkEv0Y64SK/04aHSPUMpk6Id6/vz5qear5DW7qdpd7Xo1mk44ldYdr3mDSuhUyqY2xKHDamokF/3oabQWrxlCTlCJoLavEu3Dhw+nWa5MqvcDr+eIvPbaa6mazqjJgkYVyslj1GhHavoWOtyqap/CH5So4EijTOmaSK//jXcsmX2W2q5K9MNp/xkNb5sZL7MYyXu9UvvQUnqdczUNCaVMrDJUOg+h62qkoPS2GV7qr9Lc8D4n6nsRSjUl6kui96Z3fWTXfeCHAlP131FApuYt2VXboc8uK5+bnpeg5lU67+Hre/sOvX9C11EwoiaHusazQsMZhzZHUsCoa12jTYn6Eug+GD9+fKphfjWctEapUt+CE6URu3RO1B/Ne6ZEeE1b6PC6OiYFAxoCNpSOXxl+nY+sjMqkPkQqmAhv+qrgX6O8qSZP3w1Km0aP86h5pX4DdG2qL0r4pJGhFJRpxDMgVlFjAeQiDQOpJjwq/Qp/MJN+/PRDpP/1Y6sfmJxoT6uO5Br2UMOgqkRZpd3KnKoUUvO9ZxRkRsOFKoOuDLY6Xar5kTLHyhhouM2cpAy9fpR1HMog6QFYKgHevHmz6+ip49Fwq6KhK5UxUTrVpEadpb1nHqg2IaeOUZ1ylQ41e1NgooyuHnAVGuB49CwP7UPNctRJVyX5ygSplFWdktN7boNH7bDV5ELHqY62CoaUcVcpsTLhyjQpQxIJZZ6UqVfNmtKr5iHe8ykyov0qQ6/jVnp0bpVh13tCAyZ9Tmr25Q3VqoycOhIrExleC6HlQ4YMcZkpDdWpoWCVuQut6fD2rcyezreGV1VmVJ+/PvfMOu5mx33ghwJjZdD1GXrD3epc6XPT4ADhnaqzQp32dW/o2lUTOp3/8FoAL7DRevq89HnrHCuQ0LGr34mOXZ555hkXAKi0X4NCeMPNqh9J+DNfMqImbLq+tQ9d1wpmlDZd66LrVdealutcaFAGb7hZdZZX6b+fwhwVBHhDc4c+efubb75x5zr0KeW6XzVPwy7rOlaTJg0LrOFw9dmEB8oZUX8KHY8KhnQ9hg7XrMIlBVs6x6qtCK31UVoV2KlmIz26X/Q9pPsgK0N6A1ERtfGogAIy3Gw4b8jE8CEyNVxnjx493JCpGtL0hhtucMNzZjTcrIY3DN+uhj4MFz60rTfE49NPP+3maxjNU045JdC4cePA4MGD3TCNWRl+cenSpW440dKlSwdKliwZaN26deCbb7457rnxhpt95pln0h2eUsM6ZuVcan3tX+dLQzHWqFEj0L1798DixYtTrffee+8F6tSp446zbt26gWnTprlzdbzhZv0co2iIzttuuy1QpkwZl0b9/cMPP6Q7rLCGtNXwnRq6tGjRom4IyiuuuMINO5kVL7/8svv8NLSwrh0NX/vggw+64XE9Ol4N85re9RE+ROmECRPcMLGFCxdONcRmRtuQDz74INCwYUP3WZx55pnu+nrllVfSDImqITZ1nWkYYKW3VatWgZUrV7pthw83q2FwvfWaNWsWWLhwYZr0athXDf9brlw59xnrOnjggQdSXccZ8XMfRHodp+e///2v+9w19LL2r3Ou/Rw8ePC43yPpDTerIZf1+ega0DLvPIUPN+tZsGBB4NJLL3Xr67tDn9/zzz+fap05c+a4c6/PQNfylVdeGVi1atVxj83b51tvveWG4NWQstqG0qfjDjdlypTA//zP/7jzULZs2UCXLl0Cv/76a5a+447n559/dsNQ67rUcMc6Xh2TjjV0mGfRPu+88053D2qYcKVF9+KiRYvSbDez9Oie1v0Tek17Q/3qmta5+fjjj1Mt0317xhlnZHosul90LkOH5AZiSZz+iU5IAwAA8iM95FJ9ZFQDEGmtGYC8iz4WAAAAAHwjsAAAAADgG4EFAAAAAN/oYwEAAADAN2osAAAAAPhGYAEAAADANwILAAAAAL7l+ydvHzt2zD05U09gjYuLi3ZyAAAAgDxD3bF3795tlStXtkKFChXswEJBRWJiYrSTAQAAAORZW7ZssSpVqhTswEI1Fd7JKFOmTLSTAwAAAOQZKSkprpDey1MX6MDCa/6koILAAgAAAIhcVroU0HkbAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMA3AgsAAAAAvhFYAAAAAPCNwAIAAACAbwQWAAAAAHwjsAAAAADgWxH/m0BWnDnwo2gnAXnApuEdo50EAACAE0KNBQAAAADfCCwAAAAA5O3AYty4cdawYUMrU6aMm5o2bWqffPJJcHmrVq0sLi4u1dSrV69oJhkAAABArPWxqFKlig0fPtxq1aplgUDAXnvtNevUqZP98MMPVq9ePbdOz549bciQIcH3lCxZMoopBgAAABBzgcWVV16Z6vWTTz7pajEWLVoUDCwUSFSsWDFKKQQAAACQp/pYHD161N5++23bu3evaxLleeONN6x8+fJWv359GzRokO3bty/T7Rw8eNBSUlJSTQAAAADy+XCzK1ascIHEgQMHrHTp0jZ9+nSrW7euW3bLLbdY1apVrXLlyvbjjz/aQw89ZGvXrrVp06ZluL1hw4bZ4MGDc/EIAAAAAMQF1Lkhig4dOmSbN2+25ORke/fdd23ixIk2b968YHAR6vPPP7c2bdrY+vXrrUaNGhnWWGjyqMYiMTHRbV8dxKOF51ggK3iOBQAAiCXKS8fHx2cpLx31GotixYpZzZo13d+NGze277//3saMGWMvvfRSmnWbNGni/s8ssChevLibAAAAABTAPhaeY8eOpapxCLVs2TL3f6VKlXI5VQAAAABitsZCnbE7dOhgZ5xxhu3evdvefPNN+/LLL2327Nm2YcMG9/ryyy+3cuXKuT4W/fr1s5YtW7pnXwAAAACIHVENLLZv325du3a1rVu3urZbChgUVFx66aW2ZcsWmzNnjo0ePdqNFKV+Ep07d7Z//vOf0UwyAAAAgFgLLCZNmpThMgUS6sQNAAAAIPbFXB8LAAAAAHkPgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMA3AgsAAAAAvhFYAAAAAPCNwAIAAACAbwQWAAAAAHwjsAAAAADgG4EFAAAAAN8ILAAAAAD4RmABAAAAwDcCCwAAAAC+EVgAAAAA8I3AAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAHk7sBg3bpw1bNjQypQp46amTZvaJ598Elx+4MAB6927t5UrV85Kly5tnTt3tj/++COaSQYAAAAQa4FFlSpVbPjw4bZkyRJbvHixXXLJJdapUyf76aef3PJ+/frZhx9+aO+8847NmzfPfv/9d7v22mujmWQAAAAA6YgLBAIBiyFly5a1Z555xq677jo79dRT7c0333R/y5o1a6xOnTq2cOFCu/DCC7O0vZSUFIuPj7fk5GRXKxItZw78KGr7Rt6xaXjHaCcBAADghPLSMdPH4ujRo/b222/b3r17XZMo1WIcPnzY2rZtG1yndu3adsYZZ7jAAgAAAEDsKBLtBKxYscIFEupPoX4U06dPt7p169qyZcusWLFilpCQkGr90047zbZt25bh9g4ePOim0CgLAAAAQM6Keo3F2Wef7YKIb7/91u6++27r1q2brVq16oS3N2zYMFdd402JiYnZml4AAAAAMRhYqFaiZs2a1rhxYxcUNGrUyMaMGWMVK1a0Q4cOWVJSUqr1NSqUlmVk0KBBrg2YN23ZsiUXjgIAAAAo2KIeWIQ7duyYa8qkQKNo0aI2d+7c4LK1a9fa5s2bXdOpjBQvXjw4fK03AQAAAMjHfSxUu9ChQwfXIXv37t1uBKgvv/zSZs+e7Zox9ejRw/r37+9GilKA0KdPHxdUZHVEKAAnjpHMkBWMZAYAiInAYvv27da1a1fbunWrCyT0sDwFFZdeeqlbPmrUKCtUqJB7MJ5qMdq3b28vvvhiNJMMAAAAINYCi0mTJmW6vESJEjZ27Fg3AQAAAIhdMdfHAgAAAEDeQ2ABAAAAwDcCCwAAAAC+EVgAAAAA8I3AAgAAAIBvBBYAAAAAfCOwAAAAAOAbgQUAAAAA3wgsAAAAAPhGYAEAAADANwILAAAAAL4RWAAAAADwjcACAAAAgG8EFgAAAAB8I7AAAAAA4BuBBQAAAADfCCwAAAAA+EZgAQAAAMC3IifypqSkJJs0aZKtXr3ava5Xr57dcccdFh8f7z9FAAAAAPJ/jcXixYutRo0aNmrUKNu5c6ebRo4c6eYtXbo0Z1IJAAAAIH/VWPTr18+uuuoqmzBhghUp8n9vP3LkiN15553Wt29fmz9/fk6kEwAAAEB+CixUYxEaVLiNFCliDz74oJ133nnZnT4AAAAA+bEpVJkyZWzz5s1p5m/ZssVOPvnk7EoXAAAAgPwcWNx4443Wo0cPmzJligsmNL399tuuKdTNN9+cM6kEAAAAkL+aQj377LMWFxdnXbt2dX0rpGjRonb33Xfb8OHDcyKNAAAAAPJbYFGsWDEbM2aMDRs2zDZs2ODmaUSokiVL5kT6AAAAAOTHwCI5OdmOHj1qZcuWtQYNGgTna9hZdeJWHwwAAAAABUvEfSxuuukm16ci3NSpU90yAAAAAAVPxIHFt99+a61bt04zv1WrVm4ZAAAAgIIn4sDi4MGDwU7boQ4fPmz79++PaFvqp3H++ee7YWorVKhgV199ta1duzZNwKLO4qFTr169Ik02AAAAgFgKLC644AJ7+eWX08wfP368NW7cOKJtzZs3z3r37m2LFi2yzz77zAUn7dq1s71796Zar2fPnrZ169bgNGLEiEiTDQAAACCWOm8PHTrU2rZta8uXL7c2bdq4eXPnzrXvv//ePv3004i2NWvWrFSvJ0+e7GoulixZYi1btgzO14hTFStWjDSpAAAAAGK1xqJZs2a2cOFCS0xMdB22P/zwQ6tZs6b9+OOP1qJFC1+J0YhTohGnQr3xxhtWvnx5q1+/vg0aNMj27dvnaz8AAAAAolxjIeecc47L7GenY8eOWd++fV3gogDCc8stt1jVqlWtcuXKLnh56KGHXD+MadOmZdgHRJMnJSUlW9MJAAAA4AQDC2XOvedTHC+jfqLPsVBfi5UrV9qCBQtSzb/rrruCf+u5GZUqVXJNsPRwPj2YL70O4YMHDz6hNAAAAADIwaZQp5xyim3fvt39nZCQ4F6HT978E3HvvffazJkz7YsvvrAqVapkum6TJk3c/+vXr093uZpKqUmVN23ZsuWE0gQAAAAgm2ssPv/882C/B2X+s0sgELA+ffrY9OnT7csvv7Rq1aod9z3Lli1z/6vmIj3Fixd3EwAAAIAYCywuvvji4N/K/Kvjtp4nER4kRFo7oOZPb775pr3//vvuWRbbtm1z8+Pj4+2kk05yzZ20/PLLL7dy5cq5Phb9+vVzI0Y1bNgwon0BAAAAiKFRoRRY/Pnnn2nm79y5M0s1DqHGjRvnmivpIXiqgfCmKVOmuOXFihWzOXPmuGdb1K5d2wYMGGCdO3d2I1EBAAAAyMOjQqlmIry2Qvbs2WMlSpSIeFuZUc2IHqIHAAAAIJ8EFv3793f/K6h45JFH3EPrPEePHrVvv/3WDUMLAAAAoODJcmDxww8/BGsZVqxY4ZopefR3o0aN7P7778+ZVAIAAADI24FFUlKSG0rWGw3q9ttvtzFjxpzw8yoAAAAAFMDA4vnnn3cjNHm1Ea+++mpupAsAAABAfgos/va3v9kNN9xgv/32m40aNcquvfbaTNefNm1adqYPAAAAQH4YbrZChQo2d+7c4EhQagKl50xkNAEAAAAoeLLUebtw4cI2cuRI13F7yJAhduqpp7rmUQAAAAAQ8QPyFFjUrFnTfv31V84eAAAAgBMLLAoVKmS1atWyHTt2RPI2AAAAAPlcRIGFDB8+3B544AFbuXJlzqQIAAAAQP59QJ6na9eutm/fPvdAPD0YL7yvxc6dO7MzfQAAAADyY2AxevTonEkJAAAAgIITWHTr1i1nUgIAAACg4PSx+Pjjj2327Nlp5n/66af2ySefZFe6AAAAAOTnwGLgwIF29OjRNPOPHTvmlgEAAAAoeCIOLNatW2d169ZNM7927dq2fv367EoXAAAAgPwcWMTHx9svv/ySZr6CilKlSmVXugAAAADk58CiU6dO1rdvX9uwYUOqoGLAgAF21VVXZXf6AAAAAOTHwGLEiBGuZkJNn6pVq+amOnXqWLly5ezZZ5/NmVQCAAAAyF/Dzaop1DfffGOfffaZLV++3D0gr2HDhtayZcucSSEAAACA/BdYSFxcnLVr185NAAAAABBxUygAAAAACEdgAQAAAMA3AgsAAAAAvhFYAAAAAIhO523Zvn27m44dO5ZqvkaIAgAAAFCwRBxYLFmyxLp162arV6+2QCAQHCVKf+v/o0eP5kQ6AQAAAOSnwOKOO+6ws846yyZNmmSnnXaaCyYAAAAAFGwRBxa//PKLvffee1azZs2cSREAAACA/N95u02bNu6J2wAAAABwwjUWEydOdH0sVq5cafXr17eiRYumWn7VVVdleVvDhg2zadOm2Zo1a+ykk06yiy66yJ5++mk7++yzg+scOHDABgwYYG+//bYdPHjQ2rdvby+++KJrhgUAAAAgjwYWCxcutK+//to++eSTNMsi7bw9b9486927t51//vl25MgRe/jhh61du3a2atUqK1WqlFunX79+9tFHH9k777xj8fHxdu+999q1117r0gAAAAAgjwYWffr0sVtvvdUeeeQR37UGs2bNSvV68uTJVqFCBTfyVMuWLS05Odl1En/zzTftkksuceu8+uqrVqdOHVu0aJFdeOGFvvYPAAAAIEp9LHbs2OFqEXKiKZICCSlbtqz7XwHG4cOHrW3btsF1ateubWeccYarOUmPmkulpKSkmgAAAADEWGChZkhffPFFtidED9rr27evNWvWzPXdkG3btlmxYsUsISEh1boKarQso34bajLlTYmJidmeVgAAAAA+m0LpGRaDBg2yBQsWWIMGDdJ03r7vvvvsRKivhTqEa7t+KG39+/cPvlaNBcEFAAAAEIOjQpUuXdp1vNYU3nn7RAILdcieOXOmzZ8/36pUqRKcX7FiRTt06JAlJSWlqrX4448/3LL0FC9e3E0AAAAAYjiw2LhxY7btPBAIuM7g06dPty+//NKqVauWannjxo1djcjcuXOtc+fObt7atWtt8+bN1rRp02xLBwAAAIBcDiw8qklQkFGjRg0rUqTICTd/0ohP77//vp188snBfhPqG6HnWuj/Hj16uKZN6tBdpkwZF4goqGBEKAAAACAPd97et2+fy+yXLFnS6tWr52oPRBn+4cOHR7StcePGuZGgWrVqZZUqVQpOU6ZMCa4zatQou+KKK1yNhYagVRMoPVQPAAAAQB4OLNQ5evny5a7pUokSJYLzNSRsaECQ1aZQ6U3du3cPrqN9jB071nbu3Gl79+51QUVG/SsAAAAAREfEbZhmzJjhAgg1RVJnbY9qLzZs2JDd6QMAAACQH2ss/vzzT/d07HCqTQgNNAAAAAAUHBEHFuedd5599NFHwddeMKFhaBmpCQAAACiYIm4K9dRTT1mHDh1s1apVduTIERszZoz7+5tvvknzXAsAAAAABUPENRbNmze3ZcuWuaBCT97+9NNPXdOohQsXuudOAAAAACh4TugBFHp2xYQJE7I/NQAAAAAKRo0FAAAAAIQjsAAAAADgG4EFAAAAAN8ILAAAAABEP7BISUlxT+NevXq1/9QAAAAAKBiBxQ033GAvvPCC+3v//v3ugXma17BhQ3vvvfdyIo0AAAAA8ltgMX/+fGvRooX7e/r06RYIBCwpKcmee+45Gzp0aE6kEQAAAEB+CyySk5OtbNmy7u9Zs2ZZ586drWTJktaxY0dbt25dTqQRAAAAQH4LLBITE91Ttvfu3esCi3bt2rn5u3btshIlSuREGgEAAADktydv9+3b17p06WKlS5e2qlWrWqtWrYJNpBo0aJATaQQA4LjOHPhRtJOAPGDT8I7RTgKQb0UcWNxzzz3WpEkT27x5s1166aVWqND/VXpUr16dPhYAAABAARVxYCGNGzd2Uyj1sQAAAABQMJ1QYPHrr7/aBx984GotDh06lGrZyJEjsyttAAAAAPJrYDF37ly76qqrXNOnNWvWWP369W3Tpk1u2Nlzzz03Z1IJAAAAIH+NCjVo0CC7//77bcWKFW4UKD0Ub8uWLXbxxRfb9ddfnzOpBAAAAJC/AovVq1db165d3d9FihRxT9/WCFFDhgyxp59+OifSCAAAACC/BRalSpUK9quoVKmSbdiwIbjsr7/+yt7UAQAAAMiffSwuvPBCW7BggdWpU8cuv/xyGzBggGsWNW3aNLcMAAAAQMETcWChUZ/27Nnj/h48eLD7e8qUKVarVi1GhAIAAAAKqIgDC40GFdosavz48dmdJgAAAAD5vY8FAAAAAJxQjcUpp5xicXFxWVnVdu7cmaX1AAAAABSwwGL06NHBv3fs2GFDhw619u3bW9OmTd28hQsX2uzZs+2RRx7JuZQCAAAAyNtNobp16xacvv76a/fMirfeesvuu+8+N+lvzZs3b15EO58/f75deeWVVrlyZVcjMmPGjFTLu3fv7uaHTpdddllkRwgAAAAg9vpYqGYivcy95s2ZMyeibe3du9caNWpkY8eOzXAdbXfr1q3BSUEMAAAAgDw+KlS5cuXs/fffd8+vCKV5WhaJDh06uCkzxYsXt4oVK0aaTAAAAACxHFjo2RV33nmnffnll9akSRM379tvv7VZs2bZhAkTsj2B2k+FChVcB/JLLrnE9e+INIABAAAAEGOBhfo96Knbzz33nHvatui1nsbtBRrZRc2grr32WqtWrZpt2LDBHn74YVfDoc7ihQsXTvc9Bw8edJMnJSUlW9MEAAAAIBsCC1EA8cYbb1hOu+mmm4J/N2jQwBo2bGg1atRwtRht2rRJ9z3Dhg1ztSoAAAAA8sgD8g4cOOBqBEKnnKSnfpcvX97Wr1+f4TqDBg2y5OTk4LRly5YcTRMAAACAE6ix2Ldvnz344IM2depU90yLcEePHrWc8uuvv7p9VqpUKdPO3poAAAAAxHCNxQMPPGCff/65jRs3zmXgJ06c6Joe6VkUr7/+ekTb2rNnjy1btsxNsnHjRvf35s2b3TLta9GiRbZp0yabO3euderUyWrWrOkezgcAAAAgD9dYfPjhhy6AaNWqld1+++3WokULl9mvWrWq63fRpUuXLG9r8eLF1rp16+Dr/v37u//1ID4FLj/++KO99tprlpSU5AKXdu3a2RNPPEGNBAAAAJDXA4udO3e6vg5SpkwZ91qaN29ud999d0TbUnASCAQyfRgfAAAAgHzYFEpBhZosSe3atV1fC68mIyEhIftTCAAAACD/BRZq/rR8+XL398CBA23s2LFWokQJ69evn+sTAQAAAKDgibgplAIIT9u2bW3NmjW2ZMkS189Cz5kAAAAAUPBEVGNx+PBh92C6devWBeep07aejk1QAQAAABRcEQUWRYsWdSM1AQAAAICvPha33nqrTZo0KdK3AQAAAMjHIu5jceTIEXvllVdszpw51rhxYytVqlSq5SNHjszO9AEAAADIj4HFypUr7dxzz3V///zzzzmRJgAAAAD5PbD44osvciYlAAAAAApOH4s77rjDdu/enWb+3r173TIAAAAABU/EgcVrr71m+/fvTzNf815//fXsShcAAACA/NgUKiUlxQKBgJtUY6GnbXuOHj1qH3/8sVWoUCGn0gkAAAAgPwQWCQkJFhcX56azzjorzXLNHzx4cHanDwAAAEB+CizUaVu1FZdccom99957VrZs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",
"text/plain": [
"<Figure size 800x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"from datetime import datetime\n",
"\n",
"hoje = datetime.today().strftime('%Y%m%d') # Exemplo: '20250604'\n",
"\n",
"# === ETAPA 1: Carrega e prepara os dados ===\n",
"df = pd.read_excel(r\"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CRITICOS INDUSTRIA\\compiladoAcertePedido.xlsx\")\n",
"df = df[['MATERIAL', 'SEMANA', 'CURVA']]\n",
"df['semana_num'] = df['SEMANA'].str.extract(r'S(\\d+)').astype(int)\n",
"df = df.sort_values(['MATERIAL', 'semana_num'])\n",
"df['grupo'] = df.groupby('MATERIAL')['semana_num'].diff().ne(1).cumsum()\n",
"\n",
"# === ETAPA 2: Agrupa dados ===\n",
"grupos = df.groupby(['MATERIAL', 'CURVA', 'grupo']).size().reset_index(name='duracao')\n",
"resultado = grupos.groupby('MATERIAL')['duracao'].agg(media_duracao='mean', max_duracao='max').reset_index()\n",
"media_geral = grupos['duracao'].mean()\n",
"print(f\"Média geral de semanas em estado crítico: {media_geral:.2f} ou {round(media_geral * 7)} dias.\")\n",
"\n",
"# === ETAPA 3: Análise por CURVA ===\n",
"media_duracao_por_curva = grupos.groupby('CURVA')['duracao'].mean().reset_index(name='media_duracao_critico')\n",
"media_duracao_por_curva['media_duracao_critico'] = round(media_duracao_por_curva['media_duracao_critico']*7).astype('Int64') # semanas → dias\n",
"\n",
"entradas_por_sku = grupos.groupby(['MATERIAL', 'CURVA']).size().reset_index(name='qtd_entradas')\n",
"media_entradas_por_curva = entradas_por_sku.groupby('CURVA')['qtd_entradas'].mean().reset_index(name='media_entradas_critico')\n",
"\n",
"curva_analise = pd.merge(media_duracao_por_curva, media_entradas_por_curva, on='CURVA')\n",
"\n",
"# === ETAPA 4: Junta dados finais por SKU (CURVA + qtd_entradas)\n",
"resultado_final = pd.merge(resultado, entradas_por_sku, on='MATERIAL')\n",
"resultado_final = resultado_final[['MATERIAL', 'CURVA', 'media_duracao', 'max_duracao', 'qtd_entradas']]\n",
"\n",
"# === ETAPA 5: Exporta para Excel ===\n",
"output_path = f\"C:/Users/joao.herculano/GRUPO GINSENG/Assistência Suprimentos - 2025/CRITICOS INDUSTRIA/analise_curva_resultado{hoje}.xlsx\"\n",
"with pd.ExcelWriter(output_path, engine='xlsxwriter') as writer:\n",
" resultado_final.to_excel(writer, sheet_name='Por SKU', index=False)\n",
" curva_analise.to_excel(writer, sheet_name='Por CURVA', index=False)\n",
"\n",
"print(f\"\\nArquivo Excel salvo com sucesso em:\\n{output_path}\")\n",
"\n",
"# === ETAPA 6: Gráficos ===\n",
"# 1. Duração média por CURVA\n",
"plt.figure(figsize=(8, 4))\n",
"plt.bar(curva_analise['CURVA'], curva_analise['media_duracao_critico'])\n",
"plt.title('Duração média (dias) em estado crítico por CURVA')\n",
"plt.xlabel('CURVA')\n",
"plt.ylabel('Dias')\n",
"plt.tight_layout()\n",
"plt.show()\n",
"\n",
"# 2. Entradas médias por CURVA\n",
"plt.figure(figsize=(8, 4))\n",
"plt.bar(curva_analise['CURVA'], curva_analise['media_entradas_critico'])\n",
"plt.title('Número médio de entradas em crítico por CURVA')\n",
"plt.xlabel('CURVA')\n",
"plt.ylabel('Entradas em crítico')\n",
"plt.tight_layout()\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "422c3a16",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}