mirror of
https://github.com/pinecone-io/examples.git
synced 2023-10-11 20:04:54 +03:00
3483 lines
158 KiB
Plaintext
3483 lines
158 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "PFHpj5RBRAea"
|
||
},
|
||
"source": [
|
||
"[](https://colab.research.google.com/github/pinecone-io/examples/blob/master/docs/it-threat-detection.ipynb) [](https://nbviewer.org/github/pinecone-io/examples/blob/master/docs/it-threat-detection.ipynb)"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "b4Yv1jeGywpL"
|
||
},
|
||
"source": [
|
||
"## IT Threat Detection With Similarity Search\n",
|
||
"\n",
|
||
"[](https://colab.research.google.com/github/pinecone-io/examples/blob/master/learn/security/it-threat-detection.ipynb)\n",
|
||
"\n",
|
||
"This notebook shows how to use Pinecone's similarity search as a service to build an application for detecting rare events. Such application is common in cyber-security and fraud detection domains wherein only a tiny fraction of the events are malicious.\n",
|
||
"\n",
|
||
"Here we will build a network intrusion detector. Network intrusion detection systems monitor incoming and outgoing network traffic flow, raising alarms whenever a threat is detected. Here we use a deep-learning model and similarity search in detecting and classifying network intrusion traffic.\n",
|
||
"\n",
|
||
"We will start by indexing a set of labeled traffic events in the form of vector embeddings. Each event is either benign or malicious. The vector embeddings are rich, mathematical representations of the network traffic events. It is making it possible to determine how similar the network events are to one another using similarity-search algorithms built into Pinecone. Here we will transform network traffic events into vectors using a deep learning model from recent academic work.\n",
|
||
"\n",
|
||
"\n",
|
||
"We will then take some new (unseen) network events and search through the index to find the most similar matches, along with their labels. In such a way, we will propagate the matched labels to classify the unseen events as benign or malicious. Mind that the intrusion detection task is a challenging classification task because malicious events are sporadic. The similarity search service helps us sift the most relevant historical labeled events. That way, we identify these rare events while keeping a low rate of false alarms.\n"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "1OUSClcPhU4j"
|
||
},
|
||
"source": [
|
||
"## Setting up Pinecone\n",
|
||
"\n",
|
||
"We will first install and initialize Pinecone. You can get your [API Key here](https://app.pinecone.io)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "251n1avKzCrm",
|
||
"outputId": "77b87d58-67dc-45ac-e242-e1e1fd36aa43"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m179.1/179.1 kB\u001b[0m \u001b[31m2.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m60.0/60.0 kB\u001b[0m \u001b[31m4.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m300.0/300.0 kB\u001b[0m \u001b[31m14.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m29.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m23.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.3/12.3 MB\u001b[0m \u001b[31m39.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.4/16.4 MB\u001b[0m \u001b[31m36.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m38.9/38.9 MB\u001b[0m \u001b[31m8.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m74.5/74.5 kB\u001b[0m \u001b[31m4.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m341.8/341.8 kB\u001b[0m \u001b[31m19.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m72.9/72.9 kB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.9/10.9 MB\u001b[0m \u001b[31m22.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m4.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
|
||
"google-colab 1.0.0 requires pandas==1.5.3, but you have pandas 2.0.3 which is incompatible.\n",
|
||
"pandas-gbq 0.17.9 requires pyarrow<10.0dev,>=3.0.0, but you have pyarrow 12.0.1 which is incompatible.\n",
|
||
"tensorflow 2.12.0 requires protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3, but you have protobuf 3.19.6 which is incompatible.\n",
|
||
"tensorflow-datasets 4.9.2 requires protobuf>=3.20, but you have protobuf 3.19.6 which is incompatible.\n",
|
||
"tensorflow-metadata 1.13.1 requires protobuf<5,>=3.20.3, but you have protobuf 3.19.6 which is incompatible.\u001b[0m\u001b[31m\n",
|
||
"\u001b[0m"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"!pip install -qU \\\n",
|
||
" \"pinecone-client[grpc]\"==2.2.2 \\\n",
|
||
" pinecone-datasets=='0.5.0rc10'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "_cGTuY8dywpV",
|
||
"outputId": "0799f827-8187-4011-e8ae-1a880bc534ff"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/usr/local/lib/python3.10/dist-packages/pinecone/index.py:4: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n",
|
||
" from tqdm.autonotebook import tqdm\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import pinecone\n",
|
||
"import os\n",
|
||
"\n",
|
||
"# Load Pinecone API key\n",
|
||
"api_key = os.getenv('PINECONE_API_KEY') or 'PINECONE_API_KEY'\n",
|
||
"# Set Pinecone environment/region - find next to API key in console\n",
|
||
"env = os.getenv('PINECONE_ENVIRONMENT') or 'PINECONE_ENVIRONMENT'\n",
|
||
"\n",
|
||
"pinecone.init(api_key=api_key, environment=env)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "31jd7os7RAej",
|
||
"outputId": "a5657975-ba80-43da-8c51-89812cb75d22"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"['it-threats-fast']"
|
||
]
|
||
},
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"#List all present indexes associated with your key, should be empty on the first run\n",
|
||
"pinecone.list_indexes()"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "a7ysNAlrjD_k"
|
||
},
|
||
"source": [
|
||
"## Installing other dependencies"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "r3g-b61IywpQ",
|
||
"outputId": "f973ecaa-132c-4115-f865-483739e5bccb"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m578.0/578.0 MB\u001b[0m \u001b[31m1.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.8/10.8 MB\u001b[0m \u001b[31m41.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m50.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m42.6/42.6 kB\u001b[0m \u001b[31m3.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.9/5.9 MB\u001b[0m \u001b[31m64.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m438.7/438.7 kB\u001b[0m \u001b[31m23.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.9/4.9 MB\u001b[0m \u001b[31m42.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m781.3/781.3 kB\u001b[0m \u001b[31m26.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
|
||
"pandas-gbq 0.17.9 requires pyarrow<10.0dev,>=3.0.0, but you have pyarrow 12.0.1 which is incompatible.\u001b[0m\u001b[31m\n",
|
||
"\u001b[0m"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"!pip install -qU \\\n",
|
||
" python-dateutil \\\n",
|
||
" tensorflow==2.10 \\\n",
|
||
" scikit-learn==1.3.0 \\\n",
|
||
" matplotlib==3.7.1"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "mc4ERmwniO1H"
|
||
},
|
||
"source": [
|
||
"## Define a New Pinecone Index"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"id": "9_TIgYxBywpV"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Pick a name for the new service\n",
|
||
"index_name = 'it-threats-fast'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"id": "j7scTXFrywpV"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Make sure index with the same name does not exist\n",
|
||
"if index_name in pinecone.list_indexes():\n",
|
||
" pinecone.delete_index(index_name)"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "wggPSrKtywpW"
|
||
},
|
||
"source": [
|
||
"**Create an index**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {
|
||
"id": "q5Q42v4mywpW"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"pinecone.create_index(name=index_name, dimension=128, metric='euclidean')"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "3eXIyr2-ywpW"
|
||
},
|
||
"source": [
|
||
"**Connect to the index**\n",
|
||
"\n",
|
||
"We create an index object, a class instance of `pinecone.GRPCIndex`, which will be used to interact with the created index."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {
|
||
"id": "tTlvU_jvywpW",
|
||
"scrolled": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"index = pinecone.GRPCIndex(index_name=index_name)"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "IOP9jCo5ywpX"
|
||
},
|
||
"source": [
|
||
"## Upload\n",
|
||
"Here we load network events as precomputed vector embeddings from `pinecone-datasets` library, then upload them into Pinecone's vector index."
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "PzkJJd8ZYTNM"
|
||
},
|
||
"source": [
|
||
"### Download Data"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "vuOLNAehYTNN"
|
||
},
|
||
"source": [
|
||
"**Download data for 22-02-2018 and 23-02-2018**\n",
|
||
"\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 206
|
||
},
|
||
"id": "cGXf6PmhYTNR",
|
||
"outputId": "8188949a-7f9b-4ca0-d151-deea2b45802e"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-0b9f6632-c877-40cf-9e2f-553dbf81fe43\">\n",
|
||
" <div class=\"colab-df-container\">\n",
|
||
" <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>id</th>\n",
|
||
" <th>values</th>\n",
|
||
" <th>sparse_values</th>\n",
|
||
" <th>metadata</th>\n",
|
||
" <th>blob</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Ben_0</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 125628656.0, 0.0, 0.0, 5421442...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Ben_1</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 356751744.0, 1190461440.0, 0.0...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Ben_2</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 356751680.0, 1190461440.0, 0.0...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Ben_3</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 125515856.0, 0.0, 0.0, 5432884...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Ben_4</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 26214912.0, 698683840.0, 0.0, ...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>\n",
|
||
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-0b9f6632-c877-40cf-9e2f-553dbf81fe43')\"\n",
|
||
" title=\"Convert this dataframe to an interactive table.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
|
||
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
|
||
" </svg>\n",
|
||
" </button>\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-308e4096-91e5-46d2-8ce8-e56be58b8a08\">\n",
|
||
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-308e4096-91e5-46d2-8ce8-e56be58b8a08')\"\n",
|
||
" title=\"Suggest charts.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <g>\n",
|
||
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
|
||
" </g>\n",
|
||
"</svg>\n",
|
||
" </button>\n",
|
||
" </div>\n",
|
||
"\n",
|
||
"<style>\n",
|
||
" .colab-df-quickchart {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-quickchart:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" async function quickchart(key) {\n",
|
||
" const containerElement = document.querySelector('#' + key);\n",
|
||
" const charts = await google.colab.kernel.invokeFunction(\n",
|
||
" 'suggestCharts', [key], {});\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
"\n",
|
||
"function displayQuickchartButton(domScope) {\n",
|
||
" let quickchartButtonEl =\n",
|
||
" domScope.querySelector('#df-308e4096-91e5-46d2-8ce8-e56be58b8a08 button.colab-df-quickchart');\n",
|
||
" quickchartButtonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"}\n",
|
||
"\n",
|
||
" displayQuickchartButton(document);\n",
|
||
" </script>\n",
|
||
" <style>\n",
|
||
" .colab-df-container {\n",
|
||
" display:flex;\n",
|
||
" flex-wrap:wrap;\n",
|
||
" gap: 12px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
" </style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" const buttonEl =\n",
|
||
" document.querySelector('#df-0b9f6632-c877-40cf-9e2f-553dbf81fe43 button.colab-df-convert');\n",
|
||
" buttonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"\n",
|
||
" async function convertToInteractive(key) {\n",
|
||
" const element = document.querySelector('#df-0b9f6632-c877-40cf-9e2f-553dbf81fe43');\n",
|
||
" const dataTable =\n",
|
||
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
|
||
" [key], {});\n",
|
||
" if (!dataTable) return;\n",
|
||
"\n",
|
||
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
|
||
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
|
||
" + ' to learn more about interactive tables.';\n",
|
||
" element.innerHTML = '';\n",
|
||
" dataTable['output_type'] = 'display_data';\n",
|
||
" await google.colab.output.renderOutput(dataTable, element);\n",
|
||
" const docLink = document.createElement('div');\n",
|
||
" docLink.innerHTML = docLinkHtml;\n",
|
||
" element.appendChild(docLink);\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
" </div>\n",
|
||
" </div>\n"
|
||
],
|
||
"text/plain": [
|
||
" id values sparse_values \\\n",
|
||
"0 Ben_0 [0.0, 0.0, 0.0, 125628656.0, 0.0, 0.0, 5421442... None \n",
|
||
"1 Ben_1 [0.0, 0.0, 0.0, 356751744.0, 1190461440.0, 0.0... None \n",
|
||
"2 Ben_2 [0.0, 0.0, 0.0, 356751680.0, 1190461440.0, 0.0... None \n",
|
||
"3 Ben_3 [0.0, 0.0, 0.0, 125515856.0, 0.0, 0.0, 5432884... None \n",
|
||
"4 Ben_4 [0.0, 0.0, 0.0, 26214912.0, 698683840.0, 0.0, ... None \n",
|
||
"\n",
|
||
" metadata blob \n",
|
||
"0 {'label': 'Benign'} None \n",
|
||
"1 {'label': 'Benign'} None \n",
|
||
"2 {'label': 'Benign'} None \n",
|
||
"3 {'label': 'Benign'} None \n",
|
||
"4 {'label': 'Benign'} None "
|
||
]
|
||
},
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from pinecone_datasets import load_dataset\n",
|
||
"\n",
|
||
"dataset = load_dataset(\"it-threat-data-train\")\n",
|
||
"dataset.head()"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "sCkVwqm2KyM4"
|
||
},
|
||
"source": [
|
||
"We don't need the `sparse_values` and `blob` columns so we drop:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 206
|
||
},
|
||
"id": "-psXytDLRAeo",
|
||
"outputId": "4eddafd5-78c0-4b12-ff14-e2f012c5a3f1"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-9a89e026-f2e7-4e6b-8d2c-46bef4ae0df9\">\n",
|
||
" <div class=\"colab-df-container\">\n",
|
||
" <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>id</th>\n",
|
||
" <th>values</th>\n",
|
||
" <th>metadata</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Ben_0</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 125628656.0, 0.0, 0.0, 5421442...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Ben_1</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 356751744.0, 1190461440.0, 0.0...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Ben_2</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 356751680.0, 1190461440.0, 0.0...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Ben_3</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 125515856.0, 0.0, 0.0, 5432884...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Ben_4</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 26214912.0, 698683840.0, 0.0, ...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>\n",
|
||
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-9a89e026-f2e7-4e6b-8d2c-46bef4ae0df9')\"\n",
|
||
" title=\"Convert this dataframe to an interactive table.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
|
||
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
|
||
" </svg>\n",
|
||
" </button>\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-a76989fb-1070-4bfa-8a3d-2018da369c34\">\n",
|
||
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-a76989fb-1070-4bfa-8a3d-2018da369c34')\"\n",
|
||
" title=\"Suggest charts.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <g>\n",
|
||
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
|
||
" </g>\n",
|
||
"</svg>\n",
|
||
" </button>\n",
|
||
" </div>\n",
|
||
"\n",
|
||
"<style>\n",
|
||
" .colab-df-quickchart {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-quickchart:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" async function quickchart(key) {\n",
|
||
" const containerElement = document.querySelector('#' + key);\n",
|
||
" const charts = await google.colab.kernel.invokeFunction(\n",
|
||
" 'suggestCharts', [key], {});\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
"\n",
|
||
"function displayQuickchartButton(domScope) {\n",
|
||
" let quickchartButtonEl =\n",
|
||
" domScope.querySelector('#df-a76989fb-1070-4bfa-8a3d-2018da369c34 button.colab-df-quickchart');\n",
|
||
" quickchartButtonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"}\n",
|
||
"\n",
|
||
" displayQuickchartButton(document);\n",
|
||
" </script>\n",
|
||
" <style>\n",
|
||
" .colab-df-container {\n",
|
||
" display:flex;\n",
|
||
" flex-wrap:wrap;\n",
|
||
" gap: 12px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
" </style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" const buttonEl =\n",
|
||
" document.querySelector('#df-9a89e026-f2e7-4e6b-8d2c-46bef4ae0df9 button.colab-df-convert');\n",
|
||
" buttonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"\n",
|
||
" async function convertToInteractive(key) {\n",
|
||
" const element = document.querySelector('#df-9a89e026-f2e7-4e6b-8d2c-46bef4ae0df9');\n",
|
||
" const dataTable =\n",
|
||
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
|
||
" [key], {});\n",
|
||
" if (!dataTable) return;\n",
|
||
"\n",
|
||
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
|
||
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
|
||
" + ' to learn more about interactive tables.';\n",
|
||
" element.innerHTML = '';\n",
|
||
" dataTable['output_type'] = 'display_data';\n",
|
||
" await google.colab.output.renderOutput(dataTable, element);\n",
|
||
" const docLink = document.createElement('div');\n",
|
||
" docLink.innerHTML = docLinkHtml;\n",
|
||
" element.appendChild(docLink);\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
" </div>\n",
|
||
" </div>\n"
|
||
],
|
||
"text/plain": [
|
||
" id values \\\n",
|
||
"0 Ben_0 [0.0, 0.0, 0.0, 125628656.0, 0.0, 0.0, 5421442... \n",
|
||
"1 Ben_1 [0.0, 0.0, 0.0, 356751744.0, 1190461440.0, 0.0... \n",
|
||
"2 Ben_2 [0.0, 0.0, 0.0, 356751680.0, 1190461440.0, 0.0... \n",
|
||
"3 Ben_3 [0.0, 0.0, 0.0, 125515856.0, 0.0, 0.0, 5432884... \n",
|
||
"4 Ben_4 [0.0, 0.0, 0.0, 26214912.0, 698683840.0, 0.0, ... \n",
|
||
"\n",
|
||
" metadata \n",
|
||
"0 {'label': 'Benign'} \n",
|
||
"1 {'label': 'Benign'} \n",
|
||
"2 {'label': 'Benign'} \n",
|
||
"3 {'label': 'Benign'} \n",
|
||
"4 {'label': 'Benign'} "
|
||
]
|
||
},
|
||
"execution_count": 19,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataset.documents.drop(['sparse_values', 'blob'], axis=1, inplace=True)\n",
|
||
"dataset.head()"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "V3dx9XkPYTNV"
|
||
},
|
||
"source": [
|
||
"### Upload Data"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "6C7er-8Gl2Rg"
|
||
},
|
||
"source": [
|
||
"You can lower the `num_items` and, by doing so, limit the number of uploaded items."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 206
|
||
},
|
||
"id": "8iIbuW52zZVy",
|
||
"outputId": "93d97fc3-b828-4809-a24e-f36992f5cd3d"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-3dbeb309-5fed-403b-a154-3e7ac85f1993\">\n",
|
||
" <div class=\"colab-df-container\">\n",
|
||
" <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>id</th>\n",
|
||
" <th>values</th>\n",
|
||
" <th>metadata</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Ben_0</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 125628656.0, 0.0, 0.0, 5421442...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Ben_1</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 356751744.0, 1190461440.0, 0.0...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Ben_2</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 356751680.0, 1190461440.0, 0.0...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Ben_3</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 125515856.0, 0.0, 0.0, 5432884...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Ben_4</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 26214912.0, 698683840.0, 0.0, ...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>\n",
|
||
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-3dbeb309-5fed-403b-a154-3e7ac85f1993')\"\n",
|
||
" title=\"Convert this dataframe to an interactive table.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
|
||
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
|
||
" </svg>\n",
|
||
" </button>\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-886db082-9a9f-451f-8330-4ff06e161b53\">\n",
|
||
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-886db082-9a9f-451f-8330-4ff06e161b53')\"\n",
|
||
" title=\"Suggest charts.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <g>\n",
|
||
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
|
||
" </g>\n",
|
||
"</svg>\n",
|
||
" </button>\n",
|
||
" </div>\n",
|
||
"\n",
|
||
"<style>\n",
|
||
" .colab-df-quickchart {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-quickchart:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" async function quickchart(key) {\n",
|
||
" const containerElement = document.querySelector('#' + key);\n",
|
||
" const charts = await google.colab.kernel.invokeFunction(\n",
|
||
" 'suggestCharts', [key], {});\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
"\n",
|
||
"function displayQuickchartButton(domScope) {\n",
|
||
" let quickchartButtonEl =\n",
|
||
" domScope.querySelector('#df-886db082-9a9f-451f-8330-4ff06e161b53 button.colab-df-quickchart');\n",
|
||
" quickchartButtonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"}\n",
|
||
"\n",
|
||
" displayQuickchartButton(document);\n",
|
||
" </script>\n",
|
||
" <style>\n",
|
||
" .colab-df-container {\n",
|
||
" display:flex;\n",
|
||
" flex-wrap:wrap;\n",
|
||
" gap: 12px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
" </style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" const buttonEl =\n",
|
||
" document.querySelector('#df-3dbeb309-5fed-403b-a154-3e7ac85f1993 button.colab-df-convert');\n",
|
||
" buttonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"\n",
|
||
" async function convertToInteractive(key) {\n",
|
||
" const element = document.querySelector('#df-3dbeb309-5fed-403b-a154-3e7ac85f1993');\n",
|
||
" const dataTable =\n",
|
||
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
|
||
" [key], {});\n",
|
||
" if (!dataTable) return;\n",
|
||
"\n",
|
||
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
|
||
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
|
||
" + ' to learn more about interactive tables.';\n",
|
||
" element.innerHTML = '';\n",
|
||
" dataTable['output_type'] = 'display_data';\n",
|
||
" await google.colab.output.renderOutput(dataTable, element);\n",
|
||
" const docLink = document.createElement('div');\n",
|
||
" docLink.innerHTML = docLinkHtml;\n",
|
||
" element.appendChild(docLink);\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
" </div>\n",
|
||
" </div>\n"
|
||
],
|
||
"text/plain": [
|
||
" id values \\\n",
|
||
"0 Ben_0 [0.0, 0.0, 0.0, 125628656.0, 0.0, 0.0, 5421442... \n",
|
||
"1 Ben_1 [0.0, 0.0, 0.0, 356751744.0, 1190461440.0, 0.0... \n",
|
||
"2 Ben_2 [0.0, 0.0, 0.0, 356751680.0, 1190461440.0, 0.0... \n",
|
||
"3 Ben_3 [0.0, 0.0, 0.0, 125515856.0, 0.0, 0.0, 5432884... \n",
|
||
"4 Ben_4 [0.0, 0.0, 0.0, 26214912.0, 698683840.0, 0.0, ... \n",
|
||
"\n",
|
||
" metadata \n",
|
||
"0 {'label': 'Benign'} \n",
|
||
"1 {'label': 'Benign'} \n",
|
||
"2 {'label': 'Benign'} \n",
|
||
"3 {'label': 'Benign'} \n",
|
||
"4 {'label': 'Benign'} "
|
||
]
|
||
},
|
||
"execution_count": 20,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataset.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 99,
|
||
"referenced_widgets": [
|
||
"d457fe5de4784553a9f47d7b4462ea4c",
|
||
"cd5ed6888cab4656891522f1765eaf04",
|
||
"ac390e5f1b9547318ab0478a86d0cf6b",
|
||
"d0aeac530caa41a1b4c0ed56facfaefb",
|
||
"da08a329e02147ca9f7029143682703f",
|
||
"1c9e4ed606d1463e80f241e598b08fb8",
|
||
"7cad2cfda84d4c1aa8898b8dff361a8b",
|
||
"d3eb91a8850843b5833857901c1b76a3",
|
||
"05b173e450494565b8d28c6585a527af",
|
||
"f2d5170a93244298ba24b3f14b11f0c7",
|
||
"da1de055c6834a82a69da37d5fa889e7",
|
||
"80e09a9ff31d454fb6614f4923ff6433",
|
||
"a6681a2392e04c91a77b8f8939c5bd7d",
|
||
"e10a0235c9a949c8869b46b48c67b58c",
|
||
"f52116b4976c4b1e8b408f09440ed52f",
|
||
"0f90c5e13f034f85990c48026058ec32",
|
||
"8e150825351a44dd94b792cefc96365c",
|
||
"3ca5817c63cb4127b31f4973b7670388",
|
||
"c53b3d1aaf524b62b293368c23ff358f",
|
||
"9908e231310244d69be88a265e565be7",
|
||
"a42a08cf00b140ebb4c883bde04febfb",
|
||
"c0dec6e0d5ea4d09ae473aa9e498be1d"
|
||
]
|
||
},
|
||
"id": "_Ti9p0P-ywpX",
|
||
"outputId": "728fc729-aa25-44ba-afd6-bb7e3a05b8aa",
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "d457fe5de4784553a9f47d7b4462ea4c",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"sending upsert requests: 0%| | 0/50000 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "80e09a9ff31d454fb6614f4923ff6433",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"collecting async responses: 0%| | 0/100 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"upserted_count: 50000"
|
||
]
|
||
},
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"num_items = 50_000\n",
|
||
"dataset = dataset.documents[:num_items]\n",
|
||
"\n",
|
||
"index.upsert_from_dataframe(dataset, batch_size=500)"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "fglWJfAq_kw3"
|
||
},
|
||
"source": [
|
||
"Let's verify all items were inserted."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "xU172A4EywpY",
|
||
"outputId": "14ef7372-44f8-4fcf-ea1e-7d41e5f181ad"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'dimension': 128,\n",
|
||
" 'index_fullness': 0.5,\n",
|
||
" 'namespaces': {'': {'vector_count': 50000}},\n",
|
||
" 'total_vector_count': 50000}"
|
||
]
|
||
},
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"index.describe_index_stats()"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "3CGzW3mVywpY"
|
||
},
|
||
"source": [
|
||
"## Query"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "Ywuld4BylAIu"
|
||
},
|
||
"source": [
|
||
"First, we will randomly select a Benign/Attack event and query the vector index using the event embedding. Then, we will use data from different day, that contains same set of attacks to query on a bigger sample."
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "tLs_wKDQRAeq"
|
||
},
|
||
"source": [
|
||
"### Load the Model"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "NDLNS7zYRAeq"
|
||
},
|
||
"source": [
|
||
"Here we load the pretrained model. The model is trained using the data from the same date."
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "PzWle9Q9RAeq"
|
||
},
|
||
"source": [
|
||
"We have modified [the original model](https://github.com/rambasnet/DeepLearning-IDS/blob/master/keras_tensorflow_models/02-23-2018.csv_adam_10_10_multiclass_baseline_model_1561316601.model) slightly and changed the number of classes from four (Benign, BruteForce-Web, BruteForce-XSS, SQL-Injection) to two (Benign and Attack). In the step below we will download and unzip our modified model."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"metadata": {
|
||
"id": "jR6hucSjRAeq"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"!wget -q -O it_threat_model.model.zip \"https://drive.google.com/uc?export=download&id=1VYMHOk_XMAc-QFJ_8CAPvWFfHnLpS2J_\"\n",
|
||
"!unzip -q it_threat_model.model.zip"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {
|
||
"id": "9zRyWjP8RAer"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from tensorflow import keras\n",
|
||
"from tensorflow.keras.models import Model\n",
|
||
"import tensorflow.keras.backend as K"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "WPNez6x_RAer",
|
||
"outputId": "28f36a01-d0ba-4abc-a88a-1c1268e2a10a"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"WARNING:tensorflow:SavedModel saved prior to TF 2.5 detected when loading Keras model. Please ensure that you are saving the model with model.save() or tf.keras.models.save_model(), *NOT* tf.saved_model.save(). To confirm, there should be a file named \"keras_metadata.pb\" in the SavedModel directory.\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: \"sequential\"\n",
|
||
"_________________________________________________________________\n",
|
||
" Layer (type) Output Shape Param # \n",
|
||
"=================================================================\n",
|
||
" dense (Dense) (None, 128) 10240 \n",
|
||
" \n",
|
||
" dense_1 (Dense) (None, 64) 8256 \n",
|
||
" \n",
|
||
" dense_2 (Dense) (None, 1) 65 \n",
|
||
" \n",
|
||
"=================================================================\n",
|
||
"Total params: 18,561\n",
|
||
"Trainable params: 18,561\n",
|
||
"Non-trainable params: 0\n",
|
||
"_________________________________________________________________\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"model = keras.models.load_model('it_threat_model.model')\n",
|
||
"model.summary()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {
|
||
"id": "qRouEveTRAer"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Select the first layer\n",
|
||
"layer_name = 'dense'\n",
|
||
"intermediate_layer_model = Model(inputs=model.input,\n",
|
||
" outputs=model.get_layer(layer_name).output)"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "m5H4rMyOYTNX"
|
||
},
|
||
"source": [
|
||
"\n",
|
||
"### Evaluate the Rare Event Classification Model"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "velMK_XlYTNX"
|
||
},
|
||
"source": [
|
||
"We will use network intrusion precomputed dataset for 22-02-2018 for querying and testing the Pinecone."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 27,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 206
|
||
},
|
||
"id": "ajLLdSjRRAes",
|
||
"outputId": "de277b3a-d1c9-450d-c61a-92bb0187794e"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-db92e0c8-69c7-4a37-aee2-51394b816bb5\">\n",
|
||
" <div class=\"colab-df-container\">\n",
|
||
" <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>id</th>\n",
|
||
" <th>values</th>\n",
|
||
" <th>sparse_values</th>\n",
|
||
" <th>metadata</th>\n",
|
||
" <th>blob</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Ben_0</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 170976752.0, 187935920.0, 0.0,...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Ben_1</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 211572592.0, 0.0, 0.0, 7663978...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Ben_2</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 133747560.0, 770489344.0, 0.0,...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Ben_3</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 133747288.0, 770489344.0, 0.0,...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Ben_4</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 26222988.0, 698676736.0, 0.0, ...</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" <td>None</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>\n",
|
||
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-db92e0c8-69c7-4a37-aee2-51394b816bb5')\"\n",
|
||
" title=\"Convert this dataframe to an interactive table.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
|
||
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
|
||
" </svg>\n",
|
||
" </button>\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-a2f459c9-b0e8-45c6-b2c2-89e38d4ae9ad\">\n",
|
||
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-a2f459c9-b0e8-45c6-b2c2-89e38d4ae9ad')\"\n",
|
||
" title=\"Suggest charts.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <g>\n",
|
||
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
|
||
" </g>\n",
|
||
"</svg>\n",
|
||
" </button>\n",
|
||
" </div>\n",
|
||
"\n",
|
||
"<style>\n",
|
||
" .colab-df-quickchart {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-quickchart:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" async function quickchart(key) {\n",
|
||
" const containerElement = document.querySelector('#' + key);\n",
|
||
" const charts = await google.colab.kernel.invokeFunction(\n",
|
||
" 'suggestCharts', [key], {});\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
"\n",
|
||
"function displayQuickchartButton(domScope) {\n",
|
||
" let quickchartButtonEl =\n",
|
||
" domScope.querySelector('#df-a2f459c9-b0e8-45c6-b2c2-89e38d4ae9ad button.colab-df-quickchart');\n",
|
||
" quickchartButtonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"}\n",
|
||
"\n",
|
||
" displayQuickchartButton(document);\n",
|
||
" </script>\n",
|
||
" <style>\n",
|
||
" .colab-df-container {\n",
|
||
" display:flex;\n",
|
||
" flex-wrap:wrap;\n",
|
||
" gap: 12px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
" </style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" const buttonEl =\n",
|
||
" document.querySelector('#df-db92e0c8-69c7-4a37-aee2-51394b816bb5 button.colab-df-convert');\n",
|
||
" buttonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"\n",
|
||
" async function convertToInteractive(key) {\n",
|
||
" const element = document.querySelector('#df-db92e0c8-69c7-4a37-aee2-51394b816bb5');\n",
|
||
" const dataTable =\n",
|
||
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
|
||
" [key], {});\n",
|
||
" if (!dataTable) return;\n",
|
||
"\n",
|
||
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
|
||
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
|
||
" + ' to learn more about interactive tables.';\n",
|
||
" element.innerHTML = '';\n",
|
||
" dataTable['output_type'] = 'display_data';\n",
|
||
" await google.colab.output.renderOutput(dataTable, element);\n",
|
||
" const docLink = document.createElement('div');\n",
|
||
" docLink.innerHTML = docLinkHtml;\n",
|
||
" element.appendChild(docLink);\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
" </div>\n",
|
||
" </div>\n"
|
||
],
|
||
"text/plain": [
|
||
" id values sparse_values \\\n",
|
||
"0 Ben_0 [0.0, 0.0, 0.0, 170976752.0, 187935920.0, 0.0,... None \n",
|
||
"1 Ben_1 [0.0, 0.0, 0.0, 211572592.0, 0.0, 0.0, 7663978... None \n",
|
||
"2 Ben_2 [0.0, 0.0, 0.0, 133747560.0, 770489344.0, 0.0,... None \n",
|
||
"3 Ben_3 [0.0, 0.0, 0.0, 133747288.0, 770489344.0, 0.0,... None \n",
|
||
"4 Ben_4 [0.0, 0.0, 0.0, 26222988.0, 698676736.0, 0.0, ... None \n",
|
||
"\n",
|
||
" metadata blob \n",
|
||
"0 {'label': 'Benign'} None \n",
|
||
"1 {'label': 'Benign'} None \n",
|
||
"2 {'label': 'Benign'} None \n",
|
||
"3 {'label': 'Benign'} None \n",
|
||
"4 {'label': 'Benign'} None "
|
||
]
|
||
},
|
||
"execution_count": 27,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataset_22 = load_dataset(\"it-threat-data-test\")\n",
|
||
"dataset_22.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 206
|
||
},
|
||
"id": "in1nkunfRAes",
|
||
"outputId": "33e76884-bd3f-4224-adf3-cd13a4dea35f"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-2504f67b-8ff1-4d51-b99f-3b718096ee5a\">\n",
|
||
" <div class=\"colab-df-container\">\n",
|
||
" <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>id</th>\n",
|
||
" <th>values</th>\n",
|
||
" <th>metadata</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Ben_0</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 170976752.0, 187935920.0, 0.0,...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Ben_1</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 211572592.0, 0.0, 0.0, 7663978...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Ben_2</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 133747560.0, 770489344.0, 0.0,...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Ben_3</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 133747288.0, 770489344.0, 0.0,...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Ben_4</td>\n",
|
||
" <td>[0.0, 0.0, 0.0, 26222988.0, 698676736.0, 0.0, ...</td>\n",
|
||
" <td>{'label': 'Benign'}</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>\n",
|
||
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-2504f67b-8ff1-4d51-b99f-3b718096ee5a')\"\n",
|
||
" title=\"Convert this dataframe to an interactive table.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
|
||
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
|
||
" </svg>\n",
|
||
" </button>\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-54e873e9-0eea-4da0-b4a9-522912be0a49\">\n",
|
||
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-54e873e9-0eea-4da0-b4a9-522912be0a49')\"\n",
|
||
" title=\"Suggest charts.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <g>\n",
|
||
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
|
||
" </g>\n",
|
||
"</svg>\n",
|
||
" </button>\n",
|
||
" </div>\n",
|
||
"\n",
|
||
"<style>\n",
|
||
" .colab-df-quickchart {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-quickchart:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" async function quickchart(key) {\n",
|
||
" const containerElement = document.querySelector('#' + key);\n",
|
||
" const charts = await google.colab.kernel.invokeFunction(\n",
|
||
" 'suggestCharts', [key], {});\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
"\n",
|
||
"function displayQuickchartButton(domScope) {\n",
|
||
" let quickchartButtonEl =\n",
|
||
" domScope.querySelector('#df-54e873e9-0eea-4da0-b4a9-522912be0a49 button.colab-df-quickchart');\n",
|
||
" quickchartButtonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"}\n",
|
||
"\n",
|
||
" displayQuickchartButton(document);\n",
|
||
" </script>\n",
|
||
" <style>\n",
|
||
" .colab-df-container {\n",
|
||
" display:flex;\n",
|
||
" flex-wrap:wrap;\n",
|
||
" gap: 12px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
" </style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" const buttonEl =\n",
|
||
" document.querySelector('#df-2504f67b-8ff1-4d51-b99f-3b718096ee5a button.colab-df-convert');\n",
|
||
" buttonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"\n",
|
||
" async function convertToInteractive(key) {\n",
|
||
" const element = document.querySelector('#df-2504f67b-8ff1-4d51-b99f-3b718096ee5a');\n",
|
||
" const dataTable =\n",
|
||
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
|
||
" [key], {});\n",
|
||
" if (!dataTable) return;\n",
|
||
"\n",
|
||
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
|
||
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
|
||
" + ' to learn more about interactive tables.';\n",
|
||
" element.innerHTML = '';\n",
|
||
" dataTable['output_type'] = 'display_data';\n",
|
||
" await google.colab.output.renderOutput(dataTable, element);\n",
|
||
" const docLink = document.createElement('div');\n",
|
||
" docLink.innerHTML = docLinkHtml;\n",
|
||
" element.appendChild(docLink);\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
" </div>\n",
|
||
" </div>\n"
|
||
],
|
||
"text/plain": [
|
||
" id values \\\n",
|
||
"0 Ben_0 [0.0, 0.0, 0.0, 170976752.0, 187935920.0, 0.0,... \n",
|
||
"1 Ben_1 [0.0, 0.0, 0.0, 211572592.0, 0.0, 0.0, 7663978... \n",
|
||
"2 Ben_2 [0.0, 0.0, 0.0, 133747560.0, 770489344.0, 0.0,... \n",
|
||
"3 Ben_3 [0.0, 0.0, 0.0, 133747288.0, 770489344.0, 0.0,... \n",
|
||
"4 Ben_4 [0.0, 0.0, 0.0, 26222988.0, 698676736.0, 0.0, ... \n",
|
||
"\n",
|
||
" metadata \n",
|
||
"0 {'label': 'Benign'} \n",
|
||
"1 {'label': 'Benign'} \n",
|
||
"2 {'label': 'Benign'} \n",
|
||
"3 {'label': 'Benign'} \n",
|
||
"4 {'label': 'Benign'} "
|
||
]
|
||
},
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataset_22.documents.drop(['sparse_values', 'blob'], axis=1, inplace=True)\n",
|
||
"dataset_22.head()"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "P6nJdtveYTNY"
|
||
},
|
||
"source": [
|
||
"Let's define a sample that will include all different types of web attacks for this specific date."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 29,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "N7vwZk6HYTNY",
|
||
"outputId": "7ad7ec0d-f18b-4fba-c5b5-a2477a786a7a"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"metadata\n",
|
||
"{'label': 'Benign'} 1638\n",
|
||
"{'label': 'Brute Force -Web'} 249\n",
|
||
"{'label': 'Brute Force -XSS'} 79\n",
|
||
"{'label': 'SQL Injection'} 34\n",
|
||
"Name: count, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 29,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"data_sample = dataset_22.documents[-2000:]\n",
|
||
"data_sample.metadata.value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "neSxNwYckGMK"
|
||
},
|
||
"source": [
|
||
"Now, we will query the test dataset and save predicted and expected results to create a confusion matrix."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 49,
|
||
"referenced_widgets": [
|
||
"a654b98888a643f8b72d652c85a8fb6a",
|
||
"62917e73c7eb48268506e5de72e6a233",
|
||
"336b75c3eb5343dab90ac197784fe0a4",
|
||
"5549d01ac4ac4041a0aa4ccaa7f3ee81",
|
||
"1e482c1ab9ec47de9eb84f4abe544fcf",
|
||
"59e9e2fd6b0b474d9d7f006a68b2e9ff",
|
||
"cccfc5f59db740d689899d2fc783e4f4",
|
||
"3a8bbd8bbc7044d2a54a4c2e877e2532",
|
||
"c234a54fcaf14d0ba850eea647df6c56",
|
||
"b3f2befb0abb42869f2e8066d2ae137c",
|
||
"a95a29c73700484d9bb6dfcdc293490c"
|
||
]
|
||
},
|
||
"id": "8u6cg_1tYTNY",
|
||
"outputId": "f8536aa0-e2e3-49ef-c8b7-09f3db977b6a",
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "a654b98888a643f8b72d652c85a8fb6a",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
" 0%| | 0/20 [00:00<?, ?it/s]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from tqdm.auto import tqdm\n",
|
||
"from collections import Counter\n",
|
||
"\n",
|
||
"y_true = []\n",
|
||
"y_pred = []\n",
|
||
"\n",
|
||
"BATCH_SIZE = 100\n",
|
||
"\n",
|
||
"for i in tqdm(range(0, len(data_sample), BATCH_SIZE)):\n",
|
||
" test_data = data_sample.iloc[i:i+BATCH_SIZE, :]\n",
|
||
" test_vector = test_data['values'].tolist()\n",
|
||
"\n",
|
||
" # Query using the vector embedding\n",
|
||
" query_results = []\n",
|
||
"\n",
|
||
" for xq in test_vector:\n",
|
||
" query_res = index.query(xq.tolist(), top_k=50)\n",
|
||
" query_results.append(query_res)\n",
|
||
"\n",
|
||
" ids = [res.id for result in query_results for res in result.matches]\n",
|
||
"\n",
|
||
" for label, res in zip(test_data.metadata.values, query_results):\n",
|
||
" # Add to the true list\n",
|
||
" if label['label'] == 'Benign':\n",
|
||
" y_true.append(0)\n",
|
||
" else:\n",
|
||
" y_true.append(1)\n",
|
||
"\n",
|
||
" counter = Counter(match.id.split('_')[0] for match in res.matches)\n",
|
||
"\n",
|
||
" # Add to the predicted list\n",
|
||
" if counter['Bru'] or counter['SQL']:\n",
|
||
" y_pred.append(1)\n",
|
||
" else:\n",
|
||
" y_pred.append(0)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"metadata": {
|
||
"id": "t5lG_ePFRAe9"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"!pip install seaborn -qU"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"metadata": {
|
||
"id": "dj2tAS6YRAe9"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.metrics import accuracy_score, precision_score, recall_score\n",
|
||
"from sklearn.metrics import confusion_matrix\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import seaborn as sns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 33,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 490
|
||
},
|
||
"id": "HV3-gkdWYTNZ",
|
||
"outputId": "e7628098-81cc-4885-9d5c-4a74c15d360b"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"[Text(0, 0.5, 'Benign'), Text(0, 1.5, 'Attack')]"
|
||
]
|
||
},
|
||
"execution_count": 33,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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Z86cUXJysmrXru3Y5uXlpXvuuSfTraPrEhMT5enpqfr162e55r179+rChQtq2rSpU/vly5d19913S5J27tzpVIck3XvvvVk+B4DcR3gBcFsaNmyot99+W97e3ipZsqS8vP7v14m/v7/TvmlpaapZs6bmz5+fqZ9ixYrd1vn9/PyyfUxaWpok6csvv9Qdd9zhtM3Hx+e26gCQ9wgvAG6Lv7+/IiMjs7RvjRo1tHDhQoWGhiooKOim+4SFhen777/XAw88IEm6evWqtmzZoho1atx0/ypVqigjI0PffvutmjRpkmn79ZGf9PR0R1t0dLR8fHx0+PDhW47YVKxYUUuXLnVq27Rp019fJIA8w4RdALmue/fuKlq0qNq1a6d169bpwIEDWrt2rQYOHKijR49KkgYNGqTXXntNcXFx2rVrl5588sk/fUZLRESEYmJi1Lt3b8XFxTn6/OSTTyRJ4eHhstlsWrZsmU6ePKm0tDQFBgZqyJAhevbZZzV37lzt27dP//vf/zRjxgzNnTtXkvTEE09oz549Gjp0qJKSkvTRRx9pzpw5uf0VAcgGwguAXFewYEElJCTorrvuUseOHVWxYkX16dNHly5dcozEDB48WI899phiYmJ07733KjAwUB06dPjTft9++209/PDDevLJJ1WhQgX169dP58+flyTdcccdGjNmjF544QUVL15c//73vyVJr7zyil566SWNHz9eFStWVIsWLfTll1+qdOnSkqS77rpLixcvVlxcnKpVq6aZM2dq3LhxufjtAMgum3Wr2XAAAABuiJEXAABgFMILAAAwCuEFAAAYhfACAACMQngBAABGIbwAAACjEF4AAIBRCC8AAMAohBcAAGAUwgsAADAK4QUAABiF8AIAAIzy/wBkMOKYcoHcmQAAAABJRU5ErkJggg==",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Create confusion matrix\n",
|
||
"conf_matrix = confusion_matrix(y_true, y_pred)\n",
|
||
"\n",
|
||
"# Show confusion matrix\n",
|
||
"ax = plt.subplot()\n",
|
||
"sns.heatmap(conf_matrix, annot=True, ax = ax, cmap='Blues', fmt='g', cbar=False)\n",
|
||
"\n",
|
||
"# Add labels, title and ticks\n",
|
||
"ax.set_xlabel('Predicted')\n",
|
||
"ax.set_ylabel('Actual')\n",
|
||
"ax.set_title('Confusion Matrix')\n",
|
||
"ax.xaxis.set_ticklabels(['Benign', 'Attack'])\n",
|
||
"ax.yaxis.set_ticklabels(['Benign', 'Attack'])"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "-H7rWFguYTNZ"
|
||
},
|
||
"source": [
|
||
"Now we can calculate overall accuracy and per class accuracy."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 34,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/"
|
||
},
|
||
"id": "uHTInLt2YTNZ",
|
||
"outputId": "238ccc0c-2bbc-4d3c-98ef-2f7101cb1325"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Accuracy: 0.819\n",
|
||
"Precision: 0.000\n",
|
||
"Recall: 0.000\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1469: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n",
|
||
" _warn_prf(average, modifier, msg_start, len(result))\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Calculate accuracy\n",
|
||
"acc = accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)\n",
|
||
"precision = precision_score(y_true, y_pred)\n",
|
||
"recall = recall_score(y_true, y_pred)\n",
|
||
"\n",
|
||
"print(f\"Accuracy: {acc:.3f}\")\n",
|
||
"print(f\"Precision: {precision:.3f}\")\n",
|
||
"print(f\"Recall: {recall:.3f}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 35,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 112
|
||
},
|
||
"id": "ZNzyqAH9YTNZ",
|
||
"outputId": "56e19840-fb6b-4296-96c9-3417c14ebe4b"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-44b9a897-7181-45c9-99be-f65ff3041806\">\n",
|
||
" <div class=\"colab-df-container\">\n",
|
||
" <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>type</th>\n",
|
||
" <th>accuracy</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Benign</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Attack</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>\n",
|
||
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-44b9a897-7181-45c9-99be-f65ff3041806')\"\n",
|
||
" title=\"Convert this dataframe to an interactive table.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
|
||
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
|
||
" </svg>\n",
|
||
" </button>\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" <div id=\"df-bf7edec0-47a9-46ce-9a5f-d846efa46185\">\n",
|
||
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-bf7edec0-47a9-46ce-9a5f-d846efa46185')\"\n",
|
||
" title=\"Suggest charts.\"\n",
|
||
" style=\"display:none;\">\n",
|
||
"\n",
|
||
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
|
||
" width=\"24px\">\n",
|
||
" <g>\n",
|
||
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
|
||
" </g>\n",
|
||
"</svg>\n",
|
||
" </button>\n",
|
||
" </div>\n",
|
||
"\n",
|
||
"<style>\n",
|
||
" .colab-df-quickchart {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-quickchart:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-quickchart:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" async function quickchart(key) {\n",
|
||
" const containerElement = document.querySelector('#' + key);\n",
|
||
" const charts = await google.colab.kernel.invokeFunction(\n",
|
||
" 'suggestCharts', [key], {});\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
"\n",
|
||
"function displayQuickchartButton(domScope) {\n",
|
||
" let quickchartButtonEl =\n",
|
||
" domScope.querySelector('#df-bf7edec0-47a9-46ce-9a5f-d846efa46185 button.colab-df-quickchart');\n",
|
||
" quickchartButtonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"}\n",
|
||
"\n",
|
||
" displayQuickchartButton(document);\n",
|
||
" </script>\n",
|
||
" <style>\n",
|
||
" .colab-df-container {\n",
|
||
" display:flex;\n",
|
||
" flex-wrap:wrap;\n",
|
||
" gap: 12px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert {\n",
|
||
" background-color: #E8F0FE;\n",
|
||
" border: none;\n",
|
||
" border-radius: 50%;\n",
|
||
" cursor: pointer;\n",
|
||
" display: none;\n",
|
||
" fill: #1967D2;\n",
|
||
" height: 32px;\n",
|
||
" padding: 0 0 0 0;\n",
|
||
" width: 32px;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .colab-df-convert:hover {\n",
|
||
" background-color: #E2EBFA;\n",
|
||
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
|
||
" fill: #174EA6;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert {\n",
|
||
" background-color: #3B4455;\n",
|
||
" fill: #D2E3FC;\n",
|
||
" }\n",
|
||
"\n",
|
||
" [theme=dark] .colab-df-convert:hover {\n",
|
||
" background-color: #434B5C;\n",
|
||
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
|
||
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
|
||
" fill: #FFFFFF;\n",
|
||
" }\n",
|
||
" </style>\n",
|
||
"\n",
|
||
" <script>\n",
|
||
" const buttonEl =\n",
|
||
" document.querySelector('#df-44b9a897-7181-45c9-99be-f65ff3041806 button.colab-df-convert');\n",
|
||
" buttonEl.style.display =\n",
|
||
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
|
||
"\n",
|
||
" async function convertToInteractive(key) {\n",
|
||
" const element = document.querySelector('#df-44b9a897-7181-45c9-99be-f65ff3041806');\n",
|
||
" const dataTable =\n",
|
||
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
|
||
" [key], {});\n",
|
||
" if (!dataTable) return;\n",
|
||
"\n",
|
||
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
|
||
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
|
||
" + ' to learn more about interactive tables.';\n",
|
||
" element.innerHTML = '';\n",
|
||
" dataTable['output_type'] = 'display_data';\n",
|
||
" await google.colab.output.renderOutput(dataTable, element);\n",
|
||
" const docLink = document.createElement('div');\n",
|
||
" docLink.innerHTML = docLinkHtml;\n",
|
||
" element.appendChild(docLink);\n",
|
||
" }\n",
|
||
" </script>\n",
|
||
" </div>\n",
|
||
" </div>\n"
|
||
],
|
||
"text/plain": [
|
||
" type accuracy\n",
|
||
"0 Benign 1.0\n",
|
||
"1 Attack 0.0"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"# Calculate per class accuracy\n",
|
||
"cmd = confusion_matrix(y_true, y_pred, normalize=\"true\").diagonal()\n",
|
||
"per_class_accuracy_df = pd.DataFrame([(index, round(value,4)) for index, value in zip(['Benign', 'Attack'], cmd)], columns = ['type', 'accuracy'])\n",
|
||
"per_class_accuracy_df = per_class_accuracy_df.round(2)\n",
|
||
"display(per_class_accuracy_df)"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "Gfy_LW5zXIj6"
|
||
},
|
||
"source": [
|
||
"We got great results using Pinecone! In [our longer example](https://colab.research.google.com/github/pinecone-io/examples/blob/master/learn/security/it-threat-detection.ipynb) we also see what happens if we skip the similarity search step and predict values from the model directly. In short, it performs much worse! By adding Pinecone's similarity search over the same model's embeddings we improve threat detection (i.e., \"Attack\") accuracy by over 50%!"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "OiT0JgQxktOC"
|
||
},
|
||
"source": [
|
||
"### Result summary"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "UBBv6-dnfEeX"
|
||
},
|
||
"source": [
|
||
"Using standard vector embeddings with Pinecone's similarity search service, we detected 85% of the attacks while keeping a low 3% false-positive rate. In [our longer example](https://colab.research.google.com/github/pinecone-io/examples/blob/master/learn/security/it-threat-detection.ipynb), we also showed that our similarity search approach outperforms the direct classification approach that utilizes the classifier's embedding model. Similarity search-based detection gained 50% higher accuracy compared to the direct detector.\n",
|
||
"\n",
|
||
"[Original published results](https://github.com/rambasnet/DeepLearning-IDS/blob/master/graphics/confusion_matrices/) for 02-22-2018 show that the model was able to correctly detect 208520 benign cases out of 208520 benign cases, and 24 (18+1+5) attacks out of 70 attacks in the test set making this model **34.3% accurate in predicting attacks**. For testing purposes, 20% of the data for 02-22-2018 was used.\n",
|
||
"\n",
|
||
".png)\n",
|
||
"\n",
|
||
"As you can see, the model's performance for creating embeddings for Pinecone was much higher.\n",
|
||
"\n",
|
||
"The model we have created follows the academic paper ([model for the same date](https://github.com/rambasnet/DeepLearning-IDS/blob/master/keras_tensorflow_models/) (02-23-2018)) and is slightly modified, but still a straightforward, sequential, shallow model. We have changed the number of classes from four (Benign, BruteForce-Web, BruteForce-XSS, SQL-Injection) to two (Benign and Attack), only interested in whether we are detecting an attack or not. We have also changed validation metrics to precision and recall. These changes improved our results. Yet, there is still room for further improvements, for example, by adding more data covering multiple days and different types of attacks."
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "JdZcEl1pfEeX"
|
||
},
|
||
"source": [
|
||
"## Delete the Index"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "hyxLeOnSfEeX"
|
||
},
|
||
"source": [
|
||
"Delete the index once you are sure that you do not want to use it anymore. Once it is deleted, you cannot reuse it."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"id": "ywvaJrVkfEeX"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"pinecone.delete_index(index_name)"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {},
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "Hu2mIbHms3k7"
|
||
},
|
||
"source": [
|
||
"---"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"colab": {
|
||
"provenance": []
|
||
},
|
||
"environment": {
|
||
"name": "tf2-gpu.2-3.m65",
|
||
"type": "gcloud",
|
||
"uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-3:m65"
|
||
},
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.8.16"
|
||
},
|
||
"vscode": {
|
||
"interpreter": {
|
||
"hash": "b0fa6594d8f4cbf19f97940f81e996739fb7646882a419484c72d19e05852a7e"
|
||
}
|
||
},
|
||
"widgets": {
|
||
"application/vnd.jupyter.widget-state+json": {
|
||
"05b173e450494565b8d28c6585a527af": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "ProgressStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "ProgressStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"bar_color": null,
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"0f90c5e13f034f85990c48026058ec32": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"1c9e4ed606d1463e80f241e598b08fb8": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"1e482c1ab9ec47de9eb84f4abe544fcf": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"336b75c3eb5343dab90ac197784fe0a4": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "FloatProgressModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "FloatProgressModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "ProgressView",
|
||
"bar_style": "success",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_3a8bbd8bbc7044d2a54a4c2e877e2532",
|
||
"max": 20,
|
||
"min": 0,
|
||
"orientation": "horizontal",
|
||
"style": "IPY_MODEL_c234a54fcaf14d0ba850eea647df6c56",
|
||
"value": 20
|
||
}
|
||
},
|
||
"3a8bbd8bbc7044d2a54a4c2e877e2532": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"3ca5817c63cb4127b31f4973b7670388": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "DescriptionStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "DescriptionStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"5549d01ac4ac4041a0aa4ccaa7f3ee81": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HTMLModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HTMLModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HTMLView",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_b3f2befb0abb42869f2e8066d2ae137c",
|
||
"placeholder": "",
|
||
"style": "IPY_MODEL_a95a29c73700484d9bb6dfcdc293490c",
|
||
"value": " 20/20 [02:26<00:00, 7.18s/it]"
|
||
}
|
||
},
|
||
"59e9e2fd6b0b474d9d7f006a68b2e9ff": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"62917e73c7eb48268506e5de72e6a233": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HTMLModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HTMLModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HTMLView",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_59e9e2fd6b0b474d9d7f006a68b2e9ff",
|
||
"placeholder": "",
|
||
"style": "IPY_MODEL_cccfc5f59db740d689899d2fc783e4f4",
|
||
"value": "100%"
|
||
}
|
||
},
|
||
"7cad2cfda84d4c1aa8898b8dff361a8b": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "DescriptionStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "DescriptionStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"80e09a9ff31d454fb6614f4923ff6433": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HBoxModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HBoxModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HBoxView",
|
||
"box_style": "",
|
||
"children": [
|
||
"IPY_MODEL_a6681a2392e04c91a77b8f8939c5bd7d",
|
||
"IPY_MODEL_e10a0235c9a949c8869b46b48c67b58c",
|
||
"IPY_MODEL_f52116b4976c4b1e8b408f09440ed52f"
|
||
],
|
||
"layout": "IPY_MODEL_0f90c5e13f034f85990c48026058ec32"
|
||
}
|
||
},
|
||
"8e150825351a44dd94b792cefc96365c": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"9908e231310244d69be88a265e565be7": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "ProgressStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "ProgressStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"bar_color": null,
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"a42a08cf00b140ebb4c883bde04febfb": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"a654b98888a643f8b72d652c85a8fb6a": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HBoxModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HBoxModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HBoxView",
|
||
"box_style": "",
|
||
"children": [
|
||
"IPY_MODEL_62917e73c7eb48268506e5de72e6a233",
|
||
"IPY_MODEL_336b75c3eb5343dab90ac197784fe0a4",
|
||
"IPY_MODEL_5549d01ac4ac4041a0aa4ccaa7f3ee81"
|
||
],
|
||
"layout": "IPY_MODEL_1e482c1ab9ec47de9eb84f4abe544fcf"
|
||
}
|
||
},
|
||
"a6681a2392e04c91a77b8f8939c5bd7d": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HTMLModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HTMLModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HTMLView",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_8e150825351a44dd94b792cefc96365c",
|
||
"placeholder": "",
|
||
"style": "IPY_MODEL_3ca5817c63cb4127b31f4973b7670388",
|
||
"value": "collecting async responses: 100%"
|
||
}
|
||
},
|
||
"a95a29c73700484d9bb6dfcdc293490c": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "DescriptionStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "DescriptionStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"ac390e5f1b9547318ab0478a86d0cf6b": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "FloatProgressModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "FloatProgressModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "ProgressView",
|
||
"bar_style": "success",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_d3eb91a8850843b5833857901c1b76a3",
|
||
"max": 50000,
|
||
"min": 0,
|
||
"orientation": "horizontal",
|
||
"style": "IPY_MODEL_05b173e450494565b8d28c6585a527af",
|
||
"value": 50000
|
||
}
|
||
},
|
||
"b3f2befb0abb42869f2e8066d2ae137c": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"c0dec6e0d5ea4d09ae473aa9e498be1d": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "DescriptionStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "DescriptionStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"c234a54fcaf14d0ba850eea647df6c56": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "ProgressStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "ProgressStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"bar_color": null,
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"c53b3d1aaf524b62b293368c23ff358f": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"cccfc5f59db740d689899d2fc783e4f4": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "DescriptionStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "DescriptionStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"cd5ed6888cab4656891522f1765eaf04": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HTMLModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HTMLModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HTMLView",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_1c9e4ed606d1463e80f241e598b08fb8",
|
||
"placeholder": "",
|
||
"style": "IPY_MODEL_7cad2cfda84d4c1aa8898b8dff361a8b",
|
||
"value": "sending upsert requests: 100%"
|
||
}
|
||
},
|
||
"d0aeac530caa41a1b4c0ed56facfaefb": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HTMLModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HTMLModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HTMLView",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_f2d5170a93244298ba24b3f14b11f0c7",
|
||
"placeholder": "",
|
||
"style": "IPY_MODEL_da1de055c6834a82a69da37d5fa889e7",
|
||
"value": " 50000/50000 [01:52<00:00, 18413.13it/s]"
|
||
}
|
||
},
|
||
"d3eb91a8850843b5833857901c1b76a3": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"d457fe5de4784553a9f47d7b4462ea4c": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HBoxModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HBoxModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HBoxView",
|
||
"box_style": "",
|
||
"children": [
|
||
"IPY_MODEL_cd5ed6888cab4656891522f1765eaf04",
|
||
"IPY_MODEL_ac390e5f1b9547318ab0478a86d0cf6b",
|
||
"IPY_MODEL_d0aeac530caa41a1b4c0ed56facfaefb"
|
||
],
|
||
"layout": "IPY_MODEL_da08a329e02147ca9f7029143682703f"
|
||
}
|
||
},
|
||
"da08a329e02147ca9f7029143682703f": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"da1de055c6834a82a69da37d5fa889e7": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "DescriptionStyleModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "DescriptionStyleModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "StyleView",
|
||
"description_width": ""
|
||
}
|
||
},
|
||
"e10a0235c9a949c8869b46b48c67b58c": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "FloatProgressModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "FloatProgressModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "ProgressView",
|
||
"bar_style": "success",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_c53b3d1aaf524b62b293368c23ff358f",
|
||
"max": 100,
|
||
"min": 0,
|
||
"orientation": "horizontal",
|
||
"style": "IPY_MODEL_9908e231310244d69be88a265e565be7",
|
||
"value": 100
|
||
}
|
||
},
|
||
"f2d5170a93244298ba24b3f14b11f0c7": {
|
||
"model_module": "@jupyter-widgets/base",
|
||
"model_module_version": "1.2.0",
|
||
"model_name": "LayoutModel",
|
||
"state": {
|
||
"_model_module": "@jupyter-widgets/base",
|
||
"_model_module_version": "1.2.0",
|
||
"_model_name": "LayoutModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/base",
|
||
"_view_module_version": "1.2.0",
|
||
"_view_name": "LayoutView",
|
||
"align_content": null,
|
||
"align_items": null,
|
||
"align_self": null,
|
||
"border": null,
|
||
"bottom": null,
|
||
"display": null,
|
||
"flex": null,
|
||
"flex_flow": null,
|
||
"grid_area": null,
|
||
"grid_auto_columns": null,
|
||
"grid_auto_flow": null,
|
||
"grid_auto_rows": null,
|
||
"grid_column": null,
|
||
"grid_gap": null,
|
||
"grid_row": null,
|
||
"grid_template_areas": null,
|
||
"grid_template_columns": null,
|
||
"grid_template_rows": null,
|
||
"height": null,
|
||
"justify_content": null,
|
||
"justify_items": null,
|
||
"left": null,
|
||
"margin": null,
|
||
"max_height": null,
|
||
"max_width": null,
|
||
"min_height": null,
|
||
"min_width": null,
|
||
"object_fit": null,
|
||
"object_position": null,
|
||
"order": null,
|
||
"overflow": null,
|
||
"overflow_x": null,
|
||
"overflow_y": null,
|
||
"padding": null,
|
||
"right": null,
|
||
"top": null,
|
||
"visibility": null,
|
||
"width": null
|
||
}
|
||
},
|
||
"f52116b4976c4b1e8b408f09440ed52f": {
|
||
"model_module": "@jupyter-widgets/controls",
|
||
"model_module_version": "1.5.0",
|
||
"model_name": "HTMLModel",
|
||
"state": {
|
||
"_dom_classes": [],
|
||
"_model_module": "@jupyter-widgets/controls",
|
||
"_model_module_version": "1.5.0",
|
||
"_model_name": "HTMLModel",
|
||
"_view_count": null,
|
||
"_view_module": "@jupyter-widgets/controls",
|
||
"_view_module_version": "1.5.0",
|
||
"_view_name": "HTMLView",
|
||
"description": "",
|
||
"description_tooltip": null,
|
||
"layout": "IPY_MODEL_a42a08cf00b140ebb4c883bde04febfb",
|
||
"placeholder": "",
|
||
"style": "IPY_MODEL_c0dec6e0d5ea4d09ae473aa9e498be1d",
|
||
"value": " 100/100 [00:01<00:00, 54.60it/s]"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 0
|
||
}
|