{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "FeatureCreation.ipynb", "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "zyycU3DFlecK" }, "source": [ "Contributors: **Rohit Singh Rathaur, Girish L.** \n", "\n", "Copyright [2021](2021) [*Rohit Singh Rathaur, BIT Mesra and Girish L., CIT GUBBI, Karnataka*]\n", "\n", "Licensed under the Apache License, Version 2.0 (the \"License\");\n", "you may not use this file except in compliance with the License.\n", "You may obtain a copy of the License at\n", "\n", " http://www.apache.org/licenses/LICENSE-2.0\n", "\n", "Unless required by applicable law or agreed to in writing, software\n", "distributed under the License is distributed on an \"AS IS\" BASIS,\n", "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "See the License for the specific language governing permissions and\n", "limitations under the License." ] }, { "cell_type": "code", "metadata": { "id": "gehKp2rySVf8" }, "source": [ "# Import libraries use for visualization and analysis\n", "import pandas as pd\n", "import numpy as np\n", "\n", "%matplotlib inline\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "\n", "from pandas import Series,DataFrame\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.preprocessing import scale\n", "from sklearn.decomposition import PCA\n", "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "from scipy import stats\n", "from IPython.display import display, HTML" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "tkuBlbCXSsdP", "outputId": "2b3ef633-a851-4c53-80eb-6b1bf4ffcc1c" }, "source": [ "from google.colab import drive\n", "drive.mount('/gdrive')" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Drive already mounted at /gdrive; to attempt to forcibly remount, call drive.mount(\"/gdrive\", force_remount=True).\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "wZXe8D88S-6R" }, "source": [ "# **Loading the Data**" ] }, { "cell_type": "code", "metadata": { "id": "KiDSpl37Sy39" }, "source": [ "df_Ellis = pd.read_csv(\"/gdrive/MyDrive/LFN Anuket/Analysis/data/Final/Final.csv\")\n", "#df_Bono = pd.read_csv(\"/gdrive/MyDrive/LFN Anuket/Analysis/data/matrices/df_Bono.csv\", error_bad_lines=False)\n", "#df_Sprout = pd.read_csv(\"/gdrive/MyDrive/LFN Anuket/Analysis/data/matrices/df_Sprout.csv\", error_bad_lines=False)\n", "#df_Homer = pd.read_csv(\"/gdrive/MyDrive/LFN Anuket/Analysis/data/matrices/df_Homer.csv\", error_bad_lines=False)\n", "#df_Homestead = pd.read_csv(\"/gdrive/MyDrive/LFN Anuket/Analysis/data/matrices/df_Homestead.csv\", error_bad_lines=False)\n", "#df_Ralf = pd.read_csv(\"/gdrive/MyDrive/LFN Anuket/Analysis/data/matrices/df_Ralf.csv\", error_bad_lines=False)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 204 }, "id": "dpy8jAm-TsCs", "outputId": "d8ad2072-1fa3-4b3c-fb55-b5128767b349" }, "source": [ "df_Ellis.head()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Timestampellis-cpu.system_percellis-cpu.wait_percellis-load.avg_1_minellis-mem.free_mbellis-net.in_bytes_secellis-net.out_packets_sec
014/09/2016 0:000.512.91.7339495413.20062.067
114/09/2016 0:000.410.31.7939505201.66759.567
214/09/2016 0:010.411.81.5239505370.73361.200
314/09/2016 0:010.412.91.4339495292.46760.400
414/09/2016 0:020.512.11.4439505318.16761.700
\n", "
" ], "text/plain": [ " Timestamp ... ellis-net.out_packets_sec\n", "0 14/09/2016 0:00 ... 62.067\n", "1 14/09/2016 0:00 ... 59.567\n", "2 14/09/2016 0:01 ... 61.200\n", "3 14/09/2016 0:01 ... 60.400\n", "4 14/09/2016 0:02 ... 61.700\n", "\n", "[5 rows x 7 columns]" ] }, "metadata": { "tags": [] }, "execution_count": 264 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 297 }, "id": "dJa9FgJNgqpI", "outputId": "54d6c43d-489f-4347-93e5-12e4a4da2066" }, "source": [ "df_Ellis.describe()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ellis-cpu.system_percellis-cpu.wait_percellis-load.avg_1_minellis-mem.free_mbellis-net.in_bytes_secellis-net.out_packets_sec
count177000.000000177000.000000177000.000000177000.0000001.770000e+05177000.000000
mean2.3155401.0241630.1988424206.8472321.855987e+071336.694851
std1.1709773.1271780.262227173.3642975.612164e+062220.146124
min0.1000000.0000000.0000002320.0000000.000000e+000.000000
25%1.5000000.2000000.0950004095.0000001.797602e+07182.033000
50%1.7000000.2000000.1400004214.0000002.087674e+07200.067000
75%3.5000000.4000000.1980004331.0000002.160859e+071069.667000
max16.70000022.4000002.5800004633.0000002.339041e+077887.552000
\n", "
" ], "text/plain": [ " ellis-cpu.system_perc ... ellis-net.out_packets_sec\n", "count 177000.000000 ... 177000.000000\n", "mean 2.315540 ... 1336.694851\n", "std 1.170977 ... 2220.146124\n", "min 0.100000 ... 0.000000\n", "25% 1.500000 ... 182.033000\n", "50% 1.700000 ... 200.067000\n", "75% 3.500000 ... 1069.667000\n", "max 16.700000 ... 7887.552000\n", "\n", "[8 rows x 6 columns]" ] }, "metadata": { "tags": [] }, "execution_count": 265 } ] }, { "cell_type": "code", "metadata": { "id": "xGVleQbnhRm6" }, "source": [ "#df_Ellis['SLO1'] = 0\n", "#print('Column names are: ',list(df_Ellis.columns))" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "b-F_gA61xowR", "outputId": "f9bd6232-2603-40ad-ccff-18887839e2da" }, "source": [ "df4 = df_Ellis[\"ellis-load.avg_1_min\"] > 2.45\n", "df4\n", "df4.to_csv('/gdrive/MyDrive/LFN Anuket/Analysis/data/Final/EllisLoadAvgLabel_lessthan0198.csv')\n", "df4.head(50)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 False\n", "1 False\n", "2 False\n", "3 False\n", "4 False\n", "5 False\n", "6 False\n", "7 False\n", "8 False\n", "9 False\n", "10 False\n", "11 False\n", "12 False\n", "13 False\n", "14 False\n", "15 False\n", "16 False\n", "17 False\n", "18 False\n", "19 False\n", "20 False\n", "21 False\n", "22 False\n", "23 False\n", "24 False\n", "25 False\n", "26 False\n", "27 False\n", "28 False\n", "29 False\n", "30 False\n", "31 False\n", "32 False\n", "33 False\n", "34 False\n", "35 False\n", "36 False\n", "37 False\n", "38 False\n", "39 False\n", "40 False\n", "41 False\n", "42 False\n", "43 False\n", "44 False\n", "45 False\n", "46 False\n", "47 False\n", "48 False\n", "49 False\n", "Name: ellis-load.avg_1_min, dtype: bool" ] }, "metadata": { "tags": [] }, "execution_count": 267 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8xcPRerCz8nA", "outputId": "fb66f20e-7365-40ec-857a-9dd9a8072401" }, "source": [ "df3 = df_Ellis[\"ellis-cpu.wait_perc\"] > 5\n", "df3\n", "df3.to_csv('/gdrive/MyDrive/LFN Anuket/Analysis/data/Final/ellis-cpu>5.csv')\n", "df3.head(50)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 True\n", "1 True\n", "2 True\n", "3 True\n", "4 True\n", "5 True\n", "6 True\n", "7 True\n", "8 True\n", "9 True\n", "10 True\n", "11 True\n", "12 True\n", "13 True\n", "14 True\n", "15 True\n", "16 True\n", "17 True\n", "18 True\n", "19 True\n", "20 True\n", "21 True\n", "22 True\n", "23 True\n", "24 True\n", "25 True\n", "26 True\n", "27 True\n", "28 True\n", "29 True\n", "30 True\n", "31 True\n", "32 True\n", "33 True\n", "34 True\n", "35 True\n", "36 True\n", "37 True\n", "38 True\n", "39 True\n", "40 True\n", "41 True\n", "42 True\n", "43 True\n", "44 True\n", "45 True\n", "46 True\n", "47 True\n", "48 True\n", "49 True\n", "Name: ellis-cpu.wait_perc, dtype: bool" ] }, "metadata": { "tags": [] }, "execution_count": 268 } ] }, { "cell_type": "code", "metadata": { "id": "EED56Wiq_NjM", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "20b06258-c5ba-457b-a022-cf5823217cbf" }, "source": [ "df5 = df_Ellis[\"ellis-net.out_packets_sec\"] > 1000\n", "df5\n", "df5.to_csv('/gdrive/MyDrive/LFN Anuket/Analysis/data/Final/ellis-net.in_bytes_sec21139.csv')\n", "df5.head(50)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 False\n", "1 False\n", "2 False\n", "3 False\n", "4 False\n", "5 False\n", "6 False\n", "7 False\n", "8 False\n", "9 False\n", "10 False\n", "11 False\n", "12 False\n", "13 False\n", "14 False\n", "15 False\n", "16 False\n", "17 False\n", "18 False\n", "19 False\n", "20 False\n", "21 False\n", "22 False\n", "23 False\n", "24 False\n", "25 False\n", "26 False\n", "27 False\n", "28 False\n", "29 False\n", "30 False\n", "31 False\n", "32 False\n", "33 False\n", "34 False\n", "35 False\n", "36 False\n", "37 False\n", "38 False\n", "39 False\n", "40 False\n", "41 False\n", "42 False\n", "43 False\n", "44 False\n", "45 False\n", "46 False\n", "47 False\n", "48 False\n", "49 False\n", "Name: ellis-net.out_packets_sec, dtype: bool" ] }, "metadata": { "tags": [] }, "execution_count": 269 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "phlI40_y0mug", "outputId": "7fa177b9-bf9a-4b96-db65-7402f7f6cf32" }, "source": [ "# We are applying Logical OR Operator between df4 and df3\n", "df6 = (df4[0:176999]) | (df3[0:176999])\n", "df6.head(50)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 True\n", "1 True\n", "2 True\n", "3 True\n", "4 True\n", "5 True\n", "6 True\n", "7 True\n", "8 True\n", "9 True\n", "10 True\n", "11 True\n", "12 True\n", "13 True\n", "14 True\n", "15 True\n", "16 True\n", "17 True\n", "18 True\n", "19 True\n", "20 True\n", "21 True\n", "22 True\n", "23 True\n", "24 True\n", "25 True\n", "26 True\n", "27 True\n", "28 True\n", "29 True\n", "30 True\n", "31 True\n", "32 True\n", "33 True\n", "34 True\n", "35 True\n", "36 True\n", "37 True\n", "38 True\n", "39 True\n", "40 True\n", "41 True\n", "42 True\n", "43 True\n", "44 True\n", "45 True\n", "46 True\n", "47 True\n", "48 True\n", "49 True\n", "dtype: bool" ] }, "metadata": { "tags": [] }, "execution_count": 270 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9xKYzZcLAZGy", "outputId": "bc15e547-c791-4104-8bb2-8ed4d3288ac1" }, "source": [ "df6.to_csv('/gdrive/MyDrive/LFN Anuket/Analysis/data/Final/OR_TwoCondition(2).csv')\n", "df6.head(50)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 True\n", "1 True\n", "2 True\n", "3 True\n", "4 True\n", "5 True\n", "6 True\n", "7 True\n", "8 True\n", "9 True\n", "10 True\n", "11 True\n", "12 True\n", "13 True\n", "14 True\n", "15 True\n", "16 True\n", "17 True\n", "18 True\n", "19 True\n", "20 True\n", "21 True\n", "22 True\n", "23 True\n", "24 True\n", "25 True\n", "26 True\n", "27 True\n", "28 True\n", "29 True\n", "30 True\n", "31 True\n", "32 True\n", "33 True\n", "34 True\n", "35 True\n", "36 True\n", "37 True\n", "38 True\n", "39 True\n", "40 True\n", "41 True\n", "42 True\n", "43 True\n", "44 True\n", "45 True\n", "46 True\n", "47 True\n", "48 True\n", "49 True\n", "dtype: bool" ] }, "metadata": { "tags": [] }, "execution_count": 271 } ] }, { "cell_type": "code", "metadata": { "id": "wRADpDibBZo5", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "dfc6dc79-3d9f-4979-8210-e62e77b1aa6e" }, "source": [ "df7 = (df6[0:176999]) | (df5[0:176999])\n", "df7.head(50)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 True\n", "1 True\n", "2 True\n", "3 True\n", "4 True\n", "5 True\n", "6 True\n", "7 True\n", "8 True\n", "9 True\n", "10 True\n", "11 True\n", "12 True\n", "13 True\n", "14 True\n", "15 True\n", "16 True\n", "17 True\n", "18 True\n", "19 True\n", "20 True\n", "21 True\n", "22 True\n", "23 True\n", "24 True\n", "25 True\n", "26 True\n", "27 True\n", "28 True\n", "29 True\n", "30 True\n", "31 True\n", "32 True\n", "33 True\n", "34 True\n", "35 True\n", "36 True\n", "37 True\n", "38 True\n", "39 True\n", "40 True\n", "41 True\n", "42 True\n", "43 True\n", "44 True\n", "45 True\n", "46 True\n", "47 True\n", "48 True\n", "49 True\n", "dtype: bool" ] }, "metadata": { "tags": [] }, "execution_count": 272 } ] }, { "cell_type": "code", "metadata": { "id": "w6BrDjX4CODn", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "a6c956e7-6aed-4bdd-f37f-505a994de51a" }, "source": [ "df7.to_csv('/gdrive/MyDrive/LFN Anuket/Analysis/data/Final/FinalORLabel8.5.csv')\n", "df7.head(50)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 True\n", "1 True\n", "2 True\n", "3 True\n", "4 True\n", "5 True\n", "6 True\n", "7 True\n", "8 True\n", "9 True\n", "10 True\n", "11 True\n", "12 True\n", "13 True\n", "14 True\n", "15 True\n", "16 True\n", "17 True\n", "18 True\n", "19 True\n", "20 True\n", "21 True\n", "22 True\n", "23 True\n", "24 True\n", "25 True\n", "26 True\n", "27 True\n", "28 True\n", "29 True\n", "30 True\n", "31 True\n", "32 True\n", "33 True\n", "34 True\n", "35 True\n", "36 True\n", "37 True\n", "38 True\n", "39 True\n", "40 True\n", "41 True\n", "42 True\n", "43 True\n", "44 True\n", "45 True\n", "46 True\n", "47 True\n", "48 True\n", "49 True\n", "dtype: bool" ] }, "metadata": { "tags": [] }, "execution_count": 273 } ] }, { "cell_type": "code", "metadata": { "id": "wwv2cjFAIFHL" }, "source": [ "df_Ellis.insert (7, \"Label\", df7)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "hrPqpjd96I1x" }, "source": [ "#df_Ellis.insert (8, \"Label\", df7)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "_zKkQLOz6qPY" }, "source": [ "# We applied Logical OR operator in two features only known as and df3 and df4 and stored result in df6 which is known as Final Label after applying OR condition\n", "df_Ellis\n", "df_Ellis.to_csv('/gdrive/MyDrive/LFN Anuket/Analysis/data/Final/Ellis_FinalTwoConditionwithOR.csv')" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "3rEy1vtp67M9", "colab": { "base_uri": "https://localhost:8080/", "height": 606 }, "outputId": "4e2175cc-dccb-4aaf-a152-e2452de241b0" }, "source": [ "df_Ellis.head(100)" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Timestampellis-cpu.system_percellis-cpu.wait_percellis-load.avg_1_minellis-mem.free_mbellis-net.in_bytes_secellis-net.out_packets_secLabel
014/09/2016 0:000.512.91.7339495413.20062.067True
114/09/2016 0:000.410.31.7939505201.66759.567True
214/09/2016 0:010.411.81.5239505370.73361.200True
314/09/2016 0:010.412.91.4339495292.46760.400True
414/09/2016 0:020.512.11.4439505318.16761.700True
...........................
9514/09/2016 0:470.510.80.4539485187.13360.100True
9614/09/2016 0:480.510.40.4239495223.10060.233True
9714/09/2016 0:480.613.00.5639475335.20060.667True
9814/09/2016 0:490.610.10.4739485185.73360.367True
9914/09/2016 0:490.610.80.2839485204.23359.600True
\n", "

100 rows × 8 columns

\n", "
" ], "text/plain": [ " Timestamp ellis-cpu.system_perc ... ellis-net.out_packets_sec Label\n", "0 14/09/2016 0:00 0.5 ... 62.067 True\n", "1 14/09/2016 0:00 0.4 ... 59.567 True\n", "2 14/09/2016 0:01 0.4 ... 61.200 True\n", "3 14/09/2016 0:01 0.4 ... 60.400 True\n", "4 14/09/2016 0:02 0.5 ... 61.700 True\n", ".. ... ... ... ... ...\n", "95 14/09/2016 0:47 0.5 ... 60.100 True\n", "96 14/09/2016 0:48 0.5 ... 60.233 True\n", "97 14/09/2016 0:48 0.6 ... 60.667 True\n", "98 14/09/2016 0:49 0.6 ... 60.367 True\n", "99 14/09/2016 0:49 0.6 ... 59.600 True\n", "\n", "[100 rows x 8 columns]" ] }, "metadata": { "tags": [] }, "execution_count": 277 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "11Qu45RY0HNG", "outputId": "305c5dd5-ec61-48a8-abb6-e29bbc4b9e42" }, "source": [ "# pandas count distinct values in column\n", "df_Ellis['Label'].value_counts()" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "False 112145\n", "True 64854\n", "Name: Label, dtype: int64" ] }, "metadata": { "tags": [] }, "execution_count": 278 } ] }, { "cell_type": "code", "metadata": { "id": "0sB-W_Ny4eHk" }, "source": [ "#final.to_csv('/gdrive/MyDrive/LFN Anuket/Analysis/data/New/FinalLabel.csv')" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ERsufys7wcSg" }, "source": [ "#df_Ellis.loc[(df_Ellis[\"ellis-cpu.wait_perc\"] > 5) & (df_Ellis[\"ellis-load.avg_1_min\"] > 2)]" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "9le7MwnDhlnH" }, "source": [ "# **Creating New Features**" ] }, { "cell_type": "code", "metadata": { "id": "090QXGpPlEF6" }, "source": [ "" ], "execution_count": null, "outputs": [] } ] }