{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":59093,"databundleVersionId":7469972,"sourceType":"competition"}],"dockerImageVersionId":30673,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport pyarrow.parquet as pq\nimport numpy as np\nimport networkx as nx\nimport pickle\nimport cupy as cp\nfrom torch_geometric.data import Data\nfrom torch_geometric.loader import DataLoader\nimport csv","metadata":{"execution":{"iopub.status.busy":"2024-03-27T13:51:21.956771Z","iopub.execute_input":"2024-03-27T13:51:21.957066Z","iopub.status.idle":"2024-03-27T13:51:25.829924Z","shell.execute_reply.started":"2024-03-27T13:51:21.957039Z","shell.execute_reply":"2024-03-27T13:51:25.828968Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def make_correlation(data_dir, p):\n    eeg = pq.read_table(data_dir)\n    eeg_baseline - pq.read_table()\n    df_eeg = eeg.to_pandas()\n    spectro_data = df_eeg[ df_eeg.columns.difference(['time'])]\n    \n    channel_list = spectro_data.columns\n    num_channels = len(channel_list)\n    \n    corr_array = cp.zeros((400,400), dtype=cp.float32)\n    count = 1\n    print(\"start making correlation\")\n    for t_length in range(0, len(spectro_data), 68):\n        \n        \n        print(\"section \", count)\n        eeg_data = spectro_data.iloc[t_length:t_length+68]\n        X = np.array(eeg_data.transpose())\n        eeg_cp = cp.asarray(X)\n\n        corr = cp.corrcoef(eeg_cp, dtype=cp.float32)\n\n        for i in range(len(corr)):\n            for j in range(len(corr)):\n                if i < j:\n                    if corr[i, j] <= p:\n                        corr_array[j, i] += corr[i, j]\n                        corr_array[i, j] += corr[i, j]\n                    else :\n                        corr_array[i, j] += 0\n                        corr_array[j, i] += 0\n    \n        count += 1\n    \n    \n    corr_array /= count\n    print(\"complete making correlation\")\n    return eeg_cp, corr_array","metadata":{"execution":{"iopub.status.busy":"2024-03-27T14:41:29.212599Z","iopub.execute_input":"2024-03-27T14:41:29.212981Z","iopub.status.idle":"2024-03-27T14:41:29.222994Z","shell.execute_reply.started":"2024-03-27T14:41:29.212919Z","shell.execute_reply":"2024-03-27T14:41:29.221978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def make_graph(data_dir, data, corr_matrix, Y):\n    print(\"start making Graph\")\n    nodes = []\n    edges = [[], []]\n    edges_att = []\n    for i in range(corr_matrix.shape[0]):\n        nodes.append([i, data[i]])\n        for j in range(corr_matrix.shape[1]):\n            if i > j :\n                if  corr_matrix[i, j] != 0:\n                    edges[0].append(i)\n                    edges[0].append(j)\n                    edges[1].append(j)\n                    edges[1].append(i)\n                    edges_att.append(corr_matrix[i, j])\n                    edges_att.append(corr_matrix[j, i])\n    nodes = torch.tensor(nodes)\n    edges = torch.tensor(edges)\n    edges_att = torch.tensor(edges)\n    Data(x = nodes, edge_index = edges, edge_attr = edges_att, y = Y)\n                    \n    print(\"complete making graph\")\n    \n    return Data","metadata":{"execution":{"iopub.status.busy":"2024-03-27T14:41:29.960426Z","iopub.execute_input":"2024-03-27T14:41:29.961136Z","iopub.status.idle":"2024-03-27T14:41:29.969208Z","shell.execute_reply.started":"2024-03-27T14:41:29.961105Z","shell.execute_reply":"2024-03-27T14:41:29.968131Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport torch\nfrom tqdm import tqdm\nimport numpy as np\nimport pandas as pd\nimport pickle\nfrom torch import cuda\ncp.cuda.Device(0).use()\nprint(torch.cuda.is_available())\ngraph_list = []\n\n_dir= \"/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms\"\nfile_list = os.listdir(_dir)\nmeta_df = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/train.csv\")\n\nclass_list = [\"Seizure\", \"GPD\", \"LRDA\", \"GRDA\", \"Other\"]\nfor filename in tqdm(file_list):\n    file_dir = _dir + '/' + filename\n    \n    spectro, corr = make_correlation(file_dir, 0.14)\n    \n    Y = meta_df[\"expert_consensus\"].iloc[meta_df.index[(meta_df[\"eeg_id\"] == int(filename.split(\".\")[0])]]\n    \n    if Y.all():\n        for cons in class_list:\n            if Y.iloc[1] == cons:\n                Y = class_list.index(cons)\n    else:\n        print(\"please check %s expert consensus\"%filename.split(\".\")[0])\n            \n    G = make_graph(spectro, corr, Y)\n    \n    with open(\"/kaggle/working/graph_%s\"%filename , \"wb\") as fw:\n        pickle.dump(G, fw)\n    \n    print(\"%s finished\"%filename)\n    graph_list.append(G)\n    \nwith open(\"/kaggle/working/graph_list\" , \"wb\") as p:\n    pickle.dump(graph_list, p)","metadata":{"execution":{"iopub.status.busy":"2024-03-28T00:09:14.173927Z","iopub.execute_input":"2024-03-28T00:09:14.174205Z","iopub.status.idle":"2024-03-28T00:09:14.190396Z","shell.execute_reply.started":"2024-03-28T00:09:14.174178Z","shell.execute_reply":"2024-03-28T00:09:14.189358Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filename.split(\".\")[0]","metadata":{"execution":{"iopub.status.busy":"2024-03-27T14:53:44.524046Z","iopub.execute_input":"2024-03-27T14:53:44.524800Z","iopub.status.idle":"2024-03-27T14:53:44.530989Z","shell.execute_reply.started":"2024-03-27T14:53:44.524770Z","shell.execute_reply":"2024-03-27T14:53:44.529894Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}