{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"**G2Net** es una red de Ondas Gravitacionales, Geofísica y Machine Learning. A través de una acción de COST (Cooperación Europea en Ciencia y Tecnología), una agencia de financiación para redes de investigación e innovación, G2Net tiene como objetivo crear una amplia red de científicos. De cuatro áreas diferentes de especialización, a saber, la física de GW, la geofísica, la ciencia de la computación y la robótica, estos científicos han acordado un objetivo común de abordar los desafíos en el análisis de datos y la caracterización del ruido para los detectores de GW.\n\nEstas señales son ondas inimaginablemente pequeñas en el tejido del espacio-tiempo y, aunque la red global de detectores GW son algunos de los instrumentos más sensibles del planeta, las señales están enterradas en el ruido del detector. El análisis de los datos de GW y la detección de estas señales es una misión crucial para la creciente red global de detectores gw cada vez más sensibles. Estos desafíos en el análisis de datos y la caracterización del ruido podrían resolverse con la ayuda de la ciencia de datos.\n\nObjetivo: Dtectar señales GW de las fusiones de agujeros negros binarios. Específicamente, construir un modelo para analizar datos simulados de series temporales de GW de una red de detectores basados en la Tierra.\n\n![imagen](https://storage.googleapis.com/kaggle-media/competitions/G2Net-gravitational-waves/800px-LIGO_measurement_of_gravitational_waves.svg.png)\n*La serie de imágenes de arriba fueron tomadas del artículo de 2015 que anuncia el descubrimiento de ondas gravitacionales de un par de agujeros negros en fusión.*\n\nCon el desarrollo de nuevos algoritmos, los científicos tendrán un mejor manejo del poder potencial de la comunidad de ciencia de datos y sus enfoques innovadores para el análisis de datos. Además, permitirá una interacción más estrecha entre la informática y la física, lo que podría beneficiar a ambas disciplinas.","metadata":{}},{"cell_type":"code","source":"import IPython.display\nIPython.display.YouTubeVideo('Io2-RJSEpUM', width=800, height=500)","metadata":{"execution":{"iopub.status.busy":"2022-09-14T18:09:34.623927Z","iopub.execute_input":"2022-09-14T18:09:34.624518Z","iopub.status.idle":"2022-09-14T18:09:34.764969Z","shell.execute_reply.started":"2022-09-14T18:09:34.624477Z","shell.execute_reply":"2022-09-14T18:09:34.763769Z"},"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**DATOS**\n\nDatos de series temporales que contienen mediciones simuladas de ondas gravitacionales de una red de 3 interferómetros de ondas gravitacionales (LIGO Hanford, LIGO Livingston y Virgo). \nCada serie temporal contiene ruido del detector o ruido del detector más una señal de onda gravitacional simulada. La tarea consiste en identificar cuándo una señal está presente en los datos ().target=1\n\nLos parámetros que determinan la forma exacta de una forma de onda binaria de agujero negro son las masas, la ubicación del cielo, la distancia, los espines de los agujeros negros, el ángulo de orientación binaria, la polarización de las ondas gravitacionales, el momento de llegada y la fase en la coalescencia (fusión). Estos parámetros (15 en total) se han aleatorizado de acuerdo con distribuciones previas motivadas astrofísicamente y se han utilizado para generar las señales simuladas presentes en los datos, pero no se proporcionan como parte de los datos de la competencia.\n\nCada muestra de datos (archivo) contiene 3 series temporales (1 para cada detector) y cada una abarca 2 segundos y se muestrea a 2.048 Hz.npy\n\nLa relación señal-ruido (SNR) integrada es clásicamente la medida más informativa de cuán detectable es una señal y un nivel típico de detectabilidad es cuando este SNR integrado excede ~ 8. Esto no debe confundirse con el SNR instantáneo, el factor por el cual la señal se eleva por encima del ruido, y en casi todos los casos (a diferencia de la primera detección de ondas gravitacionales GW150914) estas señales no son visibles a simple vista en la serie temporal.\n\n**Archivos:**\n\n* train/ - los archivos del conjunto de entrenamiento, un archivo por observación; Las etiquetas se proporcionan en un archivo que se muestra en npy\n\n* test/ - los archivos del conjunto de pruebas; Debe predecir la probabilidad de que la observación contenga una onda gravitacional.\n\n* training_labels.csv: valores objetivo de si la señal asociada contiene una onda gravitacional.\n\n* sample_submission.csv: un archivo de envío de muestra en el formato correcto","metadata":{}},{"cell_type":"code","source":"!pip install -q nnAudio\n!pip install -q --upgrade wandb\n!pip install -q grad-cam\n!pip install -q ttach","metadata":{"execution":{"iopub.status.busy":"2022-09-14T17:43:39.957123Z","iopub.execute_input":"2022-09-14T17:43:39.95758Z","iopub.status.idle":"2022-09-14T17:44:50.128026Z","shell.execute_reply.started":"2022-09-14T17:43:39.957542Z","shell.execute_reply":"2022-09-14T17:44:50.126704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = pd.read_csv('../input/g2net-gravitational-wave-detection/training_labels.csv')\nsample_submission = pd.read_csv('../input/g2net-gravitational-wave-detection/sample_submission.csv')\n","metadata":{"execution":{"iopub.status.busy":"2022-09-14T17:45:58.487491Z","iopub.execute_input":"2022-09-14T17:45:58.487946Z","iopub.status.idle":"2022-09-14T17:45:59.04009Z","shell.execute_reply.started":"2022-09-14T17:45:58.487907Z","shell.execute_reply":"2022-09-14T17:45:59.039163Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nfrom PIL import Image\nfrom matplotlib import pyplot as plt\nimport seaborn as sns","metadata":{"execution":{"iopub.status.busy":"2022-09-14T17:45:29.761898Z","iopub.execute_input":"2022-09-14T17:45:29.763034Z","iopub.status.idle":"2022-09-14T17:45:29.770498Z","shell.execute_reply.started":"2022-09-14T17:45:29.762983Z","shell.execute_reply":"2022-09-14T17:45:29.769283Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submission.head()","metadata":{"execution":{"iopub.status.busy":"2022-09-14T17:46:01.800055Z","iopub.execute_input":"2022-09-14T17:46:01.801127Z","iopub.status.idle":"2022-09-14T17:46:01.814958Z","shell.execute_reply.started":"2022-09-14T17:46:01.801073Z","shell.execute_reply":"2022-09-14T17:46:01.813915Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/g2net-gravitational-wave-detection/training_labels.csv')\ntest = pd.read_csv('../input/g2net-gravitational-wave-detection/sample_submission.csv')\n\ndef get_train_file_path(image_id):\n    return \"../input/g2net-gravitational-wave-detection/train/{}/{}/{}/{}.npy\".format(\n        image_id[0], image_id[1], image_id[2], image_id)\n\ndef get_test_file_path(image_id):\n    return \"../input/g2net-gravitational-wave-detection/test/{}/{}/{}/{}.npy\".format(\n        image_id[0], image_id[1], image_id[2], image_id)\n\ntrain['file_path'] = train['id'].apply(get_train_file_path)\ntest['file_path'] = test['id'].apply(get_test_file_path)\n\ndisplay(train.head())\ndisplay(test.head())","metadata":{"execution":{"iopub.status.busy":"2022-09-14T17:45:34.922704Z","iopub.execute_input":"2022-09-14T17:45:34.923419Z","iopub.status.idle":"2022-09-14T17:45:36.14867Z","shell.execute_reply.started":"2022-09-14T17:45:34.923379Z","shell.execute_reply":"2022-09-14T17:45:36.147561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nfrom nnAudio.Spectrogram import CQT1992v2\n\ndef apply_qtransform(waves, transform=CQT1992v2(sr=2048, fmin=20, fmax=1024, hop_length=64)):\n    waves = np.hstack(waves)\n    waves = waves / np.max(waves)\n    waves = torch.from_numpy(waves).float()\n    image = transform(waves)\n    return image\n\nfor i in range(5):\n    waves = np.load(train.loc[i, 'file_path'])\n    image = apply_qtransform(waves)\n    target = train.loc[i, 'target']\n    plt.imshow(image[0])\n    plt.title(f\"target: {target}\")\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-09-14T17:45:39.607884Z","iopub.execute_input":"2022-09-14T17:45:39.60827Z","iopub.status.idle":"2022-09-14T17:45:40.77091Z","shell.execute_reply.started":"2022-09-14T17:45:39.608237Z","shell.execute_reply":"2022-09-14T17:45:40.769602Z"},"trusted":true},"execution_count":null,"outputs":[]}]}