4322 lines (4321 with data), 249.1 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"id": "h_hRu4BVQgO2"
},
"outputs": [],
"source": [
"import os\n",
"import random\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import cv2"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "iKJwVZf5QyET",
"outputId": "ba472d0a-a5a9-4513-9534-9fe5d5652c82"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
]
}
],
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vtKso6kJRdTo",
"outputId": "204dbc52-9d12-4e19-8f6e-738d4825cb29"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Archive: /content/drive/MyDrive/har70.zip\n",
" creating: har70plus/\n",
" inflating: har70plus/515.csv \n",
" inflating: har70plus/516.csv \n",
" inflating: har70plus/512.csv \n",
" inflating: har70plus/502.csv \n",
" inflating: har70plus/518.csv \n",
" inflating: har70plus/514.csv \n",
" inflating: har70plus/511.csv \n",
" inflating: har70plus/504.csv \n",
" inflating: har70plus/517.csv \n",
" inflating: har70plus/501.csv \n",
" inflating: har70plus/509.csv \n",
" inflating: har70plus/506.csv \n",
" inflating: har70plus/503.csv \n",
" inflating: har70plus/505.csv \n",
" inflating: har70plus/513.csv \n",
" inflating: har70plus/508.csv \n",
" inflating: har70plus/510.csv \n",
" inflating: har70plus/507.csv \n"
]
}
],
"source": [
"!unzip /content/drive/MyDrive/har70.zip"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lBGl_UnM22H_"
},
"source": [
"Data Preprocessing"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"id": "Vi3K44r7R0zL"
},
"outputs": [],
"source": [
"df = pd.read_csv('/content/har70plus/501.csv')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "kyA5mWYKSMnL",
"outputId": "fc3abdf8-66a6-4bf1-e4e6-0be12fada808"
},
"outputs": [
{
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "df"
},
"text/html": [
"\n",
" <div id=\"df-0cc2bbe0-cc56-4a40-859b-f7ceb9c1365d\" 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>timestamp</th>\n",
" <th>back_x</th>\n",
" <th>back_y</th>\n",
" <th>back_z</th>\n",
" <th>thigh_x</th>\n",
" <th>thigh_y</th>\n",
" <th>thigh_z</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2021-03-24 14:42:03.839</td>\n",
" <td>-0.999023</td>\n",
" <td>-0.063477</td>\n",
" <td>0.140625</td>\n",
" <td>-0.980469</td>\n",
" <td>-0.112061</td>\n",
" <td>-0.048096</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2021-03-24 14:42:03.859</td>\n",
" <td>-0.980225</td>\n",
" <td>-0.079346</td>\n",
" <td>0.140625</td>\n",
" <td>-0.961182</td>\n",
" <td>-0.121582</td>\n",
" <td>-0.051758</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-03-24 14:42:03.880</td>\n",
" <td>-0.950195</td>\n",
" <td>-0.076416</td>\n",
" <td>0.140625</td>\n",
" <td>-0.949463</td>\n",
" <td>-0.080566</td>\n",
" <td>-0.067139</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2021-03-24 14:42:03.900</td>\n",
" <td>-0.954834</td>\n",
" <td>-0.059082</td>\n",
" <td>0.140381</td>\n",
" <td>-0.957520</td>\n",
" <td>-0.046143</td>\n",
" <td>-0.050781</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2021-03-24 14:42:03.920</td>\n",
" <td>-0.972412</td>\n",
" <td>-0.042969</td>\n",
" <td>0.142822</td>\n",
" <td>-0.977051</td>\n",
" <td>-0.023682</td>\n",
" <td>-0.026611</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-0cc2bbe0-cc56-4a40-859b-f7ceb9c1365d')\"\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 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\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",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\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-0cc2bbe0-cc56-4a40-859b-f7ceb9c1365d 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-0cc2bbe0-cc56-4a40-859b-f7ceb9c1365d');\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",
"\n",
"\n",
"<div id=\"df-b9b2fefd-22ec-405d-83db-f06a450928b5\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b9b2fefd-22ec-405d-83db-f06a450928b5')\"\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",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-b9b2fefd-22ec-405d-83db-f06a450928b5 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" timestamp back_x back_y back_z thigh_x thigh_y \\\n",
"0 2021-03-24 14:42:03.839 -0.999023 -0.063477 0.140625 -0.980469 -0.112061 \n",
"1 2021-03-24 14:42:03.859 -0.980225 -0.079346 0.140625 -0.961182 -0.121582 \n",
"2 2021-03-24 14:42:03.880 -0.950195 -0.076416 0.140625 -0.949463 -0.080566 \n",
"3 2021-03-24 14:42:03.900 -0.954834 -0.059082 0.140381 -0.957520 -0.046143 \n",
"4 2021-03-24 14:42:03.920 -0.972412 -0.042969 0.142822 -0.977051 -0.023682 \n",
"\n",
" thigh_z label \n",
"0 -0.048096 6 \n",
"1 -0.051758 6 \n",
"2 -0.067139 6 \n",
"3 -0.050781 6 \n",
"4 -0.026611 6 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "GyNMmcqESTzN",
"outputId": "4ab1b1d0-fde3-4bf0-e04f-2996717adf68"
},
"outputs": [
{
"data": {
"text/plain": [
"(103860, 8)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"id": "zcIaTRLESYSh"
},
"outputs": [],
"source": [
"df_1 = pd.read_csv('/content/har70plus/517.csv')"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "eu_rkQfKSe9y",
"outputId": "6b680459-38fa-4a5d-f949-df51a55af322"
},
"outputs": [
{
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "df_1"
},
"text/html": [
"\n",
" <div id=\"df-a6a69041-7d23-4a61-bcaf-c5f571463299\" 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>timestamp</th>\n",
" <th>back_x</th>\n",
" <th>back_y</th>\n",
" <th>back_z</th>\n",
" <th>thigh_x</th>\n",
" <th>thigh_y</th>\n",
" <th>thigh_z</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2021-06-08 10:04:08.527</td>\n",
" <td>-0.984863</td>\n",
" <td>-0.089600</td>\n",
" <td>-0.308105</td>\n",
" <td>-0.944092</td>\n",
" <td>-0.124268</td>\n",
" <td>0.017578</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2021-06-08 10:04:08.546</td>\n",
" <td>-0.985840</td>\n",
" <td>-0.075928</td>\n",
" <td>-0.309082</td>\n",
" <td>-0.995361</td>\n",
" <td>-0.098389</td>\n",
" <td>0.014160</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-06-08 10:04:08.566</td>\n",
" <td>-0.972168</td>\n",
" <td>-0.059814</td>\n",
" <td>-0.292480</td>\n",
" <td>-1.005127</td>\n",
" <td>-0.079102</td>\n",
" <td>0.028809</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2021-06-08 10:04:08.586</td>\n",
" <td>-0.955322</td>\n",
" <td>-0.057861</td>\n",
" <td>-0.305176</td>\n",
" <td>-0.925049</td>\n",
" <td>-0.075684</td>\n",
" <td>0.048096</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2021-06-08 10:04:08.607</td>\n",
" <td>-0.954590</td>\n",
" <td>-0.058105</td>\n",
" <td>-0.310791</td>\n",
" <td>-0.935547</td>\n",
" <td>-0.123047</td>\n",
" <td>0.001709</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a6a69041-7d23-4a61-bcaf-c5f571463299')\"\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 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\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",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\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-a6a69041-7d23-4a61-bcaf-c5f571463299 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-a6a69041-7d23-4a61-bcaf-c5f571463299');\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",
"\n",
"\n",
"<div id=\"df-3dd963f0-511d-451a-9119-2d20098371b9\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-3dd963f0-511d-451a-9119-2d20098371b9')\"\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",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-3dd963f0-511d-451a-9119-2d20098371b9 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" timestamp back_x back_y back_z thigh_x thigh_y \\\n",
"0 2021-06-08 10:04:08.527 -0.984863 -0.089600 -0.308105 -0.944092 -0.124268 \n",
"1 2021-06-08 10:04:08.546 -0.985840 -0.075928 -0.309082 -0.995361 -0.098389 \n",
"2 2021-06-08 10:04:08.566 -0.972168 -0.059814 -0.292480 -1.005127 -0.079102 \n",
"3 2021-06-08 10:04:08.586 -0.955322 -0.057861 -0.305176 -0.925049 -0.075684 \n",
"4 2021-06-08 10:04:08.607 -0.954590 -0.058105 -0.310791 -0.935547 -0.123047 \n",
"\n",
" thigh_z label \n",
"0 0.017578 6 \n",
"1 0.014160 6 \n",
"2 0.028809 6 \n",
"3 0.048096 6 \n",
"4 0.001709 6 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_1.head()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "Y6EHejBzSiIg",
"outputId": "faedc406-85dc-461e-e290-9e73d6e0d653"
},
"outputs": [
{
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"repr_error": "0",
"type": "dataframe"
},
"text/html": [
"\n",
" <div id=\"df-63ca1299-520d-4075-b998-7121b060dc1f\" 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>timestamp</th>\n",
" <th>back_x</th>\n",
" <th>back_y</th>\n",
" <th>back_z</th>\n",
" <th>thigh_x</th>\n",
" <th>thigh_y</th>\n",
" <th>thigh_z</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>147040</th>\n",
" <td>2021-06-08 10:54:18.006</td>\n",
" <td>-1.061035</td>\n",
" <td>-0.028564</td>\n",
" <td>-0.311768</td>\n",
" <td>-1.264404</td>\n",
" <td>-0.308838</td>\n",
" <td>0.161865</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>147041</th>\n",
" <td>2021-06-08 10:54:18.027</td>\n",
" <td>-1.058105</td>\n",
" <td>0.030762</td>\n",
" <td>-0.292480</td>\n",
" <td>-0.917725</td>\n",
" <td>-0.214111</td>\n",
" <td>0.133545</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>147042</th>\n",
" <td>2021-06-08 10:54:18.047</td>\n",
" <td>-1.111572</td>\n",
" <td>0.077637</td>\n",
" <td>-0.296387</td>\n",
" <td>-0.903809</td>\n",
" <td>-0.222656</td>\n",
" <td>-0.004639</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>147043</th>\n",
" <td>2021-06-08 10:54:18.066</td>\n",
" <td>-1.157715</td>\n",
" <td>0.036133</td>\n",
" <td>-0.317139</td>\n",
" <td>-1.138672</td>\n",
" <td>-0.262451</td>\n",
" <td>-0.151855</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>147044</th>\n",
" <td>2021-06-08 10:54:18.086</td>\n",
" <td>-1.147461</td>\n",
" <td>-0.062988</td>\n",
" <td>-0.326660</td>\n",
" <td>-1.223389</td>\n",
" <td>-0.165039</td>\n",
" <td>-0.124268</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-63ca1299-520d-4075-b998-7121b060dc1f')\"\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 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\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",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\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-63ca1299-520d-4075-b998-7121b060dc1f 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-63ca1299-520d-4075-b998-7121b060dc1f');\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",
"\n",
"\n",
"<div id=\"df-cd9b6046-2481-4675-a869-3bb835b2ce65\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-cd9b6046-2481-4675-a869-3bb835b2ce65')\"\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",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-cd9b6046-2481-4675-a869-3bb835b2ce65 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" timestamp back_x back_y back_z thigh_x \\\n",
"147040 2021-06-08 10:54:18.006 -1.061035 -0.028564 -0.311768 -1.264404 \n",
"147041 2021-06-08 10:54:18.027 -1.058105 0.030762 -0.292480 -0.917725 \n",
"147042 2021-06-08 10:54:18.047 -1.111572 0.077637 -0.296387 -0.903809 \n",
"147043 2021-06-08 10:54:18.066 -1.157715 0.036133 -0.317139 -1.138672 \n",
"147044 2021-06-08 10:54:18.086 -1.147461 -0.062988 -0.326660 -1.223389 \n",
"\n",
" thigh_y thigh_z label \n",
"147040 -0.308838 0.161865 1 \n",
"147041 -0.214111 0.133545 1 \n",
"147042 -0.222656 -0.004639 1 \n",
"147043 -0.262451 -0.151855 1 \n",
"147044 -0.165039 -0.124268 1 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_1.tail()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "RTv2LqDCSoXL",
"outputId": "50571731-61d9-42de-daf9-36b4298d34d6"
},
"outputs": [
{
"data": {
"text/plain": [
"(147045, 8)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_1.shape"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
},
"id": "3I7ymSN2Syhf",
"outputId": "e0ab7408-1e6e-4f37-80fc-12647bfeefbe"
},
"outputs": [
{
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"summary": "{\n \"name\": \"df\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"back_x\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36720.35312763863,\n \"min\": -2.895264,\n \"max\": 103860.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.8808829120643173,\n -0.920898,\n 103860.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"back_y\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36720.07596531585,\n \"min\": -1.157471,\n \"max\": 103860.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.06950591103408435,\n -0.0625,\n 103860.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"back_z\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36720.10475866899,\n \"min\": -2.204834,\n \"max\": 103860.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.0032009579530136376,\n -0.136963,\n 103860.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"thigh_x\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36720.51595591762,\n \"min\": -7.942139,\n \"max\": 103860.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.7943074149046793,\n -0.9375,\n 103860.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"thigh_y\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36720.08217251648,\n \"min\": -3.60083,\n \"max\": 103860.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.09559411720585403,\n -0.080322,\n 103860.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"thigh_z\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36720.21687120069,\n \"min\": -4.193604,\n \"max\": 103860.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.31835447059503175,\n -0.131348,\n 103860.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36718.8886521831,\n \"min\": 1.0,\n \"max\": 103860.0,\n \"num_unique_values\": 6,\n \"samples\": [\n 103860.0,\n 3.2370691315232043,\n 8.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}",
"type": "dataframe"
},
"text/html": [
"\n",
" <div id=\"df-a14ff6e4-d0a1-4312-88b7-31c80830dee6\" 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>back_x</th>\n",
" <th>back_y</th>\n",
" <th>back_z</th>\n",
" <th>thigh_x</th>\n",
" <th>thigh_y</th>\n",
" <th>thigh_z</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>103860.000000</td>\n",
" <td>103860.000000</td>\n",
" <td>103860.000000</td>\n",
" <td>103860.000000</td>\n",
" <td>103860.000000</td>\n",
" <td>103860.000000</td>\n",
" <td>103860.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>-0.880883</td>\n",
" <td>-0.069506</td>\n",
" <td>-0.003201</td>\n",
" <td>-0.794307</td>\n",
" <td>-0.095594</td>\n",
" <td>-0.318354</td>\n",
" <td>3.237069</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.340989</td>\n",
" <td>0.128599</td>\n",
" <td>0.417656</td>\n",
" <td>0.599406</td>\n",
" <td>0.210591</td>\n",
" <td>0.547369</td>\n",
" <td>2.860101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-2.895264</td>\n",
" <td>-1.157471</td>\n",
" <td>-2.204834</td>\n",
" <td>-7.942139</td>\n",
" <td>-3.600830</td>\n",
" <td>-4.193604</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-1.015625</td>\n",
" <td>-0.137939</td>\n",
" <td>-0.268066</td>\n",
" <td>-1.003174</td>\n",
" <td>-0.187256</td>\n",
" <td>-1.046875</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>-0.920898</td>\n",
" <td>-0.062500</td>\n",
" <td>-0.136963</td>\n",
" <td>-0.937500</td>\n",
" <td>-0.080322</td>\n",
" <td>-0.131348</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>-0.767517</td>\n",
" <td>-0.006836</td>\n",
" <td>0.234375</td>\n",
" <td>-0.203125</td>\n",
" <td>-0.015625</td>\n",
" <td>0.080078</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>0.239746</td>\n",
" <td>0.893555</td>\n",
" <td>0.979004</td>\n",
" <td>1.159424</td>\n",
" <td>3.234863</td>\n",
" <td>1.861572</td>\n",
" <td>8.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a14ff6e4-d0a1-4312-88b7-31c80830dee6')\"\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 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\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",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\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-a14ff6e4-d0a1-4312-88b7-31c80830dee6 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-a14ff6e4-d0a1-4312-88b7-31c80830dee6');\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",
"\n",
"\n",
"<div id=\"df-e04e41e8-d4d5-4b4e-952c-fdfaedab857b\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-e04e41e8-d4d5-4b4e-952c-fdfaedab857b')\"\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",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-e04e41e8-d4d5-4b4e-952c-fdfaedab857b button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" back_x back_y back_z thigh_x \\\n",
"count 103860.000000 103860.000000 103860.000000 103860.000000 \n",
"mean -0.880883 -0.069506 -0.003201 -0.794307 \n",
"std 0.340989 0.128599 0.417656 0.599406 \n",
"min -2.895264 -1.157471 -2.204834 -7.942139 \n",
"25% -1.015625 -0.137939 -0.268066 -1.003174 \n",
"50% -0.920898 -0.062500 -0.136963 -0.937500 \n",
"75% -0.767517 -0.006836 0.234375 -0.203125 \n",
"max 0.239746 0.893555 0.979004 1.159424 \n",
"\n",
" thigh_y thigh_z label \n",
"count 103860.000000 103860.000000 103860.000000 \n",
"mean -0.095594 -0.318354 3.237069 \n",
"std 0.210591 0.547369 2.860101 \n",
"min -3.600830 -4.193604 1.000000 \n",
"25% -0.187256 -1.046875 1.000000 \n",
"50% -0.080322 -0.131348 1.000000 \n",
"75% -0.015625 0.080078 6.000000 \n",
"max 3.234863 1.861572 8.000000 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 423
},
"id": "08ETIQh0TCIG",
"outputId": "b29317db-4c59-4126-d8df-6a28f308e34b"
},
"outputs": [
{
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe"
},
"text/html": [
"\n",
" <div id=\"df-bb3ef152-087b-4f18-b4f4-c676aed31f34\" 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>timestamp</th>\n",
" <th>back_x</th>\n",
" <th>back_y</th>\n",
" <th>back_z</th>\n",
" <th>thigh_x</th>\n",
" <th>thigh_y</th>\n",
" <th>thigh_z</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103855</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103856</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103857</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103858</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>103859</th>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>103860 rows × 8 columns</p>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-bb3ef152-087b-4f18-b4f4-c676aed31f34')\"\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 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\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",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\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-bb3ef152-087b-4f18-b4f4-c676aed31f34 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-bb3ef152-087b-4f18-b4f4-c676aed31f34');\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",
"\n",
"\n",
"<div id=\"df-82609ca4-1900-4e22-b5e8-1dea60081e85\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-82609ca4-1900-4e22-b5e8-1dea60081e85')\"\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",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-82609ca4-1900-4e22-b5e8-1dea60081e85 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" timestamp back_x back_y back_z thigh_x thigh_y thigh_z label\n",
"0 False False False False False False False False\n",
"1 False False False False False False False False\n",
"2 False False False False False False False False\n",
"3 False False False False False False False False\n",
"4 False False False False False False False False\n",
"... ... ... ... ... ... ... ... ...\n",
"103855 False False False False False False False False\n",
"103856 False False False False False False False False\n",
"103857 False False False False False False False False\n",
"103858 False False False False False False False False\n",
"103859 False False False False False False False False\n",
"\n",
"[103860 rows x 8 columns]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "I0aNmZkw3Qax"
},
"source": [
"Collecting all dataFrame"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Haf5mUY8aSba",
"outputId": "a7162112-5a24-4bdb-e6ab-8db06ca431c1"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"511 (128063, 8)\n",
"517 (147045, 8)\n",
"502 (131367, 8)\n",
"516 (138278, 8)\n",
"513 (123599, 8)\n",
"510 (122061, 8)\n",
"505 (87006, 8)\n",
"507 (120125, 8)\n",
"508 (130494, 8)\n",
"503 (116413, 8)\n",
"504 (150758, 8)\n",
"514 (101510, 8)\n",
"509 (121763, 8)\n",
"501 (103860, 8)\n",
"515 (153517, 8)\n",
"506 (122714, 8)\n",
"512 (119310, 8)\n",
"518 (141714, 8)\n"
]
}
],
"source": [
"# Specify the path to the directory containing your CSV files in Google Drive\n",
"data_dir = '/content/har70plus'\n",
"\n",
"# Collect paths of all CSV files in the specified directory\n",
"lis_paths = []\n",
"for dirname, _, filenames in os.walk(data_dir):\n",
" for filename in filenames:\n",
" if filename.endswith('.csv'):\n",
" lis_paths.append(os.path.join(dirname, filename))\n",
"\n",
"# Read CSV files into a dictionary\n",
"old_act_dfs = {}\n",
"for i, path in enumerate(lis_paths):\n",
" temp = pd.read_csv(path)\n",
" old_act_dfs[path.split('/')[-1].split('.')[0]] = temp\n",
" print(path.split('/')[-1].split('.')[0], temp.shape)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 175
},
"id": "M4VAgtbydH92",
"outputId": "a84701ef-4cd7-4f52-fe25-9b93879af845"
},
"outputs": [
{
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"repr_error": "0",
"type": "dataframe"
},
"text/html": [
"\n",
" <div id=\"df-5746809f-f4de-4512-bde3-807e101f6df6\" 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>timestamp</th>\n",
" <th>back_x</th>\n",
" <th>back_y</th>\n",
" <th>back_z</th>\n",
" <th>thigh_x</th>\n",
" <th>thigh_y</th>\n",
" <th>thigh_z</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>43422</th>\n",
" <td>2021-06-11 10:39:17.958</td>\n",
" <td>-0.661377</td>\n",
" <td>-0.079346</td>\n",
" <td>0.726562</td>\n",
" <td>0.004395</td>\n",
" <td>0.000977</td>\n",
" <td>-0.999268</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41473</th>\n",
" <td>2021-06-11 10:38:38.979</td>\n",
" <td>-0.676758</td>\n",
" <td>-0.063965</td>\n",
" <td>0.744385</td>\n",
" <td>0.004395</td>\n",
" <td>0.000977</td>\n",
" <td>-0.999268</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>131309</th>\n",
" <td>2021-06-11 11:09:27.259</td>\n",
" <td>-0.818848</td>\n",
" <td>0.386963</td>\n",
" <td>-0.437256</td>\n",
" <td>-2.290771</td>\n",
" <td>-0.662598</td>\n",
" <td>-0.659912</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8824</th>\n",
" <td>2021-06-11 10:27:39.598</td>\n",
" <td>-0.630859</td>\n",
" <td>-0.189453</td>\n",
" <td>0.748291</td>\n",
" <td>-0.012207</td>\n",
" <td>0.078613</td>\n",
" <td>-0.981201</td>\n",
" <td>7</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-5746809f-f4de-4512-bde3-807e101f6df6')\"\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 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\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",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\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-5746809f-f4de-4512-bde3-807e101f6df6 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-5746809f-f4de-4512-bde3-807e101f6df6');\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",
"\n",
"\n",
"<div id=\"df-b4bc2770-1a6b-4afe-bb51-2682723cf90a\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b4bc2770-1a6b-4afe-bb51-2682723cf90a')\"\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",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-b4bc2770-1a6b-4afe-bb51-2682723cf90a button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" timestamp back_x back_y back_z thigh_x \\\n",
"43422 2021-06-11 10:39:17.958 -0.661377 -0.079346 0.726562 0.004395 \n",
"41473 2021-06-11 10:38:38.979 -0.676758 -0.063965 0.744385 0.004395 \n",
"131309 2021-06-11 11:09:27.259 -0.818848 0.386963 -0.437256 -2.290771 \n",
"8824 2021-06-11 10:27:39.598 -0.630859 -0.189453 0.748291 -0.012207 \n",
"\n",
" thigh_y thigh_z label \n",
"43422 0.000977 -0.999268 7 \n",
"41473 0.000977 -0.999268 7 \n",
"131309 -0.662598 -0.659912 1 \n",
"8824 0.078613 -0.981201 7 "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_keys = list(old_act_dfs.keys()) # getting list of all keys from dictionary\n",
"old_act_dfs['518'].sample(4)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3v-V1eW33dMj"
},
"source": [
"Check all null values\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "VOiDKS2MdOJy",
"outputId": "37ed5986-7182-448a-c5c3-50bf882cd55e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"511 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"517 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"502 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"516 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"513 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"510 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"505 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"507 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"508 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"503 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"504 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"514 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"509 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"501 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"515 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"506 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"512 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n",
"518 timestamp 0\n",
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64\n"
]
}
],
"source": [
"for key,value in old_act_dfs.items():\n",
" print(key,value.isnull().sum())"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tG4Bpr5WdgWF"
},
"source": [
"No Null values are present the data is cleaned"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "y17GrSJUduFs"
},
"source": [
"No need of timestamp"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"id": "SiUBzHo6doDp"
},
"outputs": [],
"source": [
"for key,value in old_act_dfs.items():\n",
" old_act_dfs[key] = value.drop('timestamp',axis='columns')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HyJHB7cfd42B"
},
"source": [
"Combining all dataset"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "D4UtIUlnd8Gi",
"outputId": "2c8bfe0e-906d-4d8f-dd7d-bce979ac3ae0"
},
"outputs": [
{
"data": {
"text/plain": [
"back_x 0\n",
"back_y 0\n",
"back_z 0\n",
"thigh_x 0\n",
"thigh_y 0\n",
"thigh_z 0\n",
"label 0\n",
"dtype: int64"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final = old_act_dfs[df_keys[0]]\n",
"for key in df_keys[1:]:\n",
" df_final = pd.concat([df_final,old_act_dfs[key]],axis=0)\n",
"df_final.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "j2OAuMhbd_E3",
"outputId": "e9d98b87-1d7e-45c1-fd5c-b8e4ebe2a39e"
},
"outputs": [
{
"data": {
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "df_final"
},
"text/html": [
"\n",
" <div id=\"df-f97a0841-60b0-4d53-a412-f03752812e0c\" 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>back_x</th>\n",
" <th>back_y</th>\n",
" <th>back_z</th>\n",
" <th>thigh_x</th>\n",
" <th>thigh_y</th>\n",
" <th>thigh_z</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-0.976807</td>\n",
" <td>0.051758</td>\n",
" <td>0.124023</td>\n",
" <td>-0.996582</td>\n",
" <td>0.016357</td>\n",
" <td>0.047607</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>-0.986328</td>\n",
" <td>0.044434</td>\n",
" <td>0.145996</td>\n",
" <td>-0.994141</td>\n",
" <td>-0.068359</td>\n",
" <td>0.105713</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-0.983154</td>\n",
" <td>0.029541</td>\n",
" <td>0.170898</td>\n",
" <td>-0.994385</td>\n",
" <td>-0.109863</td>\n",
" <td>0.109375</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>-0.988770</td>\n",
" <td>0.036621</td>\n",
" <td>0.171143</td>\n",
" <td>-0.993408</td>\n",
" <td>-0.113037</td>\n",
" <td>0.125977</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-1.001953</td>\n",
" <td>0.057373</td>\n",
" <td>0.189697</td>\n",
" <td>-1.010742</td>\n",
" <td>-0.098877</td>\n",
" <td>0.112549</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-f97a0841-60b0-4d53-a412-f03752812e0c')\"\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 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\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",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\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-f97a0841-60b0-4d53-a412-f03752812e0c 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-f97a0841-60b0-4d53-a412-f03752812e0c');\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",
"\n",
"\n",
"<div id=\"df-07ccf109-3623-4556-b7ba-630f1cf0495c\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-07ccf109-3623-4556-b7ba-630f1cf0495c')\"\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",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-07ccf109-3623-4556-b7ba-630f1cf0495c button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" back_x back_y back_z thigh_x thigh_y thigh_z label\n",
"0 -0.976807 0.051758 0.124023 -0.996582 0.016357 0.047607 6\n",
"1 -0.986328 0.044434 0.145996 -0.994141 -0.068359 0.105713 6\n",
"2 -0.983154 0.029541 0.170898 -0.994385 -0.109863 0.109375 6\n",
"3 -0.988770 0.036621 0.171143 -0.993408 -0.113037 0.125977 6\n",
"4 -1.001953 0.057373 0.189697 -1.010742 -0.098877 0.112549 6"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.head()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zFrl4BIKeGq3",
"outputId": "8510f98f-b99c-471a-d964-9c6f832ba0b6"
},
"outputs": [
{
"data": {
"text/plain": [
"(2259597, 7)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.shape"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XAOa1yxVeZeL"
},
"source": [
"Remove duplicates values"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "OAGP9FsIecOq",
"outputId": "036cb1b6-5b77-440c-89ae-490e3d12c52e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Duplicate values in df ----> 62611\n"
]
}
],
"source": [
"print(\"Duplicate values in df ----> \",df_final.duplicated().sum())\n",
"df_final = df_final.drop_duplicates() # dropped duplicate values from dataset"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"id": "C8hE7gyuefOP"
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import plotly.graph_objects as go"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 560
},
"id": "vEhI-Kl-e8TC",
"outputId": "1f1f75f3-e7d0-4c90-d388-0b03b968d7ad"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sum of counts ---> 2196986 shape of df_final ---> (2196986, 7)\n"
]
},
{
"data": {
"text/html": [
"<html>\n",
"<head><meta charset=\"utf-8\" /></head>\n",
"<body>\n",
" <div> <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script> <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n",
" <script charset=\"utf-8\" src=\"https://cdn.plot.ly/plotly-2.24.1.min.js\"></script> <div id=\"3eb99e81-d865-44ff-a1b4-5f56b01776b0\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div> <script type=\"text/javascript\"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"3eb99e81-d865-44ff-a1b4-5f56b01776b0\")) { Plotly.newPlot( \"3eb99e81-d865-44ff-a1b4-5f56b01776b0\", [{\"hoverinfo\":\"label+percent\",\"labels\":[\"walking\",\"shiuffling\",\"stairs (ascending)\",\"stairs (descending)\",\"standing\",\"sitting\",\"lying\"],\"textfont\":{\"size\":12},\"textinfo\":\"percent\",\"values\":[1079312,66057,4560,4978,416412,445163,180504],\"type\":\"pie\"}], {\"title\":{\"text\":\"each label density in percentage (%)\"},\"template\":{\"data\":{\"histogram2dcontour\":[{\"type\":\"histogram2dcontour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"choropleth\":[{\"type\":\"choropleth\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"histogram2d\":[{\"type\":\"histogram2d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmap\":[{\"type\":\"heatmap\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmapgl\":[{\"type\":\"heatmapgl\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"contourcarpet\":[{\"type\":\"contourcarpet\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"contour\":[{\"type\":\"contour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"surface\":[{\"type\":\"surface\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"mesh3d\":[{\"type\":\"mesh3d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"parcoords\":[{\"type\":\"parcoords\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolargl\":[{\"type\":\"scatterpolargl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"scattergeo\":[{\"type\":\"scattergeo\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolar\":[{\"type\":\"scatterpolar\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"scattergl\":[{\"type\":\"scattergl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatter3d\":[{\"type\":\"scatter3d\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattermapbox\":[{\"type\":\"scattermapbox\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterternary\":[{\"type\":\"scatterternary\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattercarpet\":[{\"type\":\"scattercarpet\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}]},\"layout\":{\"autotypenumbers\":\"strict\",\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"bgcolor\":\"#E5ECF6\",\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"ternary\":{\"bgcolor\":\"#E5ECF6\",\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]]},\"xaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"yaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"geo\":{\"bgcolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"subunitcolor\":\"white\",\"showland\":true,\"showlakes\":true,\"lakecolor\":\"white\"},\"title\":{\"x\":0.05},\"mapbox\":{\"style\":\"light\"}}}}, {\"responsive\": true} ).then(function(){\n",
" \n",
"var gd = document.getElementById('3eb99e81-d865-44ff-a1b4-5f56b01776b0');\n",
"var x = new MutationObserver(function (mutations, observer) {{\n",
" var display = window.getComputedStyle(gd).display;\n",
" if (!display || display === 'none') {{\n",
" console.log([gd, 'removed!']);\n",
" Plotly.purge(gd);\n",
" observer.disconnect();\n",
" }}\n",
"}});\n",
"\n",
"// Listen for the removal of the full notebook cells\n",
"var notebookContainer = gd.closest('#notebook-container');\n",
"if (notebookContainer) {{\n",
" x.observe(notebookContainer, {childList: true});\n",
"}}\n",
"\n",
"// Listen for the clearing of the current output cell\n",
"var outputEl = gd.closest('.output');\n",
"if (outputEl) {{\n",
" x.observe(outputEl, {childList: true});\n",
"}}\n",
"\n",
" }) }; </script> </div>\n",
"</body>\n",
"</html>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"labels_dic = {1:'walking',3:\"shiuffling\",4:\"stairs (ascending)\",5:\"stairs (descending)\",6:\"standing\",7:\"sitting\",8:\"lying\"}\n",
"labels_key = list(labels_dic.keys()) # convert to list, to make it easy to present through graph\n",
"labels_values = list(labels_dic.values()) # convert to list, to make it easy to present through graph\n",
"counts = []\n",
"\n",
"for label,value in zip(labels_key,labels_values):\n",
" counts.append(len(df_final[df_final['label']==label]))\n",
"\n",
"print(\"sum of counts ---> \",sum(counts),\"shape of df_final ---> \",df_final.shape)\n",
"\n",
"# Creating the pie chart trace\n",
"trace = go.Pie(labels=labels_values, values=counts, hoverinfo='label+percent',\n",
" textinfo='percent', textfont_size=12)\n",
"\n",
"# Creating the layout\n",
"layout = go.Layout(title='each label density in percentage (%)')\n",
"# Creating the figure\n",
"fig = go.Figure(data=[trace], layout=layout)\n",
"\n",
"# Displaying the figure\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 542
},
"id": "2k9djhR_gSHa",
"outputId": "b6fd765f-45a1-4ac4-caba-25c5ea7013f2"
},
"outputs": [
{
"data": {
"text/html": [
"<html>\n",
"<head><meta charset=\"utf-8\" /></head>\n",
"<body>\n",
" <div> <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script> <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n",
" <script charset=\"utf-8\" src=\"https://cdn.plot.ly/plotly-2.24.1.min.js\"></script> <div id=\"bf2d1285-c084-49d0-b639-91d1774e7408\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div> <script type=\"text/javascript\"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"bf2d1285-c084-49d0-b639-91d1774e7408\")) { Plotly.newPlot( \"bf2d1285-c084-49d0-b639-91d1774e7408\", [{\"x\":[\"walking\",\"shiuffling\",\"stairs (ascending)\",\"stairs (descending)\",\"standing\",\"sitting\",\"lying\"],\"y\":[1079312,66057,4560,4978,416412,445163,180504],\"type\":\"bar\"}], {\"title\":{\"text\":\"Counts of all labels\"},\"template\":{\"data\":{\"histogram2dcontour\":[{\"type\":\"histogram2dcontour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"choropleth\":[{\"type\":\"choropleth\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"histogram2d\":[{\"type\":\"histogram2d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmap\":[{\"type\":\"heatmap\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmapgl\":[{\"type\":\"heatmapgl\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"contourcarpet\":[{\"type\":\"contourcarpet\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"contour\":[{\"type\":\"contour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"surface\":[{\"type\":\"surface\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"mesh3d\":[{\"type\":\"mesh3d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"parcoords\":[{\"type\":\"parcoords\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolargl\":[{\"type\":\"scatterpolargl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"scattergeo\":[{\"type\":\"scattergeo\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolar\":[{\"type\":\"scatterpolar\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"scattergl\":[{\"type\":\"scattergl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatter3d\":[{\"type\":\"scatter3d\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattermapbox\":[{\"type\":\"scattermapbox\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterternary\":[{\"type\":\"scatterternary\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattercarpet\":[{\"type\":\"scattercarpet\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}]},\"layout\":{\"autotypenumbers\":\"strict\",\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"bgcolor\":\"#E5ECF6\",\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"ternary\":{\"bgcolor\":\"#E5ECF6\",\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]]},\"xaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"yaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"geo\":{\"bgcolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"subunitcolor\":\"white\",\"showland\":true,\"showlakes\":true,\"lakecolor\":\"white\"},\"title\":{\"x\":0.05},\"mapbox\":{\"style\":\"light\"}}}}, {\"responsive\": true} ).then(function(){\n",
" \n",
"var gd = document.getElementById('bf2d1285-c084-49d0-b639-91d1774e7408');\n",
"var x = new MutationObserver(function (mutations, observer) {{\n",
" var display = window.getComputedStyle(gd).display;\n",
" if (!display || display === 'none') {{\n",
" console.log([gd, 'removed!']);\n",
" Plotly.purge(gd);\n",
" observer.disconnect();\n",
" }}\n",
"}});\n",
"\n",
"// Listen for the removal of the full notebook cells\n",
"var notebookContainer = gd.closest('#notebook-container');\n",
"if (notebookContainer) {{\n",
" x.observe(notebookContainer, {childList: true});\n",
"}}\n",
"\n",
"// Listen for the clearing of the current output cell\n",
"var outputEl = gd.closest('.output');\n",
"if (outputEl) {{\n",
" x.observe(outputEl, {childList: true});\n",
"}}\n",
"\n",
" }) }; </script> </div>\n",
"</body>\n",
"</html>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"trace = go.Bar(x=labels_values, y=counts)\n",
"\n",
"# Creating the layout\n",
"layout = go.Layout(title='Counts of all labels')\n",
"\n",
"# Creating the figure\n",
"fig = go.Figure(data=[trace], layout=layout)\n",
"\n",
"# Displaying the figure\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1bIQTH3tgaF3",
"outputId": "3e97e5f7-e98e-497c-ebff-f636615f240e"
},
"outputs": [
{
"data": {
"text/plain": [
"((1647739, 6), (549247, 6), (1647739,), (549247,))"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(df_final.drop('label',axis='columns'),df_final['label'],stratify=df_final['label'])\n",
"X_train.shape,X_test.shape,y_train.shape,y_test.shape"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"id": "7dUdehwPggh9"
},
"outputs": [],
"source": [
"from sklearn.model_selection import cross_val_score\n",
"from sklearn.ensemble import RandomForestClassifier,BaggingClassifier\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"\n",
"from sklearn.metrics import confusion_matrix,classification_report\n",
"from seaborn import heatmap as hp"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7Fm97yM7g7bm",
"outputId": "2407f548-c935-4cd0-ad3b-e8c568f3d975"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LogisticRegression()\n",
"traning score ----> 0.7617875161054026\n",
"testing score ----> 0.7613277814899307\n",
"DecisionTreeClassifier()\n",
"traning score ----> 1.0\n",
"testing score ----> 0.8970153683133454\n",
"RandomForestClassifier()\n",
"traning score ----> 0.9999854345864242\n",
"testing score ----> 0.9352932287295151\n"
]
}
],
"source": [
"algos = [LogisticRegression(),DecisionTreeClassifier(),RandomForestClassifier()]\n",
"models_trained = []\n",
"for algo in algos:\n",
" print(str(algo))\n",
" temp = algo.fit(X_train,y_train)\n",
" models_trained.append(temp)\n",
" print(\"traning score ----> \",temp.score(X_train,y_train))\n",
" print(\"testing score ----> \",temp.score(X_test,y_test))"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 472
},
"id": "92U7jkLkloiU",
"outputId": "c87643be-d949-4ab8-f7d7-c5c4db0b60f2"
},
"outputs": [
{
"data": {
"image/png": "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VFVVmYyMjLDjFRUVo64lIjJWtKZG5Aprb28nLi6O4eFhgsEg9913H88++yyrV68mMzMzbB3NkSNH6O3txeVyhV1jcHCQvr4+zp07R39/Pzk5OaFjEyZMYN68eaPegvqVz+cjJiaGBQsWXHbm3t5eLly4wB133BE2PjQ0RFZWFgDHjx8PywGQm5t72XOIiPxdKjUiV1heXh51dXXY7XaSkpKYMOG/f4axsbFh5w4MDDB37ly2b98+6jpTpkz5S/M7nc4//ZiBgQEA9uzZQ3Jyctgxh8Pxl3KIiESaSo3IFRYbG0tKSsplnZudnc0777zD1KlTueaaa373nMTERD755BNuu+02AC5evMihQ4fIzs7+3fMzMzMJBoN0d3ezaNGiUcd/vVM0MjISGsvIyMDhcPD111//4R2e9PR0du/eHTb28ccf//8fUkQkQrRQWOQfbMWKFVx33XUUFhZy4MABTp48SVdXF2vWrOGbb74BoLS0lOeff562tja++OILVq1adcnPmLnxxhvxer0UFxfT1tYWumZLSwsAHo8Hm81Ge3s733//PQMDA7hcLsrLyykrK2Pbtm309fVx+PBhXnnlFbZt2wbAI488wpdffsn69evx+/00NzfT1NQ01k+RiEiISo3IP9ikSZPYv38/brebJUuWkJ6eTklJCYODg6E7N48//jgrV67E6/WSm5uLy+Xi7rvvvuR16+rquOeee1i1ahVpaWk8/PDD/PzzzwAkJyezYcMGKisrmTZtGo899hgAGzdu5Omnn6a2tpb09HTy8/PZs2cPM2bMAMDtdtPa2kpbWxtz5syhvr6empqaMXx2RETC2cwfrSYUERERGUd0p0ZERESigkqNiIiIRAWVGhEREYkKKjUiIiISFVRqREREJCqo1IiIiEhUUKkRERGRqKBSIyIiIlFBpUZERESigkqNiIiIRAWVGhEREYkKKjUiIiISFf4DC6d579R6264AAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"final_model = models_trained[-1]\n",
"y_pred = final_model.predict(np.array(X_test)) # Random forest trained model prediction on test data\n",
"cm = confusion_matrix(y_test,y_pred)\n",
"\n",
"hp(cm,annot=True,fmt=\"\",xticklabels=labels_key,yticklabels=labels_key)\n",
"plt.title(\"Confusion matrix for elders activity monitoring\")\n",
"plt.xlabel(\"Predicted\")\n",
"plt.ylabel(\"True\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0i8trLrBl2-A",
"outputId": "780190b0-fd9e-4eeb-9013-4ee1b7bc68d4"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 1 0.92 0.97 0.94 269828\n",
" 3 0.66 0.07 0.13 16514\n",
" 4 0.85 0.10 0.18 1140\n",
" 5 0.85 0.05 0.09 1245\n",
" 6 0.89 0.90 0.90 104103\n",
" 7 1.00 1.00 1.00 111291\n",
" 8 1.00 1.00 1.00 45126\n",
"\n",
" accuracy 0.94 549247\n",
" macro avg 0.88 0.58 0.60 549247\n",
"weighted avg 0.93 0.94 0.92 549247\n",
"\n"
]
}
],
"source": [
"cr = classification_report(y_test,y_pred)\n",
"print(cr)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "216kvdL5l46W",
"outputId": "2e6fcfcd-6bf8-4179-be24-dbcb6970320a"
},
"outputs": [
{
"data": {
"text/plain": [
"['elderly(human) activity monitoring system']"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import joblib\n",
"\n",
"joblib.dump(final_model,\"elderly(human) activity monitoring system\")"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"id": "z4rbuFQAmYEp"
},
"outputs": [],
"source": [
"# how to predict activity on new data\n"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "P8vZTni3mf3u",
"outputId": "4a383e60-7bc1-4355-ed7b-6c1d215d23bb"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"standing\n"
]
}
],
"source": [
"# prompt: # how to predict activity on new data\n",
"\n",
"new_data = pd.read_csv('/content/drive/MyDrive/new.csv')\n",
"new_data = new_data.drop('timestamp',axis='columns')\n",
"prediction = final_model.predict(np.array(new_data))\n",
"for i in prediction:\n",
" print(labels_dic[i])\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "iKmgZv4lNdLh"
},
"outputs": [],
"source": [
"# prompt: make prediction by the already saved model\n",
"\n",
"# Load the saved model\n",
"loaded_model = joblib.load(\"/content/elderly(human) activity monitoring system\")\n",
"\n",
"# New data to predict on\n",
"new_data = pd.read_csv(\"/content/drive/MyDrive/new.csv\")\n",
"\n",
"# Drop the timestamp column\n",
"new_data = new_data.drop(\"timestamp\", axis=1)\n",
"\n",
"# Make predictions\n",
"predictions = loaded_model.predict(np.array(new_data))\n",
"\n",
"# Print the predicted activities\n",
"for prediction in predictions:\n",
" print(labels_dic[prediction])\n"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9nAwq033JFoP",
"outputId": "924b5727-cce4-4eb3-cfcf-9c9831cd101f"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"51492/51492 [==============================] - 452s 9ms/step - loss: 0.3250 - accuracy: 0.8867\n",
"Epoch 2/10\n",
"51492/51492 [==============================] - 429s 8ms/step - loss: 0.2592 - accuracy: 0.9161\n",
"Epoch 3/10\n",
"51492/51492 [==============================] - 423s 8ms/step - loss: 0.2476 - accuracy: 0.9202\n",
"Epoch 4/10\n",
"51492/51492 [==============================] - 438s 9ms/step - loss: 0.2419 - accuracy: 0.9215\n",
"Epoch 5/10\n",
"51492/51492 [==============================] - 435s 8ms/step - loss: 0.2375 - accuracy: 0.9228\n",
"Epoch 6/10\n",
"51492/51492 [==============================] - 426s 8ms/step - loss: 0.2349 - accuracy: 0.9235\n",
"Epoch 7/10\n",
"51492/51492 [==============================] - 428s 8ms/step - loss: 0.2327 - accuracy: 0.9241\n",
"Epoch 8/10\n",
"51492/51492 [==============================] - 431s 8ms/step - loss: 0.2312 - accuracy: 0.9246\n",
"Epoch 9/10\n",
"51492/51492 [==============================] - 429s 8ms/step - loss: 0.2297 - accuracy: 0.9250\n",
"Epoch 10/10\n",
"51492/51492 [==============================] - 432s 8ms/step - loss: 0.2286 - accuracy: 0.9255\n"
]
},
{
"data": {
"text/plain": [
"<keras.src.callbacks.History at 0x7e7dea93f8e0>"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# prompt: run lstm on this dataset\n",
"\n",
"import tensorflow as tf\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import LSTM, Dense, Dropout\n",
"from sklearn.preprocessing import LabelEncoder\n",
"\n",
"# Ensure labels start from 0 and are consecutive\n",
"label_encoder = LabelEncoder()\n",
"y_train_encoded = label_encoder.fit_transform(y_train)\n",
"\n",
"# Define the LSTM model\n",
"model = Sequential()\n",
"model.add(LSTM(128, return_sequences=True, input_shape=(X_train.shape[1], 1)))\n",
"model.add(Dropout(0.2))\n",
"model.add(LSTM(64, return_sequences=True))\n",
"model.add(Dropout(0.2))\n",
"model.add(LSTM(32))\n",
"model.add(Dropout(0.2))\n",
"model.add(Dense(32, activation='relu'))\n",
"model.add(Dense(len(labels_key), activation='softmax'))\n",
"\n",
"# Compile the model\n",
"model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n",
"\n",
"# Train the model using encoded labels\n",
"model.fit(X_train, y_train_encoded, epochs=10, batch_size=32)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Cs7GPq0Gx6Uc",
"outputId": "b8ce2c26-d378-445c-fb1d-e7cbeebc00ab"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"17164/17164 [==============================] - 61s 4ms/step\n",
" precision recall f1-score support\n",
"\n",
" 1 0.91 0.97 0.94 269828\n",
" 3 0.59 0.01 0.01 16514\n",
" 4 0.68 0.05 0.10 1140\n",
" 5 0.41 0.01 0.01 1245\n",
" 6 0.87 0.89 0.88 104103\n",
" 7 1.00 1.00 1.00 111291\n",
" 8 1.00 1.00 1.00 45126\n",
"\n",
" accuracy 0.93 549247\n",
" macro avg 0.78 0.56 0.56 549247\n",
"weighted avg 0.92 0.93 0.91 549247\n",
"\n"
]
}
],
"source": [
"from sklearn.metrics import classification_report\n",
"\n",
"# Make predictions on the test set\n",
"y_pred_encoded = model.predict(X_test)\n",
"y_pred = y_pred_encoded.argmax(axis=1)\n",
"\n",
"# Decode the predicted and actual labels\n",
"y_pred_decoded = label_encoder.inverse_transform(y_pred)\n",
"y_test_decoded = label_encoder.inverse_transform(label_encoder.transform(y_test))\n",
"\n",
"# Print classification report\n",
"print(classification_report(y_test_decoded, y_pred_decoded))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"id": "yCXN2pGQagwK"
},
"outputs": [],
"source": [
"# prompt: save the lstm model\n",
"\n",
"model.save(\"/content/drive/MyDrive/lstm_model.h5\")\n"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"id": "w8lwGq-uzH6Z"
},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import LSTM, Dense, Dropout\n",
"from sklearn.preprocessing import LabelEncoder\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "fT8n-6IEaqhh",
"outputId": "27761993-1769-4ced-cc5f-c0cbe38cc44e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1/1 [==============================] - 2s 2s/step\n",
"standing\n"
]
}
],
"source": [
"# prompt: get prediction from above saved lstm model\n",
"\n",
"# Load the saved LSTM model\n",
"loaded_model = tf.keras.models.load_model(\"/content/drive/MyDrive/lstm_model.h5\")\n",
"\n",
"# New data to predict on\n",
"new_data = pd.read_csv(\"/content/drive/MyDrive/new.csv\")\n",
"\n",
"# Drop the timestamp column\n",
"new_data = new_data.drop(\"timestamp\", axis=1)\n",
"\n",
"# Make predictions\n",
"predictions = loaded_model.predict(np.array(new_data))\n",
"\n",
"# Print the predicted activities\n",
"for prediction in predictions:\n",
" predicted_label = labels_key[np.argmax(prediction)]\n",
" print(labels_dic[predicted_label])\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yVsZSI68SYt8",
"outputId": "958babe4-a8c6-43ca-9e61-c30cdf3456d8"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.2.2\n"
]
}
],
"source": [
"import sklearn\n",
"print(sklearn.__version__)\n"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"id": "K_rpRjmV0UwB"
},
"outputs": [],
"source": [
"!pip freeze > requirements.txt"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "u_svcdB80YzN",
"outputId": "05e1547b-5eb3-4f2d-e7a5-59db8bde5d5e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"absl-py==1.4.0\n",
"aiohttp==3.9.5\n",
"aiosignal==1.3.1\n",
"alabaster==0.7.16\n",
"albumentations==1.3.1\n",
"altair==4.2.2\n",
"annotated-types==0.7.0\n",
"anyio==3.7.1\n",
"argon2-cffi==23.1.0\n",
"argon2-cffi-bindings==21.2.0\n",
"array_record==0.5.1\n",
"arviz==0.15.1\n",
"astropy==5.3.4\n",
"astunparse==1.6.3\n",
"async-timeout==4.0.3\n",
"atpublic==4.1.0\n",
"attrs==23.2.0\n",
"audioread==3.0.1\n",
"autograd==1.6.2\n",
"Babel==2.15.0\n",
"backcall==0.2.0\n",
"beautifulsoup4==4.12.3\n",
"bidict==0.23.1\n",
"bigframes==1.8.0\n",
"bleach==6.1.0\n",
"blinker==1.4\n",
"blis==0.7.11\n",
"blosc2==2.0.0\n",
"bokeh==3.3.4\n",
"bqplot==0.12.43\n",
"branca==0.7.2\n",
"build==1.2.1\n",
"CacheControl==0.14.0\n",
"cachetools==5.3.3\n",
"catalogue==2.0.10\n",
"certifi==2024.6.2\n",
"cffi==1.16.0\n",
"chardet==5.2.0\n",
"charset-normalizer==3.3.2\n",
"chex==0.1.86\n",
"click==8.1.7\n",
"click-plugins==1.1.1\n",
"cligj==0.7.2\n",
"cloudpathlib==0.18.1\n",
"cloudpickle==2.2.1\n",
"cmake==3.27.9\n",
"cmdstanpy==1.2.4\n",
"colorcet==3.1.0\n",
"colorlover==0.3.0\n",
"colour==0.1.5\n",
"community==1.0.0b1\n",
"confection==0.1.5\n",
"cons==0.4.6\n",
"contextlib2==21.6.0\n",
"contourpy==1.2.1\n",
"cryptography==42.0.8\n",
"cuda-python==12.2.1\n",
"cudf-cu12 @ https://pypi.nvidia.com/cudf-cu12/cudf_cu12-24.4.1-cp310-cp310-manylinux_2_28_x86_64.whl#sha256=57366e7ef09dc63e0b389aff20df6c37d91e2790065861ee31a4720149f5b694\n",
"cufflinks==0.17.3\n",
"cupy-cuda12x==12.2.0\n",
"cvxopt==1.3.2\n",
"cvxpy==1.3.4\n",
"cycler==0.12.1\n",
"cymem==2.0.8\n",
"Cython==3.0.10\n",
"dask==2023.8.1\n",
"datascience==0.17.6\n",
"db-dtypes==1.2.0\n",
"dbus-python==1.2.18\n",
"debugpy==1.6.6\n",
"decorator==4.4.2\n",
"defusedxml==0.7.1\n",
"distributed==2023.8.1\n",
"distro==1.7.0\n",
"dlib==19.24.4\n",
"dm-tree==0.1.8\n",
"docstring_parser==0.16\n",
"docutils==0.18.1\n",
"dopamine_rl==4.0.9\n",
"duckdb==0.10.3\n",
"earthengine-api==0.1.407\n",
"easydict==1.13\n",
"ecos==2.0.14\n",
"editdistance==0.6.2\n",
"eerepr==0.0.4\n",
"en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl#sha256=86cc141f63942d4b2c5fcee06630fd6f904788d2f0ab005cce45aadb8fb73889\n",
"entrypoints==0.4\n",
"et-xmlfile==1.1.0\n",
"etils==1.7.0\n",
"etuples==0.3.9\n",
"exceptiongroup==1.2.1\n",
"fastai==2.7.15\n",
"fastcore==1.5.46\n",
"fastdownload==0.0.7\n",
"fastjsonschema==2.20.0\n",
"fastprogress==1.0.3\n",
"fastrlock==0.8.2\n",
"filelock==3.15.1\n",
"fiona==1.9.6\n",
"firebase-admin==5.3.0\n",
"Flask==2.2.5\n",
"flatbuffers==24.3.25\n",
"flax==0.8.4\n",
"folium==0.14.0\n",
"fonttools==4.53.0\n",
"frozendict==2.4.4\n",
"frozenlist==1.4.1\n",
"fsspec==2023.6.0\n",
"future==0.18.3\n",
"gast==0.5.4\n",
"gcsfs==2023.6.0\n",
"GDAL==3.6.4\n",
"gdown==5.1.0\n",
"geemap==0.32.1\n",
"gensim==4.3.2\n",
"geocoder==1.38.1\n",
"geographiclib==2.0\n",
"geopandas==0.13.2\n",
"geopy==2.3.0\n",
"gin-config==0.5.0\n",
"glob2==0.7\n",
"google==2.0.3\n",
"google-ai-generativelanguage==0.6.4\n",
"google-api-core==2.11.1\n",
"google-api-python-client==2.84.0\n",
"google-auth==2.27.0\n",
"google-auth-httplib2==0.1.1\n",
"google-auth-oauthlib==1.2.0\n",
"google-cloud-aiplatform==1.56.0\n",
"google-cloud-bigquery==3.21.0\n",
"google-cloud-bigquery-connection==1.12.1\n",
"google-cloud-bigquery-storage==2.25.0\n",
"google-cloud-core==2.3.3\n",
"google-cloud-datastore==2.15.2\n",
"google-cloud-firestore==2.11.1\n",
"google-cloud-functions==1.13.3\n",
"google-cloud-iam==2.15.0\n",
"google-cloud-language==2.13.3\n",
"google-cloud-resource-manager==1.12.3\n",
"google-cloud-storage==2.8.0\n",
"google-cloud-translate==3.11.3\n",
"google-colab @ file:///colabtools/dist/google-colab-1.0.0.tar.gz#sha256=b065b56e03e174042256860688869a922c200f064b60c144ebaa786a3c20a574\n",
"google-crc32c==1.5.0\n",
"google-generativeai==0.5.4\n",
"google-pasta==0.2.0\n",
"google-resumable-media==2.7.1\n",
"googleapis-common-protos==1.63.1\n",
"googledrivedownloader==0.4\n",
"graphviz==0.20.3\n",
"greenlet==3.0.3\n",
"grpc-google-iam-v1==0.13.0\n",
"grpcio==1.64.1\n",
"grpcio-status==1.48.2\n",
"gspread==6.0.2\n",
"gspread-dataframe==3.3.1\n",
"gym==0.25.2\n",
"gym-notices==0.0.8\n",
"h5netcdf==1.3.0\n",
"h5py==3.9.0\n",
"holidays==0.51\n",
"holoviews==1.17.1\n",
"html5lib==1.1\n",
"httpimport==1.3.1\n",
"httplib2==0.22.0\n",
"huggingface-hub==0.23.4\n",
"humanize==4.7.0\n",
"hyperopt==0.2.7\n",
"ibis-framework==8.0.0\n",
"idna==3.7\n",
"imageio==2.31.6\n",
"imageio-ffmpeg==0.5.1\n",
"imagesize==1.4.1\n",
"imbalanced-learn==0.10.1\n",
"imgaug==0.4.0\n",
"immutabledict==4.2.0\n",
"importlib_metadata==7.1.0\n",
"importlib_resources==6.4.0\n",
"imutils==0.5.4\n",
"inflect==7.0.0\n",
"iniconfig==2.0.0\n",
"intel-openmp==2023.2.4\n",
"ipyevents==2.0.2\n",
"ipyfilechooser==0.6.0\n",
"ipykernel==5.5.6\n",
"ipyleaflet==0.18.2\n",
"ipython==7.34.0\n",
"ipython-genutils==0.2.0\n",
"ipython-sql==0.5.0\n",
"ipytree==0.2.2\n",
"ipywidgets==7.7.1\n",
"itsdangerous==2.2.0\n",
"jax==0.4.26\n",
"jaxlib @ https://storage.googleapis.com/jax-releases/cuda12/jaxlib-0.4.26+cuda12.cudnn89-cp310-cp310-manylinux2014_x86_64.whl#sha256=813cf1fe3e7ca4dbf5327d6e7b4fc8521e92d8bba073ee645ae0d5d036a25750\n",
"jeepney==0.7.1\n",
"jellyfish==1.0.4\n",
"jieba==0.42.1\n",
"Jinja2==3.1.4\n",
"joblib==1.4.2\n",
"jsonpickle==3.2.1\n",
"jsonschema==4.19.2\n",
"jsonschema-specifications==2023.12.1\n",
"jupyter-client==6.1.12\n",
"jupyter-console==6.1.0\n",
"jupyter-server==1.24.0\n",
"jupyter_core==5.7.2\n",
"jupyterlab_pygments==0.3.0\n",
"jupyterlab_widgets==3.0.11\n",
"kaggle==1.6.14\n",
"kagglehub==0.2.5\n",
"keras==2.15.0\n",
"keyring==23.5.0\n",
"kiwisolver==1.4.5\n",
"langcodes==3.4.0\n",
"language_data==1.2.0\n",
"launchpadlib==1.10.16\n",
"lazr.restfulclient==0.14.4\n",
"lazr.uri==1.0.6\n",
"lazy_loader==0.4\n",
"libclang==18.1.1\n",
"librosa==0.10.2.post1\n",
"lightgbm==4.1.0\n",
"linkify-it-py==2.0.3\n",
"llvmlite==0.41.1\n",
"locket==1.0.0\n",
"logical-unification==0.4.6\n",
"lxml==4.9.4\n",
"malloy==2023.1067\n",
"marisa-trie==1.2.0\n",
"Markdown==3.6\n",
"markdown-it-py==3.0.0\n",
"MarkupSafe==2.1.5\n",
"matplotlib==3.7.1\n",
"matplotlib-inline==0.1.7\n",
"matplotlib-venn==0.11.10\n",
"mdit-py-plugins==0.4.1\n",
"mdurl==0.1.2\n",
"miniKanren==1.0.3\n",
"missingno==0.5.2\n",
"mistune==0.8.4\n",
"mizani==0.9.3\n",
"mkl==2023.2.0\n",
"ml-dtypes==0.2.0\n",
"mlxtend==0.22.0\n",
"more-itertools==10.1.0\n",
"moviepy==1.0.3\n",
"mpmath==1.3.0\n",
"msgpack==1.0.8\n",
"multidict==6.0.5\n",
"multipledispatch==1.0.0\n",
"multitasking==0.0.11\n",
"murmurhash==1.0.10\n",
"music21==9.1.0\n",
"natsort==8.4.0\n",
"nbclassic==1.1.0\n",
"nbclient==0.10.0\n",
"nbconvert==6.5.4\n",
"nbformat==5.10.4\n",
"nest-asyncio==1.6.0\n",
"networkx==3.3\n",
"nibabel==4.0.2\n",
"nltk==3.8.1\n",
"notebook==6.5.5\n",
"notebook_shim==0.2.4\n",
"numba==0.58.1\n",
"numexpr==2.10.0\n",
"numpy==1.25.2\n",
"nvtx==0.2.10\n",
"oauth2client==4.1.3\n",
"oauthlib==3.2.2\n",
"opencv-contrib-python==4.8.0.76\n",
"opencv-python==4.8.0.76\n",
"opencv-python-headless==4.10.0.84\n",
"openpyxl==3.1.4\n",
"opt-einsum==3.3.0\n",
"optax==0.2.2\n",
"orbax-checkpoint==0.4.4\n",
"osqp==0.6.2.post8\n",
"packaging==24.1\n",
"pandas==2.0.3\n",
"pandas-datareader==0.10.0\n",
"pandas-gbq==0.19.2\n",
"pandas-stubs==2.0.3.230814\n",
"pandocfilters==1.5.1\n",
"panel==1.3.8\n",
"param==2.1.0\n",
"parso==0.8.4\n",
"parsy==2.1\n",
"partd==1.4.2\n",
"pathlib==1.0.1\n",
"patsy==0.5.6\n",
"peewee==3.17.5\n",
"pexpect==4.9.0\n",
"pickleshare==0.7.5\n",
"Pillow==9.4.0\n",
"pip-tools==6.13.0\n",
"platformdirs==4.2.2\n",
"plotly==5.15.0\n",
"plotnine==0.12.4\n",
"pluggy==1.5.0\n",
"polars==0.20.2\n",
"pooch==1.8.2\n",
"portpicker==1.5.2\n",
"prefetch-generator==1.0.3\n",
"preshed==3.0.9\n",
"prettytable==3.10.0\n",
"proglog==0.1.10\n",
"progressbar2==4.2.0\n",
"prometheus_client==0.20.0\n",
"promise==2.3\n",
"prompt_toolkit==3.0.47\n",
"prophet==1.1.5\n",
"proto-plus==1.23.0\n",
"protobuf==3.20.3\n",
"psutil==5.9.5\n",
"psycopg2==2.9.9\n",
"ptyprocess==0.7.0\n",
"py-cpuinfo==9.0.0\n",
"py4j==0.10.9.7\n",
"pyarrow==14.0.2\n",
"pyarrow-hotfix==0.6\n",
"pyasn1==0.6.0\n",
"pyasn1_modules==0.4.0\n",
"pycocotools==2.0.8\n",
"pycparser==2.22\n",
"pydantic==2.7.4\n",
"pydantic_core==2.18.4\n",
"pydata-google-auth==1.8.2\n",
"pydot==1.4.2\n",
"pydot-ng==2.0.0\n",
"pydotplus==2.0.2\n",
"PyDrive==1.3.1\n",
"PyDrive2==1.6.3\n",
"pyerfa==2.0.1.4\n",
"pygame==2.5.2\n",
"Pygments==2.16.1\n",
"PyGObject==3.42.1\n",
"PyJWT==2.3.0\n",
"pymc==5.10.4\n",
"pymystem3==0.2.0\n",
"pynvjitlink-cu12==0.2.4\n",
"PyOpenGL==3.1.7\n",
"pyOpenSSL==24.1.0\n",
"pyparsing==3.1.2\n",
"pyperclip==1.8.2\n",
"pyproj==3.6.1\n",
"pyproject_hooks==1.1.0\n",
"pyshp==2.3.1\n",
"PySocks==1.7.1\n",
"pytensor==2.18.6\n",
"pytest==7.4.4\n",
"python-apt @ file:///backend-container/containers/python_apt-0.0.0-cp310-cp310-linux_x86_64.whl#sha256=b209c7165d6061963abe611492f8c91c3bcef4b7a6600f966bab58900c63fefa\n",
"python-box==7.2.0\n",
"python-dateutil==2.8.2\n",
"python-louvain==0.16\n",
"python-slugify==8.0.4\n",
"python-utils==3.8.2\n",
"pytz==2023.4\n",
"pyviz_comms==3.0.2\n",
"PyWavelets==1.6.0\n",
"PyYAML==6.0.1\n",
"pyzmq==24.0.1\n",
"qdldl==0.1.7.post3\n",
"qudida==0.0.4\n",
"ratelim==0.1.6\n",
"referencing==0.35.1\n",
"regex==2024.5.15\n",
"requests==2.31.0\n",
"requests-oauthlib==1.3.1\n",
"requirements-parser==0.9.0\n",
"rich==13.7.1\n",
"rmm-cu12==24.4.0\n",
"rpds-py==0.18.1\n",
"rpy2==3.4.2\n",
"rsa==4.9\n",
"safetensors==0.4.3\n",
"scikit-image==0.19.3\n",
"scikit-learn==1.2.2\n",
"scipy==1.11.4\n",
"scooby==0.10.0\n",
"scs==3.2.4.post2\n",
"seaborn==0.13.1\n",
"SecretStorage==3.3.1\n",
"Send2Trash==1.8.3\n",
"sentencepiece==0.1.99\n",
"shapely==2.0.4\n",
"shellingham==1.5.4\n",
"simple_parsing==0.1.5\n",
"six==1.16.0\n",
"sklearn-pandas==2.2.0\n",
"smart-open==7.0.4\n",
"sniffio==1.3.1\n",
"snowballstemmer==2.2.0\n",
"sortedcontainers==2.4.0\n",
"soundfile==0.12.1\n",
"soupsieve==2.5\n",
"soxr==0.3.7\n",
"spacy==3.7.5\n",
"spacy-legacy==3.0.12\n",
"spacy-loggers==1.0.5\n",
"Sphinx==5.0.2\n",
"sphinxcontrib-applehelp==1.0.8\n",
"sphinxcontrib-devhelp==1.0.6\n",
"sphinxcontrib-htmlhelp==2.0.5\n",
"sphinxcontrib-jsmath==1.0.1\n",
"sphinxcontrib-qthelp==1.0.7\n",
"sphinxcontrib-serializinghtml==1.1.10\n",
"SQLAlchemy==2.0.30\n",
"sqlglot==20.11.0\n",
"sqlparse==0.5.0\n",
"srsly==2.4.8\n",
"stanio==0.5.0\n",
"statsmodels==0.14.2\n",
"StrEnum==0.4.15\n",
"sympy==1.12.1\n",
"tables==3.8.0\n",
"tabulate==0.9.0\n",
"tbb==2021.12.0\n",
"tblib==3.0.0\n",
"tenacity==8.4.1\n",
"tensorboard==2.15.2\n",
"tensorboard-data-server==0.7.2\n",
"tensorflow @ https://storage.googleapis.com/colab-tf-builds-public-09h6ksrfwbb9g9xv/tensorflow-2.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=a2ec79931350b378c1ef300ca836b52a55751acb71a433582508a07f0de57c42\n",
"tensorflow-datasets==4.9.6\n",
"tensorflow-estimator==2.15.0\n",
"tensorflow-gcs-config==2.15.0\n",
"tensorflow-hub==0.16.1\n",
"tensorflow-io-gcs-filesystem==0.37.0\n",
"tensorflow-metadata==1.15.0\n",
"tensorflow-probability==0.23.0\n",
"tensorstore==0.1.45\n",
"termcolor==2.4.0\n",
"terminado==0.18.1\n",
"text-unidecode==1.3\n",
"textblob==0.17.1\n",
"tf-slim==1.1.0\n",
"tf_keras==2.15.1\n",
"thinc==8.2.4\n",
"threadpoolctl==3.5.0\n",
"tifffile==2024.5.22\n",
"tinycss2==1.3.0\n",
"tokenizers==0.19.1\n",
"toml==0.10.2\n",
"tomli==2.0.1\n",
"toolz==0.12.1\n",
"torch @ https://download.pytorch.org/whl/cu121/torch-2.3.0%2Bcu121-cp310-cp310-linux_x86_64.whl#sha256=0a12aa9aa6bc442dff8823ac8b48d991fd0771562eaa38593f9c8196d65f7007\n",
"torchaudio @ https://download.pytorch.org/whl/cu121/torchaudio-2.3.0%2Bcu121-cp310-cp310-linux_x86_64.whl#sha256=38b49393f8c322dcaa29d19e5acbf5a0b1978cf1b719445ab670f1fb486e3aa6\n",
"torchsummary==1.5.1\n",
"torchtext==0.18.0\n",
"torchvision @ https://download.pytorch.org/whl/cu121/torchvision-0.18.0%2Bcu121-cp310-cp310-linux_x86_64.whl#sha256=13e1b48dc5ce41ccb8100ab3dd26fdf31d8f1e904ecf2865ac524493013d0df5\n",
"tornado==6.3.3\n",
"tqdm==4.66.4\n",
"traitlets==5.7.1\n",
"traittypes==0.2.1\n",
"transformers==4.41.2\n",
"triton==2.3.0\n",
"tweepy==4.14.0\n",
"typer==0.12.3\n",
"types-pytz==2024.1.0.20240417\n",
"types-setuptools==70.0.0.20240524\n",
"typing_extensions==4.12.2\n",
"tzdata==2024.1\n",
"tzlocal==5.2\n",
"uc-micro-py==1.0.3\n",
"uritemplate==4.1.1\n",
"urllib3==2.0.7\n",
"vega-datasets==0.9.0\n",
"wadllib==1.3.6\n",
"wasabi==1.1.3\n",
"wcwidth==0.2.13\n",
"weasel==0.4.1\n",
"webcolors==24.6.0\n",
"webencodings==0.5.1\n",
"websocket-client==1.8.0\n",
"Werkzeug==3.0.3\n",
"widgetsnbextension==3.6.6\n",
"wordcloud==1.9.3\n",
"wrapt==1.14.1\n",
"xarray==2023.7.0\n",
"xarray-einstats==0.7.0\n",
"xgboost==2.0.3\n",
"xlrd==2.0.1\n",
"xyzservices==2024.6.0\n",
"yarl==1.9.4\n",
"yellowbrick==1.5\n",
"yfinance==0.2.40\n",
"zict==3.0.0\n",
"zipp==3.19.2\n"
]
}
],
"source": [
"# Verify the contents of requirements.txt\n",
"!cat requirements.txt"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"id": "4hPlzOpy01SA"
},
"outputs": [],
"source": [
"!mv requirements.txt /content/drive/MyDrive"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"labels_dic = {1:'walking',3:\"shiuffling\",4:\"stairs (ascending)\",5:\"stairs (descending)\",6:\"standing\",7:\"sitting\",8:\"lying\"}\n",
"labels_key = list(labels_dic.keys()) # convert to list, to make it easy to present through graph"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import LSTM, Dense, Dropout\n",
"from tensorflow.keras.initializers import Orthogonal\n",
"from sklearn.preprocessing import LabelEncoder\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Perfect computers\\AppData\\Roaming\\Python\\Python312\\site-packages\\keras\\src\\layers\\rnn\\rnn.py:204: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
" super().__init__(**kwargs)\n",
"WARNING:absl:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.\n",
"WARNING:absl:Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 415ms/step\n",
"sitting\n"
]
}
],
"source": [
"import tensorflow as tf\n",
"from tensorflow.keras.models import load_model\n",
"from tensorflow.keras.layers import LSTM\n",
"from tensorflow.keras.initializers import Orthogonal\n",
"from sklearn.preprocessing import LabelEncoder\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"# Define a custom LSTM class to handle the 'time_major' argument\n",
"class CustomLSTM(LSTM):\n",
" def __init__(self, units, **kwargs):\n",
" if 'time_major' in kwargs:\n",
" kwargs.pop('time_major')\n",
" super().__init__(units, **kwargs)\n",
"\n",
"# Register the custom objects\n",
"custom_objects = {'Orthogonal': Orthogonal, 'LSTM': CustomLSTM}\n",
"\n",
"# Load the saved LSTM model with custom objects\n",
"loaded_model = load_model(\n",
" \"D:/Semester 7/Human_activity_recognition_system/models/lstm_model.h5\",\n",
" custom_objects=custom_objects\n",
")\n",
"\n",
"# New data to predict on\n",
"new_data = pd.read_csv(\"D:/Semester 7/Human_activity_recognition_system/test_data/new.csv\")\n",
"\n",
"# Drop the timestamp column\n",
"new_data = new_data.drop(\"timestamp\", axis=1)\n",
"\n",
"# Convert the new data to a numpy array\n",
"new_data_array = np.array(new_data)\n",
"\n",
"# Make predictions\n",
"predictions = loaded_model.predict(new_data_array)\n",
"\n",
"\n",
"\n",
"# Print the predicted activities\n",
"for prediction in predictions:\n",
" predicted_label = labels_key[np.argmax(prediction)]\n",
" print(labels_dic[predicted_label])\n"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"gpuType": "T4",
"provenance": []
},
"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.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 0
}