From 4dbf0e5b66e86eb0317b182e8ef39d3463f22d64 Mon Sep 17 00:00:00 2001 From: Franziska Oschmann <oschmanf@eu-a6-004-10.euler.ethz.ch> Date: Mon, 2 Sep 2019 08:49:27 +0200 Subject: [PATCH] Added modeling section --- 09_eeg_use_case.ipynb | 1230 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1196 insertions(+), 34 deletions(-) diff --git a/09_eeg_use_case.ipynb b/09_eeg_use_case.ipynb index 0ef027f..860064f 100644 --- a/09_eeg_use_case.ipynb +++ b/09_eeg_use_case.ipynb @@ -4,16 +4,53 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/cluster/apps/python/3.6.1/x86_64/lib64/python3.6/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n", + " from numpy.core.umath_tests import inner1d\n" + ] + } + ], "source": [ "import numpy as np\n", "import os\n", "import glob\n", "import pandas as pd\n", - "from scipy.signal import resample\n", + "from scipy.signal import resample, butter, lfilter\n", "import matplotlib.pyplot as plt\n", "\n", - "from itertools import islice" + "from tqdm import tqdm\n", + "from itertools import islice\n", + "\n", + "from sklearn.decomposition import PCA\n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.ensemble import RandomForestClassifier, VotingClassifier\n", + "from sklearn.metrics import precision_recall_fscore_support, roc_auc_score, confusion_matrix\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "from multiprocessing import Pool\n", + "from multiprocessing.pool import ThreadPool\n", + "\n", + "import time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 9: Use case - prediction of arm movements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "background reg experiment" ] }, { @@ -29,7 +66,9 @@ "metadata": {}, "outputs": [], "source": [ - "#pd.read_csv('../ml-use-case-eeg/train/subj10_series1_data.csv').loc[::100, :]" + "train_path = '../ml-use-case-eeg/train/' #'../ml-use-case-eeg/train/' #'data/eeg_use_case/train/'\n", + "test_path = '../ml-use-case-eeg/test/' #'../ml-use-case-eeg/test/' #'data/eeg_use_case/test/'\n", + "all_files = os.listdir(train_path)" ] }, { @@ -38,32 +77,62 @@ "metadata": {}, "outputs": [], "source": [ - "train_path = 'data/eeg_use_case/train/'\n", - "test_path = 'data/eeg_use_case/test/'\n", - "all_files = os.listdir(train_path)" + "def filter_data(data, events, subj = None):\n", + " # filter data for specific subjects\n", + " if subj:\n", + " data_filt = list(filter(lambda x: subj + '_' in x, data))\n", + " else:\n", + " data_filt = data\n", + "\n", + " events_filt = []\n", + " for d in data_filt:\n", + " subj, series, end = d.split('_')\n", + " ix = np.where([subj + '_' in a and series in a for a in events])[0][0]\n", + " events_filt.append(events[ix])\n", + "\n", + " return data_filt, events_filt" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "all_data_files = glob.glob('data/eeg_use_case/train/subj7*data.csv')\n", - "all_event_files = glob.glob('data/eeg_use_case/train/subj7*events.csv')" + "# all_data_files = glob.glob('data/eeg_use_case/train/*data.csv')\n", + "# all_event_files = glob.glob('data/eeg_use_case/train/*events.csv')" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "def load_data(file_names):\n", + "all_data_files = list(filter(lambda x: '_data' in x, os.listdir(train_path)))\n", + "all_event_files = list(filter(lambda x: '_events' in x, os.listdir(train_path)))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "data_filt, events_filt = filter_data(all_data_files, all_event_files, subj='subj1')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def load_data(file_names, path):\n", " # read the csv file and drop the id column\n", " dfs = []\n", " for f in file_names:\n", - " df = pd.read_csv(f)\n", + " df = pd.read_csv(path + f)\n", " df = df.drop('id', axis = 1)\n", " dfs.append(df)\n", " #all_dfs = pd.concat(dfs)\n", @@ -73,12 +142,22 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# get channel names\n", + "channels = pd.read_csv(train_path + all_data_files[0]).columns[1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "all_data = np.concatenate(load_data(all_data_files))[:,1:]\n", - "all_events = np.concatenate(load_data(all_event_files))[:,1:]" + "all_data = np.concatenate(load_data(data_filt, train_path))\n", + "all_events = np.concatenate(load_data(events_filt, train_path))" ] }, { @@ -88,51 +167,1134 @@ "#### Visualization" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Feature extraction" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "win_size = 500\n", + "\n", + "num_win = int(all_data.shape[0]/500)\n", + "all_data_resh = all_data[:(num_win*win_size), :].reshape(num_win, win_size, 32)\n", + "\n", + "ix_events = np.arange(500, num_win*win_size + 1, 500)\n", + "all_events_resh = all_events[ix_events, :]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# def sliding_window(seq, n):\n", + "# #returns an iterator for a sliding window\n", + "# it = iter(seq)\n", + "# result = tuple(islice(it, n))\n", + "# if len(result) == n:\n", + "# yield result\n", + "# for elem in it:\n", + "# result = result[1:] + (elem,)\n", + "# yield result" + ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Feature extraction" + "##### Extract specific channels" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "#select channel\n", + "ix_c3 = np.where(channels == 'C3')[0][0]\n", + "ix_c4 = np.where(channels == 'C4')[0][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "red_data = all_data#[:, [ix_c3, ix_c4]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Apply a high-pass filter " ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "def sliding_window(seq, n):\n", - "#returns an iterator for a sliding window\n", - " it = iter(seq)\n", - " result = tuple(islice(it, n))\n", - " if len(result) == n:\n", - " yield result\n", - " for elem in it:\n", - " result = result[1:] + (elem,)\n", - " yield result" + "def butter_bandpass(fs, lowcut, highcut, order = 5):\n", + " nyq = 0.5 * fs\n", + " low = lowcut / nyq\n", + " high = highcut / nyq\n", + " b, a = butter(order, [low, high], btype='band')\n", + " return b, a\n", + "\n", + "def mean_pow(y):\n", + " return np.mean(y**2, axis = 0)\n", + "\n", + "def butter_bandpass_filter(data):\n", + " b, a = butter_bandpass(fs = 500, lowcut = 0, highcut = 50)\n", + " y = lfilter(b, a, data, axis = 0)\n", + "\n", + " filt_mean_pow = mean_pow(y)\n", + " return filt_mean_pow" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "win_size = 500\n", - "iter_window = sliding_window(all_data, win_size)\n", + "# iter_window = sliding_window(red_data, win_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 98%|█████████▊| 2797/2844 [00:03<00:00, 774.89it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 3.65 s, sys: 76.4 ms, total: 3.72 s\n", + "Wall time: 3.71 s\n" + ] + } + ], + "source": [ + "%%time\n", "\n", - "all_mean_power = []\n", + "# n_jobs = 1\n", + "# with Pool(n_jobs) as p:\n", + "# filt_data = p.map(butter_bandpass_filter, iter_window)\n", "\n", - "for window in iter_window:\n", + "pbar = tqdm(total = len(all_data_resh))\n", + "filt_data = []\n", + "for window in all_data_resh:\n", " window = np.vstack(window)\n", - " all_mean_power.append(np.mean(window**2, axis = 0))" + " filt_data.append(butter_bandpass_filter(window))\n", + " pbar.update(1)\n", + " \n", + "filt_data = np.vstack(filt_data)\n", + "scale = StandardScaler()\n", + "filt_data = scale.fit_transform(filt_data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Compute the mean power per time window" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# all_mean_power = []\n", + "\n", + "# for window in iter_window:\n", + "# window = np.vstack(window)\n", + "# all_mean_power.append(np.mean(window**2, axis = 0))\n", + "# all_mean_power = np.vstack(all_mean_power)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Analysis of features" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "pca = PCA(n_components=10)\n", + "filt_data_red = pca.fit_transform(filt_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2844, 6)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_events_resh.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.collections.PathCollection at 0x2ba2829008d0>" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# reshape events acc to sliding window\n", + "#all_events_resh = all_events[int(win_size/2) -1 : int(-win_size/2), :]\n", + "\n", + "plt.scatter(filt_data_red[all_events_resh[:,0] == 1, 2], filt_data_red[all_events_resh[:,0] == 1, 9])\n", + "plt.scatter(filt_data_red[all_events_resh[:,1] == 1, 2], filt_data_red[all_events_resh[:,1] == 1, 9])\n", + "plt.scatter(filt_data_red[all_events_resh[:,2] == 1, 2], filt_data_red[all_events_resh[:,2] == 1, 9])\n", + "plt.scatter(filt_data_red[all_events_resh[:,3] == 1, 2], filt_data_red[all_events_resh[:,3] == 1, 9])\n", + "plt.scatter(filt_data_red[all_events_resh[:,4] == 1, 2], filt_data_red[all_events_resh[:,4] == 1, 9])\n", + "plt.scatter(filt_data_red[all_events_resh[:,5] == 1, 2], filt_data_red[all_events_resh[:,5] == 1, 9])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Modeling" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "training of the data\n" + ] + } + ], + "source": [ + "# training, transition into binary classification problem\n", + "print('training of the data')\n", + "X_train, X_test, y_train, y_test = train_test_split(filt_data_red, all_events_resh,\\\n", + " test_size = 0.33, shuffle = True)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.5\n", + "[[919 0]\n", + " [ 20 0]]\n", + "0.5123686686529716\n", + "[[901 10]\n", + " [ 27 1]]\n", + "0.5126590277192687\n", + "[[901 12]\n", + " [ 25 1]]\n", + "0.49286498353457736\n", + "[[898 13]\n", + " [ 28 0]]\n", + "0.5\n", + "[[917 0]\n", + " [ 22 0]]\n", + "0.4983534577387486\n", + "[[908 3]\n", + " [ 28 0]]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/cluster/apps/python/3.6.1/x86_64/lib64/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n", + " if diff:\n", + "/cluster/apps/python/3.6.1/x86_64/lib64/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n", + " if diff:\n", + "/cluster/apps/python/3.6.1/x86_64/lib64/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n", + " if diff:\n", + "/cluster/apps/python/3.6.1/x86_64/lib64/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n", + " if diff:\n", + "/cluster/apps/python/3.6.1/x86_64/lib64/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n", + " if diff:\n", + "/cluster/apps/python/3.6.1/x86_64/lib64/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n", + " if diff:\n" + ] + } + ], + "source": [ + "lda = LDA()\n", + "rf = RandomForestClassifier(class_weight = 'balanced')\n", + "lr = LogisticRegression(class_weight = 'balanced')\n", + "\n", + "eclf = VotingClassifier(estimators=[('lda', lda), ('rf', rf), ('lr', lr)], voting = 'soft', weights=[1,1,1])\n", + "\n", + "all_pred = []\n", + "all_labels = []\n", + "for i in range(6):\n", + "\n", + " eclf.fit(X_train, y_train[:,i])\n", + " y_pred = eclf.predict(X_test)\n", + "\n", + " all_pred.append(y_pred)\n", + " all_labels.append(y_test[:,i])\n", + " print(roc_auc_score(y_test[:,i], y_pred))\n", + " print(confusion_matrix(y_test[:,i], y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style>\n", + " .dataframe thead tr:only-child th {\n", + " text-align: right;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: left;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>id</th>\n", + " <th>HandStart</th>\n", + " <th>FirstDigitTouch</th>\n", + " <th>BothStartLoadPhase</th>\n", + " <th>LiftOff</th>\n", + " <th>Replace</th>\n", + " <th>BothReleased</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>subj10_series1_0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>100</th>\n", + " <td>subj10_series1_100</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>200</th>\n", + " <td>subj10_series1_200</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>300</th>\n", + " <td>subj10_series1_300</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>400</th>\n", + " <td>subj10_series1_400</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>500</th>\n", + " <td>subj10_series1_500</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>600</th>\n", + " <td>subj10_series1_600</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>700</th>\n", + " <td>subj10_series1_700</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>800</th>\n", + " <td>subj10_series1_800</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>900</th>\n", + " <td>subj10_series1_900</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1000</th>\n", + " <td>subj10_series1_1000</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1100</th>\n", + " <td>subj10_series1_1100</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1200</th>\n", + " <td>subj10_series1_1200</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1300</th>\n", + " <td>subj10_series1_1300</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1400</th>\n", + " <td>subj10_series1_1400</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1500</th>\n", + " <td>subj10_series1_1500</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1600</th>\n", + " <td>subj10_series1_1600</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1700</th>\n", + " <td>subj10_series1_1700</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1800</th>\n", + " <td>subj10_series1_1800</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1900</th>\n", + " <td>subj10_series1_1900</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2000</th>\n", + " <td>subj10_series1_2000</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2100</th>\n", + " <td>subj10_series1_2100</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2200</th>\n", + " <td>subj10_series1_2200</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2300</th>\n", + " <td>subj10_series1_2300</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2400</th>\n", + " <td>subj10_series1_2400</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2500</th>\n", + " <td>subj10_series1_2500</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2600</th>\n", + " <td>subj10_series1_2600</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2700</th>\n", + " <td>subj10_series1_2700</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2800</th>\n", + " <td>subj10_series1_2800</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2900</th>\n", + " <td>subj10_series1_2900</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</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", + " </tr>\n", + " <tr>\n", + " <th>259400</th>\n", + " <td>subj10_series1_259400</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>259500</th>\n", + " <td>subj10_series1_259500</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>259600</th>\n", + " <td>subj10_series1_259600</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>259700</th>\n", + " <td>subj10_series1_259700</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>259800</th>\n", + " <td>subj10_series1_259800</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>259900</th>\n", + " <td>subj10_series1_259900</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260000</th>\n", + " <td>subj10_series1_260000</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260100</th>\n", + " <td>subj10_series1_260100</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260200</th>\n", + " <td>subj10_series1_260200</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260300</th>\n", + " <td>subj10_series1_260300</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260400</th>\n", + " <td>subj10_series1_260400</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260500</th>\n", + " <td>subj10_series1_260500</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260600</th>\n", + " <td>subj10_series1_260600</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260700</th>\n", + " <td>subj10_series1_260700</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260800</th>\n", + " <td>subj10_series1_260800</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>260900</th>\n", + " <td>subj10_series1_260900</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261000</th>\n", + " <td>subj10_series1_261000</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261100</th>\n", + " <td>subj10_series1_261100</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261200</th>\n", + " <td>subj10_series1_261200</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261300</th>\n", + " <td>subj10_series1_261300</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261400</th>\n", + " <td>subj10_series1_261400</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261500</th>\n", + " <td>subj10_series1_261500</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261600</th>\n", + " <td>subj10_series1_261600</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261700</th>\n", + " <td>subj10_series1_261700</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261800</th>\n", + " <td>subj10_series1_261800</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>261900</th>\n", + " <td>subj10_series1_261900</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>262000</th>\n", + " <td>subj10_series1_262000</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>262100</th>\n", + " <td>subj10_series1_262100</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>262200</th>\n", + " <td>subj10_series1_262200</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>262300</th>\n", + " <td>subj10_series1_262300</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>2624 rows × 7 columns</p>\n", + "</div>" + ], + "text/plain": [ + " id HandStart FirstDigitTouch BothStartLoadPhase \\\n", + "0 subj10_series1_0 0 0 0 \n", + "100 subj10_series1_100 0 0 0 \n", + "200 subj10_series1_200 0 0 0 \n", + "300 subj10_series1_300 0 0 0 \n", + "400 subj10_series1_400 0 0 0 \n", + "500 subj10_series1_500 0 0 0 \n", + "600 subj10_series1_600 0 0 0 \n", + "700 subj10_series1_700 0 0 0 \n", + "800 subj10_series1_800 0 0 0 \n", + "900 subj10_series1_900 0 0 0 \n", + "1000 subj10_series1_1000 0 0 0 \n", + "1100 subj10_series1_1100 0 0 0 \n", + "1200 subj10_series1_1200 0 0 0 \n", + "1300 subj10_series1_1300 0 0 0 \n", + "1400 subj10_series1_1400 0 0 0 \n", + "1500 subj10_series1_1500 0 0 0 \n", + "1600 subj10_series1_1600 0 0 0 \n", + "1700 subj10_series1_1700 0 0 0 \n", + "1800 subj10_series1_1800 0 0 0 \n", + "1900 subj10_series1_1900 0 0 0 \n", + "2000 subj10_series1_2000 0 0 0 \n", + "2100 subj10_series1_2100 0 0 0 \n", + "2200 subj10_series1_2200 0 0 0 \n", + "2300 subj10_series1_2300 0 0 0 \n", + "2400 subj10_series1_2400 0 0 0 \n", + "2500 subj10_series1_2500 0 0 0 \n", + "2600 subj10_series1_2600 1 0 0 \n", + "2700 subj10_series1_2700 0 0 0 \n", + "2800 subj10_series1_2800 0 1 1 \n", + "2900 subj10_series1_2900 0 0 0 \n", + "... ... ... ... ... \n", + "259400 subj10_series1_259400 0 0 0 \n", + "259500 subj10_series1_259500 0 0 0 \n", + "259600 subj10_series1_259600 0 0 0 \n", + "259700 subj10_series1_259700 0 0 0 \n", + "259800 subj10_series1_259800 0 0 0 \n", + "259900 subj10_series1_259900 0 0 0 \n", + "260000 subj10_series1_260000 0 0 0 \n", + "260100 subj10_series1_260100 0 0 0 \n", + "260200 subj10_series1_260200 0 0 0 \n", + "260300 subj10_series1_260300 0 0 0 \n", + "260400 subj10_series1_260400 0 0 0 \n", + "260500 subj10_series1_260500 0 0 0 \n", + "260600 subj10_series1_260600 0 0 0 \n", + "260700 subj10_series1_260700 0 0 0 \n", + "260800 subj10_series1_260800 0 0 0 \n", + "260900 subj10_series1_260900 0 0 0 \n", + "261000 subj10_series1_261000 0 0 0 \n", + "261100 subj10_series1_261100 0 0 0 \n", + "261200 subj10_series1_261200 0 0 0 \n", + "261300 subj10_series1_261300 0 0 0 \n", + "261400 subj10_series1_261400 0 0 0 \n", + "261500 subj10_series1_261500 0 0 0 \n", + "261600 subj10_series1_261600 0 0 0 \n", + "261700 subj10_series1_261700 0 0 0 \n", + "261800 subj10_series1_261800 0 0 0 \n", + "261900 subj10_series1_261900 0 0 0 \n", + "262000 subj10_series1_262000 0 0 0 \n", + "262100 subj10_series1_262100 0 0 0 \n", + "262200 subj10_series1_262200 0 0 0 \n", + "262300 subj10_series1_262300 0 0 0 \n", + "\n", + " LiftOff Replace BothReleased \n", + "0 0 0 0 \n", + "100 0 0 0 \n", + "200 0 0 0 \n", + "300 0 0 0 \n", + "400 0 0 0 \n", + "500 0 0 0 \n", + "600 0 0 0 \n", + "700 0 0 0 \n", + "800 0 0 0 \n", + "900 0 0 0 \n", + "1000 0 0 0 \n", + "1100 0 0 0 \n", + "1200 0 0 0 \n", + "1300 0 0 0 \n", + "1400 0 0 0 \n", + "1500 0 0 0 \n", + "1600 0 0 0 \n", + "1700 0 0 0 \n", + "1800 0 0 0 \n", + "1900 0 0 0 \n", + "2000 0 0 0 \n", + "2100 0 0 0 \n", + "2200 0 0 0 \n", + "2300 0 0 0 \n", + "2400 0 0 0 \n", + "2500 0 0 0 \n", + "2600 0 0 0 \n", + "2700 0 0 0 \n", + "2800 0 0 0 \n", + "2900 1 0 0 \n", + "... ... ... ... \n", + "259400 0 0 0 \n", + "259500 0 0 0 \n", + "259600 0 0 0 \n", + "259700 0 0 0 \n", + "259800 0 0 0 \n", + "259900 0 0 0 \n", + "260000 0 0 0 \n", + "260100 0 0 0 \n", + "260200 0 0 0 \n", + "260300 0 0 0 \n", + "260400 0 0 0 \n", + "260500 0 0 0 \n", + "260600 0 0 0 \n", + "260700 0 0 0 \n", + "260800 0 0 0 \n", + "260900 0 1 0 \n", + "261000 0 1 0 \n", + "261100 0 0 1 \n", + "261200 0 0 0 \n", + "261300 0 0 0 \n", + "261400 0 0 0 \n", + "261500 0 0 0 \n", + "261600 0 0 0 \n", + "261700 0 0 0 \n", + "261800 0 0 0 \n", + "261900 0 0 0 \n", + "262000 0 0 0 \n", + "262100 0 0 0 \n", + "262200 0 0 0 \n", + "262300 0 0 0 \n", + "\n", + "[2624 rows x 7 columns]" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.read_csv('../ml-use-case-eeg/train/subj10_series1_events.csv').loc[::100, :]" ] }, { -- GitLab