Commit 35422d81 authored by Cristian Aguirre's avatar Cristian Aguirre

Init Commit

parent 5e15c504
Pipeline #396 failed with stages
{
"cells": [
{
"cell_type": "markdown",
"id": "2e0a7fd9-de38-47d0-b982-81a4beb044f5",
"metadata": {},
"source": [
"## Detectores "
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "77870fe8-89a3-4367-ad7a-42c4b65eba7e",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json\n",
"import time\n",
"import datetime"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "4a011a57-7874-4459-be7d-f727472459dd",
"metadata": {},
"outputs": [],
"source": [
"auth = ('admin', 'admin')\n",
"headers = {\"Content-Type\": \"application/json; charset=utf-8\"}"
]
},
{
"cell_type": "markdown",
"id": "a1635d62-f6bc-44b6-bc50-b37f802666fa",
"metadata": {},
"source": [
"#### Inicializamos la data histórica con fecha en todo el mes de Julio del 2022 (Esto servirá para el dataset GROSS)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3a372a07-c98a-4821-a664-4d29b0212c73",
"metadata": {},
"outputs": [],
"source": [
"start_time = time.mktime(datetime.datetime.strptime(\"01/07/2022 00:00:00\", \"%d/%m/%Y %H:%M:%S\").timetuple())*1000\n",
"end_time = time.mktime(datetime.datetime.strptime(\"31/07/2022 23:59:00\", \"%d/%m/%Y %H:%M:%S\").timetuple())*1000"
]
},
{
"cell_type": "markdown",
"id": "3bbbb04f-62b4-433e-92d1-5ba5b5e14ae3",
"metadata": {
"tags": []
},
"source": [
"### Detector Promedio por Revenue"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "b140e6ad-61d1-4c32-9c75-b75a6a0bca4c",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_General_de_Gross\",\n",
" \"description\": \"Detector General de Gross - Promedio de Revenue\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_gross_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "48ac6ad6-52c9-44ab-8fbf-ef8fc442c049",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"b9MxP4oB-1074nypIrN4\",\"_version\":1,\"_seq_no\":1313,\"_primary_term\":23}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7fb8bf54f860>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/bNMxP4oB-1074nypIbME/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 19382),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7fb8bf54b2b0>}"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_gross_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "ac8f3cb0-fa21-4152-a4d7-a449581171f8",
"metadata": {
"tags": []
},
"source": [
"### Detector Promedio por Revenue por Región"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "4e5e6ad6-dceb-498f-b1da-67673e389079",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"ename": "KeyError",
"evalue": "'_id'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-41-41c446111903>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpost\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mheaders\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mauth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mauth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverify\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjson\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 42\u001b[0;31m \u001b[0mdetector_gross_region_id\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"_id\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m: '_id'"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Region\",\n",
" \"description\": \"Detector de Gross - Promedio de Revenue por Región\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_REGION\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_gross_region_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "fe01d0d1-e202-4354-b251-b20ba9bdfda5",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"G9QyP4oB-1074nypOTmV\",\"_version\":1,\"_seq_no\":1361,\"_primary_term\":23}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7fb8bf4e8668>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/GNQyP4oB-1074nypMjmK/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 14882),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7fb8bf54f908>}"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_gross_region_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "8dd9fc59-6e4f-454e-8298-73ce1548b927",
"metadata": {
"tags": []
},
"source": [
"### Detector Promedio por Revenue por Departamento"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "33cf9d75-9154-4060-b338-6be0b89ed9ba",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Departamento\",\n",
" \"description\": \"Detector de Gross - Promedio de Revenue por Departamento\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_DEPARTMENT\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_gross_department_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "d718753d-a098-475a-a261-1f2c836c6938",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"--ZrTYoBUW-jYV-RND5r\",\"_version\":1,\"_seq_no\":4593,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d39ff1eb8>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/9eZrTYoBUW-jYV-RMT5d/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 27354),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d39ffa048>}"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_gross_department_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "2b71d954-c486-4e2b-b1a1-c1483f68e19a",
"metadata": {
"tags": []
},
"source": [
"### Detector Promedio por Revenue por Ciudad"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "36bfc0dd-822f-43b0-a32e-f4432d666fd8",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Ciudad\",\n",
" \"description\": \"Detector de Gross - Promedio de Revenue por Ciudad\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_CIUDAD\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_gross_ciudad_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "0f5dc52b-4a79-4dce-9473-9e47ec86f37b",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"RNYzP4oB-1074nypfW4G\",\"_version\":1,\"_seq_no\":1520,\"_primary_term\":23}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7fb8bf4e8438>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/QdYzP4oB-1074nypam7T/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 13066),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7fb8bf4ed898>}"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_gross_ciudad_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "936703f7-7cca-4f45-b2df-5effdeb85765",
"metadata": {
"tags": []
},
"source": [
"### Detector Promedio por Revenue por Canal"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "9a1fd1ae-aa39-4197-bbe5-0f76e6f84919",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Canal\",\n",
" \"description\": \"Detector de Gross - Promedio de Revenue por Canal\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"CHANNEL\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_gross_canal_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "d8803179-c961-4058-a69f-cff960beef0f",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"cN08P4oB-1074nyp56lE\",\"_version\":1,\"_seq_no\":2071,\"_primary_term\":23}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7fb8bf503710>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/bd08P4oB-1074nyp4Kkn/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 14086),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7fb8bf54f2b0>}"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_gross_canal_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "e49edd67-9098-475f-bd5a-a00520398ebe",
"metadata": {
"tags": []
},
"source": [
"### Detector Cantidad de Legalizaciones - Gross"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "863a1ecc-0c09-4cce-98e4-5e97498bad0a",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Legalizaciones\",\n",
" \"description\": \"Detector de Gross - Cantidad de Transacciones Legalizadas\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Legalizaciones\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad Legalizaciones\": {\n",
" \"sum\": {\n",
" \"field\": \"LEGALIZADO\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_legalizados_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "1399de70-db86-4801-b912-684beec6ac3a",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"gd07P4oB-1074nypKJgI\",\"_version\":1,\"_seq_no\":2066,\"_primary_term\":23}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7fb8bf4ed6d8>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/fN07P4oB-1074nypHpjk/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 37570),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7fb8bf4fb9e8>}"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_legalizados_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "0c1301ef-bd4e-40e5-ae69-57d13c02923a",
"metadata": {
"tags": []
},
"source": [
"### Detector Cantidad de Recargas - Gross"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "2347dee3-df26-45e5-940b-6ecbb505962d",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Recargas\",\n",
" \"description\": \"Detector de Gross - Cantidad de Recargas\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Recargas\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad Recargas\": {\n",
" \"value_count\": {\n",
" \"field\": \"RECARGA.OFERTA_ID\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_recargas_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "f3dbb09c-3fdb-4c6c-953a-ffa20b278752",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"DnUiSYoBdjAtLmLsJXHN\",\"_version\":1,\"_seq_no\":2325,\"_primary_term\":30}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f32681304e0>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/CXUiSYoBdjAtLmLsHnEY/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 21353),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f3208e1b438>}"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_recargas_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "bf1d2d24-91c6-4942-833c-3d176bc542a7",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Cantidad de Recargas - Gross x Región"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "3391b247-2f57-4ef5-b1e7-ee71d371ab64",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"55497"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/gross/_count\"\n",
"response = requests.get(url=url, headers=headers, auth=auth, verify=False)\n",
"response = response.json()\n",
"total_gross = response[\"count\"]\n",
"total_gross"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "53cf0f05-5c02-4dc5-b58a-5b654edd207c",
"metadata": {},
"outputs": [],
"source": [
"url = \"https://localhost:9200/gross/_search\"\n",
"query = {\n",
"\"query\" : {\n",
" \"match_all\" : {}\n",
" },\n",
" \"_source\": [\"SUBSCRIBER_ID\"],\n",
" \"size\": total_gross\n",
"}\n",
"data = json.dumps(query)\n",
"\n",
"response = requests.get(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"endings_results = response[\"hits\"][\"hits\"]\n",
"endings_results = [item[\"_source\"] for item in endings_results]\n",
"endings_results = [item[\"SUBSCRIBER_ID\"] for item in endings_results]\n",
"len(endings_results)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "93105d48-3851-49ed-a779-e9d96c72707e",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 47,
"id": "e9f34998-a711-4bd1-8eb3-9655c80787d4",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Recargas_Region\",\n",
" \"description\": \"Detector de Gross - Cantidad de Recargas x Region\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Recargas\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad Recargas\": {\n",
" \"value_count\": {\n",
" \"field\": \"RECARGA.OFERTA_ID\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_REGION\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_recargas_2_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "30f1fe82-7804-4922-911b-8f0000e41319",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"0uizTYoBUW-jYV-RDGcC\",\"_version\":1,\"_seq_no\":4764,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d39b8f780>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/zeizTYoBUW-jYV-RBGee/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 17052),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d39ffae80>}"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_recargas_2_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "1b67fa2c-0f52-4a6c-b3a4-7a1ae711c9c0",
"metadata": {
"tags": []
},
"source": [
"### Detector Cantidad de Recargas - Gross x Departamento"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3499aa7f-b651-433b-b221-e915b7353d71",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Recargas_Departamento\",\n",
" \"description\": \"Detector de Gross - Cantidad de Recargas x Departamento\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Recargas\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad Recargas\": {\n",
" \"value_count\": {\n",
" \"field\": \"RECARGA.OFERTA_ID\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_DEPARTMENT\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_recargas_3_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "4a5da2f7-fc55-4df5-ac23-25c9028daf66",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"eglQZooBHM0QA2h6Z-oe\",\"_version\":1,\"_seq_no\":5673,\"_primary_term\":37}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f6f4fe6b4e0>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/dQlQZooBHM0QA2h6Z-oe/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 31358),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f6f4fe6b390>}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_recargas_3_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "22f0ccbe-b317-482a-8428-0025a3b85b6a",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Cantidad de Recargas - Gross x Ciudad"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "3a3ce517-036b-497a-811c-0b013c0de3d5",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Recargas_Ciudad\",\n",
" \"description\": \"Detector de Gross - Cantidad de Recargas x Ciudad\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Recargas\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad Recargas\": {\n",
" \"value_count\": {\n",
" \"field\": \"RECARGA.OFERTA_ID\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_CIUDAD\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_recargas_4_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "7947948f-12d7-463e-9423-3d5df68ff745",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"f4CZSYoBdjAtLmLsV3vV\",\"_version\":1,\"_seq_no\":3290,\"_primary_term\":30}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f3208b825f8>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/eoCZSYoBdjAtLmLsUHsp/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 12403),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f3208b80400>}"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_recargas_4_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "571df8ba-6284-4a4c-a493-5ba5b821e64a",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Ausentismo por Planta"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "bd813823-add2-4d25-84bc-52206a7dbb2f",
"metadata": {},
"outputs": [],
"source": [
"INDEX_AUSENTISMO_PLANTA = \"planta_ausentismo_transformado_1\"\n",
"FIELD_COUNT_AUSENTISMO = \"CANTIDAD AUSENCIAS\"\n",
"FIELD_SUM_AUSENTISMO = \"TOTAL NUMERO DIAS AUSENCIA\"\n",
"CATEGORICAL_FIELD = \"TIPO AUSENCIA\""
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6ed0a920-ccc3-479e-9fa8-8fe88497e75a",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Ausentismo_por_Tipo\",\n",
" \"description\": \"Detector de Ausentismo\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" INDEX_AUSENTISMO_PLANTA\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Ausentismos\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad Ausentismos\": {\n",
" \"sum\": {\n",
" \"field\": FIELD_COUNT_AUSENTISMO\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Total de Ausentismos\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Total de Ausentismos\": {\n",
" \"sum\": {\n",
" \"field\": FIELD_SUM_AUSENTISMO\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__\n",
"response = response.json()\n",
"detector_ausentismo_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "935eb585-b98b-4cb0-8954-1b1c4363f28a",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"YtxBTIoBUW-jYV-RoMzH\",\"_version\":1,\"_seq_no\":3836,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d3af259b0>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/XdxBTIoBUW-jYV-RncxB/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 43957),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d3af25208>}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_ausentismo_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "d88ff440-2995-4182-811d-c4ce89fd20a1",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Ausentismo por Planta"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "307a53b4-4862-4a34-9d4c-d31b76acb67f",
"metadata": {},
"outputs": [],
"source": [
"INDEX_AUSENTISMO_PLANTA = \"planta_ausentismo_transformado_1\"\n",
"FIELD_COUNT_AUSENTISMO = \"CANTIDAD AUSENCIAS\"\n",
"FIELD_SUM_AUSENTISMO = \"TOTAL NUMERO DIAS AUSENCIA\"\n",
"CATEGORICAL_FIELD = \"TIPO AUSENCIA\""
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "77f9d505-845d-4cf9-af52-9540c6888e21",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Ausentismo_por_Comercial\",\n",
" \"description\": \"Detector de Ausentismo por Comercial\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" INDEX_AUSENTISMO_PLANTA\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Solicitudes de Ausencia por Comercial\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad Ausentismos\": {\n",
" \"sum\": {\n",
" \"field\": FIELD_COUNT_AUSENTISMO\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Total de Días Solicitados de Ausencia por Comercial\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Total de Ausentismos\": {\n",
" \"sum\": {\n",
" \"field\": FIELD_SUM_AUSENTISMO\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__\n",
"response = response.json()\n",
"detector_ausentismo_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "130a1675-db16-4793-8f66-c1db70aec33a",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"geXCTIoBUW-jYV-ROz9q\",\"_version\":1,\"_seq_no\":4468,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d3a003898>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/fOXCTIoBUW-jYV-ROT-3/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 26424),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d3a003be0>}"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_ausentismo_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "3ec68280-1ce2-4cb4-8978-8b99610465b8",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Gross y Endings"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "a5d76b57-9056-4b3e-90cc-f96342e871bf",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"246728"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/endings/_count\"\n",
"response = requests.get(url=url, headers=headers, auth=auth, verify=False)\n",
"response = response.json()\n",
"total_endings = response[\"count\"]\n",
"total_endings"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "1d0f4316-3da9-4340-b02d-826f5e2a4b70",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"246728"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/gross/_search\"\n",
"query = {\n",
"\"query\" : {\n",
" \"match_all\" : {}\n",
" },\n",
" \"_source\": [\"SUBSCRIBER_ID\"],\n",
" \"size\": total_endings\n",
"}\n",
"data = json.dumps(query)\n",
"\n",
"response = requests.get(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"endings_results = response[\"hits\"][\"hits\"]\n",
"endings_results = [item[\"_source\"] for item in endings_results]\n",
"endings_results = [item[\"SUBSCRIBER_ID\"] for item in endings_results]\n",
"len(endings_results)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "8a4fe300-0e22-4523-b89f-5da7c9729ec9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"55496"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/gross/_count\"\n",
"response = requests.get(url=url, headers=headers, auth=auth, verify=False)\n",
"response = response.json()\n",
"total_gross = response[\"count\"]\n",
"total_gross"
]
},
{
"cell_type": "markdown",
"id": "487fc711-e009-4602-99d9-5ccf7d5caead",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Gross - Endings"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "aedc103b-2359-4dc7-97cf-e7491d7352ae",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_de_Gross_por_Bajas\",\n",
" \"description\": \"Detector de Gross - Cantidad de Transacciones en Baja\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Transacciones con Bajas\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Cantidad de Bajas\": {\n",
" \"sum\": {\n",
" \"field\": \"ENDING\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"detector_bajas_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "587f91ed-a133-4b5f-a01c-017897cb97b4",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"-OSXTIoBUW-jYV-RHPln\",\"_version\":1,\"_seq_no\":4441,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d3a0083c8>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/8-SXTIoBUW-jYV-RE_kj/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 19800),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d3a781630>}"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_bajas_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "9b99aa01-0b84-4150-9a34-f62f52bff53e",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Planta"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f3b081c2-f16a-45a4-80fa-dafea5b11dd7",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"11623"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/planta/_count\"\n",
"response = requests.get(url=url, headers=headers, auth=auth, verify=False)\n",
"response = response.json()\n",
"total_planta = response[\"count\"]\n",
"total_planta"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "32bed93d-797f-4619-b682-63cd16111562",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"11623"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/planta/_search\"\n",
"query = {\n",
"\"query\" : {\n",
" \"match_all\" : {}\n",
" },\n",
" \"_source\": [\"CEDULA\"],\n",
" \"size\": total_planta\n",
"}\n",
"data = json.dumps(query)\n",
"\n",
"response = requests.get(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"gross_results = response[\"hits\"][\"hits\"]\n",
"gross_results = [item[\"_source\"] for item in gross_results]\n",
"gross_results = [item[\"CEDULA\"] for item in gross_results]\n",
"len(gross_results)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "a0291c43-0fb7-435c-82ef-1fc1006c82ff",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_General_de_Planta\",\n",
" \"description\": \"Detector de Gross - Revenue x Planta\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue por Vendedor\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" \"terms\": {\n",
" \"CONSULTOR_JEFENIVEL8_NK\": gross_results\n",
" }\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__\n",
"response = response.json()\n",
"detector_planta_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "90c81ec6-7085-4c22-9f93-b34ba5c85850",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"_uVmTYoBUW-jYV-RTFPx\",\"_version\":1,\"_seq_no\":4475,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d39fef438>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/--VmTYoBUW-jYV-RRVOz/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 46942),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d9c049550>}"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_planta_id+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "2d44bd57-80d5-4b0b-b4ac-86b3ed7c4534",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Gross - Planta x Region"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "fda25ae5-1b62-4870-96d2-ecdfa2e33b21",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_General_de_Planta_Region\",\n",
" \"description\": \"Detector de Gross - Revenue x Vendedor - Region\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue por Vendedor\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" \"terms\": {\n",
" \"CONSULTOR_JEFENIVEL8_NK\": gross_results\n",
" }\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_REGION\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__\n",
"response = response.json()\n",
"detector_planta_id_2 = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "629ccfef-15e4-4fb3-81b0-0723e8edf0b3",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"S-VpTYoBUW-jYV-RzNp3\",\"_version\":1,\"_seq_no\":4533,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d39ff1630>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/SOVpTYoBUW-jYV-Ryto9/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 31544),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d3aefcc50>}"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_planta_id_2+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "9f2dc75b-8084-41c3-924a-90b881653815",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Gross - Planta x Departamento"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "8cc24cce-047a-4382-9108-dbfe6b7e4d97",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"ename": "KeyError",
"evalue": "'_id'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-40-1c45ef524098>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjson\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 46\u001b[0;31m \u001b[0mdetector_planta_id_3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresponse\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"_id\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m: '_id'"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_General_de_Planta_Departamento\",\n",
" \"description\": \"Detector de Gross - Revenue x Vendedor - Departamento\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue por Vendedor\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" \"terms\": {\n",
" \"CONSULTOR_JEFENIVEL8_NK\": gross_results\n",
" }\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_DEPARTMENT\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__\n",
"response = response.json()\n",
"detector_planta_id_3 = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "e449ff82-5a4d-43c2-abf8-b1d247207cbe",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"Jd1rTIoBUW-jYV-Rn1Tu\",\"_version\":1,\"_seq_no\":3900,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d39ff5198>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/It1rTIoBUW-jYV-RkFTb/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 26222),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d39feb8d0>}"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_planta_id_3+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "markdown",
"id": "08c99cc2-f75e-4273-a149-df31353fc502",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"tags": []
},
"source": [
"### Detector Gross - Planta x Ciudad"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "ad25962f-d917-4f4b-b33e-06ba4d03d71e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_General_de_Planta_Ciudad\",\n",
" \"description\": \"Detector de Gross - Revenue x Vendedor - Ciudad\",\n",
" \"time_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"indices\": [\n",
" \"gross\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Promedio Revenue\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio Revenue\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" \"terms\": {\n",
" \"CONSULTOR_JEFENIVEL8_NK\": gross_results\n",
" }\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 10,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 2,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"AREA_CIUDAD\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__\n",
"response = response.json()\n",
"detector_planta_id_4 = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "62788d2b-079b-4860-bf23-a8bb54826dd0",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/urllib3/connectionpool.py:1052: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"text/plain": [
"{'_content': b'{\"_id\":\"b95sTIoBUW-jYV-RH_UR\",\"_version\":1,\"_seq_no\":4011,\"_primary_term\":31}',\n",
" '_content_consumed': True,\n",
" '_next': None,\n",
" 'status_code': 200,\n",
" 'headers': {'content-type': 'application/json; charset=UTF-8', 'content-length': '77'},\n",
" 'raw': <urllib3.response.HTTPResponse at 0x7f2d39ff5780>,\n",
" 'url': 'https://localhost:9200/_plugins/_anomaly_detection/detectors/bN5sTIoBUW-jYV-RFvXW/_start',\n",
" 'encoding': 'UTF-8',\n",
" 'history': [],\n",
" 'reason': 'OK',\n",
" 'cookies': <RequestsCookieJar[]>,\n",
" 'elapsed': datetime.timedelta(0, 0, 24519),\n",
" 'request': <PreparedRequest [POST]>,\n",
" 'connection': <requests.adapters.HTTPAdapter at 0x7f2d9c037a90>}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors/\"+detector_planta_id_4+\"/_start\"\n",
"data = {\n",
" \"start_time\": start_time,\n",
" \"end_time\": end_time\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response.__dict__"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0ad516b6-9ba2-4c18-9a05-fc1965678f38",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "b72f9025-4b54-4cc0-9360-70b7ef8faa77",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "0de3e603-5db8-49b2-95b1-89cab0341c37",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "a926f56c-a9cc-4934-b7cf-f1562c3ae807",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "6846890b-9666-444e-8397-d640ca308be6",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import requests\n",
"import json\n",
"import rrcf\n",
"import time\n",
"import seaborn as sns\n",
"from opensearchpy import OpenSearch\n",
"from datetime import datetime\n",
"import matplotlib as mpl\n",
"import datetime as dte"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "af3aadf0-35ea-4a6c-a5fa-6fdb2f172f76",
"metadata": {},
"outputs": [],
"source": [
"LONGITUD = 10000 # Fijo (Máximo soportado x opensearch)\n",
"# PASOS = 80 # Variable (Depende de la data, igual al finalizar dara error controlado)\n",
"\n",
"host = 'localhost'\n",
"port = 9200\n",
"auth = ('admin', 'admin')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "a72f12cb-0add-4cc2-abae-e263ea282e98",
"metadata": {},
"outputs": [],
"source": [
"client = OpenSearch(\n",
" hosts = [{'host': host, 'port': port}],\n",
" http_compress = True, # enables gzip compression for request bodies\n",
" http_auth = auth,\n",
" use_ssl = True,\n",
" verify_certs = False,\n",
" ssl_assert_hostname = False,\n",
" ssl_show_warn = False\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "079a4330-cb77-4ab0-a45d-b310c48d0fdb",
"metadata": {},
"outputs": [],
"source": [
"# REVISAR LA DISTRIBUCIÓN DE TIEMPO\n",
"# FUNCTION THAT CREATE RANDOM DAY AND TIME\n",
"def generate_random_time(df, date_field, start_date, end_period, periods=2000):\n",
" df[date_field] = pd.date_range(start_date, end_period, periods)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "4d8c2ba1-10a5-4e6c-8d3e-5a7909140c15",
"metadata": {},
"outputs": [],
"source": [
"# FUNCTION THAT SAVE A DATAFRAME TO OPENSEARCH INDEX\n",
"def save_realtime_dataframe_opensearch(df, client, date_field, longitud, index_name, freq_sec=30, sleep_time_sec=0):\n",
" try:\n",
" pasos = int(df.shape[0]/ longitud) + 1\n",
" current_datetime = dte.datetime(2023, 9, 5, 8, 0, 0)\n",
" end_datetime = current_datetime + dte.timedelta(minutes=1)\n",
" for this_index in range(pasos):\n",
" # print(df.shape)\n",
" df_aux = df.loc[this_index*longitud:(this_index+1)*longitud-1]\n",
" df_aux = generate_random_time(df_aux, date_field, current_datetime, end_datetime, longitud)\n",
" if this_index == 600:\n",
" df_aux[\"REVENUE\"] = df_aux[\"REVENUE\"]*10000\n",
" print(df_aux[date_field].unique())\n",
" df_aux = df_aux.to_json(orient='records')\n",
" aux = json.loads(df_aux)\n",
" del df_aux\n",
" final_list = list(map(lambda x: (\"\\n\".join([str({\"index\":{\"_index\": index_name}}), json.dumps(x)])).replace(\"'\", '\"') + \"\\n\", list(aux)))\n",
" del aux\n",
" final_list = \"\\n\".join(final_list)\n",
" response = client.bulk(final_list)\n",
" print(\"PASO\", this_index)\n",
" time.sleep(sleep_time_sec)\n",
" current_datetime = end_datetime\n",
" end_datetime = current_datetime + dte.timedelta(minutes=1)\n",
" except Exception as e:\n",
" print(\"TERMINÓ\", e)"
]
},
{
"cell_type": "markdown",
"id": "9c7632c1-21d0-43c2-86b9-9fc9248a0536",
"metadata": {
"tags": []
},
"source": [
"### DATASET Gross + RECARGAS + LEGALIZACION + ENDING"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "6841ae20-a26f-4891-bad0-433455552604",
"metadata": {},
"outputs": [],
"source": [
"gross = pd.read_excel(\"datasets/gross_2023063024.xlsx\", engine='openpyxl')\n",
"endings = pd.read_excel(\"datasets/Ending_2022070101.xlsx\", engine='openpyxl')\n",
"legali = pd.read_excel(\"datasets/Legalizacion.xlsx\", engine='openpyxl')\n",
"recargas_df = pd.read_excel(\"datasets/base recargas.xlsx\", engine='openpyxl')\n",
"recargas_df = recargas_df[['SUBSCRIBER_ID', 'SUBSCRIBER_FECHA_ALTA', 'VALOR_CARGA', 'OFERTA_ID', 'OFERTA_NOMBRE', 'FECHA_CARGA', 'CONSULTOR_CUENTA_NOMBRE']]\n",
"# gross_df = generate_random_time(gross, 'PERIODO_PROCESO_CODIGO')\n",
"recargas_df[\"RECARGA\"] = recargas_df.apply(lambda x: {'SUBSCRIBER_FECHA_ALTA': x[\"SUBSCRIBER_FECHA_ALTA\"], 'VALOR_CARGA': x.VALOR_CARGA,\n",
" 'OFERTA_ID': x[\"OFERTA_ID\"], 'OFERTA_NOMBRE': x[\"OFERTA_NOMBRE\"],\n",
" 'FECHA_CARGA': x[\"FECHA_CARGA\"], 'CONSULTOR_CUENTA_NOMBRE': x[\"CONSULTOR_CUENTA_NOMBRE\"]}, axis=1)\n",
"recargas_df = recargas_df[[\"SUBSCRIBER_ID\", \"RECARGA\"]]\n",
"recargas_gp = recargas_df.groupby('SUBSCRIBER_ID')['RECARGA'].apply(list).reset_index()\n",
"gross_recarga = gross.merge(recargas_gp, left_on='SUBSCRIPTOR_ID', right_on='SUBSCRIBER_ID', how='left')\n",
"gross_recarga.drop(\"SUBSCRIBER_ID\", axis=1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e94bdbaf-213c-4141-818f-976abd79376d",
"metadata": {},
"outputs": [],
"source": [
"gross_recarga_legali = gross_recarga.merge(legali, on='ORDEN_CODIGO', how='left')\n",
"gross_recarga_legali[\"LEGALIZADO\"] = np.where(gross_recarga_legali[\"PERIODO_PROCESO_CODIGO_y\"].isna(), 0, 1)\n",
"gross_recarga_legali.drop(\"PERIODO_PROCESO_CODIGO_y\", axis=1, inplace=True)\n",
"gross_recarga_legali.rename(columns={'PERIODO_PROCESO_CODIGO_x': 'PERIODO_PROCESO_CODIGO'}, inplace=True)\n",
"endings = endings[[\"PERIODO_PROCESO_CODIGO\", \"SUBSCRIBER_ID\"]]\n",
"gross_recarga_legali_end = gross_recarga_legali.merge(endings, how='left', left_on='SUBSCRIPTOR_ID', right_on='SUBSCRIBER_ID')\n",
"gross_recarga_legali_end[\"ENDING\"] = np.where(gross_recarga_legali_end[\"PERIODO_PROCESO_CODIGO_y\"].isna(), 0, 1)\n",
"gross_recarga_legali_end.drop(\"PERIODO_PROCESO_CODIGO_y\", axis=1, inplace=True)\n",
"gross_recarga_legali_end.rename(columns={'PERIODO_PROCESO_CODIGO_x': 'PERIODO_PROCESO_CODIGO'}, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "11d01141-7835-4577-9c2d-0e3a16d3da4d",
"metadata": {
"tags": []
},
"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>PERIODO_PROCESO_CODIGO</th>\n",
" <th>PERIODO_VENTA</th>\n",
" <th>SUBSCRIPTOR_ID</th>\n",
" <th>MOVIMIENTO_CLASE</th>\n",
" <th>MOVIMIENTO_TIPO</th>\n",
" <th>FLAG_COMISIONABLE</th>\n",
" <th>CONSULTOR_JEFENIVEL2_NK</th>\n",
" <th>CONSULTOR_JEFENIVEL2_NOMBRE</th>\n",
" <th>CONSULTOR_JEFENIVEL3_NK</th>\n",
" <th>CONSULTOR_JEFENIVEL3_NOMBRE</th>\n",
" <th>...</th>\n",
" <th>MSISD</th>\n",
" <th>FECHA_ALTA</th>\n",
" <th>FECHA_FACTURA</th>\n",
" <th>GESTOR</th>\n",
" <th>MOVIMIENTO_TIPO_NOMBRE_DET</th>\n",
" <th>CLIENTE_DIRECCION_DPTO</th>\n",
" <th>RECARGA</th>\n",
" <th>LEGALIZADO</th>\n",
" <th>SUBSCRIBER_ID</th>\n",
" <th>ENDING</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1183598775</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.027254e+09</td>\n",
" <td>2023-06-28 16:43:21</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Bogotá D.C.</td>\n",
" <td>[{'SUBSCRIBER_FECHA_ALTA': 2022-04-01 00:20:05...</td>\n",
" <td>1</td>\n",
" <td>1.183599e+09</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1234520706</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.025571e+09</td>\n",
" <td>2023-06-15 12:23:06</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>[{'SUBSCRIBER_FECHA_ALTA': 2022-04-01 00:20:05...</td>\n",
" <td>1</td>\n",
" <td>1.234521e+09</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1234675217</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.027238e+09</td>\n",
" <td>2023-06-28 10:54:43</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>[{'SUBSCRIBER_FECHA_ALTA': 2022-04-05 14:18:47...</td>\n",
" <td>1</td>\n",
" <td>1.234675e+09</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1211038083</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.028624e+09</td>\n",
" <td>2023-06-22 12:27:46</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>[{'SUBSCRIBER_FECHA_ALTA': 2022-04-05 17:21:01...</td>\n",
" <td>1</td>\n",
" <td>1.211038e+09</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1229702677</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.027918e+09</td>\n",
" <td>2023-06-27 12:02:14</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>[{'SUBSCRIBER_FECHA_ALTA': 2022-04-03 21:52:24...</td>\n",
" <td>1</td>\n",
" <td>1.229703e+09</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55495</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1425339979</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.026480e+09</td>\n",
" <td>2023-06-14 00:00:00</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55496</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1425336417</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.026409e+09</td>\n",
" <td>2023-06-11 00:00:00</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55497</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1425338607</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.026486e+09</td>\n",
" <td>2023-06-11 00:00:00</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55498</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1425335675</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>3.028058e+09</td>\n",
" <td>2023-06-29 00:00:00</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>SIN DEFINIR</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55499</th>\n",
" <td>202207</td>\n",
" <td>NaN</td>\n",
" <td>1425337557</td>\n",
" <td>ACTIVACION</td>\n",
" <td>GROSS ADDS NUEVA</td>\n",
" <td>1</td>\n",
" <td>42143196</td>\n",
" <td>Carolina Vallejo Londoño</td>\n",
" <td>10125787</td>\n",
" <td>Alexander Guarnizo Palma</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaT</td>\n",
" <td>NaT</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>55500 rows × 54 columns</p>\n",
"</div>"
],
"text/plain": [
" PERIODO_PROCESO_CODIGO PERIODO_VENTA SUBSCRIPTOR_ID MOVIMIENTO_CLASE \\\n",
"0 202207 NaN 1183598775 ACTIVACION \n",
"1 202207 NaN 1234520706 ACTIVACION \n",
"2 202207 NaN 1234675217 ACTIVACION \n",
"3 202207 NaN 1211038083 ACTIVACION \n",
"4 202207 NaN 1229702677 ACTIVACION \n",
"... ... ... ... ... \n",
"55495 202207 NaN 1425339979 ACTIVACION \n",
"55496 202207 NaN 1425336417 ACTIVACION \n",
"55497 202207 NaN 1425338607 ACTIVACION \n",
"55498 202207 NaN 1425335675 ACTIVACION \n",
"55499 202207 NaN 1425337557 ACTIVACION \n",
"\n",
" MOVIMIENTO_TIPO FLAG_COMISIONABLE CONSULTOR_JEFENIVEL2_NK \\\n",
"0 GROSS ADDS NUEVA 1 42143196 \n",
"1 GROSS ADDS NUEVA 1 42143196 \n",
"2 GROSS ADDS NUEVA 1 42143196 \n",
"3 GROSS ADDS NUEVA 1 42143196 \n",
"4 GROSS ADDS NUEVA 1 42143196 \n",
"... ... ... ... \n",
"55495 GROSS ADDS NUEVA 1 42143196 \n",
"55496 GROSS ADDS NUEVA 1 42143196 \n",
"55497 GROSS ADDS NUEVA 1 42143196 \n",
"55498 GROSS ADDS NUEVA 1 42143196 \n",
"55499 GROSS ADDS NUEVA 1 42143196 \n",
"\n",
" CONSULTOR_JEFENIVEL2_NOMBRE CONSULTOR_JEFENIVEL3_NK \\\n",
"0 Carolina Vallejo Londoño 10125787 \n",
"1 Carolina Vallejo Londoño 10125787 \n",
"2 Carolina Vallejo Londoño 10125787 \n",
"3 Carolina Vallejo Londoño 10125787 \n",
"4 Carolina Vallejo Londoño 10125787 \n",
"... ... ... \n",
"55495 Carolina Vallejo Londoño 10125787 \n",
"55496 Carolina Vallejo Londoño 10125787 \n",
"55497 Carolina Vallejo Londoño 10125787 \n",
"55498 Carolina Vallejo Londoño 10125787 \n",
"55499 Carolina Vallejo Londoño 10125787 \n",
"\n",
" CONSULTOR_JEFENIVEL3_NOMBRE ... MSISD FECHA_ALTA \\\n",
"0 Alexander Guarnizo Palma ... 3.027254e+09 2023-06-28 16:43:21 \n",
"1 Alexander Guarnizo Palma ... 3.025571e+09 2023-06-15 12:23:06 \n",
"2 Alexander Guarnizo Palma ... 3.027238e+09 2023-06-28 10:54:43 \n",
"3 Alexander Guarnizo Palma ... 3.028624e+09 2023-06-22 12:27:46 \n",
"4 Alexander Guarnizo Palma ... 3.027918e+09 2023-06-27 12:02:14 \n",
"... ... ... ... ... \n",
"55495 Alexander Guarnizo Palma ... 3.026480e+09 2023-06-14 00:00:00 \n",
"55496 Alexander Guarnizo Palma ... 3.026409e+09 2023-06-11 00:00:00 \n",
"55497 Alexander Guarnizo Palma ... 3.026486e+09 2023-06-11 00:00:00 \n",
"55498 Alexander Guarnizo Palma ... 3.028058e+09 2023-06-29 00:00:00 \n",
"55499 Alexander Guarnizo Palma ... NaN NaT \n",
"\n",
" FECHA_FACTURA GESTOR MOVIMIENTO_TIPO_NOMBRE_DET CLIENTE_DIRECCION_DPTO \\\n",
"0 NaT NaN NaN Bogotá D.C. \n",
"1 NaT NaN NaN SIN DEFINIR \n",
"2 NaT NaN NaN SIN DEFINIR \n",
"3 NaT NaN NaN SIN DEFINIR \n",
"4 NaT NaN NaN SIN DEFINIR \n",
"... ... ... ... ... \n",
"55495 NaT NaN NaN SIN DEFINIR \n",
"55496 NaT NaN NaN SIN DEFINIR \n",
"55497 NaT NaN NaN SIN DEFINIR \n",
"55498 NaT NaN NaN SIN DEFINIR \n",
"55499 NaT NaN NaN NaN \n",
"\n",
" RECARGA LEGALIZADO \\\n",
"0 [{'SUBSCRIBER_FECHA_ALTA': 2022-04-01 00:20:05... 1 \n",
"1 [{'SUBSCRIBER_FECHA_ALTA': 2022-04-01 00:20:05... 1 \n",
"2 [{'SUBSCRIBER_FECHA_ALTA': 2022-04-05 14:18:47... 1 \n",
"3 [{'SUBSCRIBER_FECHA_ALTA': 2022-04-05 17:21:01... 1 \n",
"4 [{'SUBSCRIBER_FECHA_ALTA': 2022-04-03 21:52:24... 1 \n",
"... ... ... \n",
"55495 NaN 0 \n",
"55496 NaN 0 \n",
"55497 NaN 0 \n",
"55498 NaN 0 \n",
"55499 NaN 0 \n",
"\n",
" SUBSCRIBER_ID ENDING \n",
"0 1.183599e+09 1 \n",
"1 1.234521e+09 1 \n",
"2 1.234675e+09 1 \n",
"3 1.211038e+09 1 \n",
"4 1.229703e+09 1 \n",
"... ... ... \n",
"55495 NaN 0 \n",
"55496 NaN 0 \n",
"55497 NaN 0 \n",
"55498 NaN 0 \n",
"55499 NaN 0 \n",
"\n",
"[55500 rows x 54 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gross_recarga_legali_end"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "41071015-9d3b-4de6-8900-c4e7203ce88f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'acknowledged': True}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"response = client.indices.delete(\n",
" index = 'gross'\n",
")\n",
"response"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "95882def-1130-4db3-9612-2ffeeaf02ec5",
"metadata": {},
"outputs": [],
"source": [
"LONGITUD_PER_MIN = 50\n",
"INDEX_NAME_GROSS = \"gross\""
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "9caf183b-9449-4d05-8344-6cf92858de8b",
"metadata": {},
"outputs": [],
"source": [
"mod_indices = np.random.choice(gross_recarga_legali_end.index, 5000, replace=False)\n",
"gross_recarga_legali_end.loc[mod_indices, \"REVENUE\"] *= 10000"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "ed0de7af-cd85-4544-9e74-ef1e024e734b",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/ipykernel_launcher.py:4: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" after removing the cwd from sys.path.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"PASO 0\n",
"PASO 1\n",
"PASO 2\n",
"PASO 3\n",
"PASO 4\n",
"PASO 5\n",
"PASO 6\n",
"PASO 7\n",
"PASO 8\n",
"PASO 9\n",
"PASO 10\n",
"PASO 11\n",
"PASO 12\n",
"PASO 13\n",
"PASO 14\n",
"PASO 15\n",
"PASO 16\n",
"PASO 17\n",
"PASO 18\n",
"PASO 19\n",
"PASO 20\n",
"PASO 21\n",
"PASO 22\n",
"PASO 23\n",
"PASO 24\n",
"PASO 25\n",
"PASO 26\n",
"PASO 27\n",
"PASO 28\n",
"PASO 29\n",
"PASO 30\n",
"PASO 31\n",
"PASO 32\n",
"PASO 33\n",
"PASO 34\n",
"PASO 35\n",
"PASO 36\n",
"PASO 37\n",
"PASO 38\n",
"PASO 39\n",
"PASO 40\n",
"PASO 41\n",
"PASO 42\n",
"PASO 43\n",
"PASO 44\n",
"PASO 45\n",
"PASO 46\n",
"PASO 47\n",
"PASO 48\n",
"PASO 49\n",
"PASO 50\n",
"PASO 51\n",
"PASO 52\n",
"PASO 53\n",
"PASO 54\n",
"PASO 55\n",
"PASO 56\n",
"PASO 57\n",
"PASO 58\n",
"PASO 59\n",
"PASO 60\n",
"PASO 61\n",
"PASO 62\n",
"PASO 63\n",
"PASO 64\n",
"PASO 65\n",
"PASO 66\n",
"PASO 67\n",
"PASO 68\n",
"PASO 69\n",
"PASO 70\n",
"PASO 71\n",
"PASO 72\n",
"PASO 73\n",
"PASO 74\n",
"PASO 75\n",
"PASO 76\n",
"PASO 77\n",
"PASO 78\n",
"PASO 79\n",
"PASO 80\n",
"PASO 81\n",
"PASO 82\n",
"PASO 83\n",
"PASO 84\n",
"PASO 85\n",
"PASO 86\n",
"PASO 87\n",
"PASO 88\n",
"PASO 89\n",
"PASO 90\n",
"PASO 91\n",
"PASO 92\n",
"PASO 93\n",
"PASO 94\n",
"PASO 95\n",
"PASO 96\n",
"PASO 97\n",
"PASO 98\n",
"PASO 99\n",
"PASO 100\n",
"PASO 101\n",
"PASO 102\n",
"PASO 103\n",
"PASO 104\n",
"PASO 105\n",
"PASO 106\n",
"PASO 107\n",
"PASO 108\n",
"PASO 109\n",
"PASO 110\n",
"PASO 111\n",
"PASO 112\n",
"PASO 113\n",
"PASO 114\n",
"PASO 115\n",
"PASO 116\n",
"PASO 117\n",
"PASO 118\n",
"PASO 119\n",
"PASO 120\n",
"PASO 121\n",
"PASO 122\n",
"PASO 123\n",
"PASO 124\n",
"PASO 125\n",
"PASO 126\n",
"PASO 127\n",
"PASO 128\n",
"PASO 129\n",
"PASO 130\n",
"PASO 131\n",
"PASO 132\n",
"PASO 133\n",
"PASO 134\n",
"PASO 135\n",
"PASO 136\n",
"PASO 137\n",
"PASO 138\n",
"PASO 139\n",
"PASO 140\n",
"PASO 141\n",
"PASO 142\n",
"PASO 143\n",
"PASO 144\n",
"PASO 145\n",
"PASO 146\n",
"PASO 147\n",
"PASO 148\n",
"PASO 149\n",
"PASO 150\n",
"PASO 151\n",
"PASO 152\n",
"PASO 153\n",
"PASO 154\n",
"PASO 155\n",
"PASO 156\n",
"PASO 157\n",
"PASO 158\n",
"PASO 159\n",
"PASO 160\n",
"PASO 161\n",
"PASO 162\n",
"PASO 163\n",
"PASO 164\n",
"PASO 165\n",
"PASO 166\n",
"PASO 167\n",
"PASO 168\n",
"PASO 169\n",
"PASO 170\n",
"PASO 171\n",
"PASO 172\n",
"PASO 173\n",
"PASO 174\n",
"PASO 175\n",
"PASO 176\n",
"PASO 177\n",
"PASO 178\n",
"PASO 179\n",
"PASO 180\n",
"PASO 181\n",
"PASO 182\n",
"PASO 183\n",
"PASO 184\n",
"PASO 185\n",
"PASO 186\n",
"PASO 187\n",
"PASO 188\n",
"PASO 189\n",
"PASO 190\n",
"PASO 191\n",
"PASO 192\n",
"PASO 193\n",
"PASO 194\n",
"PASO 195\n",
"PASO 196\n",
"PASO 197\n",
"PASO 198\n",
"PASO 199\n",
"PASO 200\n",
"PASO 201\n",
"PASO 202\n",
"PASO 203\n",
"PASO 204\n",
"PASO 205\n",
"PASO 206\n",
"PASO 207\n",
"PASO 208\n",
"PASO 209\n",
"PASO 210\n",
"PASO 211\n",
"PASO 212\n",
"PASO 213\n",
"PASO 214\n",
"PASO 215\n",
"PASO 216\n",
"PASO 217\n",
"PASO 218\n",
"PASO 219\n",
"PASO 220\n",
"PASO 221\n",
"PASO 222\n",
"PASO 223\n",
"PASO 224\n",
"PASO 225\n",
"PASO 226\n",
"PASO 227\n",
"PASO 228\n",
"PASO 229\n",
"PASO 230\n",
"PASO 231\n",
"PASO 232\n",
"PASO 233\n",
"PASO 234\n",
"PASO 235\n",
"PASO 236\n",
"PASO 237\n",
"PASO 238\n",
"PASO 239\n",
"PASO 240\n",
"PASO 241\n",
"PASO 242\n",
"PASO 243\n",
"PASO 244\n",
"PASO 245\n",
"PASO 246\n",
"PASO 247\n",
"PASO 248\n",
"PASO 249\n",
"PASO 250\n",
"PASO 251\n",
"PASO 252\n",
"PASO 253\n",
"PASO 254\n",
"PASO 255\n",
"PASO 256\n",
"PASO 257\n",
"PASO 258\n",
"PASO 259\n",
"PASO 260\n",
"PASO 261\n",
"PASO 262\n",
"PASO 263\n",
"PASO 264\n",
"PASO 265\n",
"PASO 266\n",
"PASO 267\n",
"PASO 268\n",
"PASO 269\n",
"PASO 270\n",
"PASO 271\n",
"PASO 272\n",
"PASO 273\n",
"PASO 274\n",
"PASO 275\n",
"PASO 276\n",
"PASO 277\n",
"PASO 278\n",
"PASO 279\n",
"PASO 280\n",
"PASO 281\n",
"PASO 282\n",
"PASO 283\n",
"PASO 284\n",
"PASO 285\n",
"PASO 286\n",
"PASO 287\n",
"PASO 288\n",
"PASO 289\n",
"PASO 290\n",
"PASO 291\n",
"PASO 292\n",
"PASO 293\n",
"PASO 294\n",
"PASO 295\n",
"PASO 296\n",
"PASO 297\n",
"PASO 298\n",
"PASO 299\n",
"PASO 300\n",
"PASO 301\n",
"PASO 302\n",
"PASO 303\n",
"PASO 304\n",
"PASO 305\n",
"PASO 306\n",
"PASO 307\n",
"PASO 308\n",
"PASO 309\n",
"PASO 310\n",
"PASO 311\n",
"PASO 312\n",
"PASO 313\n",
"PASO 314\n",
"PASO 315\n",
"PASO 316\n",
"PASO 317\n",
"PASO 318\n",
"PASO 319\n",
"PASO 320\n",
"PASO 321\n",
"PASO 322\n",
"PASO 323\n",
"PASO 324\n",
"PASO 325\n",
"PASO 326\n",
"PASO 327\n",
"PASO 328\n",
"PASO 329\n",
"PASO 330\n",
"PASO 331\n",
"PASO 332\n",
"PASO 333\n",
"PASO 334\n",
"PASO 335\n",
"PASO 336\n",
"PASO 337\n",
"PASO 338\n",
"PASO 339\n",
"PASO 340\n",
"PASO 341\n",
"PASO 342\n",
"PASO 343\n",
"PASO 344\n",
"PASO 345\n",
"PASO 346\n",
"PASO 347\n",
"PASO 348\n",
"PASO 349\n",
"PASO 350\n",
"PASO 351\n",
"PASO 352\n",
"PASO 353\n",
"PASO 354\n",
"PASO 355\n",
"PASO 356\n",
"PASO 357\n",
"PASO 358\n",
"PASO 359\n",
"PASO 360\n",
"PASO 361\n",
"PASO 362\n",
"PASO 363\n",
"PASO 364\n",
"PASO 365\n",
"PASO 366\n",
"PASO 367\n",
"PASO 368\n",
"PASO 369\n",
"PASO 370\n",
"PASO 371\n",
"PASO 372\n",
"PASO 373\n",
"PASO 374\n",
"PASO 375\n",
"PASO 376\n",
"PASO 377\n",
"PASO 378\n",
"PASO 379\n",
"PASO 380\n",
"PASO 381\n",
"PASO 382\n",
"PASO 383\n",
"PASO 384\n",
"PASO 385\n",
"PASO 386\n",
"PASO 387\n",
"PASO 388\n",
"PASO 389\n",
"PASO 390\n",
"PASO 391\n",
"PASO 392\n",
"PASO 393\n",
"PASO 394\n",
"PASO 395\n",
"PASO 396\n",
"PASO 397\n",
"PASO 398\n",
"PASO 399\n",
"PASO 400\n",
"PASO 401\n",
"PASO 402\n",
"PASO 403\n",
"PASO 404\n",
"PASO 405\n",
"PASO 406\n",
"PASO 407\n",
"PASO 408\n",
"PASO 409\n",
"PASO 410\n",
"PASO 411\n",
"PASO 412\n",
"PASO 413\n",
"PASO 414\n",
"PASO 415\n",
"PASO 416\n",
"PASO 417\n",
"PASO 418\n",
"PASO 419\n",
"PASO 420\n",
"PASO 421\n",
"PASO 422\n",
"PASO 423\n",
"PASO 424\n",
"PASO 425\n",
"PASO 426\n",
"PASO 427\n",
"PASO 428\n",
"PASO 429\n",
"PASO 430\n",
"PASO 431\n",
"PASO 432\n",
"PASO 433\n",
"PASO 434\n",
"PASO 435\n",
"PASO 436\n",
"PASO 437\n",
"PASO 438\n",
"PASO 439\n",
"PASO 440\n",
"PASO 441\n",
"PASO 442\n",
"PASO 443\n",
"PASO 444\n",
"PASO 445\n",
"PASO 446\n",
"PASO 447\n",
"PASO 448\n",
"PASO 449\n",
"PASO 450\n",
"PASO 451\n",
"PASO 452\n",
"PASO 453\n",
"PASO 454\n",
"PASO 455\n",
"PASO 456\n",
"PASO 457\n",
"PASO 458\n",
"PASO 459\n",
"PASO 460\n",
"PASO 461\n",
"PASO 462\n",
"PASO 463\n",
"PASO 464\n",
"PASO 465\n",
"PASO 466\n",
"PASO 467\n",
"PASO 468\n",
"PASO 469\n",
"PASO 470\n",
"PASO 471\n",
"PASO 472\n",
"PASO 473\n",
"PASO 474\n",
"PASO 475\n",
"PASO 476\n",
"PASO 477\n",
"PASO 478\n",
"PASO 479\n",
"PASO 480\n",
"PASO 481\n",
"PASO 482\n",
"PASO 483\n",
"PASO 484\n",
"PASO 485\n",
"PASO 486\n",
"PASO 487\n",
"PASO 488\n",
"PASO 489\n",
"PASO 490\n",
"PASO 491\n",
"PASO 492\n",
"PASO 493\n",
"PASO 494\n",
"PASO 495\n",
"PASO 496\n",
"PASO 497\n",
"PASO 498\n",
"PASO 499\n",
"PASO 500\n",
"PASO 501\n",
"PASO 502\n",
"PASO 503\n",
"PASO 504\n",
"PASO 505\n",
"PASO 506\n",
"PASO 507\n",
"PASO 508\n",
"PASO 509\n",
"PASO 510\n",
"PASO 511\n",
"PASO 512\n",
"PASO 513\n",
"PASO 514\n",
"PASO 515\n",
"PASO 516\n",
"PASO 517\n",
"PASO 518\n",
"PASO 519\n",
"PASO 520\n",
"PASO 521\n",
"PASO 522\n",
"PASO 523\n",
"PASO 524\n",
"PASO 525\n",
"PASO 526\n",
"PASO 527\n",
"PASO 528\n",
"PASO 529\n",
"PASO 530\n",
"PASO 531\n",
"PASO 532\n",
"PASO 533\n",
"PASO 534\n",
"PASO 535\n",
"PASO 536\n",
"PASO 537\n",
"PASO 538\n",
"PASO 539\n",
"PASO 540\n",
"PASO 541\n",
"PASO 542\n",
"PASO 543\n",
"PASO 544\n",
"PASO 545\n",
"PASO 546\n",
"PASO 547\n",
"PASO 548\n",
"PASO 549\n",
"PASO 550\n",
"PASO 551\n",
"PASO 552\n",
"PASO 553\n",
"PASO 554\n",
"PASO 555\n",
"PASO 556\n",
"PASO 557\n",
"PASO 558\n",
"PASO 559\n",
"PASO 560\n",
"PASO 561\n",
"PASO 562\n",
"PASO 563\n",
"PASO 564\n",
"PASO 565\n",
"PASO 566\n",
"PASO 567\n",
"PASO 568\n",
"PASO 569\n",
"PASO 570\n",
"PASO 571\n",
"PASO 572\n",
"PASO 573\n",
"PASO 574\n",
"PASO 575\n",
"PASO 576\n",
"PASO 577\n",
"PASO 578\n",
"PASO 579\n",
"PASO 580\n",
"PASO 581\n",
"PASO 582\n",
"PASO 583\n",
"PASO 584\n",
"PASO 585\n",
"PASO 586\n",
"PASO 587\n",
"PASO 588\n",
"PASO 589\n",
"PASO 590\n",
"PASO 591\n",
"PASO 592\n",
"PASO 593\n",
"PASO 594\n",
"PASO 595\n",
"PASO 596\n",
"PASO 597\n",
"PASO 598\n",
"PASO 599\n",
"['2023-09-05T18:00:00.000000000' '2023-09-05T18:00:01.224489795'\n",
" '2023-09-05T18:00:02.448979591' '2023-09-05T18:00:03.673469387'\n",
" '2023-09-05T18:00:04.897959183' '2023-09-05T18:00:06.122448979'\n",
" '2023-09-05T18:00:07.346938775' '2023-09-05T18:00:08.571428571'\n",
" '2023-09-05T18:00:09.795918367' '2023-09-05T18:00:11.020408163'\n",
" '2023-09-05T18:00:12.244897959' '2023-09-05T18:00:13.469387755'\n",
" '2023-09-05T18:00:14.693877551' '2023-09-05T18:00:15.918367346'\n",
" '2023-09-05T18:00:17.142857142' '2023-09-05T18:00:18.367346938'\n",
" '2023-09-05T18:00:19.591836734' '2023-09-05T18:00:20.816326530'\n",
" '2023-09-05T18:00:22.040816326' '2023-09-05T18:00:23.265306122'\n",
" '2023-09-05T18:00:24.489795918' '2023-09-05T18:00:25.714285714'\n",
" '2023-09-05T18:00:26.938775510' '2023-09-05T18:00:28.163265306'\n",
" '2023-09-05T18:00:29.387755102' '2023-09-05T18:00:30.612244897'\n",
" '2023-09-05T18:00:31.836734693' '2023-09-05T18:00:33.061224489'\n",
" '2023-09-05T18:00:34.285714285' '2023-09-05T18:00:35.510204081'\n",
" '2023-09-05T18:00:36.734693877' '2023-09-05T18:00:37.959183673'\n",
" '2023-09-05T18:00:39.183673469' '2023-09-05T18:00:40.408163265'\n",
" '2023-09-05T18:00:41.632653061' '2023-09-05T18:00:42.857142857'\n",
" '2023-09-05T18:00:44.081632653' '2023-09-05T18:00:45.306122448'\n",
" '2023-09-05T18:00:46.530612244' '2023-09-05T18:00:47.755102040'\n",
" '2023-09-05T18:00:48.979591836' '2023-09-05T18:00:50.204081632'\n",
" '2023-09-05T18:00:51.428571428' '2023-09-05T18:00:52.653061224'\n",
" '2023-09-05T18:00:53.877551020' '2023-09-05T18:00:55.102040816'\n",
" '2023-09-05T18:00:56.326530612' '2023-09-05T18:00:57.551020408'\n",
" '2023-09-05T18:00:58.775510204' '2023-09-05T18:01:00.000000000']\n",
"PASO 600\n",
"PASO 601\n",
"PASO 602\n",
"PASO 603\n",
"PASO 604\n",
"PASO 605\n",
"PASO 606\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env/lib/python3.6/site-packages/ipykernel_launcher.py:12: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" if sys.path[0] == '':\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"PASO 607\n",
"PASO 608\n",
"PASO 609\n",
"PASO 610\n",
"PASO 611\n",
"PASO 612\n",
"PASO 613\n",
"PASO 614\n",
"PASO 615\n",
"PASO 616\n",
"PASO 617\n",
"PASO 618\n",
"PASO 619\n",
"PASO 620\n",
"PASO 621\n",
"PASO 622\n",
"PASO 623\n",
"PASO 624\n",
"PASO 625\n",
"PASO 626\n",
"PASO 627\n",
"PASO 628\n",
"PASO 629\n",
"PASO 630\n",
"PASO 631\n",
"PASO 632\n",
"PASO 633\n",
"PASO 634\n",
"PASO 635\n",
"PASO 636\n",
"PASO 637\n",
"PASO 638\n",
"PASO 639\n",
"PASO 640\n",
"PASO 641\n",
"PASO 642\n",
"PASO 643\n",
"PASO 644\n",
"PASO 645\n",
"PASO 646\n",
"PASO 647\n",
"PASO 648\n",
"PASO 649\n",
"PASO 650\n",
"PASO 651\n",
"PASO 652\n",
"PASO 653\n",
"PASO 654\n",
"PASO 655\n",
"PASO 656\n",
"PASO 657\n",
"PASO 658\n",
"PASO 659\n",
"PASO 660\n",
"PASO 661\n",
"PASO 662\n",
"PASO 663\n",
"PASO 664\n",
"PASO 665\n",
"PASO 666\n",
"PASO 667\n",
"PASO 668\n",
"PASO 669\n",
"PASO 670\n",
"PASO 671\n",
"PASO 672\n",
"PASO 673\n",
"PASO 674\n",
"PASO 675\n",
"PASO 676\n",
"PASO 677\n",
"PASO 678\n",
"PASO 679\n",
"PASO 680\n",
"PASO 681\n",
"PASO 682\n",
"PASO 683\n",
"PASO 684\n",
"PASO 685\n",
"PASO 686\n",
"PASO 687\n",
"PASO 688\n",
"PASO 689\n",
"PASO 690\n",
"PASO 691\n",
"PASO 692\n",
"PASO 693\n",
"PASO 694\n",
"PASO 695\n",
"PASO 696\n",
"PASO 697\n",
"PASO 698\n",
"PASO 699\n",
"PASO 700\n",
"PASO 701\n",
"PASO 702\n",
"PASO 703\n",
"PASO 704\n",
"PASO 705\n",
"PASO 706\n",
"PASO 707\n",
"PASO 708\n",
"PASO 709\n",
"PASO 710\n",
"PASO 711\n",
"PASO 712\n",
"PASO 713\n",
"PASO 714\n",
"PASO 715\n",
"PASO 716\n",
"PASO 717\n",
"PASO 718\n",
"PASO 719\n",
"PASO 720\n",
"PASO 721\n",
"PASO 722\n",
"PASO 723\n",
"PASO 724\n",
"PASO 725\n",
"PASO 726\n",
"PASO 727\n",
"PASO 728\n",
"PASO 729\n",
"PASO 730\n",
"PASO 731\n",
"PASO 732\n",
"PASO 733\n",
"PASO 734\n",
"PASO 735\n",
"PASO 736\n",
"PASO 737\n",
"PASO 738\n",
"PASO 739\n",
"PASO 740\n",
"PASO 741\n",
"PASO 742\n",
"PASO 743\n",
"PASO 744\n",
"PASO 745\n",
"PASO 746\n",
"PASO 747\n",
"PASO 748\n",
"PASO 749\n",
"PASO 750\n",
"PASO 751\n",
"PASO 752\n",
"PASO 753\n",
"PASO 754\n",
"PASO 755\n",
"PASO 756\n",
"PASO 757\n",
"PASO 758\n",
"PASO 759\n",
"PASO 760\n",
"PASO 761\n",
"PASO 762\n",
"PASO 763\n",
"PASO 764\n",
"PASO 765\n",
"PASO 766\n",
"PASO 767\n",
"PASO 768\n",
"PASO 769\n",
"PASO 770\n",
"PASO 771\n",
"PASO 772\n",
"PASO 773\n",
"PASO 774\n",
"PASO 775\n",
"PASO 776\n",
"PASO 777\n",
"PASO 778\n",
"PASO 779\n",
"PASO 780\n",
"PASO 781\n",
"PASO 782\n",
"PASO 783\n",
"PASO 784\n",
"PASO 785\n",
"PASO 786\n",
"PASO 787\n",
"PASO 788\n",
"PASO 789\n",
"PASO 790\n",
"PASO 791\n",
"PASO 792\n",
"PASO 793\n",
"PASO 794\n",
"PASO 795\n",
"PASO 796\n",
"PASO 797\n",
"PASO 798\n",
"PASO 799\n",
"PASO 800\n",
"PASO 801\n",
"PASO 802\n",
"PASO 803\n",
"PASO 804\n",
"PASO 805\n",
"PASO 806\n",
"PASO 807\n",
"PASO 808\n",
"PASO 809\n",
"PASO 810\n",
"PASO 811\n",
"PASO 812\n",
"PASO 813\n",
"PASO 814\n",
"PASO 815\n",
"PASO 816\n",
"PASO 817\n",
"PASO 818\n",
"PASO 819\n",
"PASO 820\n",
"PASO 821\n",
"PASO 822\n",
"PASO 823\n",
"PASO 824\n",
"PASO 825\n",
"PASO 826\n",
"PASO 827\n",
"PASO 828\n",
"PASO 829\n",
"PASO 830\n",
"PASO 831\n",
"PASO 832\n",
"PASO 833\n",
"PASO 834\n",
"PASO 835\n",
"PASO 836\n",
"PASO 837\n",
"PASO 838\n",
"PASO 839\n",
"PASO 840\n",
"PASO 841\n",
"PASO 842\n",
"PASO 843\n",
"PASO 844\n",
"PASO 845\n",
"PASO 846\n",
"PASO 847\n",
"PASO 848\n",
"PASO 849\n",
"PASO 850\n",
"PASO 851\n",
"PASO 852\n",
"PASO 853\n",
"PASO 854\n",
"PASO 855\n",
"PASO 856\n",
"PASO 857\n",
"PASO 858\n",
"PASO 859\n",
"PASO 860\n",
"PASO 861\n",
"PASO 862\n",
"PASO 863\n",
"PASO 864\n",
"PASO 865\n",
"PASO 866\n",
"PASO 867\n",
"PASO 868\n",
"PASO 869\n",
"PASO 870\n",
"PASO 871\n",
"PASO 872\n",
"PASO 873\n",
"PASO 874\n",
"PASO 875\n",
"PASO 876\n",
"PASO 877\n",
"PASO 878\n",
"PASO 879\n",
"PASO 880\n",
"PASO 881\n",
"PASO 882\n",
"PASO 883\n",
"PASO 884\n",
"PASO 885\n",
"PASO 886\n",
"PASO 887\n",
"PASO 888\n",
"PASO 889\n",
"PASO 890\n",
"PASO 891\n",
"PASO 892\n",
"PASO 893\n",
"PASO 894\n",
"PASO 895\n",
"PASO 896\n",
"PASO 897\n",
"PASO 898\n",
"PASO 899\n",
"PASO 900\n",
"PASO 901\n",
"PASO 902\n",
"PASO 903\n",
"PASO 904\n",
"PASO 905\n",
"PASO 906\n",
"PASO 907\n",
"PASO 908\n",
"PASO 909\n",
"PASO 910\n",
"PASO 911\n",
"PASO 912\n",
"PASO 913\n",
"PASO 914\n",
"PASO 915\n",
"PASO 916\n",
"PASO 917\n",
"PASO 918\n",
"PASO 919\n",
"PASO 920\n",
"PASO 921\n",
"PASO 922\n",
"PASO 923\n",
"PASO 924\n",
"PASO 925\n",
"PASO 926\n",
"PASO 927\n",
"PASO 928\n",
"PASO 929\n",
"PASO 930\n",
"PASO 931\n",
"PASO 932\n",
"PASO 933\n",
"PASO 934\n",
"PASO 935\n",
"PASO 936\n",
"PASO 937\n",
"PASO 938\n",
"PASO 939\n",
"PASO 940\n",
"PASO 941\n",
"PASO 942\n",
"PASO 943\n",
"PASO 944\n",
"PASO 945\n",
"PASO 946\n",
"PASO 947\n",
"PASO 948\n",
"PASO 949\n",
"PASO 950\n",
"PASO 951\n",
"PASO 952\n",
"PASO 953\n",
"PASO 954\n",
"PASO 955\n",
"PASO 956\n",
"PASO 957\n",
"PASO 958\n",
"PASO 959\n",
"PASO 960\n",
"PASO 961\n",
"PASO 962\n",
"PASO 963\n",
"PASO 964\n",
"PASO 965\n",
"PASO 966\n",
"PASO 967\n",
"PASO 968\n",
"PASO 969\n",
"PASO 970\n",
"PASO 971\n",
"PASO 972\n",
"PASO 973\n",
"PASO 974\n",
"PASO 975\n",
"PASO 976\n",
"PASO 977\n",
"PASO 978\n",
"PASO 979\n",
"PASO 980\n",
"PASO 981\n",
"PASO 982\n",
"PASO 983\n",
"PASO 984\n",
"PASO 985\n",
"PASO 986\n",
"PASO 987\n",
"PASO 988\n",
"PASO 989\n",
"PASO 990\n",
"PASO 991\n",
"PASO 992\n",
"PASO 993\n",
"PASO 994\n",
"PASO 995\n",
"PASO 996\n",
"PASO 997\n",
"PASO 998\n",
"PASO 999\n",
"PASO 1000\n",
"PASO 1001\n",
"PASO 1002\n",
"PASO 1003\n",
"PASO 1004\n",
"PASO 1005\n",
"PASO 1006\n",
"PASO 1007\n",
"PASO 1008\n",
"PASO 1009\n",
"PASO 1010\n",
"PASO 1011\n",
"PASO 1012\n",
"PASO 1013\n",
"PASO 1014\n",
"PASO 1015\n",
"PASO 1016\n",
"PASO 1017\n",
"PASO 1018\n",
"PASO 1019\n",
"PASO 1020\n",
"PASO 1021\n",
"PASO 1022\n",
"PASO 1023\n",
"PASO 1024\n",
"PASO 1025\n",
"PASO 1026\n",
"PASO 1027\n",
"PASO 1028\n",
"PASO 1029\n",
"PASO 1030\n",
"PASO 1031\n",
"PASO 1032\n",
"PASO 1033\n",
"PASO 1034\n",
"PASO 1035\n",
"PASO 1036\n",
"PASO 1037\n",
"PASO 1038\n",
"PASO 1039\n",
"PASO 1040\n",
"PASO 1041\n",
"PASO 1042\n",
"PASO 1043\n",
"PASO 1044\n",
"PASO 1045\n",
"PASO 1046\n",
"PASO 1047\n",
"PASO 1048\n",
"PASO 1049\n",
"PASO 1050\n",
"PASO 1051\n",
"PASO 1052\n",
"PASO 1053\n",
"PASO 1054\n",
"PASO 1055\n",
"PASO 1056\n",
"PASO 1057\n",
"PASO 1058\n",
"PASO 1059\n",
"PASO 1060\n",
"PASO 1061\n",
"PASO 1062\n",
"PASO 1063\n",
"PASO 1064\n",
"PASO 1065\n",
"PASO 1066\n",
"PASO 1067\n",
"PASO 1068\n",
"PASO 1069\n",
"PASO 1070\n",
"PASO 1071\n",
"PASO 1072\n",
"PASO 1073\n",
"PASO 1074\n",
"PASO 1075\n",
"PASO 1076\n",
"PASO 1077\n",
"PASO 1078\n",
"PASO 1079\n",
"PASO 1080\n",
"PASO 1081\n",
"PASO 1082\n",
"PASO 1083\n",
"PASO 1084\n",
"PASO 1085\n",
"PASO 1086\n",
"PASO 1087\n",
"PASO 1088\n",
"PASO 1089\n",
"PASO 1090\n",
"PASO 1091\n",
"PASO 1092\n",
"PASO 1093\n",
"PASO 1094\n",
"PASO 1095\n",
"PASO 1096\n",
"PASO 1097\n",
"PASO 1098\n",
"PASO 1099\n",
"PASO 1100\n",
"PASO 1101\n",
"PASO 1102\n",
"PASO 1103\n",
"PASO 1104\n",
"PASO 1105\n",
"PASO 1106\n",
"PASO 1107\n",
"PASO 1108\n",
"PASO 1109\n",
"PASO 1110\n"
]
}
],
"source": [
"# SAVE\n",
"\n",
"save_realtime_dataframe_opensearch(gross_recarga_legali_end, client, 'PERIODO_PROCESO_CODIGO', LONGITUD_PER_MIN, INDEX_NAME_GROSS)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
{
"cells": [
{
"cell_type": "markdown",
"id": "faab864f-8e6d-4305-82bc-bc407cc8af57",
"metadata": {},
"source": [
"### Transformadores sobre índices"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f1da31b6-6ddf-4d96-a809-e94226f3e8c3",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import json\n",
"import requests\n",
"from opensearchpy import OpenSearch\n",
"import time\n",
"import random"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "9b28eba4-4776-442e-9ad0-0eca5be7fbbd",
"metadata": {},
"outputs": [],
"source": [
"host = 'localhost'\n",
"port = 9200"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e7efb345-a603-4f20-b42f-97954c4d1fce",
"metadata": {},
"outputs": [],
"source": [
"auth = ('admin', 'admin')\n",
"headers = {\"Content-Type\": \"application/json; charset=utf-8\"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d159eee9-d26e-4c9b-b5bb-59a231c48a30",
"metadata": {},
"outputs": [],
"source": [
"client = OpenSearch(\n",
" hosts = [{'host': host, 'port': port}],\n",
" http_compress = True, # enables gzip compression for request bodies\n",
" http_auth = auth,\n",
" use_ssl = True,\n",
" verify_certs = False,\n",
" ssl_assert_hostname = False,\n",
" ssl_show_warn = False\n",
")"
]
},
{
"cell_type": "markdown",
"id": "ba3828c7-8b80-4d13-afa7-979d085b3a55",
"metadata": {},
"source": [
"### Transformacion para Detector Gross - Legalizaciones"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "ec7a7e2d-267a-4d65-851a-7ae3deb703bb",
"metadata": {},
"outputs": [],
"source": [
"NOMBRE_TRANSFORMACION = \"planta_ausentismo_transformation\"\n",
"\n",
"url = \"https://localhost:9200/_plugins/_transform/\" + NOMBRE_TRANSFORMACION\n",
"data = {\n",
" \"transform\": {\n",
" \"schedule\": {\n",
" \"interval\": {\n",
" \"start_time\": 1693329303541,\n",
" \"period\": 1,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"enabled\": True,\n",
" \"description\": \"Transformador de Planta y Ausentismo\",\n",
" \"source_index\": \"planta\",\n",
" \"data_selection_query\": {\n",
" \"match_all\": {\n",
" }\n",
" },\n",
" \"target_index\": \"planta_ausentismo_transformado_1\",\n",
" \"page_size\": 100,\n",
" \"groups\": [\n",
" {\n",
" \"date_histogram\": {\n",
" \"fixed_interval\": \"1m\",\n",
" \"source_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"target_field\": \"PERIODO_PROCESO_CODIGO\",\n",
" \"timezone\": \"UTC\",\n",
" \"format\": \"yyyy-MM-dd'T'HH:mm:ss\"\n",
" }\n",
" },\n",
" {\n",
" \"terms\": {\n",
" \"source_field\": \"CEDULA\",\n",
" \"target_field\": \"CEDULA\"\n",
" }\n",
" },\n",
" {\n",
" \"terms\": {\n",
" \"source_field\": \"AUSENTISMO.TIPO AUSENCIA\",\n",
" \"target_field\": \"TIPO AUSENCIA\"\n",
" }\n",
" }\n",
" ],\n",
" \"aggregations\": {\n",
" \"TOTAL NUMERO DIAS AUSENCIA\": {\n",
" \"sum\": {\n",
" \"field\": \"AUSENTISMO.NUMERO DIAS\"\n",
" }\n",
" },\n",
" \"CANTIDAD AUSENCIAS\": {\n",
" \"value_count\": {\n",
" \"field\": \"AUSENTISMO.NUMERO DIAS\"\n",
" }\n",
" }\n",
" },\n",
" \"continuous\": False\n",
" }\n",
"}\n",
"\n",
"\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.put(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"transform_planta_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "31105181-b61b-46fe-8eac-83e000b3916c",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"{'_id': 'planta_ausentismo_transformation',\n",
" '_version': 1,\n",
" '_seq_no': 85358,\n",
" '_primary_term': 9,\n",
" 'transform': {'transform_id': 'planta_ausentismo_transformation',\n",
" 'schema_version': 18,\n",
" 'schedule': {'interval': {'start_time': 1693332367641,\n",
" 'period': 1,\n",
" 'unit': 'Minutes'}},\n",
" 'metadata_id': None,\n",
" 'updated_at': 1693332367641,\n",
" 'enabled': True,\n",
" 'enabled_at': 1693332367641,\n",
" 'description': 'Transformador de Planta y Ausentismo',\n",
" 'source_index': 'planta',\n",
" 'data_selection_query': {'match_all': {'boost': 1.0}},\n",
" 'target_index': 'planta_ausentismo_transformado_1',\n",
" 'page_size': 100,\n",
" 'groups': [{'date_histogram': {'fixed_interval': '1m',\n",
" 'source_field': 'PERIODO_PROCESO_CODIGO',\n",
" 'target_field': 'PERIODO_PROCESO_CODIGO',\n",
" 'timezone': 'UTC',\n",
" 'format': \"yyyy-MM-dd'T'HH:mm:ss\"}},\n",
" {'terms': {'source_field': 'CEDULA', 'target_field': 'CEDULA'}},\n",
" {'terms': {'source_field': 'AUSENTISMO.TIPO AUSENCIA',\n",
" 'target_field': 'TIPO AUSENCIA'}}],\n",
" 'aggregations': {'TOTAL NUMERO DIAS AUSENCIA': {'sum': {'field': 'AUSENTISMO.NUMERO DIAS'}},\n",
" 'CANTIDAD AUSENCIAS': {'value_count': {'field': 'AUSENTISMO.NUMERO DIAS'}}},\n",
" 'continuous': False}}"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"response"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2c518a23-1a06-4da1-b886-f23f9504cf10",
"metadata": {},
"outputs": [],
"source": [
"# NOMBRE_TRANSFORMACION = \"gross_endings_transformation\"\n",
"\n",
"# url = \"https://localhost:9200/_plugins/_transform/\" + NOMBRE_TRANSFORMACION\n",
"# data = {\n",
"# \"transform\": {\n",
"# \"schedule\": {\n",
"# \"interval\": {\n",
"# \"start_time\": 1693329303541,\n",
"# \"period\": 1,\n",
"# \"unit\": \"Minutes\"\n",
"# }\n",
"# },\n",
"# \"enabled\": True,\n",
"# \"description\": \"Transformador de Gross y Endings\",\n",
"# \"source_index\": \"gross\",\n",
"# \"data_selection_query\": {\n",
"# \"match_all\": {\n",
"# }\n",
"# },\n",
"# \"target_index\": \"gros_endings_transformado_1\",\n",
"# \"page_size\": 100,\n",
"# \"groups\": [\n",
"# {\n",
"# \"date_histogram\": {\n",
"# \"fixed_interval\": \"1m\",\n",
"# \"source_field\": \"PERIODO_PROCESO_CODIGO\",\n",
"# \"target_field\": \"PERIODO_PROCESO_CODIGO\",\n",
"# \"timezone\": \"UTC\",\n",
"# \"format\": \"yyyy-MM-dd'T'HH:mm:ss\"\n",
"# }\n",
"# },\n",
"# {\n",
"# \"terms\": {\n",
"# \"source_field\": \"SUBSCRIPTOR_ID\",\n",
"# \"target_field\": \"SUBSCRIPTOR_ID\"\n",
"# }\n",
"# },\n",
"# {\n",
"# \"terms\": {\n",
"# \"source_field\": \"AUSENTISMO.TIPO AUSENCIA\",\n",
"# \"target_field\": \"TIPO AUSENCIA\"\n",
"# }\n",
"# }\n",
"# ],\n",
"# \"aggregations\": {\n",
"# \"TOTAL NUMERO DIAS AUSENCIA\": {\n",
"# \"sum\": {\n",
"# \"field\": \"AUSENTISMO.NUMERO DIAS\"\n",
"# }\n",
"# },\n",
"# \"CANTIDAD AUSENCIAS\": {\n",
"# \"value_count\": {\n",
"# \"field\": \"AUSENTISMO.NUMERO DIAS\"\n",
"# }\n",
"# }\n",
"# },\n",
"# \"continuous\": False\n",
"# }\n",
"# }\n",
"\n",
"\n",
"# data = json.dumps(data)\n",
"\n",
"# response = requests.put(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"# response = response.json()\n",
"# transform_planta_id = response[\"_id\"]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "markdown",
"id": "d26a807d-96e9-46b6-824d-f61ad5c1dc86",
"metadata": {},
"source": [
"## Detectores de Anomalías"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "70e1116f-d9f7-4fc4-b2fc-5c52e5a1d139",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "498c68cc-7026-4e7a-adaa-26854b0c6193",
"metadata": {},
"outputs": [],
"source": [
"auth = ('admin', 'admin')\n",
"headers = {\"Content-Type\": \"application/json; charset=utf-8\"}"
]
},
{
"cell_type": "markdown",
"id": "db8a4a25-6579-4024-97e1-eb39d2c6392f",
"metadata": {},
"source": [
"### Detectores de Local Traffic"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "297b8312-30e3-4116-ba9b-5f45ed96527b",
"metadata": {},
"outputs": [],
"source": [
"INDEX_LOCAL_TRAFFIC = \"local_traffic_fortinet\""
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "34951301-b60f-4d86-8e9e-d87974298dff",
"metadata": {},
"outputs": [],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_General_de_Conexion\",\n",
" \"description\": \"Detector General de Conexiones\",\n",
" \"time_field\": \"datetime\",\n",
" \"indices\": [\n",
" \"forward_traffic_fortinet\"\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de sesiones\",\n",
" \"aggregation_query\": {\n",
" \"Conteo de sesion\": {\n",
" \"avg\": {\n",
" \"field\": \"REVENUE\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 1,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 0,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"# response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"# response = response.json()\n",
"# detector_local1_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f6832c53-88bf-410d-923d-cb66fe74540f",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "cf7c9554-ae67-4d99-bf53-94ea88398a7d",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "0c555ce6-58e5-43aa-bb3c-82add3ccdb64",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "7c8a03dc-fa2c-48f9-8190-22a1cc682748",
"metadata": {},
"source": [
"### Detectores de Forward Traffic"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "187c1939-14cd-4f33-bc5c-513e6ff2ef74",
"metadata": {},
"outputs": [],
"source": [
"INDEX_FORWARD_TRAFFIC = \"forward_traffic_fortinet2\""
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "cd57c6f4-9d8d-429a-9f8d-2883bd21cf5d",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env-3.10_1/lib/python3.10/site-packages/urllib3/connectionpool.py:1095: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/plain": [
"{'_id': 'LxyTOosBEcPkzPGPdRI_',\n",
" '_version': 1,\n",
" '_seq_no': 235,\n",
" 'anomaly_detector': {'name': 'Detector_Conexiones_Multivariado',\n",
" 'description': 'Detector Conexiones Multivariado',\n",
" 'time_field': 'datetime',\n",
" 'indices': ['forward_traffic_fortinet2'],\n",
" 'filter_query': {'prefix': {'dstip': {'value': '192.168.', 'boost': 1.0}}},\n",
" 'detection_interval': {'period': {'interval': 30, 'unit': 'Minutes'}},\n",
" 'window_delay': {'period': {'interval': 0, 'unit': 'Minutes'}},\n",
" 'shingle_size': 8,\n",
" 'schema_version': 0,\n",
" 'feature_attributes': [{'feature_id': 'KRyTOosBEcPkzPGPdRIY',\n",
" 'feature_name': 'Cantidad de Conexiones',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Conteo de sesiones': {'value_count': {'field': 'duration'}}}},\n",
" {'feature_id': 'KhyTOosBEcPkzPGPdRIY',\n",
" 'feature_name': 'Promedio de duracion de conexion',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de duracion': {'avg': {'field': 'duration'}}}},\n",
" {'feature_id': 'KxyTOosBEcPkzPGPdRIY',\n",
" 'feature_name': 'Promedio de bytes enviados',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de bytes enviados': {'avg': {'field': 'sentbyte'}}}},\n",
" {'feature_id': 'LByTOosBEcPkzPGPdRIY',\n",
" 'feature_name': 'Promedio de bytes recibidos',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de bytes recibidos': {'avg': {'field': 'rcvdbyte'}}}}],\n",
" 'last_update_time': 1697494824255,\n",
" 'user': {'name': 'admin',\n",
" 'backend_roles': ['admin'],\n",
" 'roles': ['own_index', 'all_access'],\n",
" 'custom_attribute_names': [],\n",
" 'user_requested_tenant': None},\n",
" 'detector_type': 'SINGLE_ENTITY'},\n",
" '_primary_term': 51}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_Conexiones_Multivariado\",\n",
" \"description\": \"Detector Conexiones Multivariado\",\n",
" \"time_field\": \"datetime\",\n",
" \"indices\": [\n",
" INDEX_FORWARD_TRAFFIC\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Conexiones\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Conteo de sesiones\": {\n",
" \"value_count\": {\n",
" \"field\": \"duration\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de duracion de conexion\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de duracion\": {\n",
" \"avg\": {\n",
" \"field\": \"duration\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de bytes enviados\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de bytes enviados\": {\n",
" \"avg\": {\n",
" \"field\": \"sentbyte\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de bytes recibidos\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de bytes recibidos\": {\n",
" \"avg\": {\n",
" \"field\": \"rcvdbyte\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" \"prefix\": {\n",
" \"dstip\": \"192.168.\"\n",
" }\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 30,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 0,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"response\n",
"# detector_forward1_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c0d167d4-c20a-4d40-b2d5-c52f23aa0018",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env-3.10_1/lib/python3.10/site-packages/urllib3/connectionpool.py:1095: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/plain": [
"{'_id': 'OByTOosBEcPkzPGPdRKE',\n",
" '_version': 1,\n",
" '_seq_no': 236,\n",
" 'anomaly_detector': {'name': 'Detector_Multivariado_Categorico',\n",
" 'description': 'Detector Multivariado de Firewall',\n",
" 'time_field': 'datetime',\n",
" 'indices': ['forward_traffic_fortinet2'],\n",
" 'filter_query': {'prefix': {'dstip': {'value': '192.168.', 'boost': 1.0}}},\n",
" 'detection_interval': {'period': {'interval': 30, 'unit': 'Minutes'}},\n",
" 'window_delay': {'period': {'interval': 0, 'unit': 'Minutes'}},\n",
" 'shingle_size': 8,\n",
" 'schema_version': 0,\n",
" 'feature_attributes': [{'feature_id': 'MByTOosBEcPkzPGPdRJb',\n",
" 'feature_name': 'Cantidad de Conexiones',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Conteo de sesiones': {'value_count': {'field': 'duration'}}}},\n",
" {'feature_id': 'MRyTOosBEcPkzPGPdRJc',\n",
" 'feature_name': 'Promedio de duracion de conexion',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de duracion': {'avg': {'field': 'duration'}}}},\n",
" {'feature_id': 'MhyTOosBEcPkzPGPdRJc',\n",
" 'feature_name': 'Promedio de bytes enviados',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de bytes enviados': {'avg': {'field': 'sentbyte'}}}},\n",
" {'feature_id': 'MxyTOosBEcPkzPGPdRJc',\n",
" 'feature_name': 'Promedio de bytes recibidos',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de bytes recibidos': {'avg': {'field': 'rcvdbyte'}}}}],\n",
" 'last_update_time': 1697494824324,\n",
" 'category_field': ['dstip'],\n",
" 'user': {'name': 'admin',\n",
" 'backend_roles': ['admin'],\n",
" 'roles': ['own_index', 'all_access'],\n",
" 'custom_attribute_names': [],\n",
" 'user_requested_tenant': None},\n",
" 'detector_type': 'MULTI_ENTITY'},\n",
" '_primary_term': 51}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_Multivariado_Categorico\",\n",
" \"description\": \"Detector Multivariado de Firewall\",\n",
" \"time_field\": \"datetime\",\n",
" \"indices\": [\n",
" INDEX_FORWARD_TRAFFIC\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Conexiones\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Conteo de sesiones\": {\n",
" \"value_count\": {\n",
" \"field\": \"duration\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de duracion de conexion\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de duracion\": {\n",
" \"avg\": {\n",
" \"field\": \"duration\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de bytes enviados\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de bytes enviados\": {\n",
" \"avg\": {\n",
" \"field\": \"sentbyte\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de bytes recibidos\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de bytes recibidos\": {\n",
" \"avg\": {\n",
" \"field\": \"rcvdbyte\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" \"prefix\": {\n",
" \"dstip\": \"192.168.\"\n",
" }\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 30,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 0,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" 'category_field':[\"dstip\"]\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"response\n",
"# detector_forward1_id = response[\"_id\"]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9522e9c5-4ee2-4d29-a72d-98fa49d88d4c",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/cquezada/Desktop/Bytesw/env-3.10_1/lib/python3.10/site-packages/urllib3/connectionpool.py:1095: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/plain": [
"{'_id': 's1ocQYsB_HWsLI9dEFgY',\n",
" '_version': 1,\n",
" '_seq_no': 253,\n",
" 'anomaly_detector': {'name': 'Detector_Multivariado_Tiempo_Real',\n",
" 'description': 'Detector Multivariado de Firewall',\n",
" 'time_field': 'datetime',\n",
" 'indices': ['forward_traffic_fortinet2'],\n",
" 'filter_query': {'prefix': {'dstip': {'value': '192.168.', 'boost': 1.0}}},\n",
" 'detection_interval': {'period': {'interval': 1, 'unit': 'Minutes'}},\n",
" 'window_delay': {'period': {'interval': 0, 'unit': 'Minutes'}},\n",
" 'shingle_size': 8,\n",
" 'schema_version': 0,\n",
" 'feature_attributes': [{'feature_id': 'rVocQYsB_HWsLI9dD1jj',\n",
" 'feature_name': 'Cantidad de Conexiones',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Conteo de sesiones': {'value_count': {'field': 'duration'}}}},\n",
" {'feature_id': 'rlocQYsB_HWsLI9dD1jj',\n",
" 'feature_name': 'Promedio de duracion de conexion',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de duracion': {'avg': {'field': 'duration'}}}},\n",
" {'feature_id': 'r1ocQYsB_HWsLI9dD1jj',\n",
" 'feature_name': 'Promedio de bytes enviados',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de bytes enviados': {'avg': {'field': 'sentbyte'}}}},\n",
" {'feature_id': 'sFocQYsB_HWsLI9dD1jj',\n",
" 'feature_name': 'Promedio de bytes recibidos',\n",
" 'feature_enabled': True,\n",
" 'aggregation_query': {'Promedio de bytes recibidos': {'avg': {'field': 'rcvdbyte'}}}}],\n",
" 'last_update_time': 1697604440088,\n",
" 'user': {'name': 'admin',\n",
" 'backend_roles': ['admin'],\n",
" 'roles': ['own_index', 'all_access'],\n",
" 'custom_attribute_names': [],\n",
" 'user_requested_tenant': None},\n",
" 'detector_type': 'SINGLE_ENTITY'},\n",
" '_primary_term': 52}"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = \"https://localhost:9200/_plugins/_anomaly_detection/detectors\"\n",
"data = {\n",
" \"name\": \"Detector_Multivariado_Tiempo_Real\",\n",
" \"description\": \"Detector Multivariado de Firewall\",\n",
" \"time_field\": \"datetime\",\n",
" \"indices\": [\n",
" INDEX_FORWARD_TRAFFIC\n",
" ],\n",
" \"feature_attributes\": [\n",
" {\n",
" \"feature_name\": \"Cantidad de Conexiones\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Conteo de sesiones\": {\n",
" \"value_count\": {\n",
" \"field\": \"duration\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de duracion de conexion\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de duracion\": {\n",
" \"avg\": {\n",
" \"field\": \"duration\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de bytes enviados\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de bytes enviados\": {\n",
" \"avg\": {\n",
" \"field\": \"sentbyte\"\n",
" }\n",
" }\n",
" }\n",
" },\n",
" {\n",
" \"feature_name\": \"Promedio de bytes recibidos\",\n",
" \"feature_enabled\": True,\n",
" \"aggregation_query\": {\n",
" \"Promedio de bytes recibidos\": {\n",
" \"avg\": {\n",
" \"field\": \"rcvdbyte\"\n",
" }\n",
" }\n",
" }\n",
" }\n",
" ],\n",
" \"filter_query\": {\n",
" \"prefix\": {\n",
" \"dstip\": \"192.168.\"\n",
" }\n",
" },\n",
" \"detection_interval\": {\n",
" \"period\": {\n",
" \"interval\": 1,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" },\n",
" \"window_delay\": {\n",
" \"period\": {\n",
" \"interval\": 0,\n",
" \"unit\": \"Minutes\"\n",
" }\n",
" }\n",
"}\n",
"data = json.dumps(data)\n",
"\n",
"response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
"response = response.json()\n",
"response"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "markdown",
"id": "c2d4742b-d8e1-49d7-8b45-041c9b2e8973",
"metadata": {},
"source": [
"### Obtención de Resultados"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "229b2c63-7425-4a51-88a4-29c8f6cf515a",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import json\n",
"import requests\n",
"from datetime import datetime, date, timedelta\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "4db64831-769c-4ece-86e6-72df34df65c5",
"metadata": {
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"auth = ('admin', 'admin')\n",
"headers = {\"Content-Type\": \"application/json; charset=utf-8\"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3adbaab5-dba5-4bb6-92bc-7a04c9bb0781",
"metadata": {
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"def get_data(start_date, end_date, dst_ip, row_count, sort_by, limit_local, local):\n",
" url = \"https://localhost:9200/_plugins/_sql\"\n",
" final_query = \"SELECT * FROM forward_traffic_fortinet2 where datetime >= '\"+start_date+\"' and datetime < '\"+end_date+\"'\"\n",
" if dst_ip != \"\":\n",
" final_query += \" and dstip = '\"+dst_ip+\"'\"\n",
" if limit_local:\n",
" final_query += \" and dstip like '192.168.%'\"\n",
" if local != \"\":\n",
" final_query += \" and dstip = '\"+local+\"'\"\n",
" final_query += \" limit 1000000\"\n",
" data = {\n",
" 'query': final_query\n",
" }\n",
" data = json.dumps(data)\n",
" \n",
" response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
" response = response.json()\n",
" response\n",
" heads = [item[\"name\"] for item in response[\"schema\"]]\n",
" values = response[\"datarows\"]\n",
" df = pd.DataFrame(values, columns=heads)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "3dcee4ae-1f2d-4d17-98fe-774a66d3c5c0",
"metadata": {},
"outputs": [],
"source": [
"def convert_date(fecha):\n",
" fecha = datetime.strptime(fecha, \"%Y-%m-%d %H:%M:%S\")\n",
" fecha = fecha + timedelta(hours=5)\n",
" fecha = fecha.strftime(\"%Y-%m-%d %H:%M:%S\")\n",
" return fecha"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "0a5adda4-28b7-48ab-b8e0-bbf5b40e19bf",
"metadata": {},
"outputs": [],
"source": [
"start_date = \"2023-10-25 02:00:00\"\n",
"end_date = \"2023-10-25 02:30:00\""
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "a94f92c9-1e1b-4fbf-9278-17c201c1bee3",
"metadata": {},
"outputs": [],
"source": [
"start_date = convert_date(start_date)\n",
"end_date = convert_date(end_date)\n",
"dst_ip = \"\"\n",
"row_count = 5\n",
"sort_by = \"datetime\"\n",
"limit_local = True\n",
"local = \"192.168.21.53\"\n",
"\n",
"df = get_data(start_date, end_date, dst_ip, row_count, sort_by, limit_local, local)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "53f7faec-37ca-45c0-9c1d-3e15617d0306",
"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>srcip</th>\n",
" <th>dstport</th>\n",
" <th>sentpkt</th>\n",
" <th>sentbyte_dvt</th>\n",
" <th>duration</th>\n",
" <th>srccountry</th>\n",
" <th>datetime</th>\n",
" <th>action</th>\n",
" <th>allowed_session</th>\n",
" <th>dstip</th>\n",
" <th>...</th>\n",
" <th>devtype</th>\n",
" <th>tranip</th>\n",
" <th>service</th>\n",
" <th>proto</th>\n",
" <th>srcport</th>\n",
" <th>tranport</th>\n",
" <th>dstcountry</th>\n",
" <th>rcvdbyte</th>\n",
" <th>user</th>\n",
" <th>rcvdpkt</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>192.168.10.3</td>\n",
" <td>None</td>\n",
" <td>5</td>\n",
" <td>2140.0</td>\n",
" <td>0</td>\n",
" <td>Reserved</td>\n",
" <td>2023-10-25 02:03:45</td>\n",
" <td>deny</td>\n",
" <td>0</td>\n",
" <td>192.168.21.53</td>\n",
" <td>...</td>\n",
" <td>Proxy Server</td>\n",
" <td>None</td>\n",
" <td>tcp/47081</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>109500</td>\n",
" <td>None</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>192.168.10.3</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>1920.0</td>\n",
" <td>10</td>\n",
" <td>Reserved</td>\n",
" <td>2023-10-25 02:05:25</td>\n",
" <td>server-rst</td>\n",
" <td>1</td>\n",
" <td>192.168.21.53</td>\n",
" <td>...</td>\n",
" <td>Proxy Server</td>\n",
" <td>None</td>\n",
" <td>tcp/9080</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>164575</td>\n",
" <td>jrosendo</td>\n",
" <td>94</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
" srcip dstport sentpkt sentbyte_dvt duration srccountry \\\n",
"1 192.168.10.3 None 5 2140.0 0 Reserved \n",
"0 192.168.10.3 None 0 1920.0 10 Reserved \n",
"\n",
" datetime action allowed_session dstip ... \\\n",
"1 2023-10-25 02:03:45 deny 0 192.168.21.53 ... \n",
"0 2023-10-25 02:05:25 server-rst 1 192.168.21.53 ... \n",
"\n",
" devtype tranip service proto srcport tranport dstcountry \\\n",
"1 Proxy Server None tcp/47081 None None None None \n",
"0 Proxy Server None tcp/9080 None None None None \n",
"\n",
" rcvdbyte user rcvdpkt \n",
"1 109500 None 2 \n",
"0 164575 jrosendo 94 \n",
"\n",
"[2 rows x 27 columns]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"datetime\"] = pd.to_datetime(df[\"datetime\"]) - pd.Timedelta(hours=5)\n",
"df.sort_values(by=sort_by)[:row_count] # [\"sentbyte\"]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "9c03a648-1e41-45ae-928e-977abd635636",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/QAAAKTCAYAAAC3o0M0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAABC00lEQVR4nO3de5xVdaH//zeXYbgJXmFAUTlkXgqlrIi8pImMSp40LW/fvOtPH2AipUZH8fr9crQ0MTW+p1I8R31kF/NbasiEqScdbxiJpqSEWQcGMZURVBhg//7wsI8Tpo5cZj76fD4ePGCv9dlrf/Z+PNYsXrPXXrtTpVKpBAAAAChK5/aeAAAAANB2gh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAXdt7Ah3ZqlWrMn/+/Gy00Ubp1KlTe08HAACA97lKpZJXXnklAwcOTOfOb/8evKB/G/Pnz8+gQYPaexoAAAB8wPzlL3/JVltt9bZjBP3b2GijjZK88UL26dOnnWcD/L2WlpZMnz49o0aNSk1NTXtPBwCK4RgKHVdzc3MGDRpU7dG3I+jfxurT7Pv06SPooQNqaWlJz54906dPH/8ZAYA2cAyFju/dfOzbRfEAAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAK1LW9JwB88Ly2fGXmLlqy1ttZ8tqyPLIo6f/nl9K7R+1abWvIFr3To1uXtZ4TAABsKIIe2ODmLlqSz3/3t+toa13zH888vNZbue203fPRLfuug/kAAMCGIeiBDW7IFr1z22m7r/V25ixYnK/9dHYuO3Roth+wdjE+ZIveaz0fAADYkAQ9sMH16NZlnbwbvmLFiiTJkC16eXcdAIAPHBfFAwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAJ1besd7r333nzrW9/KzJkzs2DBgvz85z/PQQcdVF1/7LHH5vrrr291n/r6+kybNq16+8UXX8xpp52WX/7yl+ncuXMOOeSQTJ48Ob17966OeeyxxzJmzJg8/PDD2WKLLXLaaaflrLPOarXdn/zkJzn33HPz7LPPZrvttssll1ySAw44oLq+UqnkvPPOy/e///28/PLL2W233fK9730v2223XVufNvAm815YmqXLVrT3NDJ30dLq3127tvnH2TrXq7ZrBm/eq72nAQDAB0Sb/we8dOnS7LLLLjn++OPzxS9+8S3H7Lfffrnuuuuqt2tra1utP+qoo7JgwYI0NDSkpaUlxx13XE4++eTcdNNNSZLm5uaMGjUqI0eOzJQpUzJ79uwcf/zx2XjjjXPyyScnSe6///4cccQRmTRpUj7/+c/npptuykEHHZRHH300H/3oR5Mkl156aa688spcf/31GTx4cM4999zU19fnD3/4Q7p3797Wpw7kjZjf+9t3t/c0WvnaT2e39xSqfvP1vUQ9AAAbRJuDfv/998/+++//tmNqa2tTV1f3luuefPLJTJs2LQ8//HA+8YlPJEm++93v5oADDsi3v/3tDBw4MDfeeGOWL1+ea6+9Nt26dctHPvKRzJo1K5dffnk16CdPnpz99tsvZ555ZpLkoosuSkNDQ6666qpMmTIllUolV1xxRc4555x84QtfSJL8+7//e/r3759bb701hx9+eFufOpBU35m/4rBh+VC/3u8wej3P5bVlue3uxnx+rxHp1aP2ne+wHj3z/JKMu3lWhzhzAQCAD4b1co7q3XffnX79+mWTTTbJ5z73uVx88cXZbLPNkiSNjY3ZeOONqzGfJCNHjkznzp3z4IMP5uCDD05jY2P23HPPdOvWrTqmvr4+l1xySV566aVssskmaWxszPjx41s9bn19fW699dYkybx589LU1JSRI0dW1/ft2zfDhw9PY2PjWwb9smXLsmzZsurt5ubmJElLS0taWlrW/oWB94EVK94I1m037Z7t+/Vs17m0tNSkaYtk6MDeqampade5rH5dVqxY4ecFAB3e6mOVYxZ0PG3ZL9d50O+333754he/mMGDB2fu3Ln55je/mf333z+NjY3p0qVLmpqa0q9fv9aT6No1m266aZqampIkTU1NGTx4cKsx/fv3r67bZJNN0tTUVF325jFv3sab7/dWY/7epEmTcsEFF6yxfPr06enZs33DBTqKvyxJkq757W9/mz+37xv0VQ0NDe09hQ75ugDAO+kIx1CgtVdfffVdj13nQf/md76HDh2anXfeOUOGDMndd9+dffbZZ10/3Do1YcKEVu/6Nzc3Z9CgQRk1alT69OnTjjODjuOJ+c359uwHsvvuu+cjA9t3v2hpaUlDQ0P23Xffdn+HviO9LgDwTjrSMRRobfWZ4u/Ger8s9D/90z9l8803zzPPPJN99tkndXV1ef7551uNWbFiRV588cXq5+7r6uqycOHCVmNW336nMW9ev3rZgAEDWo0ZNmzYW861trZ2jQv4JUlNTY0fdPDfVl9NvmvXrh1mv+gI+2hHfF0A4J10hGMo0Fpb9sn1/j30f/3rX/O3v/2tGtUjRozIyy+/nJkzZ1bH3HXXXVm1alWGDx9eHXPvvfe2+uxAQ0NDtt9++2yyySbVMTNmzGj1WA0NDRkxYkSSZPDgwamrq2s1prm5OQ8++GB1DAAAAJSqzUG/ZMmSzJo1K7NmzUryxsXnZs2aleeeey5LlizJmWeemQceeCDPPvtsZsyYkS984Qv50Ic+lPr6+iTJjjvumP322y8nnXRSHnroodx3330ZO3ZsDj/88AwcODBJcuSRR6Zbt2454YQT8sQTT+Tmm2/O5MmTW50Of/rpp2fatGm57LLL8tRTT+X888/PI488krFjxyZJOnXqlHHjxuXiiy/OL37xi8yePTtHH310Bg4cmIMOOmgtXzYAAABoX20+5f6RRx7J3nvvXb29OrKPOeaYfO9738tjjz2W66+/Pi+//HIGDhyYUaNG5aKLLmp1KvuNN96YsWPHZp999knnzp1zyCGH5Morr6yu79u3b6ZPn54xY8Zk1113zeabb56JEydWv7IuST7zmc/kpptuyjnnnJNvfvOb2W677XLrrbdWv4M+Sc4666wsXbo0J598cl5++eXsvvvumTZtmu+gBwAAoHhtDvq99torlUrlH66/884733Ebm266aW666aa3HbPzzjvnP//zP992zJe+9KV86Utf+ofrO3XqlAsvvDAXXnjhO84JAAAASrLeP0MPAAAArHuCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACtS1vScAlGXZytfTuft/ZV7znHTu3rtd57JixYrMXzE/T774ZLp2bd8fZ/Oal6Rz9//KspWvJ+nbrnMBAOCDQdADbTJ/6Z/Ta/B3882H2nsm/+Oaade09xSSJL0GJ/OXDsuu6d/eUwEA4ANA0ANtMrDXNlk677RMPmxYhvRr/3fo7/vtfdlt993a/R36uc8vyek3z8rAvbdp13kAAPDBIeiBNqnt0j2rXt8yg/tsn502a99Ty1taWjKv67zsuOmOqampade5rHp9cVa9vii1Xbq36zwAAPjgcFE8AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACtTno77333hx44IEZOHBgOnXqlFtvvbW6rqWlJWeffXaGDh2aXr16ZeDAgTn66KMzf/78VtvYdttt06lTp1Z//vVf/7XVmMceeyx77LFHunfvnkGDBuXSSy9dYy4/+clPssMOO6R79+4ZOnRo7rjjjlbrK5VKJk6cmAEDBqRHjx4ZOXJknn766bY+ZQAAAOhw2hz0S5cuzS677JKrr756jXWvvvpqHn300Zx77rl59NFHc8stt2TOnDn553/+5zXGXnjhhVmwYEH1z2mnnVZd19zcnFGjRmWbbbbJzJkz861vfSvnn39+/u3f/q065v77788RRxyRE044Ib/73e9y0EEH5aCDDsrjjz9eHXPppZfmyiuvzJQpU/Lggw+mV69eqa+vz+uvv97Wpw0AAAAdSte23mH//ffP/vvv/5br+vbtm4aGhlbLrrrqqnzqU5/Kc889l6233rq6fKONNkpdXd1bbufGG2/M8uXLc+2116Zbt275yEc+klmzZuXyyy/PySefnCSZPHly9ttvv5x55plJkosuuigNDQ256qqrMmXKlFQqlVxxxRU555xz8oUvfCFJ8u///u/p379/br311hx++OFtfeoAAADQYbQ56Ntq8eLF6dSpUzbeeONWy//1X/81F110UbbeeusceeSROeOMM9K16xvTaWxszJ577plu3bpVx9fX1+eSSy7JSy+9lE022SSNjY0ZP358q23W19dXPwIwb968NDU1ZeTIkdX1ffv2zfDhw9PY2PiWQb9s2bIsW7aseru5uTnJGx8laGlpWavXAd4vVqxYUf27vfeL1Y/f3vNIOtbrAgDvpCMdQ4HW2rJfrtegf/3113P22WfniCOOSJ8+farLv/rVr+bjH/94Nt1009x///2ZMGFCFixYkMsvvzxJ0tTUlMGDB7faVv/+/avrNtlkkzQ1NVWXvXlMU1NTddyb7/dWY/7epEmTcsEFF6yxfPr06enZs2dbnjq8b/1lSZJ0zW9/+9v8uXd7z+YNf39mUHvoiK8LALyTjnAMBVp79dVX3/XY9Rb0LS0t+fKXv5xKpZLvfe97rda9+Z31nXfeOd26dcv/9//9f5k0aVJqa2vX15Te0YQJE1rNrbm5OYMGDcqoUaNa/UICPsiemN+cb89+ILvvvns+MrB994uWlpY0NDRk3333TU1NTbvOpSO9LgDwTjrSMRRobfWZ4u/Gegn61TH/5z//OXfdddc7xvDw4cOzYsWKPPvss9l+++1TV1eXhQsXthqz+vbqz93/ozFvXr962YABA1qNGTZs2FvOo7a29i1/oVBTU+MHHfy31R+N6dq1a4fZLzrCPtoRXxcAeCcd4RgKtNaWfXKdfw/96ph/+umn8+tf/zqbbbbZO95n1qxZ6dy5c/r165ckGTFiRO69995Wnx1oaGjI9ttvn0022aQ6ZsaMGa2209DQkBEjRiRJBg8enLq6ulZjmpub8+CDD1bHAAAAQKna/A79kiVL8swzz1Rvz5s3L7Nmzcqmm26aAQMG5NBDD82jjz6a2267LStXrqx+Xn3TTTdNt27d0tjYmAcffDB77713NtpoozQ2NuaMM87I//pf/6sa60ceeWQuuOCCnHDCCTn77LPz+OOPZ/LkyfnOd75TfdzTTz89n/3sZ3PZZZdl9OjR+dGPfpRHHnmk+tV2nTp1yrhx43LxxRdnu+22y+DBg3Puuedm4MCBOeigg9bmNQMAAIB21+agf+SRR7L33ntXb6/+zPkxxxyT888/P7/4xS+SZI3T2n/zm99kr732Sm1tbX70ox/l/PPPz7JlyzJ48OCcccYZrT673rdv30yfPj1jxozJrrvums033zwTJ06sfmVdknzmM5/JTTfdlHPOOSff/OY3s9122+XWW2/NRz/60eqYs846K0uXLs3JJ5+cl19+ObvvvnumTZuW7t27t/VpA//ttZaVSZLH/2txO88kWfrasjyyKKn780vp1aP9rr+RJM88v6RdHx8AgA+eTpVKpdLek+iompub07dv3yxevNhF8eC//eih5/KNW2a39zQ6rN98fa8M3rxXe08DAN5WS0tL7rjjjhxwwAE+Qw8dTFs6dL1/Dz3w/jLqI29ccHJIv97pUdOlXecyZ8HifO2ns3PZoUOz/YC+7TqXJOlV21XMAwCwwQh6oE027dUth39q6/aeRpJkxYoVSZIhW/TKR7ds/6AHAIANaZ1f5R4AAABY/wQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgbq29wSAD57Xlq/M3EVL1no7cxctrf7dteva/TgbskXv9OjWZa3nBAAAG4qgBza4uYuW5PPf/e06297Xfjp7rbdx22m756Nb9l0HswEAgA1D0AMb3JAteue203Zf6+0seW1Zbr+7MaP3GpHePWrXek4AAFASQQ9scD26dVkn74a3tLRk4RbJrttskpqamnUwMwAAKIeL4gEAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECB2hz09957bw488MAMHDgwnTp1yq233tpqfaVSycSJEzNgwID06NEjI0eOzNNPP91qzIsvvpijjjoqffr0ycYbb5wTTjghS5YsaTXmscceyx577JHu3btn0KBBufTSS9eYy09+8pPssMMO6d69e4YOHZo77rijzXMBAACAErU56JcuXZpddtklV1999Vuuv/TSS3PllVdmypQpefDBB9OrV6/U19fn9ddfr4456qij8sQTT6ShoSG33XZb7r333px88snV9c3NzRk1alS22WabzJw5M9/61rdy/vnn59/+7d+qY+6///4cccQROeGEE/K73/0uBx10UA466KA8/vjjbZoLAAAAlKhTpVKpvOc7d+qUn//85znooIOSvPGO+MCBA/O1r30tX//615MkixcvTv/+/TN16tQcfvjhefLJJ7PTTjvl4Ycfzic+8YkkybRp03LAAQfkr3/9awYOHJjvfe97+Zd/+Zc0NTWlW7duSZJvfOMbufXWW/PUU08lSQ477LAsXbo0t912W3U+n/70pzNs2LBMmTLlXc3lnTQ3N6dv375ZvHhx+vTp815fJmA9aWlpyR133JEDDjggNTU17T0dACiGYyh0XG3p0K7r8oHnzZuXpqamjBw5srqsb9++GT58eBobG3P44YensbExG2+8cTXmk2TkyJHp3LlzHnzwwRx88MFpbGzMnnvuWY35JKmvr88ll1ySl156KZtsskkaGxszfvz4Vo9fX19f/QjAu5nL31u2bFmWLVtWvd3c3JzkjR94LS0ta/fiAOvc6v3S/gkAbeMYCh1XW/bLdRr0TU1NSZL+/fu3Wt6/f//quqampvTr16/1JLp2zaabbtpqzODBg9fYxup1m2yySZqamt7xcd5pLn9v0qRJueCCC9ZYPn369PTs2fMfPGugvTU0NLT3FACgSI6h0PG8+uqr73rsOg360k2YMKHVu/7Nzc0ZNGhQRo0a5ZR76IBaWlrS0NCQfffd1+mCANAGjqHQca0+U/zdWKdBX1dXlyRZuHBhBgwYUF2+cOHCDBs2rDrm+eefb3W/FStW5MUXX6zev66uLgsXLmw1ZvXtdxrz5vXvNJe/V1tbm9ra2jWW19TU+EEHHZh9FADeG8dQ6Hjask+u0++hHzx4cOrq6jJjxozqsubm5jz44IMZMWJEkmTEiBF5+eWXM3PmzOqYu+66K6tWrcrw4cOrY+69995Wnx1oaGjI9ttvn0022aQ65s2Ps3rM6sd5N3MBAACAUrU56JcsWZJZs2Zl1qxZSd64+NysWbPy3HPPpVOnThk3blwuvvji/OIXv8js2bNz9NFHZ+DAgdUr4e+4447Zb7/9ctJJJ+Whhx7Kfffdl7Fjx+bwww/PwIEDkyRHHnlkunXrlhNOOCFPPPFEbr755kyePLnV6fCnn356pk2blssuuyxPPfVUzj///DzyyCMZO3ZskryruQAAAECp2nzK/SOPPJK99967ent1ZB9zzDGZOnVqzjrrrCxdujQnn3xyXn755ey+++6ZNm1aunfvXr3PjTfemLFjx2afffZJ586dc8ghh+TKK6+sru/bt2+mT5+eMWPGZNddd83mm2+eiRMntvqu+s985jO56aabcs455+Sb3/xmtttuu9x666356Ec/Wh3zbuYCAAAAJVqr76F/v/M99NCx+Q5dAHhvHEOh42pLh67Tz9ADAAAAG4agBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAKt86Dfdttt06lTpzX+jBkzJkmy1157rbHulFNOabWN5557LqNHj07Pnj3Tr1+/nHnmmVmxYkWrMXfffXc+/vGPp7a2Nh/60IcyderUNeZy9dVXZ9ttt0337t0zfPjwPPTQQ+v66QIAAEC7WOdB//DDD2fBggXVPw0NDUmSL33pS9UxJ510Uqsxl156aXXdypUrM3r06Cxfvjz3339/rr/++kydOjUTJ06sjpk3b15Gjx6dvffeO7Nmzcq4ceNy4okn5s4776yOufnmmzN+/Picd955efTRR7PLLrukvr4+zz///Lp+ygAAALDBrfOg32KLLVJXV1f9c9ttt2XIkCH57Gc/Wx3Ts2fPVmP69OlTXTd9+vT84Q9/yA033JBhw4Zl//33z0UXXZSrr746y5cvT5JMmTIlgwcPzmWXXZYdd9wxY8eOzaGHHprvfOc71e1cfvnlOemkk3Lcccdlp512ypQpU9KzZ89ce+216/opAwAAwAbXdX1ufPny5bnhhhsyfvz4dOrUqbr8xhtvzA033JC6uroceOCBOffcc9OzZ88kSWNjY4YOHZr+/ftXx9fX1+fUU0/NE088kY997GNpbGzMyJEjWz1WfX19xo0bV33cmTNnZsKECdX1nTt3zsiRI9PY2PgP57ts2bIsW7aseru5uTlJ0tLSkpaWlvf+QgDrxer90v4JAG3jGAodV1v2y/Ua9LfeemtefvnlHHvssdVlRx55ZLbZZpsMHDgwjz32WM4+++zMmTMnt9xyS5KkqampVcwnqd5uamp62zHNzc157bXX8tJLL2XlypVvOeapp576h/OdNGlSLrjggjWWT58+vfoLB6DjWf3RHgCgbRxDoeN59dVX3/XY9Rr0P/zhD7P//vtn4MCB1WUnn3xy9d9Dhw7NgAEDss8++2Tu3LkZMmTI+pzOO5owYULGjx9fvd3c3JxBgwZl1KhRrT4WAHQMLS0taWhoyL777puampr2ng4AFMMxFDqu1WeKvxvrLej//Oc/59e//nX1nfd/ZPjw4UmSZ555JkOGDEldXd0aV6NfuHBhkqSurq769+plbx7Tp0+f9OjRI126dEmXLl3ecszqbbyV2tra1NbWrrG8pqbGDzrowOyjAPDeOIZCx9OWfXK9fQ/9ddddl379+mX06NFvO27WrFlJkgEDBiRJRowYkdmzZ7e6Gn1DQ0P69OmTnXbaqTpmxowZrbbT0NCQESNGJEm6deuWXXfdtdWYVatWZcaMGdUxAAAAULL1EvSrVq3Kddddl2OOOSZdu/7PSQBz587NRRddlJkzZ+bZZ5/NL37xixx99NHZc889s/POOydJRo0alZ122ilf+cpX8vvf/z533nlnzjnnnIwZM6b67vkpp5ySP/3pTznrrLPy1FNP5ZprrsmPf/zjnHHGGdXHGj9+fL7//e/n+uuvz5NPPplTTz01S5cuzXHHHbc+njIAAABsUOvllPtf//rXee6553L88ce3Wt6tW7f8+te/zhVXXJGlS5dm0KBBOeSQQ3LOOedUx3Tp0iW33XZbTj311IwYMSK9evXKMccckwsvvLA6ZvDgwbn99ttzxhlnZPLkydlqq63ygx/8IPX19dUxhx12WBYtWpSJEyemqakpw4YNy7Rp09a4UB4AAACUqFOlUqm09yQ6qubm5vTt2zeLFy92UTzogFpaWnLHHXfkgAMO8Pk/AGgDx1DouNrSoevtM/QAAADA+iPoAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoEDrPOjPP//8dOrUqdWfHXbYobr+9ddfz5gxY7LZZpuld+/eOeSQQ7Jw4cJW23juuecyevTo9OzZM/369cuZZ56ZFStWtBpz99135+Mf/3hqa2vzoQ99KFOnTl1jLldffXW23XbbdO/ePcOHD89DDz20rp8uAAAAtIv18g79Rz7ykSxYsKD657e//W113RlnnJFf/vKX+clPfpJ77rkn8+fPzxe/+MXq+pUrV2b06NFZvnx57r///lx//fWZOnVqJk6cWB0zb968jB49OnvvvXdmzZqVcePG5cQTT8ydd95ZHXPzzTdn/PjxOe+88/Loo49ml112SX19fZ5//vn18ZQBAABgg1ovQd+1a9fU1dVV/2y++eZJksWLF+eHP/xhLr/88nzuc5/Lrrvumuuuuy73339/HnjggSTJ9OnT84c//CE33HBDhg0blv333z8XXXRRrr766ixfvjxJMmXKlAwePDiXXXZZdtxxx4wdOzaHHnpovvOd71TncPnll+ekk07Kcccdl5122ilTpkxJz549c+21166PpwwAAAAbVNf1sdGnn346AwcOTPfu3TNixIhMmjQpW2+9dWbOnJmWlpaMHDmyOnaHHXbI1ltvncbGxnz6059OY2Njhg4dmv79+1fH1NfX59RTT80TTzyRj33sY2lsbGy1jdVjxo0blyRZvnx5Zs6cmQkTJlTXd+7cOSNHjkxjY+M/nPeyZcuybNmy6u3m5uYkSUtLS1paWtbqNQHWvdX7pf0TANrGMRQ6rrbsl+s86IcPH56pU6dm++23z4IFC3LBBRdkjz32yOOPP56mpqZ069YtG2+8cav79O/fP01NTUmSpqamVjG/ev3qdW83prm5Oa+99lpeeumlrFy58i3HPPXUU/9w7pMmTcoFF1ywxvLp06enZ8+e7+4FADa4hoaG9p4CABTJMRQ6nldfffVdj13nQb///vtX/73zzjtn+PDh2WabbfLjH/84PXr0WNcPt05NmDAh48ePr95ubm7OoEGDMmrUqPTp06cdZwa8lZaWljQ0NGTfffdNTU1Ne08HAIrhGAod1+ozxd+N9XLK/ZttvPHG+fCHP5xnnnkm++67b5YvX56XX3651bv0CxcuTF1dXZKkrq5ujavRr74K/pvH/P2V8RcuXJg+ffqkR48e6dKlS7p06fKWY1Zv463U1tamtrZ2jeU1NTV+0EEHZh8FgPfGMRQ6nrbsk+v9e+iXLFmSuXPnZsCAAdl1111TU1OTGTNmVNfPmTMnzz33XEaMGJEkGTFiRGbPnt3qavQNDQ3p06dPdtppp+qYN29j9ZjV2+jWrVt23XXXVmNWrVqVGTNmVMcAAABAydZ50H/961/PPffck2effTb3339/Dj744HTp0iVHHHFE+vbtmxNOOCHjx4/Pb37zm8ycOTPHHXdcRowYkU9/+tNJklGjRmWnnXbKV77ylfz+97/PnXfemXPOOSdjxoypvnt+yimn5E9/+lPOOuusPPXUU7nmmmvy4x//OGeccUZ1HuPHj8/3v//9XH/99XnyySdz6qmnZunSpTnuuOPW9VMGAACADW6dn3L/17/+NUcccUT+9re/ZYsttsjuu++eBx54IFtssUWS5Dvf+U46d+6cQw45JMuWLUt9fX2uueaa6v27dOmS2267LaeeempGjBiRXr165ZhjjsmFF15YHTN48ODcfvvtOeOMMzJ58uRstdVW+cEPfpD6+vrqmMMOOyyLFi3KxIkT09TUlGHDhmXatGlrXCgPAAAAStSpUqlU2nsSHVVzc3P69u2bxYsXuygedEAtLS254447csABB/j8HwC0gWModFxt6dD1/hl6AAAAYN0T9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFCgdR70kyZNyic/+clstNFG6devXw466KDMmTOn1Zi99tornTp1avXnlFNOaTXmueeey+jRo9OzZ8/069cvZ555ZlasWNFqzN13352Pf/zjqa2tzYc+9KFMnTp1jflcffXV2XbbbdO9e/cMHz48Dz300Lp+ygAAALDBrfOgv+eeezJmzJg88MADaWhoSEtLS0aNGpWlS5e2GnfSSSdlwYIF1T+XXnppdd3KlSszevToLF++PPfff3+uv/76TJ06NRMnTqyOmTdvXkaPHp299947s2bNyrhx43LiiSfmzjvvrI65+eabM378+Jx33nl59NFHs8suu6S+vj7PP//8un7aAAAAsEF1qlQqlfX5AIsWLUq/fv1yzz33ZM8990zyxjv0w4YNyxVXXPGW9/nVr36Vz3/+85k/f3769++fJJkyZUrOPvvsLFq0KN26dcvZZ5+d22+/PY8//nj1focffnhefvnlTJs2LUkyfPjwfPKTn8xVV12VJFm1alUGDRqU0047Ld/4xjfece7Nzc3p27dvFi9enD59+qzNywCsBy0tLbnjjjtywAEHpKampr2nAwDFcAyFjqstHdp1fU9m8eLFSZJNN9201fIbb7wxN9xwQ+rq6nLggQfm3HPPTc+ePZMkjY2NGTp0aDXmk6S+vj6nnnpqnnjiiXzsYx9LY2NjRo4c2Wqb9fX1GTduXJJk+fLlmTlzZiZMmFBd37lz54wcOTKNjY1vOddly5Zl2bJl1dvNzc1J3viB19LS8h5fAWB9Wb1f2j8BoG0cQ6Hjast+uV6DftWqVRk3blx22223fPSjH60uP/LII7PNNttk4MCBeeyxx3L22Wdnzpw5ueWWW5IkTU1NrWI+SfV2U1PT245pbm7Oa6+9lpdeeikrV658yzFPPfXUW8530qRJueCCC9ZYPn369OovG4COp6Ghob2nAABFcgyFjufVV19912PXa9CPGTMmjz/+eH7729+2Wn7yySdX/z106NAMGDAg++yzT+bOnZshQ4aszym9rQkTJmT8+PHV283NzRk0aFBGjRrllHvogFpaWtLQ0JB9993X6YIA0AaOodBxrT5T/N1Yb0E/duzY3Hbbbbn33nuz1VZbve3Y4cOHJ0meeeaZDBkyJHV1dWtcjX7hwoVJkrq6uurfq5e9eUyfPn3So0ePdOnSJV26dHnLMau38fdqa2tTW1u7xvKamho/6KADs48CwHvjGAodT1v2yXV+lftKpZKxY8fm5z//ee66664MHjz4He8za9asJMmAAQOSJCNGjMjs2bNbXY2+oaEhffr0yU477VQdM2PGjFbbaWhoyIgRI5Ik3bp1y6677tpqzKpVqzJjxozqGAAAACjVOn+HfsyYMbnpppvy//7f/8tGG21U/cx7375906NHj8ydOzc33XRTDjjggGy22WZ57LHHcsYZZ2TPPffMzjvvnCQZNWpUdtppp3zlK1/JpZdemqamppxzzjkZM2ZM9R30U045JVdddVXOOuusHH/88bnrrrvy4x//OLfffnt1LuPHj88xxxyTT3ziE/nUpz6VK664IkuXLs1xxx23rp82AAAAbFDrPOi/973vJXnjq+ne7Lrrrsuxxx6bbt265de//nU1rgcNGpRDDjkk55xzTnVsly5dctttt+XUU0/NiBEj0qtXrxxzzDG58MILq2MGDx6c22+/PWeccUYmT56crbbaKj/4wQ9SX19fHXPYYYdl0aJFmThxYpqamjJs2LBMmzZtjQvlAQAAQGnW+/fQl8z30EPH5jt0AeC9cQyFjqstHbrOP0MPAAAArH+CHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAXdt7AgAAwLvz2vKVmbtoyVpvZ8lry/LIoqT/n19K7x61a7WtIVv0To9uXdZ6TkDbCXoAACjE3EVL8vnv/nYdba1r/uOZh9d6K7edtns+umXfdTAfoK0EPQAAFGLIFr1z22m7r/V25ixYnK/9dHYuO3Roth+wdjE+ZIveaz0f4L0R9AAAUIge3bqsk3fDV6xYkSQZskUv765DwQQ9AABsIPNeWJqly1a09zQyd9HS6t9du7Z/EvSq7ZrBm/dq72lAcdp/7wUAgA+AeS8szd7fvru9p9HK1346u72nUPWbr+8l6qGNBD0AAGwAq9+Zv+KwYflQv/b93PnS15bltrsb8/m9RqTXWl7lfm098/ySjLt5Voc4cwFKI+gBAGADWLby9XTu/l/p0n2LdO7evkHfo+uKDNxkfnps1JTO7XzKfZfuS9K5+39l2crXk/g8P7SFoAcAgA1g/tI/p9fg7+abD7X3TP7HNdOuae8pJEl6DU7mLx2WXdO/vacCRRH0AACwAQzstU2Wzjstkw8bliHtfMr9ihUrct9v78tuu+/W7hfFm/v8kpx+86wM3Hubdp0HlEjQAwDABlDbpXtWvb5lBvfZPjtt1r6nlre0tGRe13nZcdMdU1NT065zWfX64qx6fVFqu3Rv13lAiQQ9AABsAK+1rEySPP5fi9t5Jm9cFO+RRUndn1/qEBfFA96bD0TQX3311fnWt76Vpqam7LLLLvnud7+bT33qU+09LQAAPkDm/ne4fuOWjvJVcV3zH8883N6TqOpV+4FIE1in3vd7zc0335zx48dnypQpGT58eK644orU19dnzpw56devX3tPDwCAD4hRH6lLkgzp1zs9arq061zmLFicr/10di47dGi2H9D+V5bvVdvVd9DDe/C+D/rLL788J510Uo477rgkyZQpU3L77bfn2muvzTe+8Y1WY5ctW5Zly5ZVbzc3Nyd54zNGLS0tG27SwLuyer+0fwJQgo26dcohHxuwVtt4bfnK/OmFpWs9l5UrV1T/XrFi7b7//Z8275Ue3db+FxSO5/CGtuwL7+ugX758eWbOnJkJEyZUl3Xu3DkjR45MY2PjGuMnTZqUCy64YI3l06dPT8+ePdfrXIH3rqGhob2nAAAbxF+WJN+eve7+C3/Wz59c6218feiKDGrfi/bD+8qrr776rse+r4P+hRdeyMqVK9O/f+vvs+zfv3+eeuqpNcZPmDAh48ePr95ubm7OoEGDMmrUqPTp02e9zxdom5aWljQ0NGTfffdt9yv0AsCG8Nryldl997V/h37J68ty538+nPo9Ppne3dfuonjr6h164A2rzxR/N97XQd9WtbW1qa1d8wdaTU2NWIAOzD4KwAdFTU1NhvVa+693a2lpyd+eSob/0xaOodDBtGWf7Lwe59HuNt9883Tp0iULFy5stXzhwoWpq6trp1kBAADA2ntfB323bt2y6667ZsaMGdVlq1atyowZMzJixIh2nBkAAACsnff9Kffjx4/PMccck0984hP51Kc+lSuuuCJLly6tXvUeAAAASvS+D/rDDjssixYtysSJE9PU1JRhw4Zl2rRpa1woDwAAAEryvg/6JBk7dmzGjh3b3tMAAACAdeZ9/Rl6AAAAeL8S9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAXq2t4T6MgqlUqSpLm5uZ1nAryVlpaWvPrqq2lubk5NTU17TwcAiuEYCh3X6v5c3aNvR9C/jVdeeSVJMmjQoHaeCQAAAB8kr7zySvr27fu2YzpV3k32f0CtWrUq8+fPz0YbbZROnTq193SAv9Pc3JxBgwblL3/5S/r06dPe0wGAYjiGQsdVqVTyyiuvZODAgenc+e0/Je8d+rfRuXPnbLXVVu09DeAd9OnTx39GAOA9cAyFjumd3plfzUXxAAAAoECCHgAAAAok6IFi1dbW5rzzzkttbW17TwUAiuIYCu8PLooHAAAABfIOPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9UIypU6dm4403rt4+//zzM2zYsHabDwCUbNttt80VV1zR3tMA1oKgBz7Q/v6XBADwfrM+j3V77bVXxo0bt162DbwzQQ+sF8uXL2/vKQAAwPuaoAfWib322itjx47NuHHjsvnmm6e+vj5PPPFEPv/5z6dPnz7ZaKONsscee2Tu3LmZPn16unfvnpdffrnVNk4//fR87nOfq96eOnVqtt566/Ts2TMHH3xw/va3v73lY//f//t/M2jQoPTs2TNf/vKXs3jx4iTJvffem5qamjQ1NbUaP27cuOyxxx65++67c9xxx2Xx4sXp1KlTOnXqlPPPPz9JsmzZsnz961/PlltumV69emX48OG5++6719nrBQBv9tOf/jRDhw5Njx49stlmm2XkyJFZunRpkuQHP/hBdtxxx3Tv3j077LBDrrnmmur9nn322XTq1Cm33HJL9t577/Ts2TO77LJLGhsbk+Rtj3VJ8sorr+SII45Ir169suWWW+bqq6+urjv++OPz+c9/vtU8W1pa0q9fv/zwhz/Msccem3vuuSeTJ0+ubvvZZ59Nkjz++OPZf//907t37/Tv3z9f+cpX8sILL6ynVw8+wCoA68BnP/vZSu/evStnnnlm5amnnqrcfffdlU033bTyxS9+sfLwww9X5syZU7n22msrTz31VGXFihWV/v37V37wgx9U7//3yx544IFK586dK5dcckllzpw5lcmTJ1c23njjSt++fav3Oe+88yq9evWqfO5zn6v87ne/q9xzzz2VD33oQ5UjjzyyOubDH/5w5dJLL63eXr58eWXzzTevXHvttZVly5ZVrrjiikqfPn0qCxYsqCxYsKDyyiuvVCqVSuXEE0+sfOYzn6nce++9lWeeeabyrW99q1JbW1v54x//uJ5fSQA+aObPn1/p2rVr5fLLL6/Mmzev8thjj1WuvvrqyiuvvFK54YYbKgMGDKj87Gc/q/zpT3+q/OxnP6tsuummlalTp1YqlUpl3rx5lSSVHXbYoXLbbbdV5syZUzn00EMr22yzTaWlpeVtj3XbbLNNZaONNqpMmjSpMmfOnMqVV15Z6dKlS2X69OmVSqVSue+++ypdunSpzJ8/vzrXW265pdKrV6/KK6+8Unn55ZcrI0aMqJx00knVba9YsaLy0ksvVbbYYovKhAkTKk8++WTl0Ucfrey7776Vvffee8O/uPA+J+iBdeKzn/1s5WMf+1j19oQJEyqDBw+uLF++/C3Hn3766ZXPfe5z1dt33nlnpba2tvLSSy9VKpVK5YgjjqgccMABre5z2GGHrRH0Xbp0qfz1r3+tLvvVr35V6dy5c2XBggWVSqVSueSSSyo77rhjdf3PfvazSu/evStLliypVCqVynXXXddqm5VKpfLnP/+50qVLl8p//dd/tVq+zz77VCZMmPAOrwQAtM3MmTMrSSrPPvvsGuuGDBlSuemmm1otu+iiiyojRoyoVCr/E/Rv/iX5E088UUlSefLJJyuVylsf6yqVN4J+v/32a7XssMMOq+y///7V2zvttFPlkksuqd4+8MADK8cee2z19mc/+9nK6aefvsb8Ro0a1WrZX/7yl0qSypw5c97qJQDeI6fcA+vMrrvuWv33rFmzsscee6SmpuYtxx511FG5++67M3/+/CTJjTfemNGjR1cv2vPkk09m+PDhre4zYsSINbaz9dZbZ8stt2w1ZtWqVZkzZ06S5Nhjj80zzzyTBx54IMkbp/F/+ctfTq9evf7h85g9e3ZWrlyZD3/4w+ndu3f1zz333JO5c+e+i1cCAN69XXbZJfvss0+GDh2aL33pS/n+97+fl156KUuXLs3cuXNzwgkntDoeXXzxxWscj3beeefqvwcMGJAkef7559/xsf/+2DpixIg8+eST1dsnnnhirrvuuiTJwoUL86tf/SrHH3/8227z97//fX7zm9+0mvMOO+yQJI6jsI51be8JAO8fb47kHj16vO3YT37ykxkyZEh+9KMf5dRTT83Pf/7zTJ06dZ3PqV+/fjnwwANz3XXXZfDgwfnVr371jp+FX7JkSbp06ZKZM2emS5curdb17t17nc8RgA+2Ll26pKGhIffff3+mT5+e7373u/mXf/mX/PKXv0ySfP/731/jl9x/f3x68y/QO3XqlCRZtWrVWs/t6KOPzje+8Y00Njbm/vvvz+DBg7PHHnu87X2WLFmSAw88MJdccska61b/sgFYNwQ9sF7svPPOuf7669PS0vK279LfeOON2WqrrdK5c+eMHj26um7HHXfMgw8+2Gr86nfZ3+y5557L/PnzM3DgwOqYzp07Z/vtt6+OOfHEE3PEEUdkq622ypAhQ7LbbrtV13Xr1i0rV65stc2PfexjWblyZZ5//vl3/E8LAKwLnTp1ym677ZbddtstEydOzDbbbJP77rsvAwcOzJ/+9KccddRR73nbb3WsW+3vj60PPPBAdtxxx+rtzTbbLAcddFCuu+66NDY25rjjjnvHbX/84x/Pz372s2y77bbp2lVuwPrklHtgvRg7dmyam5tz+OGH55FHHsnTTz+d//iP/6ieCp+8EfSPPvpo/vf//t859NBDU1tbW1331a9+NdOmTcu3v/3tPP3007nqqqsybdq0NR6ne/fuOeaYY/L73/8+//mf/5mvfvWr+fKXv5y6urrqmPr6+vTp0ycXX3zxGv8R2XbbbbNkyZLMmDEjL7zwQl599dV8+MMfzlFHHZWjjz46t9xyS+bNm5eHHnookyZNyu23374eXi0APsgefPDB/J//83/yyCOP5Lnnnsstt9ySRYsWZccdd8wFF1yQSZMm5corr8wf//jHzJ49O9ddd10uv/zyd739tzrWrXbffffl0ksvzR//+MdcffXV+clPfpLTTz+91f1PPPHEXH/99XnyySdzzDHHrLHtBx98MM8++2xeeOGFrFq1KmPGjMmLL76YI444Ig8//HDmzp2bO++8M8cdd9w//MUC8B6194f4gfeHt7oozu9///vKqFGjKj179qxstNFGlT322KMyd+7cVmM+9alPVZJU7rrrrjW2+cMf/rCy1VZbVXr06FE58MADK9/+9rfXuCjeLrvsUrnmmmsqAwcOrHTv3r1y6KGHVl588cU1tnXuueeucaXe1U455ZTKZpttVklSOe+88yqVyhtXw584cWJl2223rdTU1FQGDBhQOfjggyuPPfZY218cAHgbf/jDHyr19fWVLbbYolJbW1v58Ic/XPnud79bXX/jjTdWhg0bVunWrVtlk002qey5556VW265pVKp/M9F8X73u99Vx7/00kuVJJXf/OY31WVvdazbZpttKhdccEHlS1/6UqVnz56Vurq6yuTJk9eY36pVqyrbbLPNGherrVQqlTlz5lQ+/elPV3r06FFJUpk3b16lUqlU/vjHP1YOPvjgysYbb1zp0aNHZYcddqiMGzeusmrVqrV/wYCqTpVKpdKev1AA2BBOOOGELFq0KL/4xS/aeyoAUJQlS5Zkyy23zHXXXZcvfvGL7T0d4E18qAV4X1u8eHFmz56dm266ScwDQBusWrUqL7zwQi677LJsvPHG+ed//uf2nhLwdwQ98L72hS98IQ899FBOOeWU7Lvvvu09HQAoxnPPPZfBgwdnq622ytSpU13gDjogp9wDAABAgVzlHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBA/z+Yiz623+viTgAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.plot(x=\"datetime\", y=[\"rcvdbyte\", \"sentbyte\"], kind='box', figsize=(12, 8), grid=True)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "markdown",
"id": "c2d4742b-d8e1-49d7-8b45-041c9b2e8973",
"metadata": {},
"source": [
"### Obtención de Resultados"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "229b2c63-7425-4a51-88a4-29c8f6cf515a",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import json\n",
"import requests\n",
"from datetime import datetime, date, timedelta\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "4db64831-769c-4ece-86e6-72df34df65c5",
"metadata": {
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"auth = ('admin', 'admin')\n",
"headers = {\"Content-Type\": \"application/json; charset=utf-8\"}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3adbaab5-dba5-4bb6-92bc-7a04c9bb0781",
"metadata": {
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"def get_data(start_date, end_date, dst_ip, row_count, sort_by, limit_local, local):\n",
" url = \"https://localhost:9200/_plugins/_sql\"\n",
" final_query = \"SELECT * FROM forward_traffic_fortinet2 where datetime >= '\"+start_date+\"' and datetime < '\"+end_date+\"'\"\n",
" if dst_ip != \"\":\n",
" final_query += \" and dstip = '\"+dst_ip+\"'\"\n",
" if limit_local:\n",
" final_query += \" and dstip like '192.168.%'\"\n",
" if local != \"\":\n",
" final_query += \" and dstip = '\"+local+\"'\"\n",
" final_query += \" limit 1000000\"\n",
" data = {\n",
" 'query': final_query\n",
" }\n",
" data = json.dumps(data)\n",
" \n",
" response = requests.post(url=url, headers=headers, data=data, auth=auth, verify=False)\n",
" response = response.json()\n",
" response\n",
" heads = [item[\"name\"] for item in response[\"schema\"]]\n",
" values = response[\"datarows\"]\n",
" df = pd.DataFrame(values, columns=heads)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3dcee4ae-1f2d-4d17-98fe-774a66d3c5c0",
"metadata": {},
"outputs": [],
"source": [
"def convert_date(fecha):\n",
" fecha = datetime.strptime(fecha, \"%Y-%m-%d %H:%M:%S\")\n",
" fecha = fecha + timedelta(hours=5)\n",
" fecha = fecha.strftime(\"%Y-%m-%d %H:%M:%S\")\n",
" return fecha"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "0a5adda4-28b7-48ab-b8e0-bbf5b40e19bf",
"metadata": {},
"outputs": [],
"source": [
"start_date = \"2023-10-25 07:00:00\"\n",
"end_date = \"2023-10-25 07:30:00\""
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a94f92c9-1e1b-4fbf-9278-17c201c1bee3",
"metadata": {},
"outputs": [],
"source": [
"# start_date = convert_date(start_date)\n",
"# end_date = convert_date(end_date)\n",
"\n",
"dst_ip = \"\"\n",
"row_count = 5\n",
"sort_by = \"datetime\"\n",
"limit_local = True\n",
"local = \"192.168.21.53\"\n",
"\n",
"df = get_data(start_date, end_date, dst_ip, row_count, sort_by, limit_local, local)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "53f7faec-37ca-45c0-9c1d-3e15617d0306",
"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>srcip</th>\n",
" <th>dstport</th>\n",
" <th>sentpkt</th>\n",
" <th>sentbyte_dvt</th>\n",
" <th>duration</th>\n",
" <th>srccountry</th>\n",
" <th>datetime</th>\n",
" <th>action</th>\n",
" <th>allowed_session</th>\n",
" <th>dstip</th>\n",
" <th>...</th>\n",
" <th>devtype</th>\n",
" <th>tranip</th>\n",
" <th>service</th>\n",
" <th>proto</th>\n",
" <th>srcport</th>\n",
" <th>tranport</th>\n",
" <th>dstcountry</th>\n",
" <th>rcvdbyte</th>\n",
" <th>user</th>\n",
" <th>rcvdpkt</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>192.168.10.3</td>\n",
" <td>None</td>\n",
" <td>5</td>\n",
" <td>2140.0</td>\n",
" <td>0</td>\n",
" <td>Reserved</td>\n",
" <td>2023-10-25 07:03:45</td>\n",
" <td>deny</td>\n",
" <td>0</td>\n",
" <td>192.168.21.53</td>\n",
" <td>...</td>\n",
" <td>Proxy Server</td>\n",
" <td>None</td>\n",
" <td>tcp/47081</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>109500</td>\n",
" <td>None</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>192.168.10.3</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>1920.0</td>\n",
" <td>10</td>\n",
" <td>Reserved</td>\n",
" <td>2023-10-25 07:05:25</td>\n",
" <td>server-rst</td>\n",
" <td>1</td>\n",
" <td>192.168.21.53</td>\n",
" <td>...</td>\n",
" <td>Proxy Server</td>\n",
" <td>None</td>\n",
" <td>tcp/9080</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>164575</td>\n",
" <td>jrosendo</td>\n",
" <td>94</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
" srcip dstport sentpkt sentbyte_dvt duration srccountry \\\n",
"1 192.168.10.3 None 5 2140.0 0 Reserved \n",
"0 192.168.10.3 None 0 1920.0 10 Reserved \n",
"\n",
" datetime action allowed_session dstip ... \\\n",
"1 2023-10-25 07:03:45 deny 0 192.168.21.53 ... \n",
"0 2023-10-25 07:05:25 server-rst 1 192.168.21.53 ... \n",
"\n",
" devtype tranip service proto srcport tranport dstcountry \\\n",
"1 Proxy Server None tcp/47081 None None None None \n",
"0 Proxy Server None tcp/9080 None None None None \n",
"\n",
" rcvdbyte user rcvdpkt \n",
"1 109500 None 2 \n",
"0 164575 jrosendo 94 \n",
"\n",
"[2 rows x 27 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# df[\"datetime\"] = pd.to_datetime(df[\"datetime\"]) - pd.Timedelta(hours=5)\n",
"df.sort_values(by=sort_by)[:row_count] # [\"sentbyte\"]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9c03a648-1e41-45ae-928e-977abd635636",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/QAAAKTCAYAAAC3o0M0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAABC00lEQVR4nO3de5xVdaH//zeXYbgJXmFAUTlkXgqlrIi8pImMSp40LW/fvOtPH2AipUZH8fr9crQ0MTW+p1I8R31kF/NbasiEqScdbxiJpqSEWQcGMZURVBhg//7wsI8Tpo5cZj76fD4ePGCv9dlrf/Z+PNYsXrPXXrtTpVKpBAAAAChK5/aeAAAAANB2gh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAXdt7Ah3ZqlWrMn/+/Gy00Ubp1KlTe08HAACA97lKpZJXXnklAwcOTOfOb/8evKB/G/Pnz8+gQYPaexoAAAB8wPzlL3/JVltt9bZjBP3b2GijjZK88UL26dOnnWcD/L2WlpZMnz49o0aNSk1NTXtPBwCK4RgKHVdzc3MGDRpU7dG3I+jfxurT7Pv06SPooQNqaWlJz54906dPH/8ZAYA2cAyFju/dfOzbRfEAAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAK1LW9JwB88Ly2fGXmLlqy1ttZ8tqyPLIo6f/nl9K7R+1abWvIFr3To1uXtZ4TAABsKIIe2ODmLlqSz3/3t+toa13zH888vNZbue203fPRLfuug/kAAMCGIeiBDW7IFr1z22m7r/V25ixYnK/9dHYuO3Roth+wdjE+ZIveaz0fAADYkAQ9sMH16NZlnbwbvmLFiiTJkC16eXcdAIAPHBfFAwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAJ1besd7r333nzrW9/KzJkzs2DBgvz85z/PQQcdVF1/7LHH5vrrr291n/r6+kybNq16+8UXX8xpp52WX/7yl+ncuXMOOeSQTJ48Ob17966OeeyxxzJmzJg8/PDD2WKLLXLaaaflrLPOarXdn/zkJzn33HPz7LPPZrvttssll1ySAw44oLq+UqnkvPPOy/e///28/PLL2W233fK9730v2223XVufNvAm815YmqXLVrT3NDJ30dLq3127tvnH2TrXq7ZrBm/eq72nAQDAB0Sb/we8dOnS7LLLLjn++OPzxS9+8S3H7Lfffrnuuuuqt2tra1utP+qoo7JgwYI0NDSkpaUlxx13XE4++eTcdNNNSZLm5uaMGjUqI0eOzJQpUzJ79uwcf/zx2XjjjXPyyScnSe6///4cccQRmTRpUj7/+c/npptuykEHHZRHH300H/3oR5Mkl156aa688spcf/31GTx4cM4999zU19fnD3/4Q7p3797Wpw7kjZjf+9t3t/c0WvnaT2e39xSqfvP1vUQ9AAAbRJuDfv/998/+++//tmNqa2tTV1f3luuefPLJTJs2LQ8//HA+8YlPJEm++93v5oADDsi3v/3tDBw4MDfeeGOWL1+ea6+9Nt26dctHPvKRzJo1K5dffnk16CdPnpz99tsvZ555ZpLkoosuSkNDQ6666qpMmTIllUolV1xxRc4555x84QtfSJL8+7//e/r3759bb701hx9+eFufOpBU35m/4rBh+VC/3u8wej3P5bVlue3uxnx+rxHp1aP2ne+wHj3z/JKMu3lWhzhzAQCAD4b1co7q3XffnX79+mWTTTbJ5z73uVx88cXZbLPNkiSNjY3ZeOONqzGfJCNHjkznzp3z4IMP5uCDD05jY2P23HPPdOvWrTqmvr4+l1xySV566aVssskmaWxszPjx41s9bn19fW699dYkybx589LU1JSRI0dW1/ft2zfDhw9PY2PjWwb9smXLsmzZsurt5ubmJElLS0taWlrW/oWB94EVK94I1m037Z7t+/Vs17m0tNSkaYtk6MDeqampade5rH5dVqxY4ecFAB3e6mOVYxZ0PG3ZL9d50O+333754he/mMGDB2fu3Ln55je/mf333z+NjY3p0qVLmpqa0q9fv9aT6No1m266aZqampIkTU1NGTx4cKsx/fv3r67bZJNN0tTUVF325jFv3sab7/dWY/7epEmTcsEFF6yxfPr06enZs33DBTqKvyxJkq757W9/mz+37xv0VQ0NDe09hQ75ugDAO+kIx1CgtVdfffVdj13nQf/md76HDh2anXfeOUOGDMndd9+dffbZZ10/3Do1YcKEVu/6Nzc3Z9CgQRk1alT69OnTjjODjuOJ+c359uwHsvvuu+cjA9t3v2hpaUlDQ0P23Xffdn+HviO9LgDwTjrSMRRobfWZ4u/Ger8s9D/90z9l8803zzPPPJN99tkndXV1ef7551uNWbFiRV588cXq5+7r6uqycOHCVmNW336nMW9ev3rZgAEDWo0ZNmzYW861trZ2jQv4JUlNTY0fdPDfVl9NvmvXrh1mv+gI+2hHfF0A4J10hGMo0Fpb9sn1/j30f/3rX/O3v/2tGtUjRozIyy+/nJkzZ1bH3HXXXVm1alWGDx9eHXPvvfe2+uxAQ0NDtt9++2yyySbVMTNmzGj1WA0NDRkxYkSSZPDgwamrq2s1prm5OQ8++GB1DAAAAJSqzUG/ZMmSzJo1K7NmzUryxsXnZs2aleeeey5LlizJmWeemQceeCDPPvtsZsyYkS984Qv50Ic+lPr6+iTJjjvumP322y8nnXRSHnroodx3330ZO3ZsDj/88AwcODBJcuSRR6Zbt2454YQT8sQTT+Tmm2/O5MmTW50Of/rpp2fatGm57LLL8tRTT+X888/PI488krFjxyZJOnXqlHHjxuXiiy/OL37xi8yePTtHH310Bg4cmIMOOmgtXzYAAABoX20+5f6RRx7J3nvvXb29OrKPOeaYfO9738tjjz2W66+/Pi+//HIGDhyYUaNG5aKLLmp1KvuNN96YsWPHZp999knnzp1zyCGH5Morr6yu79u3b6ZPn54xY8Zk1113zeabb56JEydWv7IuST7zmc/kpptuyjnnnJNvfvOb2W677XLrrbdWv4M+Sc4666wsXbo0J598cl5++eXsvvvumTZtmu+gBwAAoHhtDvq99torlUrlH66/884733Ebm266aW666aa3HbPzzjvnP//zP992zJe+9KV86Utf+ofrO3XqlAsvvDAXXnjhO84JAAAASrLeP0MPAAAArHuCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACtS1vScAlGXZytfTuft/ZV7znHTu3rtd57JixYrMXzE/T774ZLp2bd8fZ/Oal6Rz9//KspWvJ+nbrnMBAOCDQdADbTJ/6Z/Ta/B3882H2nsm/+Oaade09xSSJL0GJ/OXDsuu6d/eUwEA4ANA0ANtMrDXNlk677RMPmxYhvRr/3fo7/vtfdlt993a/R36uc8vyek3z8rAvbdp13kAAPDBIeiBNqnt0j2rXt8yg/tsn502a99Ty1taWjKv67zsuOmOqampade5rHp9cVa9vii1Xbq36zwAAPjgcFE8AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACtTno77333hx44IEZOHBgOnXqlFtvvbW6rqWlJWeffXaGDh2aXr16ZeDAgTn66KMzf/78VtvYdttt06lTp1Z//vVf/7XVmMceeyx77LFHunfvnkGDBuXSSy9dYy4/+clPssMOO6R79+4ZOnRo7rjjjlbrK5VKJk6cmAEDBqRHjx4ZOXJknn766bY+ZQAAAOhw2hz0S5cuzS677JKrr756jXWvvvpqHn300Zx77rl59NFHc8stt2TOnDn553/+5zXGXnjhhVmwYEH1z2mnnVZd19zcnFGjRmWbbbbJzJkz861vfSvnn39+/u3f/q065v77788RRxyRE044Ib/73e9y0EEH5aCDDsrjjz9eHXPppZfmyiuvzJQpU/Lggw+mV69eqa+vz+uvv97Wpw0AAAAdSte23mH//ffP/vvv/5br+vbtm4aGhlbLrrrqqnzqU5/Kc889l6233rq6fKONNkpdXd1bbufGG2/M8uXLc+2116Zbt275yEc+klmzZuXyyy/PySefnCSZPHly9ttvv5x55plJkosuuigNDQ256qqrMmXKlFQqlVxxxRU555xz8oUvfCFJ8u///u/p379/br311hx++OFtfeoAAADQYbQ56Ntq8eLF6dSpUzbeeONWy//1X/81F110UbbeeusceeSROeOMM9K16xvTaWxszJ577plu3bpVx9fX1+eSSy7JSy+9lE022SSNjY0ZP358q23W19dXPwIwb968NDU1ZeTIkdX1ffv2zfDhw9PY2PiWQb9s2bIsW7aseru5uTnJGx8laGlpWavXAd4vVqxYUf27vfeL1Y/f3vNIOtbrAgDvpCMdQ4HW2rJfrtegf/3113P22WfniCOOSJ8+farLv/rVr+bjH/94Nt1009x///2ZMGFCFixYkMsvvzxJ0tTUlMGDB7faVv/+/avrNtlkkzQ1NVWXvXlMU1NTddyb7/dWY/7epEmTcsEFF6yxfPr06enZs2dbnjq8b/1lSZJ0zW9/+9v8uXd7z+YNf39mUHvoiK8LALyTjnAMBVp79dVX3/XY9Rb0LS0t+fKXv5xKpZLvfe97rda9+Z31nXfeOd26dcv/9//9f5k0aVJqa2vX15Te0YQJE1rNrbm5OYMGDcqoUaNa/UICPsiemN+cb89+ILvvvns+MrB994uWlpY0NDRk3333TU1NTbvOpSO9LgDwTjrSMRRobfWZ4u/Gegn61TH/5z//OXfdddc7xvDw4cOzYsWKPPvss9l+++1TV1eXhQsXthqz+vbqz93/ozFvXr962YABA1qNGTZs2FvOo7a29i1/oVBTU+MHHfy31R+N6dq1a4fZLzrCPtoRXxcAeCcd4RgKtNaWfXKdfw/96ph/+umn8+tf/zqbbbbZO95n1qxZ6dy5c/r165ckGTFiRO69995Wnx1oaGjI9ttvn0022aQ6ZsaMGa2209DQkBEjRiRJBg8enLq6ulZjmpub8+CDD1bHAAAAQKna/A79kiVL8swzz1Rvz5s3L7Nmzcqmm26aAQMG5NBDD82jjz6a2267LStXrqx+Xn3TTTdNt27d0tjYmAcffDB77713NtpoozQ2NuaMM87I//pf/6sa60ceeWQuuOCCnHDCCTn77LPz+OOPZ/LkyfnOd75TfdzTTz89n/3sZ3PZZZdl9OjR+dGPfpRHHnmk+tV2nTp1yrhx43LxxRdnu+22y+DBg3Puuedm4MCBOeigg9bmNQMAAIB21+agf+SRR7L33ntXb6/+zPkxxxyT888/P7/4xS+SZI3T2n/zm99kr732Sm1tbX70ox/l/PPPz7JlyzJ48OCcccYZrT673rdv30yfPj1jxozJrrvums033zwTJ06sfmVdknzmM5/JTTfdlHPOOSff/OY3s9122+XWW2/NRz/60eqYs846K0uXLs3JJ5+cl19+ObvvvnumTZuW7t27t/VpA//ttZaVSZLH/2txO88kWfrasjyyKKn780vp1aP9rr+RJM88v6RdHx8AgA+eTpVKpdLek+iompub07dv3yxevNhF8eC//eih5/KNW2a39zQ6rN98fa8M3rxXe08DAN5WS0tL7rjjjhxwwAE+Qw8dTFs6dL1/Dz3w/jLqI29ccHJIv97pUdOlXecyZ8HifO2ns3PZoUOz/YC+7TqXJOlV21XMAwCwwQh6oE027dUth39q6/aeRpJkxYoVSZIhW/TKR7ds/6AHAIANaZ1f5R4AAABY/wQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgbq29wSAD57Xlq/M3EVL1no7cxctrf7dteva/TgbskXv9OjWZa3nBAAAG4qgBza4uYuW5PPf/e06297Xfjp7rbdx22m756Nb9l0HswEAgA1D0AMb3JAteue203Zf6+0seW1Zbr+7MaP3GpHePWrXek4AAFASQQ9scD26dVkn74a3tLRk4RbJrttskpqamnUwMwAAKIeL4gEAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9AAAAFEjQAwAAQIEEPQAAABRI0AMAAECB2hz09957bw488MAMHDgwnTp1yq233tpqfaVSycSJEzNgwID06NEjI0eOzNNPP91qzIsvvpijjjoqffr0ycYbb5wTTjghS5YsaTXmscceyx577JHu3btn0KBBufTSS9eYy09+8pPssMMO6d69e4YOHZo77rijzXMBAACAErU56JcuXZpddtklV1999Vuuv/TSS3PllVdmypQpefDBB9OrV6/U19fn9ddfr4456qij8sQTT6ShoSG33XZb7r333px88snV9c3NzRk1alS22WabzJw5M9/61rdy/vnn59/+7d+qY+6///4cccQROeGEE/K73/0uBx10UA466KA8/vjjbZoLAAAAlKhTpVKpvOc7d+qUn//85znooIOSvPGO+MCBA/O1r30tX//615MkixcvTv/+/TN16tQcfvjhefLJJ7PTTjvl4Ycfzic+8YkkybRp03LAAQfkr3/9awYOHJjvfe97+Zd/+Zc0NTWlW7duSZJvfOMbufXWW/PUU08lSQ477LAsXbo0t912W3U+n/70pzNs2LBMmTLlXc3lnTQ3N6dv375ZvHhx+vTp815fJmA9aWlpyR133JEDDjggNTU17T0dACiGYyh0XG3p0K7r8oHnzZuXpqamjBw5srqsb9++GT58eBobG3P44YensbExG2+8cTXmk2TkyJHp3LlzHnzwwRx88MFpbGzMnnvuWY35JKmvr88ll1ySl156KZtsskkaGxszfvz4Vo9fX19f/QjAu5nL31u2bFmWLVtWvd3c3JzkjR94LS0ta/fiAOvc6v3S/gkAbeMYCh1XW/bLdRr0TU1NSZL+/fu3Wt6/f//quqampvTr16/1JLp2zaabbtpqzODBg9fYxup1m2yySZqamt7xcd5pLn9v0qRJueCCC9ZYPn369PTs2fMfPGugvTU0NLT3FACgSI6h0PG8+uqr73rsOg360k2YMKHVu/7Nzc0ZNGhQRo0a5ZR76IBaWlrS0NCQfffd1+mCANAGjqHQca0+U/zdWKdBX1dXlyRZuHBhBgwYUF2+cOHCDBs2rDrm+eefb3W/FStW5MUXX6zev66uLgsXLmw1ZvXtdxrz5vXvNJe/V1tbm9ra2jWW19TU+EEHHZh9FADeG8dQ6Hjask+u0++hHzx4cOrq6jJjxozqsubm5jz44IMZMWJEkmTEiBF5+eWXM3PmzOqYu+66K6tWrcrw4cOrY+69995Wnx1oaGjI9ttvn0022aQ65s2Ps3rM6sd5N3MBAACAUrU56JcsWZJZs2Zl1qxZSd64+NysWbPy3HPPpVOnThk3blwuvvji/OIXv8js2bNz9NFHZ+DAgdUr4e+4447Zb7/9ctJJJ+Whhx7Kfffdl7Fjx+bwww/PwIEDkyRHHnlkunXrlhNOOCFPPPFEbr755kyePLnV6fCnn356pk2blssuuyxPPfVUzj///DzyyCMZO3ZskryruQAAAECp2nzK/SOPPJK99967ent1ZB9zzDGZOnVqzjrrrCxdujQnn3xyXn755ey+++6ZNm1aunfvXr3PjTfemLFjx2afffZJ586dc8ghh+TKK6+sru/bt2+mT5+eMWPGZNddd83mm2+eiRMntvqu+s985jO56aabcs455+Sb3/xmtttuu9x666356Ec/Wh3zbuYCAAAAJVqr76F/v/M99NCx+Q5dAHhvHEOh42pLh67Tz9ADAAAAG4agBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAIJegAAACiQoAcAAIACCXoAAAAokKAHAACAAgl6AAAAKJCgBwAAgAKt86Dfdttt06lTpzX+jBkzJkmy1157rbHulFNOabWN5557LqNHj07Pnj3Tr1+/nHnmmVmxYkWrMXfffXc+/vGPp7a2Nh/60IcyderUNeZy9dVXZ9ttt0337t0zfPjwPPTQQ+v66QIAAEC7WOdB//DDD2fBggXVPw0NDUmSL33pS9UxJ510Uqsxl156aXXdypUrM3r06Cxfvjz3339/rr/++kydOjUTJ06sjpk3b15Gjx6dvffeO7Nmzcq4ceNy4okn5s4776yOufnmmzN+/Picd955efTRR7PLLrukvr4+zz///Lp+ygAAALDBrfOg32KLLVJXV1f9c9ttt2XIkCH57Gc/Wx3Ts2fPVmP69OlTXTd9+vT84Q9/yA033JBhw4Zl//33z0UXXZSrr746y5cvT5JMmTIlgwcPzmWXXZYdd9wxY8eOzaGHHprvfOc71e1cfvnlOemkk3Lcccdlp512ypQpU9KzZ89ce+216/opAwAAwAbXdX1ufPny5bnhhhsyfvz4dOrUqbr8xhtvzA033JC6uroceOCBOffcc9OzZ88kSWNjY4YOHZr+/ftXx9fX1+fUU0/NE088kY997GNpbGzMyJEjWz1WfX19xo0bV33cmTNnZsKECdX1nTt3zsiRI9PY2PgP57ts2bIsW7aseru5uTlJ0tLSkpaWlvf+QgDrxer90v4JAG3jGAodV1v2y/Ua9LfeemtefvnlHHvssdVlRx55ZLbZZpsMHDgwjz32WM4+++zMmTMnt9xyS5KkqampVcwnqd5uamp62zHNzc157bXX8tJLL2XlypVvOeapp576h/OdNGlSLrjggjWWT58+vfoLB6DjWf3RHgCgbRxDoeN59dVX3/XY9Rr0P/zhD7P//vtn4MCB1WUnn3xy9d9Dhw7NgAEDss8++2Tu3LkZMmTI+pzOO5owYULGjx9fvd3c3JxBgwZl1KhRrT4WAHQMLS0taWhoyL777puampr2ng4AFMMxFDqu1WeKvxvrLej//Oc/59e//nX1nfd/ZPjw4UmSZ555JkOGDEldXd0aV6NfuHBhkqSurq769+plbx7Tp0+f9OjRI126dEmXLl3ecszqbbyV2tra1NbWrrG8pqbGDzrowOyjAPDeOIZCx9OWfXK9fQ/9ddddl379+mX06NFvO27WrFlJkgEDBiRJRowYkdmzZ7e6Gn1DQ0P69OmTnXbaqTpmxowZrbbT0NCQESNGJEm6deuWXXfdtdWYVatWZcaMGdUxAAAAULL1EvSrVq3Kddddl2OOOSZdu/7PSQBz587NRRddlJkzZ+bZZ5/NL37xixx99NHZc889s/POOydJRo0alZ122ilf+cpX8vvf/z533nlnzjnnnIwZM6b67vkpp5ySP/3pTznrrLPy1FNP5ZprrsmPf/zjnHHGGdXHGj9+fL7//e/n+uuvz5NPPplTTz01S5cuzXHHHbc+njIAAABsUOvllPtf//rXee6553L88ce3Wt6tW7f8+te/zhVXXJGlS5dm0KBBOeSQQ3LOOedUx3Tp0iW33XZbTj311IwYMSK9evXKMccckwsvvLA6ZvDgwbn99ttzxhlnZPLkydlqq63ygx/8IPX19dUxhx12WBYtWpSJEyemqakpw4YNy7Rp09a4UB4AAACUqFOlUqm09yQ6qubm5vTt2zeLFy92UTzogFpaWnLHHXfkgAMO8Pk/AGgDx1DouNrSoevtM/QAAADA+iPoAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoEDrPOjPP//8dOrUqdWfHXbYobr+9ddfz5gxY7LZZpuld+/eOeSQQ7Jw4cJW23juuecyevTo9OzZM/369cuZZ56ZFStWtBpz99135+Mf/3hqa2vzoQ99KFOnTl1jLldffXW23XbbdO/ePcOHD89DDz20rp8uAAAAtIv18g79Rz7ykSxYsKD657e//W113RlnnJFf/vKX+clPfpJ77rkn8+fPzxe/+MXq+pUrV2b06NFZvnx57r///lx//fWZOnVqJk6cWB0zb968jB49OnvvvXdmzZqVcePG5cQTT8ydd95ZHXPzzTdn/PjxOe+88/Loo49ml112SX19fZ5//vn18ZQBAABgg1ovQd+1a9fU1dVV/2y++eZJksWLF+eHP/xhLr/88nzuc5/Lrrvumuuuuy73339/HnjggSTJ9OnT84c//CE33HBDhg0blv333z8XXXRRrr766ixfvjxJMmXKlAwePDiXXXZZdtxxx4wdOzaHHnpovvOd71TncPnll+ekk07Kcccdl5122ilTpkxJz549c+21166PpwwAAAAbVNf1sdGnn346AwcOTPfu3TNixIhMmjQpW2+9dWbOnJmWlpaMHDmyOnaHHXbI1ltvncbGxnz6059OY2Njhg4dmv79+1fH1NfX59RTT80TTzyRj33sY2lsbGy1jdVjxo0blyRZvnx5Zs6cmQkTJlTXd+7cOSNHjkxjY+M/nPeyZcuybNmy6u3m5uYkSUtLS1paWtbqNQHWvdX7pf0TANrGMRQ6rrbsl+s86IcPH56pU6dm++23z4IFC3LBBRdkjz32yOOPP56mpqZ069YtG2+8cav79O/fP01NTUmSpqamVjG/ev3qdW83prm5Oa+99lpeeumlrFy58i3HPPXUU/9w7pMmTcoFF1ywxvLp06enZ8+e7+4FADa4hoaG9p4CABTJMRQ6nldfffVdj13nQb///vtX/73zzjtn+PDh2WabbfLjH/84PXr0WNcPt05NmDAh48ePr95ubm7OoEGDMmrUqPTp06cdZwa8lZaWljQ0NGTfffdNTU1Ne08HAIrhGAod1+ozxd+N9XLK/ZttvPHG+fCHP5xnnnkm++67b5YvX56XX3651bv0CxcuTF1dXZKkrq5ujavRr74K/pvH/P2V8RcuXJg+ffqkR48e6dKlS7p06fKWY1Zv463U1tamtrZ2jeU1NTV+0EEHZh8FgPfGMRQ6nrbsk+v9e+iXLFmSuXPnZsCAAdl1111TU1OTGTNmVNfPmTMnzz33XEaMGJEkGTFiRGbPnt3qavQNDQ3p06dPdtppp+qYN29j9ZjV2+jWrVt23XXXVmNWrVqVGTNmVMcAAABAydZ50H/961/PPffck2effTb3339/Dj744HTp0iVHHHFE+vbtmxNOOCHjx4/Pb37zm8ycOTPHHXdcRowYkU9/+tNJklGjRmWnnXbKV77ylfz+97/PnXfemXPOOSdjxoypvnt+yimn5E9/+lPOOuusPPXUU7nmmmvy4x//OGeccUZ1HuPHj8/3v//9XH/99XnyySdz6qmnZunSpTnuuOPW9VMGAACADW6dn3L/17/+NUcccUT+9re/ZYsttsjuu++eBx54IFtssUWS5Dvf+U46d+6cQw45JMuWLUt9fX2uueaa6v27dOmS2267LaeeempGjBiRXr165ZhjjsmFF15YHTN48ODcfvvtOeOMMzJ58uRstdVW+cEPfpD6+vrqmMMOOyyLFi3KxIkT09TUlGHDhmXatGlrXCgPAAAAStSpUqlU2nsSHVVzc3P69u2bxYsXuygedEAtLS254447csABB/j8HwC0gWModFxt6dD1/hl6AAAAYN0T9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFCgdR70kyZNyic/+clstNFG6devXw466KDMmTOn1Zi99tornTp1avXnlFNOaTXmueeey+jRo9OzZ8/069cvZ555ZlasWNFqzN13352Pf/zjqa2tzYc+9KFMnTp1jflcffXV2XbbbdO9e/cMHz48Dz300Lp+ygAAALDBrfOgv+eeezJmzJg88MADaWhoSEtLS0aNGpWlS5e2GnfSSSdlwYIF1T+XXnppdd3KlSszevToLF++PPfff3+uv/76TJ06NRMnTqyOmTdvXkaPHp299947s2bNyrhx43LiiSfmzjvvrI65+eabM378+Jx33nl59NFHs8suu6S+vj7PP//8un7aAAAAsEF1qlQqlfX5AIsWLUq/fv1yzz33ZM8990zyxjv0w4YNyxVXXPGW9/nVr36Vz3/+85k/f3769++fJJkyZUrOPvvsLFq0KN26dcvZZ5+d22+/PY8//nj1focffnhefvnlTJs2LUkyfPjwfPKTn8xVV12VJFm1alUGDRqU0047Ld/4xjfece7Nzc3p27dvFi9enD59+qzNywCsBy0tLbnjjjtywAEHpKampr2nAwDFcAyFjqstHdp1fU9m8eLFSZJNN9201fIbb7wxN9xwQ+rq6nLggQfm3HPPTc+ePZMkjY2NGTp0aDXmk6S+vj6nnnpqnnjiiXzsYx9LY2NjRo4c2Wqb9fX1GTduXJJk+fLlmTlzZiZMmFBd37lz54wcOTKNjY1vOddly5Zl2bJl1dvNzc1J3viB19LS8h5fAWB9Wb1f2j8BoG0cQ6Hjast+uV6DftWqVRk3blx22223fPSjH60uP/LII7PNNttk4MCBeeyxx3L22Wdnzpw5ueWWW5IkTU1NrWI+SfV2U1PT245pbm7Oa6+9lpdeeikrV658yzFPPfXUW8530qRJueCCC9ZYPn369OovG4COp6Ghob2nAABFcgyFjufVV19912PXa9CPGTMmjz/+eH7729+2Wn7yySdX/z106NAMGDAg++yzT+bOnZshQ4aszym9rQkTJmT8+PHV283NzRk0aFBGjRrllHvogFpaWtLQ0JB9993X6YIA0AaOodBxrT5T/N1Yb0E/duzY3Hbbbbn33nuz1VZbve3Y4cOHJ0meeeaZDBkyJHV1dWtcjX7hwoVJkrq6uurfq5e9eUyfPn3So0ePdOnSJV26dHnLMau38fdqa2tTW1u7xvKamho/6KADs48CwHvjGAodT1v2yXV+lftKpZKxY8fm5z//ee66664MHjz4He8za9asJMmAAQOSJCNGjMjs2bNbXY2+oaEhffr0yU477VQdM2PGjFbbaWhoyIgRI5Ik3bp1y6677tpqzKpVqzJjxozqGAAAACjVOn+HfsyYMbnpppvy//7f/8tGG21U/cx7375906NHj8ydOzc33XRTDjjggGy22WZ57LHHcsYZZ2TPPffMzjvvnCQZNWpUdtppp3zlK1/JpZdemqamppxzzjkZM2ZM9R30U045JVdddVXOOuusHH/88bnrrrvy4x//OLfffnt1LuPHj88xxxyTT3ziE/nUpz6VK664IkuXLs1xxx23rp82AAAAbFDrPOi/973vJXnjq+ne7Lrrrsuxxx6bbt265de//nU1rgcNGpRDDjkk55xzTnVsly5dctttt+XUU0/NiBEj0qtXrxxzzDG58MILq2MGDx6c22+/PWeccUYmT56crbbaKj/4wQ9SX19fHXPYYYdl0aJFmThxYpqamjJs2LBMmzZtjQvlAQAAQGnW+/fQl8z30EPH5jt0AeC9cQyFjqstHbrOP0MPAAAArH+CHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBAXdt7AgAAwLvz2vKVmbtoyVpvZ8lry/LIoqT/n19K7x61a7WtIVv0To9uXdZ6TkDbCXoAACjE3EVL8vnv/nYdba1r/uOZh9d6K7edtns+umXfdTAfoK0EPQAAFGLIFr1z22m7r/V25ixYnK/9dHYuO3Roth+wdjE+ZIveaz0f4L0R9AAAUIge3bqsk3fDV6xYkSQZskUv765DwQQ9AABsIPNeWJqly1a09zQyd9HS6t9du7Z/EvSq7ZrBm/dq72lAcdp/7wUAgA+AeS8szd7fvru9p9HK1346u72nUPWbr+8l6qGNBD0AAGwAq9+Zv+KwYflQv/b93PnS15bltrsb8/m9RqTXWl7lfm098/ySjLt5Voc4cwFKI+gBAGADWLby9XTu/l/p0n2LdO7evkHfo+uKDNxkfnps1JTO7XzKfZfuS9K5+39l2crXk/g8P7SFoAcAgA1g/tI/p9fg7+abD7X3TP7HNdOuae8pJEl6DU7mLx2WXdO/vacCRRH0AACwAQzstU2Wzjstkw8bliHtfMr9ihUrct9v78tuu+/W7hfFm/v8kpx+86wM3Hubdp0HlEjQAwDABlDbpXtWvb5lBvfZPjtt1r6nlre0tGRe13nZcdMdU1NT065zWfX64qx6fVFqu3Rv13lAiQQ9AABsAK+1rEySPP5fi9t5Jm9cFO+RRUndn1/qEBfFA96bD0TQX3311fnWt76Vpqam7LLLLvnud7+bT33qU+09LQAAPkDm/ne4fuOWjvJVcV3zH8883N6TqOpV+4FIE1in3vd7zc0335zx48dnypQpGT58eK644orU19dnzpw56devX3tPDwCAD4hRH6lLkgzp1zs9arq061zmLFicr/10di47dGi2H9D+V5bvVdvVd9DDe/C+D/rLL788J510Uo477rgkyZQpU3L77bfn2muvzTe+8Y1WY5ctW5Zly5ZVbzc3Nyd54zNGLS0tG27SwLuyer+0fwJQgo26dcohHxuwVtt4bfnK/OmFpWs9l5UrV1T/XrFi7b7//Z8275Ue3db+FxSO5/CGtuwL7+ugX758eWbOnJkJEyZUl3Xu3DkjR45MY2PjGuMnTZqUCy64YI3l06dPT8+ePdfrXIH3rqGhob2nAAAbxF+WJN+eve7+C3/Wz59c6218feiKDGrfi/bD+8qrr776rse+r4P+hRdeyMqVK9O/f+vvs+zfv3+eeuqpNcZPmDAh48ePr95ubm7OoEGDMmrUqPTp02e9zxdom5aWljQ0NGTfffdt9yv0AsCG8Nryldl997V/h37J68ty538+nPo9Ppne3dfuonjr6h164A2rzxR/N97XQd9WtbW1qa1d8wdaTU2NWIAOzD4KwAdFTU1NhvVa+693a2lpyd+eSob/0xaOodDBtGWf7Lwe59HuNt9883Tp0iULFy5stXzhwoWpq6trp1kBAADA2ntfB323bt2y6667ZsaMGdVlq1atyowZMzJixIh2nBkAAACsnff9Kffjx4/PMccck0984hP51Kc+lSuuuCJLly6tXvUeAAAASvS+D/rDDjssixYtysSJE9PU1JRhw4Zl2rRpa1woDwAAAEryvg/6JBk7dmzGjh3b3tMAAACAdeZ9/Rl6AAAAeL8S9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAUS9AAAAFAgQQ8AAAAFEvQAAABQIEEPAAAABRL0AAAAUCBBDwAAAAXq2t4T6MgqlUqSpLm5uZ1nAryVlpaWvPrqq2lubk5NTU17TwcAiuEYCh3X6v5c3aNvR9C/jVdeeSVJMmjQoHaeCQAAAB8kr7zySvr27fu2YzpV3k32f0CtWrUq8+fPz0YbbZROnTq193SAv9Pc3JxBgwblL3/5S/r06dPe0wGAYjiGQsdVqVTyyiuvZODAgenc+e0/Je8d+rfRuXPnbLXVVu09DeAd9OnTx39GAOA9cAyFjumd3plfzUXxAAAAoECCHgAAAAok6IFi1dbW5rzzzkttbW17TwUAiuIYCu8PLooHAAAABfIOPQAAABRI0AMAAECBBD0AAAAUSNADAABAgQQ9UIypU6dm4403rt4+//zzM2zYsHabDwCUbNttt80VV1zR3tMA1oKgBz7Q/v6XBADwfrM+j3V77bVXxo0bt162DbwzQQ+sF8uXL2/vKQAAwPuaoAfWib322itjx47NuHHjsvnmm6e+vj5PPPFEPv/5z6dPnz7ZaKONsscee2Tu3LmZPn16unfvnpdffrnVNk4//fR87nOfq96eOnVqtt566/Ts2TMHH3xw/va3v73lY//f//t/M2jQoPTs2TNf/vKXs3jx4iTJvffem5qamjQ1NbUaP27cuOyxxx65++67c9xxx2Xx4sXp1KlTOnXqlPPPPz9JsmzZsnz961/PlltumV69emX48OG5++6719nrBQBv9tOf/jRDhw5Njx49stlmm2XkyJFZunRpkuQHP/hBdtxxx3Tv3j077LBDrrnmmur9nn322XTq1Cm33HJL9t577/Ts2TO77LJLGhsbk+Rtj3VJ8sorr+SII45Ir169suWWW+bqq6+urjv++OPz+c9/vtU8W1pa0q9fv/zwhz/Msccem3vuuSeTJ0+ubvvZZ59Nkjz++OPZf//907t37/Tv3z9f+cpX8sILL6ynVw8+wCoA68BnP/vZSu/evStnnnlm5amnnqrcfffdlU033bTyxS9+sfLwww9X5syZU7n22msrTz31VGXFihWV/v37V37wgx9U7//3yx544IFK586dK5dcckllzpw5lcmTJ1c23njjSt++fav3Oe+88yq9evWqfO5zn6v87ne/q9xzzz2VD33oQ5UjjzyyOubDH/5w5dJLL63eXr58eWXzzTevXHvttZVly5ZVrrjiikqfPn0qCxYsqCxYsKDyyiuvVCqVSuXEE0+sfOYzn6nce++9lWeeeabyrW99q1JbW1v54x//uJ5fSQA+aObPn1/p2rVr5fLLL6/Mmzev8thjj1WuvvrqyiuvvFK54YYbKgMGDKj87Gc/q/zpT3+q/OxnP6tsuummlalTp1YqlUpl3rx5lSSVHXbYoXLbbbdV5syZUzn00EMr22yzTaWlpeVtj3XbbLNNZaONNqpMmjSpMmfOnMqVV15Z6dKlS2X69OmVSqVSue+++ypdunSpzJ8/vzrXW265pdKrV6/KK6+8Unn55ZcrI0aMqJx00knVba9YsaLy0ksvVbbYYovKhAkTKk8++WTl0Ucfrey7776Vvffee8O/uPA+J+iBdeKzn/1s5WMf+1j19oQJEyqDBw+uLF++/C3Hn3766ZXPfe5z1dt33nlnpba2tvLSSy9VKpVK5YgjjqgccMABre5z2GGHrRH0Xbp0qfz1r3+tLvvVr35V6dy5c2XBggWVSqVSueSSSyo77rhjdf3PfvazSu/evStLliypVCqVynXXXddqm5VKpfLnP/+50qVLl8p//dd/tVq+zz77VCZMmPAOrwQAtM3MmTMrSSrPPvvsGuuGDBlSuemmm1otu+iiiyojRoyoVCr/E/Rv/iX5E088UUlSefLJJyuVylsf6yqVN4J+v/32a7XssMMOq+y///7V2zvttFPlkksuqd4+8MADK8cee2z19mc/+9nK6aefvsb8Ro0a1WrZX/7yl0qSypw5c97qJQDeI6fcA+vMrrvuWv33rFmzsscee6SmpuYtxx511FG5++67M3/+/CTJjTfemNGjR1cv2vPkk09m+PDhre4zYsSINbaz9dZbZ8stt2w1ZtWqVZkzZ06S5Nhjj80zzzyTBx54IMkbp/F/+ctfTq9evf7h85g9e3ZWrlyZD3/4w+ndu3f1zz333JO5c+e+i1cCAN69XXbZJfvss0+GDh2aL33pS/n+97+fl156KUuXLs3cuXNzwgkntDoeXXzxxWscj3beeefqvwcMGJAkef7559/xsf/+2DpixIg8+eST1dsnnnhirrvuuiTJwoUL86tf/SrHH3/8227z97//fX7zm9+0mvMOO+yQJI6jsI51be8JAO8fb47kHj16vO3YT37ykxkyZEh+9KMf5dRTT83Pf/7zTJ06dZ3PqV+/fjnwwANz3XXXZfDgwfnVr371jp+FX7JkSbp06ZKZM2emS5curdb17t17nc8RgA+2Ll26pKGhIffff3+mT5+e7373u/mXf/mX/PKXv0ySfP/731/jl9x/f3x68y/QO3XqlCRZtWrVWs/t6KOPzje+8Y00Njbm/vvvz+DBg7PHHnu87X2WLFmSAw88MJdccska61b/sgFYNwQ9sF7svPPOuf7669PS0vK279LfeOON2WqrrdK5c+eMHj26um7HHXfMgw8+2Gr86nfZ3+y5557L/PnzM3DgwOqYzp07Z/vtt6+OOfHEE3PEEUdkq622ypAhQ7LbbrtV13Xr1i0rV65stc2PfexjWblyZZ5//vl3/E8LAKwLnTp1ym677ZbddtstEydOzDbbbJP77rsvAwcOzJ/+9KccddRR73nbb3WsW+3vj60PPPBAdtxxx+rtzTbbLAcddFCuu+66NDY25rjjjnvHbX/84x/Pz372s2y77bbp2lVuwPrklHtgvRg7dmyam5tz+OGH55FHHsnTTz+d//iP/6ieCp+8EfSPPvpo/vf//t859NBDU1tbW1331a9+NdOmTcu3v/3tPP3007nqqqsybdq0NR6ne/fuOeaYY/L73/8+//mf/5mvfvWr+fKXv5y6urrqmPr6+vTp0ycXX3zxGv8R2XbbbbNkyZLMmDEjL7zwQl599dV8+MMfzlFHHZWjjz46t9xyS+bNm5eHHnookyZNyu23374eXi0APsgefPDB/J//83/yyCOP5Lnnnsstt9ySRYsWZccdd8wFF1yQSZMm5corr8wf//jHzJ49O9ddd10uv/zyd739tzrWrXbffffl0ksvzR//+MdcffXV+clPfpLTTz+91f1PPPHEXH/99XnyySdzzDHHrLHtBx98MM8++2xeeOGFrFq1KmPGjMmLL76YI444Ig8//HDmzp2bO++8M8cdd9w//MUC8B6194f4gfeHt7oozu9///vKqFGjKj179qxstNFGlT322KMyd+7cVmM+9alPVZJU7rrrrjW2+cMf/rCy1VZbVXr06FE58MADK9/+9rfXuCjeLrvsUrnmmmsqAwcOrHTv3r1y6KGHVl588cU1tnXuueeucaXe1U455ZTKZpttVklSOe+88yqVyhtXw584cWJl2223rdTU1FQGDBhQOfjggyuPPfZY218cAHgbf/jDHyr19fWVLbbYolJbW1v58Ic/XPnud79bXX/jjTdWhg0bVunWrVtlk002qey5556VW265pVKp/M9F8X73u99Vx7/00kuVJJXf/OY31WVvdazbZpttKhdccEHlS1/6UqVnz56Vurq6yuTJk9eY36pVqyrbbLPNGherrVQqlTlz5lQ+/elPV3r06FFJUpk3b16lUqlU/vjHP1YOPvjgysYbb1zp0aNHZYcddqiMGzeusmrVqrV/wYCqTpVKpdKev1AA2BBOOOGELFq0KL/4xS/aeyoAUJQlS5Zkyy23zHXXXZcvfvGL7T0d4E18qAV4X1u8eHFmz56dm266ScwDQBusWrUqL7zwQi677LJsvPHG+ed//uf2nhLwdwQ98L72hS98IQ899FBOOeWU7Lvvvu09HQAoxnPPPZfBgwdnq622ytSpU13gDjogp9wDAABAgVzlHgAAAAok6AEAAKBAgh4AAAAKJOgBAACgQIIeAAAACiToAQAAoECCHgAAAAok6AEAAKBA/z+Yiz623+viTgAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.plot(x=\"datetime\", y=[\"rcvdbyte\", \"sentbyte\"], kind='box', figsize=(12, 8), grid=True)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "markdown",
"id": "ebd65d94-9463-4999-917a-4c075a55704e",
"metadata": {},
"source": [
"### Union de logs"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "e9f9857e-2330-4b07-8f8d-b7bdfd90e67e",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import os"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b5a12ee9-67bd-4149-8895-3534069e33ac",
"metadata": {},
"outputs": [],
"source": [
"def get_df(path, drop_cols = []):\n",
" with open(path) as reader:\n",
" lines = reader.readlines()\n",
" lines = [line.strip(\"\\n\") for line in lines]\n",
" finals = []\n",
" for line in lines:\n",
" aux = line.split(\"=\")\n",
" dicts = []\n",
" prev_col = \"\"\n",
" for i, item in enumerate(aux):\n",
" if i == 0:\n",
" prev_col = item\n",
" continue\n",
" elif i == len(aux)-1:\n",
" word = item\n",
" elif '\"' in item:\n",
" word = item[item.find('\"'):item.rfind('\"')+1]\n",
" column = item[item.rfind('\"')+2:]\n",
" else:\n",
" aux2 = item.split()\n",
" word = aux2[0]\n",
" column = aux2[1]\n",
" raw = (prev_col, word)\n",
" dicts.append(raw)\n",
" prev_col = column\n",
" final_raw = {item[0]: item[1] for item in dicts}\n",
" finals.append(final_raw)\n",
" df = pd.DataFrame.from_dict(finals)\n",
" df[\"datetime\"] = df[\"date\"] + \" \" + df[\"time\"]\n",
" df[\"datetime\"] = pd.to_datetime(df[\"datetime\"])\n",
" if len(drop_cols) > 0:\n",
" df = df.drop(drop_cols, axis=1, errors='ignore')\n",
" col = df.pop('datetime')\n",
" df.insert(0, col.name, col)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "20861e69-643a-448e-ba18-cd6c4d3c618f",
"metadata": {},
"outputs": [],
"source": [
"def convert_df(df):\n",
" mean_duration = round(df[\"duration\"].mean(), 2)\n",
" mean_sentbytes = round(df[\"sentbyte\"].mean(), 2)\n",
" mean_recievedbytes = round(df[\"rcvdbyte\"].mean(), 2)\n",
" df[\"duration_dvt\"] = df[\"duration\"].apply(lambda x: abs(x-mean_duration))\n",
" df[\"sentbyte_dvt\"] = df[\"sentbyte\"].apply(lambda x: abs(x-mean_sentbytes))\n",
" df[\"rcvdbyte_dvt\"] = df[\"rcvdbyte\"].apply(lambda x: abs(x-mean_recievedbytes))\n",
" df[\"allowed_session\"] = np.where(df[\"action\"]!=\"deny\", 1, 0)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b1153102-ad43-4b84-96b0-015c7b5a523e",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 4,
"id": "044a4766-e242-4870-b8c6-226c98ebab35",
"metadata": {},
"outputs": [],
"source": [
"path_dir = \"11-10-23/\"\n",
"list_dir = os.listdir(path_dir)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "eafc9667-ee1a-4047-916c-a670f4d442db",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11-10-23/forticloud-traffic-forward-2023_10_12 (21).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (17).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (0).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (3).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (6).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (4).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (18).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (19).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (22).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (11).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (10).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (1).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (2).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (14).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12.log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (12).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (16).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (5).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (13).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (7).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (15).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (20).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (8).log\n",
"11-10-23/forticloud-traffic-forward-2023_10_12 (9).log\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>datetime</th>\n",
" <th>srcip</th>\n",
" <th>srcport</th>\n",
" <th>dstip</th>\n",
" <th>dstport</th>\n",
" <th>srccountry</th>\n",
" <th>dstcountry</th>\n",
" <th>proto</th>\n",
" <th>action</th>\n",
" <th>service</th>\n",
" <th>...</th>\n",
" <th>rcvdbyte</th>\n",
" <th>sentpkt</th>\n",
" <th>rcvdpkt</th>\n",
" <th>osname</th>\n",
" <th>devtype</th>\n",
" <th>user</th>\n",
" <th>utmaction</th>\n",
" <th>tranip</th>\n",
" <th>tranport</th>\n",
" <th>dstfamily</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2023-10-11 22:01:00</td>\n",
" <td>192.168.21.195</td>\n",
" <td>56644</td>\n",
" <td>192.168.22.3</td>\n",
" <td>161</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>17</td>\n",
" <td>\"deny\"</td>\n",
" <td>\"SNMP\"</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>\"Windows\"</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.27.129</td>\n",
" <td>53811</td>\n",
" <td>186.118.171.89</td>\n",
" <td>123</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Colombia\"</td>\n",
" <td>17</td>\n",
" <td>\"accept\"</td>\n",
" <td>\"NTP\"</td>\n",
" <td>...</td>\n",
" <td>76</td>\n",
" <td>1</td>\n",
" <td>1</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>33010</td>\n",
" <td>192.168.27.133</td>\n",
" <td>32625</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>6</td>\n",
" <td>\"close\"</td>\n",
" <td>\"tcp/32625\"</td>\n",
" <td>...</td>\n",
" <td>275</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>NaN</td>\n",
" <td>\"Proxy Server\"</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>45568</td>\n",
" <td>192.168.27.90</td>\n",
" <td>7070</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"RTSP\"</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>\"Proxy Server\"</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>40264</td>\n",
" <td>192.168.21.38</td>\n",
" <td>58095</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"tcp/58095\"</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>\"Proxy Server\"</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>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995</th>\n",
" <td>2023-10-11 10:00:06</td>\n",
" <td>192.168.21.195</td>\n",
" <td>58605</td>\n",
" <td>192.168.22.3</td>\n",
" <td>161</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>17</td>\n",
" <td>\"deny\"</td>\n",
" <td>\"SNMP\"</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>\"Windows\"</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>1996</th>\n",
" <td>2023-10-11 10:00:06</td>\n",
" <td>201.240.116.158</td>\n",
" <td>13013</td>\n",
" <td>200.123.7.44</td>\n",
" <td>2222</td>\n",
" <td>\"Peru\"</td>\n",
" <td>\"Peru\"</td>\n",
" <td>6</td>\n",
" <td>\"accept\"</td>\n",
" <td>\"tcp/2222\"</td>\n",
" <td>...</td>\n",
" <td>89510</td>\n",
" <td>583</td>\n",
" <td>394</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>192.168.21.135</td>\n",
" <td>2222</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1997</th>\n",
" <td>2023-10-11 10:00:06</td>\n",
" <td>192.168.21.172</td>\n",
" <td>37303</td>\n",
" <td>200.25.3.17</td>\n",
" <td>123</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Colombia\"</td>\n",
" <td>17</td>\n",
" <td>\"accept\"</td>\n",
" <td>\"NTP\"</td>\n",
" <td>...</td>\n",
" <td>76</td>\n",
" <td>1</td>\n",
" <td>1</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>1998</th>\n",
" <td>2023-10-11 10:00:06</td>\n",
" <td>192.168.27.28</td>\n",
" <td>41609</td>\n",
" <td>3.5.2.141</td>\n",
" <td>443</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"United States\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"HTTPS\"</td>\n",
" <td>...</td>\n",
" <td>7207</td>\n",
" <td>19</td>\n",
" <td>19</td>\n",
" <td>NaN</td>\n",
" <td>\"Router\"</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>1999</th>\n",
" <td>2023-10-11 10:00:06</td>\n",
" <td>192.168.27.28</td>\n",
" <td>31975</td>\n",
" <td>3.5.2.141</td>\n",
" <td>443</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"United States\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"HTTPS\"</td>\n",
" <td>...</td>\n",
" <td>7207</td>\n",
" <td>19</td>\n",
" <td>19</td>\n",
" <td>NaN</td>\n",
" <td>\"Router\"</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>45413 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" datetime srcip srcport dstip dstport \\\n",
"0 2023-10-11 22:01:00 192.168.21.195 56644 192.168.22.3 161 \n",
"1 2023-10-11 22:00:59 192.168.27.129 53811 186.118.171.89 123 \n",
"2 2023-10-11 22:00:59 192.168.10.3 33010 192.168.27.133 32625 \n",
"3 2023-10-11 22:00:59 192.168.10.3 45568 192.168.27.90 7070 \n",
"4 2023-10-11 22:00:59 192.168.10.3 40264 192.168.21.38 58095 \n",
"... ... ... ... ... ... \n",
"1995 2023-10-11 10:00:06 192.168.21.195 58605 192.168.22.3 161 \n",
"1996 2023-10-11 10:00:06 201.240.116.158 13013 200.123.7.44 2222 \n",
"1997 2023-10-11 10:00:06 192.168.21.172 37303 200.25.3.17 123 \n",
"1998 2023-10-11 10:00:06 192.168.27.28 41609 3.5.2.141 443 \n",
"1999 2023-10-11 10:00:06 192.168.27.28 31975 3.5.2.141 443 \n",
"\n",
" srccountry dstcountry proto action service ... \\\n",
"0 \"Reserved\" \"Reserved\" 17 \"deny\" \"SNMP\" ... \n",
"1 \"Reserved\" \"Colombia\" 17 \"accept\" \"NTP\" ... \n",
"2 \"Reserved\" \"Reserved\" 6 \"close\" \"tcp/32625\" ... \n",
"3 \"Reserved\" \"Reserved\" 6 \"server-rst\" \"RTSP\" ... \n",
"4 \"Reserved\" \"Reserved\" 6 \"server-rst\" \"tcp/58095\" ... \n",
"... ... ... ... ... ... ... \n",
"1995 \"Reserved\" \"Reserved\" 17 \"deny\" \"SNMP\" ... \n",
"1996 \"Peru\" \"Peru\" 6 \"accept\" \"tcp/2222\" ... \n",
"1997 \"Reserved\" \"Colombia\" 17 \"accept\" \"NTP\" ... \n",
"1998 \"Reserved\" \"United States\" 6 \"server-rst\" \"HTTPS\" ... \n",
"1999 \"Reserved\" \"United States\" 6 \"server-rst\" \"HTTPS\" ... \n",
"\n",
" rcvdbyte sentpkt rcvdpkt osname devtype user utmaction \\\n",
"0 0 0 0 \"Windows\" NaN NaN NaN \n",
"1 76 1 1 NaN NaN NaN NaN \n",
"2 275 5 5 NaN \"Proxy Server\" NaN NaN \n",
"3 40 1 1 NaN \"Proxy Server\" NaN NaN \n",
"4 40 1 1 NaN \"Proxy Server\" NaN NaN \n",
"... ... ... ... ... ... ... ... \n",
"1995 0 0 0 \"Windows\" NaN NaN NaN \n",
"1996 89510 583 394 NaN NaN NaN NaN \n",
"1997 76 1 1 NaN NaN NaN NaN \n",
"1998 7207 19 19 NaN \"Router\" NaN NaN \n",
"1999 7207 19 19 NaN \"Router\" NaN NaN \n",
"\n",
" tranip tranport dstfamily \n",
"0 NaN NaN NaN \n",
"1 NaN NaN NaN \n",
"2 NaN NaN NaN \n",
"3 NaN NaN NaN \n",
"4 NaN NaN NaN \n",
"... ... ... ... \n",
"1995 NaN NaN NaN \n",
"1996 192.168.21.135 2222 NaN \n",
"1997 NaN NaN NaN \n",
"1998 NaN NaN NaN \n",
"1999 NaN NaN NaN \n",
"\n",
"[45413 rows x 22 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"final_df = None\n",
"for file in list_dir:\n",
" if file.endswith(\"more\"):\n",
" continue\n",
" full_path = path_dir+file\n",
" print(full_path)\n",
" drop_cols = [\"identifier\", \"date\", \"time\", \"eventtime\", \"tz\", \"logid\", \"type\", \"subtype\", \"level\", \"vd\", \"shaperdroprcvdbyte\", \"trandisp\", \"shaperrcvdname\", \"appcat\",\n",
" \"policytype\", \"dstdevtype\", \"dstserver\", \"srcserver\", \"dstmac\", \"masterdstmac\", \"dstosname\", \"srcswversion\", \"dstintfrole\", \"dsthwvendor\",\n",
" \"srcmac\", \"mastersrcmac\", \"sessionid\", \"shapersentname\", \"shaperdropsentbyte\", \"srcname\", \"srchwvendor\", \"srcfamily\", \"srcintf\", \"srcintfrole\",\n",
" \"dstintf\", \"app\", \"srchwversion\", \"poluuid\", \"policyname\", \"transip\", \"transport\", \"group\", \"sentdelta\", \"rcvddelta\", \"crscore\", \"craction\", \"crlevel\",\n",
" \"shapingpolicyid\", \"shapingpolicyname\", \"appid\", \"apprisk\", \"applist\", \"wanin\", \"wanout\", \"lanin\", \"lanout\", \"countweb\", \"countapp\", \"utmref\",\n",
" \"psrcport\", \"pdstport\", \"dstswversion\", \"vpntype\", \"policyid\", \"countssl\", \"dsthwversion\"]\n",
" df = get_df(full_path,drop_cols)\n",
" if isinstance(final_df, type(None)):\n",
" final_df = df\n",
" else:\n",
" final_df = pd.concat([final_df, df])\n",
"final_df"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "617aeb7a-61f2-4662-ae28-93843d91eae8",
"metadata": {},
"outputs": [],
"source": [
"path_dir = \"11-10-23/more/\"\n",
"list_dir = os.listdir(path_dir)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "3b91c562-36a6-4f59-8f8c-2aa10f9e06d0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (21).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (28).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (40).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (83).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (58).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (38).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (17).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (30).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (27).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (33).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (29).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (59).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (78).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (3).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (6).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (4).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (18).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (61).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (70).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (19).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (44).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (62).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (22).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (79).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (24).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (80).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (57).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (77).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (76).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (56).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (41).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (39).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (11).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (69).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (74).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (73).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (82).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (60).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (25).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (51).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (55).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (23).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (10).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (67).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (37).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (49).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (1).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (2).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (14).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (45).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (26).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12.log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (50).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (12).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (42).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (64).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (16).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (5).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (32).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (71).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (13).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (35).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (7).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (65).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (15).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (53).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (54).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (43).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (31).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (46).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (20).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (34).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (48).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (75).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (8).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (68).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (47).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (63).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (9).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (52).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (81).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (72).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (66).log\n",
"11-10-23/more/forticloud-traffic-forward-2023_10_12 (36).log\n"
]
}
],
"source": [
"for file in list_dir:\n",
" full_path = path_dir+file\n",
" print(full_path)\n",
" drop_cols = [\"identifier\", \"date\", \"time\", \"eventtime\", \"tz\", \"logid\", \"type\", \"subtype\", \"level\", \"vd\", \"shaperdroprcvdbyte\", \"trandisp\", \"shaperrcvdname\", \"appcat\",\n",
" \"policytype\", \"dstdevtype\", \"dstserver\", \"srcserver\", \"dstmac\", \"masterdstmac\", \"dstosname\", \"srcswversion\", \"dstintfrole\", \"dsthwvendor\",\n",
" \"srcmac\", \"mastersrcmac\", \"sessionid\", \"shapersentname\", \"shaperdropsentbyte\", \"srcname\", \"srchwvendor\", \"srcfamily\", \"srcintf\", \"srcintfrole\",\n",
" \"dstintf\", \"app\", \"srchwversion\", \"poluuid\", \"policyname\", \"transip\", \"transport\", \"group\", \"sentdelta\", \"rcvddelta\", \"crscore\", \"craction\", \"crlevel\",\n",
" \"shapingpolicyid\", \"shapingpolicyname\", \"appid\", \"apprisk\", \"applist\", \"wanin\", \"wanout\", \"lanin\", \"lanout\", \"countweb\", \"countapp\", \"utmref\",\n",
" \"psrcport\", \"pdstport\", \"dstswversion\", \"vpntype\", \"policyid\", \"countssl\", \"dsthwversion\", \"dstfamily\"]\n",
" df = get_df(full_path,drop_cols)\n",
" if isinstance(final_df, type(None)):\n",
" final_df = df\n",
" else:\n",
" final_df = pd.concat([final_df, df])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d714ee13-a9a7-454e-b810-551f64446c32",
"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>datetime</th>\n",
" <th>srcip</th>\n",
" <th>srcport</th>\n",
" <th>dstip</th>\n",
" <th>dstport</th>\n",
" <th>srccountry</th>\n",
" <th>dstcountry</th>\n",
" <th>proto</th>\n",
" <th>action</th>\n",
" <th>service</th>\n",
" <th>...</th>\n",
" <th>rcvdbyte</th>\n",
" <th>sentpkt</th>\n",
" <th>rcvdpkt</th>\n",
" <th>osname</th>\n",
" <th>devtype</th>\n",
" <th>user</th>\n",
" <th>utmaction</th>\n",
" <th>tranip</th>\n",
" <th>tranport</th>\n",
" <th>dstfamily</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2023-10-11 22:01:00</td>\n",
" <td>192.168.21.195</td>\n",
" <td>56644</td>\n",
" <td>192.168.22.3</td>\n",
" <td>161</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>17</td>\n",
" <td>\"deny\"</td>\n",
" <td>\"SNMP\"</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>\"Windows\"</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.27.129</td>\n",
" <td>53811</td>\n",
" <td>186.118.171.89</td>\n",
" <td>123</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Colombia\"</td>\n",
" <td>17</td>\n",
" <td>\"accept\"</td>\n",
" <td>\"NTP\"</td>\n",
" <td>...</td>\n",
" <td>76</td>\n",
" <td>1</td>\n",
" <td>1</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>33010</td>\n",
" <td>192.168.27.133</td>\n",
" <td>32625</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>6</td>\n",
" <td>\"close\"</td>\n",
" <td>\"tcp/32625\"</td>\n",
" <td>...</td>\n",
" <td>275</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>NaN</td>\n",
" <td>\"Proxy Server\"</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>45568</td>\n",
" <td>192.168.27.90</td>\n",
" <td>7070</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"RTSP\"</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>\"Proxy Server\"</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>2023-10-11 22:00:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>40264</td>\n",
" <td>192.168.21.38</td>\n",
" <td>58095</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"tcp/58095\"</td>\n",
" <td>...</td>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>\"Proxy Server\"</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>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995</th>\n",
" <td>2023-10-11 12:01:06</td>\n",
" <td>192.168.27.14</td>\n",
" <td>53486</td>\n",
" <td>16.182.36.65</td>\n",
" <td>443</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"United States\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"HTTPS\"</td>\n",
" <td>...</td>\n",
" <td>7075</td>\n",
" <td>21</td>\n",
" <td>21</td>\n",
" <td>NaN</td>\n",
" <td>\"Router\"</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>1996</th>\n",
" <td>2023-10-11 12:01:06</td>\n",
" <td>192.168.20.17</td>\n",
" <td>55585</td>\n",
" <td>54.225.227.202</td>\n",
" <td>443</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"United States\"</td>\n",
" <td>6</td>\n",
" <td>\"client-rst\"</td>\n",
" <td>\"HTTPS\"</td>\n",
" <td>...</td>\n",
" <td>112</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>\"macOS\"</td>\n",
" <td>\"Computer\"</td>\n",
" <td>NaN</td>\n",
" <td>\"block\"</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1997</th>\n",
" <td>2023-10-11 12:01:06</td>\n",
" <td>192.168.22.6</td>\n",
" <td>52981</td>\n",
" <td>8.8.8.8</td>\n",
" <td>53</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"United States\"</td>\n",
" <td>17</td>\n",
" <td>\"accept\"</td>\n",
" <td>\"DNS\"</td>\n",
" <td>...</td>\n",
" <td>96</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>\"Windows\"</td>\n",
" <td>\"Home &amp; Office\"</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>1998</th>\n",
" <td>2023-10-11 12:01:06</td>\n",
" <td>201.240.116.158</td>\n",
" <td>13013</td>\n",
" <td>200.123.7.44</td>\n",
" <td>2222</td>\n",
" <td>\"Peru\"</td>\n",
" <td>\"Peru\"</td>\n",
" <td>6</td>\n",
" <td>\"accept\"</td>\n",
" <td>\"tcp/2222\"</td>\n",
" <td>...</td>\n",
" <td>199359</td>\n",
" <td>1320</td>\n",
" <td>887</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>192.168.21.135</td>\n",
" <td>2222</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999</th>\n",
" <td>2023-10-11 12:01:06</td>\n",
" <td>192.168.27.28</td>\n",
" <td>56617</td>\n",
" <td>54.231.228.201</td>\n",
" <td>443</td>\n",
" <td>\"Reserved\"</td>\n",
" <td>\"United States\"</td>\n",
" <td>6</td>\n",
" <td>\"server-rst\"</td>\n",
" <td>\"HTTPS\"</td>\n",
" <td>...</td>\n",
" <td>7190</td>\n",
" <td>22</td>\n",
" <td>22</td>\n",
" <td>NaN</td>\n",
" <td>\"Router\"</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>210406 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" datetime srcip srcport dstip dstport \\\n",
"0 2023-10-11 22:01:00 192.168.21.195 56644 192.168.22.3 161 \n",
"1 2023-10-11 22:00:59 192.168.27.129 53811 186.118.171.89 123 \n",
"2 2023-10-11 22:00:59 192.168.10.3 33010 192.168.27.133 32625 \n",
"3 2023-10-11 22:00:59 192.168.10.3 45568 192.168.27.90 7070 \n",
"4 2023-10-11 22:00:59 192.168.10.3 40264 192.168.21.38 58095 \n",
"... ... ... ... ... ... \n",
"1995 2023-10-11 12:01:06 192.168.27.14 53486 16.182.36.65 443 \n",
"1996 2023-10-11 12:01:06 192.168.20.17 55585 54.225.227.202 443 \n",
"1997 2023-10-11 12:01:06 192.168.22.6 52981 8.8.8.8 53 \n",
"1998 2023-10-11 12:01:06 201.240.116.158 13013 200.123.7.44 2222 \n",
"1999 2023-10-11 12:01:06 192.168.27.28 56617 54.231.228.201 443 \n",
"\n",
" srccountry dstcountry proto action service ... \\\n",
"0 \"Reserved\" \"Reserved\" 17 \"deny\" \"SNMP\" ... \n",
"1 \"Reserved\" \"Colombia\" 17 \"accept\" \"NTP\" ... \n",
"2 \"Reserved\" \"Reserved\" 6 \"close\" \"tcp/32625\" ... \n",
"3 \"Reserved\" \"Reserved\" 6 \"server-rst\" \"RTSP\" ... \n",
"4 \"Reserved\" \"Reserved\" 6 \"server-rst\" \"tcp/58095\" ... \n",
"... ... ... ... ... ... ... \n",
"1995 \"Reserved\" \"United States\" 6 \"server-rst\" \"HTTPS\" ... \n",
"1996 \"Reserved\" \"United States\" 6 \"client-rst\" \"HTTPS\" ... \n",
"1997 \"Reserved\" \"United States\" 17 \"accept\" \"DNS\" ... \n",
"1998 \"Peru\" \"Peru\" 6 \"accept\" \"tcp/2222\" ... \n",
"1999 \"Reserved\" \"United States\" 6 \"server-rst\" \"HTTPS\" ... \n",
"\n",
" rcvdbyte sentpkt rcvdpkt osname devtype user utmaction \\\n",
"0 0 0 0 \"Windows\" NaN NaN NaN \n",
"1 76 1 1 NaN NaN NaN NaN \n",
"2 275 5 5 NaN \"Proxy Server\" NaN NaN \n",
"3 40 1 1 NaN \"Proxy Server\" NaN NaN \n",
"4 40 1 1 NaN \"Proxy Server\" NaN NaN \n",
"... ... ... ... ... ... ... ... \n",
"1995 7075 21 21 NaN \"Router\" NaN NaN \n",
"1996 112 7 2 \"macOS\" \"Computer\" NaN \"block\" \n",
"1997 96 1 1 \"Windows\" \"Home & Office\" NaN NaN \n",
"1998 199359 1320 887 NaN NaN NaN NaN \n",
"1999 7190 22 22 NaN \"Router\" NaN NaN \n",
"\n",
" tranip tranport dstfamily \n",
"0 NaN NaN NaN \n",
"1 NaN NaN NaN \n",
"2 NaN NaN NaN \n",
"3 NaN NaN NaN \n",
"4 NaN NaN NaN \n",
"... ... ... ... \n",
"1995 NaN NaN NaN \n",
"1996 NaN NaN NaN \n",
"1997 NaN NaN NaN \n",
"1998 192.168.21.135 2222 NaN \n",
"1999 NaN NaN NaN \n",
"\n",
"[210406 rows x 22 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"final_df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "2352e61f-243f-41b4-a704-dd09ba30f010",
"metadata": {},
"outputs": [],
"source": [
"final = final_df.drop_duplicates()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "dfd3076e-aba5-4337-a74b-70f4f28f3ca0",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n",
"/tmp/ipykernel_331/1468705837.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].fillna(-1)\n",
"/tmp/ipykernel_331/1468705837.py:6: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].astype(int)\n",
"/tmp/ipykernel_331/1468705837.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])\n",
"/tmp/ipykernel_331/1468705837.py:3: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" final[col] = final[col].str.replace('\"', '')\n"
]
}
],
"source": [
"str_obj = list(final.select_dtypes(include=[object]).columns)\n",
"for col in str_obj:\n",
" final[col] = final[col].str.replace('\"', '')\n",
" if all(final[col].str.isdigit()):\n",
" final[col] = final[col].fillna(-1)\n",
" final[col] = final[col].astype(int)\n",
" final[col] = np.where(final[col]==-1, np.nan, final[col])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "80bafe9e-24aa-4524-98ad-c547efca6eef",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" <th>std</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>datetime</th>\n",
" <td>209717</td>\n",
" <td>2023-10-11 11:43:27.178149632</td>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>2023-10-11 06:03:18</td>\n",
" <td>2023-10-11 11:11:50</td>\n",
" <td>2023-10-11 17:10:06</td>\n",
" <td>2023-10-11 23:04:00</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>srcport</th>\n",
" <td>209521.0</td>\n",
" <td>47346.791501</td>\n",
" <td>0.0</td>\n",
" <td>40146.0</td>\n",
" <td>48390.0</td>\n",
" <td>55678.0</td>\n",
" <td>65535.0</td>\n",
" <td>10417.322538</td>\n",
" </tr>\n",
" <tr>\n",
" <th>dstport</th>\n",
" <td>209521.0</td>\n",
" <td>16448.121363</td>\n",
" <td>0.0</td>\n",
" <td>443.0</td>\n",
" <td>8080.0</td>\n",
" <td>31079.0</td>\n",
" <td>65482.0</td>\n",
" <td>19012.655216</td>\n",
" </tr>\n",
" <tr>\n",
" <th>proto</th>\n",
" <td>209717.0</td>\n",
" <td>6.693129</td>\n",
" <td>1.0</td>\n",
" <td>6.0</td>\n",
" <td>6.0</td>\n",
" <td>6.0</td>\n",
" <td>47.0</td>\n",
" <td>2.687873</td>\n",
" </tr>\n",
" <tr>\n",
" <th>duration</th>\n",
" <td>194611.0</td>\n",
" <td>8616.166332</td>\n",
" <td>0.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>65.0</td>\n",
" <td>5639286.0</td>\n",
" <td>156337.112499</td>\n",
" </tr>\n",
" <tr>\n",
" <th>sentbyte</th>\n",
" <td>194611.0</td>\n",
" <td>331420.745703</td>\n",
" <td>0.0</td>\n",
" <td>60.0</td>\n",
" <td>120.0</td>\n",
" <td>1964.0</td>\n",
" <td>571624440.0</td>\n",
" <td>7179751.113014</td>\n",
" </tr>\n",
" <tr>\n",
" <th>rcvdbyte</th>\n",
" <td>194611.0</td>\n",
" <td>958033.148193</td>\n",
" <td>0.0</td>\n",
" <td>40.0</td>\n",
" <td>40.0</td>\n",
" <td>5431.0</td>\n",
" <td>1581075022.0</td>\n",
" <td>26773680.37451</td>\n",
" </tr>\n",
" <tr>\n",
" <th>sentpkt</th>\n",
" <td>194611.0</td>\n",
" <td>2114.50864</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" <td>14.0</td>\n",
" <td>2188945.0</td>\n",
" <td>37510.923448</td>\n",
" </tr>\n",
" <tr>\n",
" <th>rcvdpkt</th>\n",
" <td>194611.0</td>\n",
" <td>1969.605356</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>13.0</td>\n",
" <td>2487032.0</td>\n",
" <td>39804.986358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>tranport</th>\n",
" <td>3224.0</td>\n",
" <td>8252.276675</td>\n",
" <td>0.0</td>\n",
" <td>161.0</td>\n",
" <td>2222.0</td>\n",
" <td>7081.0</td>\n",
" <td>58080.0</td>\n",
" <td>14927.857816</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean min \\\n",
"datetime 209717 2023-10-11 11:43:27.178149632 2023-10-11 00:00:04 \n",
"srcport 209521.0 47346.791501 0.0 \n",
"dstport 209521.0 16448.121363 0.0 \n",
"proto 209717.0 6.693129 1.0 \n",
"duration 194611.0 8616.166332 0.0 \n",
"sentbyte 194611.0 331420.745703 0.0 \n",
"rcvdbyte 194611.0 958033.148193 0.0 \n",
"sentpkt 194611.0 2114.50864 0.0 \n",
"rcvdpkt 194611.0 1969.605356 0.0 \n",
"tranport 3224.0 8252.276675 0.0 \n",
"\n",
" 25% 50% 75% \\\n",
"datetime 2023-10-11 06:03:18 2023-10-11 11:11:50 2023-10-11 17:10:06 \n",
"srcport 40146.0 48390.0 55678.0 \n",
"dstport 443.0 8080.0 31079.0 \n",
"proto 6.0 6.0 6.0 \n",
"duration 5.0 5.0 65.0 \n",
"sentbyte 60.0 120.0 1964.0 \n",
"rcvdbyte 40.0 40.0 5431.0 \n",
"sentpkt 1.0 2.0 14.0 \n",
"rcvdpkt 1.0 1.0 13.0 \n",
"tranport 161.0 2222.0 7081.0 \n",
"\n",
" max std \n",
"datetime 2023-10-11 23:04:00 NaN \n",
"srcport 65535.0 10417.322538 \n",
"dstport 65482.0 19012.655216 \n",
"proto 47.0 2.687873 \n",
"duration 5639286.0 156337.112499 \n",
"sentbyte 571624440.0 7179751.113014 \n",
"rcvdbyte 1581075022.0 26773680.37451 \n",
"sentpkt 2188945.0 37510.923448 \n",
"rcvdpkt 2487032.0 39804.986358 \n",
"tranport 58080.0 14927.857816 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"final.describe().T"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "e528f30e-faee-497b-9722-c68b047aada7",
"metadata": {},
"outputs": [],
"source": [
"umbral = 0.75\n",
"sample = 50000"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "ec67c52a-6cb9-47e8-a995-02964dab4e20",
"metadata": {},
"outputs": [],
"source": [
"final = final.sample(n=sample)\n",
"df1 = final[final[\"duration\"] <= final[\"duration\"].quantile(umbral)]\n",
"df2 = final[final[\"duration\"] > final[\"duration\"].quantile(umbral)]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "95dafbd2-c68a-42f8-8926-645462290810",
"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>datetime</th>\n",
" <th>srcip</th>\n",
" <th>srcport</th>\n",
" <th>dstip</th>\n",
" <th>dstport</th>\n",
" <th>srccountry</th>\n",
" <th>dstcountry</th>\n",
" <th>proto</th>\n",
" <th>action</th>\n",
" <th>service</th>\n",
" <th>...</th>\n",
" <th>rcvdbyte</th>\n",
" <th>sentpkt</th>\n",
" <th>rcvdpkt</th>\n",
" <th>osname</th>\n",
" <th>devtype</th>\n",
" <th>user</th>\n",
" <th>utmaction</th>\n",
" <th>tranip</th>\n",
" <th>tranport</th>\n",
" <th>dstfamily</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1980</th>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>192.168.27.2</td>\n",
" <td>43105.0</td>\n",
" <td>104.20.68.143</td>\n",
" <td>443.0</td>\n",
" <td>Reserved</td>\n",
" <td>United States</td>\n",
" <td>6.0</td>\n",
" <td>deny</td>\n",
" <td>HTTPS</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>Fedora</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>1990</th>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>192.168.10.3</td>\n",
" <td>43124.0</td>\n",
" <td>192.168.21.38</td>\n",
" <td>59080.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>server-rst</td>\n",
" <td>tcp/59080</td>\n",
" <td>...</td>\n",
" <td>40.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>1995</th>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>192.168.10.3</td>\n",
" <td>48660.0</td>\n",
" <td>192.168.27.136</td>\n",
" <td>38080.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>timeout</td>\n",
" <td>tcp/38080</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>1973</th>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>192.168.10.3</td>\n",
" <td>48662.0</td>\n",
" <td>192.168.27.34</td>\n",
" <td>8080.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>server-rst</td>\n",
" <td>Equifax</td>\n",
" <td>...</td>\n",
" <td>40.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>1970</th>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>192.168.10.3</td>\n",
" <td>55624.0</td>\n",
" <td>192.168.27.90</td>\n",
" <td>17070.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>timeout</td>\n",
" <td>tcp/17070</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2023-10-11 23:03:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>36974.0</td>\n",
" <td>192.168.27.48</td>\n",
" <td>31079.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>client-rst</td>\n",
" <td>tcp/31079</td>\n",
" <td>...</td>\n",
" <td>326.0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>13</th>\n",
" <td>2023-10-11 23:03:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>46672.0</td>\n",
" <td>192.168.27.34</td>\n",
" <td>9080.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>server-rst</td>\n",
" <td>tcp/9080</td>\n",
" <td>...</td>\n",
" <td>40.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>7</th>\n",
" <td>2023-10-11 23:03:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>33334.0</td>\n",
" <td>192.168.27.133</td>\n",
" <td>32625.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>close</td>\n",
" <td>tcp/32625</td>\n",
" <td>...</td>\n",
" <td>275.0</td>\n",
" <td>5.0</td>\n",
" <td>5.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>14</th>\n",
" <td>2023-10-11 23:03:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>52012.0</td>\n",
" <td>192.168.21.38</td>\n",
" <td>8080.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>server-rst</td>\n",
" <td>Equifax</td>\n",
" <td>...</td>\n",
" <td>40.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>15</th>\n",
" <td>2023-10-11 23:03:59</td>\n",
" <td>192.168.10.3</td>\n",
" <td>43298.0</td>\n",
" <td>192.168.27.136</td>\n",
" <td>10443.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>timeout</td>\n",
" <td>VPNSSL</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>Proxy Server</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>35573 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" datetime srcip srcport dstip dstport \\\n",
"1980 2023-10-11 00:00:04 192.168.27.2 43105.0 104.20.68.143 443.0 \n",
"1990 2023-10-11 00:00:04 192.168.10.3 43124.0 192.168.21.38 59080.0 \n",
"1995 2023-10-11 00:00:04 192.168.10.3 48660.0 192.168.27.136 38080.0 \n",
"1973 2023-10-11 00:00:04 192.168.10.3 48662.0 192.168.27.34 8080.0 \n",
"1970 2023-10-11 00:00:04 192.168.10.3 55624.0 192.168.27.90 17070.0 \n",
"... ... ... ... ... ... \n",
"8 2023-10-11 23:03:59 192.168.10.3 36974.0 192.168.27.48 31079.0 \n",
"13 2023-10-11 23:03:59 192.168.10.3 46672.0 192.168.27.34 9080.0 \n",
"7 2023-10-11 23:03:59 192.168.10.3 33334.0 192.168.27.133 32625.0 \n",
"14 2023-10-11 23:03:59 192.168.10.3 52012.0 192.168.21.38 8080.0 \n",
"15 2023-10-11 23:03:59 192.168.10.3 43298.0 192.168.27.136 10443.0 \n",
"\n",
" srccountry dstcountry proto action service ... rcvdbyte \\\n",
"1980 Reserved United States 6.0 deny HTTPS ... 0.0 \n",
"1990 Reserved Reserved 6.0 server-rst tcp/59080 ... 40.0 \n",
"1995 Reserved Reserved 6.0 timeout tcp/38080 ... 0.0 \n",
"1973 Reserved Reserved 6.0 server-rst Equifax ... 40.0 \n",
"1970 Reserved Reserved 6.0 timeout tcp/17070 ... 0.0 \n",
"... ... ... ... ... ... ... ... \n",
"8 Reserved Reserved 6.0 client-rst tcp/31079 ... 326.0 \n",
"13 Reserved Reserved 6.0 server-rst tcp/9080 ... 40.0 \n",
"7 Reserved Reserved 6.0 close tcp/32625 ... 275.0 \n",
"14 Reserved Reserved 6.0 server-rst Equifax ... 40.0 \n",
"15 Reserved Reserved 6.0 timeout VPNSSL ... 0.0 \n",
"\n",
" sentpkt rcvdpkt osname devtype user utmaction tranip tranport \\\n",
"1980 0.0 0.0 Fedora NaN NaN NaN NaN NaN \n",
"1990 1.0 1.0 NaN Proxy Server NaN NaN NaN NaN \n",
"1995 1.0 0.0 NaN Proxy Server NaN NaN NaN NaN \n",
"1973 1.0 1.0 NaN Proxy Server NaN NaN NaN NaN \n",
"1970 1.0 0.0 NaN Proxy Server NaN NaN NaN NaN \n",
"... ... ... ... ... ... ... ... ... \n",
"8 3.0 3.0 NaN Proxy Server NaN NaN NaN NaN \n",
"13 1.0 1.0 NaN Proxy Server NaN NaN NaN NaN \n",
"7 5.0 5.0 NaN Proxy Server NaN NaN NaN NaN \n",
"14 1.0 1.0 NaN Proxy Server NaN NaN NaN NaN \n",
"15 2.0 0.0 NaN Proxy Server NaN NaN NaN NaN \n",
"\n",
" dstfamily \n",
"1980 NaN \n",
"1990 NaN \n",
"1995 NaN \n",
"1973 NaN \n",
"1970 NaN \n",
"... ... \n",
"8 NaN \n",
"13 NaN \n",
"7 NaN \n",
"14 NaN \n",
"15 NaN \n",
"\n",
"[35573 rows x 22 columns]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1 = df1.sort_values(\"datetime\", ascending=True)\n",
"df1"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "9a4540e6-a573-44e7-b2ca-b12bedc36d2d",
"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>datetime</th>\n",
" <th>srcip</th>\n",
" <th>srcport</th>\n",
" <th>dstip</th>\n",
" <th>dstport</th>\n",
" <th>srccountry</th>\n",
" <th>dstcountry</th>\n",
" <th>proto</th>\n",
" <th>action</th>\n",
" <th>service</th>\n",
" <th>...</th>\n",
" <th>rcvdbyte</th>\n",
" <th>sentpkt</th>\n",
" <th>rcvdpkt</th>\n",
" <th>osname</th>\n",
" <th>devtype</th>\n",
" <th>user</th>\n",
" <th>utmaction</th>\n",
" <th>tranip</th>\n",
" <th>tranport</th>\n",
" <th>dstfamily</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1977</th>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>192.168.21.26</td>\n",
" <td>53658.0</td>\n",
" <td>142.251.0.94</td>\n",
" <td>443.0</td>\n",
" <td>Reserved</td>\n",
" <td>United States</td>\n",
" <td>17.0</td>\n",
" <td>accept</td>\n",
" <td>udp/443</td>\n",
" <td>...</td>\n",
" <td>3151.0</td>\n",
" <td>9.0</td>\n",
" <td>8.0</td>\n",
" <td>Windows</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>1975</th>\n",
" <td>2023-10-11 00:00:04</td>\n",
" <td>192.168.27.36</td>\n",
" <td>60329.0</td>\n",
" <td>162.159.200.123</td>\n",
" <td>123.0</td>\n",
" <td>Reserved</td>\n",
" <td>United States</td>\n",
" <td>17.0</td>\n",
" <td>accept</td>\n",
" <td>NTP</td>\n",
" <td>...</td>\n",
" <td>76.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>Linux</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>1845</th>\n",
" <td>2023-10-11 00:00:06</td>\n",
" <td>10.212.134.104</td>\n",
" <td>60361.0</td>\n",
" <td>192.168.27.127</td>\n",
" <td>22.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>accept</td>\n",
" <td>SSH</td>\n",
" <td>...</td>\n",
" <td>2819789.0</td>\n",
" <td>20759.0</td>\n",
" <td>21016.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cmunoz</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1816</th>\n",
" <td>2023-10-11 00:00:07</td>\n",
" <td>192.168.21.40</td>\n",
" <td>54590.0</td>\n",
" <td>192.168.27.135</td>\n",
" <td>3306.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>close</td>\n",
" <td>MYSQL</td>\n",
" <td>...</td>\n",
" <td>2275.0</td>\n",
" <td>14.0</td>\n",
" <td>11.0</td>\n",
" <td>NaN</td>\n",
" <td>Router</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>1760</th>\n",
" <td>2023-10-11 00:00:09</td>\n",
" <td>192.168.27.132</td>\n",
" <td>43860.0</td>\n",
" <td>185.199.108.133</td>\n",
" <td>443.0</td>\n",
" <td>Reserved</td>\n",
" <td>United States</td>\n",
" <td>6.0</td>\n",
" <td>client-rst</td>\n",
" <td>HTTPS</td>\n",
" <td>...</td>\n",
" <td>6418.0</td>\n",
" <td>14.0</td>\n",
" <td>19.0</td>\n",
" <td>Linux</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>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>602</th>\n",
" <td>2023-10-11 23:03:50</td>\n",
" <td>192.168.21.40</td>\n",
" <td>58640.0</td>\n",
" <td>52.216.60.57</td>\n",
" <td>443.0</td>\n",
" <td>Reserved</td>\n",
" <td>United States</td>\n",
" <td>6.0</td>\n",
" <td>client-rst</td>\n",
" <td>HTTPS</td>\n",
" <td>...</td>\n",
" <td>7351.0</td>\n",
" <td>24.0</td>\n",
" <td>24.0</td>\n",
" <td>NaN</td>\n",
" <td>Router</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>292</th>\n",
" <td>2023-10-11 23:03:50</td>\n",
" <td>192.168.21.40</td>\n",
" <td>58660.0</td>\n",
" <td>52.216.60.57</td>\n",
" <td>443.0</td>\n",
" <td>Reserved</td>\n",
" <td>United States</td>\n",
" <td>6.0</td>\n",
" <td>client-rst</td>\n",
" <td>HTTPS</td>\n",
" <td>...</td>\n",
" <td>7444.0</td>\n",
" <td>24.0</td>\n",
" <td>25.0</td>\n",
" <td>NaN</td>\n",
" <td>Router</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>158</th>\n",
" <td>2023-10-11 23:03:54</td>\n",
" <td>192.168.27.122</td>\n",
" <td>56224.0</td>\n",
" <td>162.159.200.1</td>\n",
" <td>123.0</td>\n",
" <td>Reserved</td>\n",
" <td>United States</td>\n",
" <td>17.0</td>\n",
" <td>accept</td>\n",
" <td>NTP</td>\n",
" <td>...</td>\n",
" <td>76.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</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>29</th>\n",
" <td>2023-10-11 23:03:58</td>\n",
" <td>192.168.27.12</td>\n",
" <td>41868.0</td>\n",
" <td>185.125.190.57</td>\n",
" <td>123.0</td>\n",
" <td>Reserved</td>\n",
" <td>United Kingdom</td>\n",
" <td>17.0</td>\n",
" <td>accept</td>\n",
" <td>NTP</td>\n",
" <td>...</td>\n",
" <td>76.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" <td>Router</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>0</th>\n",
" <td>2023-10-11 23:04:00</td>\n",
" <td>192.168.21.40</td>\n",
" <td>34840.0</td>\n",
" <td>192.168.27.135</td>\n",
" <td>3306.0</td>\n",
" <td>Reserved</td>\n",
" <td>Reserved</td>\n",
" <td>6.0</td>\n",
" <td>accept</td>\n",
" <td>MYSQL</td>\n",
" <td>...</td>\n",
" <td>7263.0</td>\n",
" <td>126.0</td>\n",
" <td>90.0</td>\n",
" <td>NaN</td>\n",
" <td>Router</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>10759 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" datetime srcip srcport dstip dstport \\\n",
"1977 2023-10-11 00:00:04 192.168.21.26 53658.0 142.251.0.94 443.0 \n",
"1975 2023-10-11 00:00:04 192.168.27.36 60329.0 162.159.200.123 123.0 \n",
"1845 2023-10-11 00:00:06 10.212.134.104 60361.0 192.168.27.127 22.0 \n",
"1816 2023-10-11 00:00:07 192.168.21.40 54590.0 192.168.27.135 3306.0 \n",
"1760 2023-10-11 00:00:09 192.168.27.132 43860.0 185.199.108.133 443.0 \n",
"... ... ... ... ... ... \n",
"602 2023-10-11 23:03:50 192.168.21.40 58640.0 52.216.60.57 443.0 \n",
"292 2023-10-11 23:03:50 192.168.21.40 58660.0 52.216.60.57 443.0 \n",
"158 2023-10-11 23:03:54 192.168.27.122 56224.0 162.159.200.1 123.0 \n",
"29 2023-10-11 23:03:58 192.168.27.12 41868.0 185.125.190.57 123.0 \n",
"0 2023-10-11 23:04:00 192.168.21.40 34840.0 192.168.27.135 3306.0 \n",
"\n",
" srccountry dstcountry proto action service ... rcvdbyte \\\n",
"1977 Reserved United States 17.0 accept udp/443 ... 3151.0 \n",
"1975 Reserved United States 17.0 accept NTP ... 76.0 \n",
"1845 Reserved Reserved 6.0 accept SSH ... 2819789.0 \n",
"1816 Reserved Reserved 6.0 close MYSQL ... 2275.0 \n",
"1760 Reserved United States 6.0 client-rst HTTPS ... 6418.0 \n",
"... ... ... ... ... ... ... ... \n",
"602 Reserved United States 6.0 client-rst HTTPS ... 7351.0 \n",
"292 Reserved United States 6.0 client-rst HTTPS ... 7444.0 \n",
"158 Reserved United States 17.0 accept NTP ... 76.0 \n",
"29 Reserved United Kingdom 17.0 accept NTP ... 76.0 \n",
"0 Reserved Reserved 6.0 accept MYSQL ... 7263.0 \n",
"\n",
" sentpkt rcvdpkt osname devtype user utmaction tranip tranport \\\n",
"1977 9.0 8.0 Windows NaN NaN NaN NaN NaN \n",
"1975 1.0 1.0 Linux NaN NaN NaN NaN NaN \n",
"1845 20759.0 21016.0 NaN NaN cmunoz NaN NaN NaN \n",
"1816 14.0 11.0 NaN Router NaN NaN NaN NaN \n",
"1760 14.0 19.0 Linux NaN NaN NaN NaN NaN \n",
"... ... ... ... ... ... ... ... ... \n",
"602 24.0 24.0 NaN Router NaN NaN NaN NaN \n",
"292 24.0 25.0 NaN Router NaN NaN NaN NaN \n",
"158 1.0 1.0 NaN NaN NaN NaN NaN NaN \n",
"29 1.0 1.0 NaN Router NaN NaN NaN NaN \n",
"0 126.0 90.0 NaN Router NaN NaN NaN NaN \n",
"\n",
" dstfamily \n",
"1977 NaN \n",
"1975 NaN \n",
"1845 NaN \n",
"1816 NaN \n",
"1760 NaN \n",
"... ... \n",
"602 NaN \n",
"292 NaN \n",
"158 NaN \n",
"29 NaN \n",
"0 NaN \n",
"\n",
"[10759 rows x 22 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2 = df2.sort_values(\"datetime\", ascending=True)\n",
"df2"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "5b23f997-0099-4087-aeff-e1dc525d2e6a",
"metadata": {},
"outputs": [],
"source": [
"df1.to_csv('prueba3_1.csv', index=False)\n",
"df2.to_csv('prueba3_2.csv', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "e79b1262-485e-40f0-89ea-778ac887aa4f",
"metadata": {},
"outputs": [],
"source": [
"# df11 = df1.iloc[:int(df1.shape[0]/8), :]\n",
"# df12 = df1.iloc[int(df1.shape[0]/3):int(df1.shape[0]/3*2), :]\n",
"# df13 = df1.iloc[int(df1.shape[0]/3):int(df1.shape[0]/3*2), :]\n",
"# df14 = df1.iloc[int(df1.shape[0]/3*2):, :]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "1c807119-e2a0-4293-94f6-fdcdcf15d818",
"metadata": {},
"outputs": [],
"source": [
"# df11.to_csv('prueba3_11.csv', index=False)\n",
"# df12.to_csv('prueba3_12.csv', index=False)\n",
"# df13.to_csv('prueba3_13.csv', index=False)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment