{"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":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-25T15:57:57.748508Z","iopub.execute_input":"2022-07-25T15:57:57.748879Z","iopub.status.idle":"2022-07-25T15:57:57.759430Z","shell.execute_reply.started":"2022-07-25T15:57:57.748852Z","shell.execute_reply":"2022-07-25T15:57:57.758146Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Scintillation Detector Signal Types.\n## Preprocessing\nВ ноутбуке собраны варианты обработки сигнала, которые я использовал, пробовал или хотел попробовать использовать в предобработке и в процессе поиска решения, а также идеи предобработки с постановки задачи, разбора и обсуждений.\n\nКод удобно скопировать к себе, комментировать/раскомментировать строчки и смотреть на результат.\n\nРекомендую попробовать:\n- вставлять/убирать clip, увеличивать параметр (по умолчанию 1),\n- попробовать комментировать/раскомментировать строчки с разными вариантами сглаживания (по умолчанию скользящее сглаживание медианой с шагом 3),\n- писать свои строчки кода со сглаживанием,\n- менять min_amp и max_amp внизу ячейки и смотреть на результат на разных диапазонах амплитуд ( по умолчанию [109,110) - показано почти самое шумное место ).\n\nВ нижней ячейке код, который я использую для загрузки датасета в google.colab.\n\nИнтересно почитать в комментариях про вашу обработку.","metadata":{}},{"cell_type":"code","source":"#закомментировать следующую строчку, если ноутбук запускается на google.colab\ndata_path=\"/kaggle/input/scintillation-detector-signal-types/\"\n\nimport matplotlib.pyplot as plt\n\n#baseline обработка\n#-------------------------------------\ndata_full = pd.read_csv(data_path+\"Run200_Wave_0_1.txt\", sep=' ', header=None, skipinitialspace=True)\ndata = data_full.drop([0, 1, 2, 3, 504], axis=1)\ndata.columns = list(range(500))\ndata=2**14-data-1560\n#-------------------------------------\n\n#выравнивание по нулю\n#после mean я нашел, что median лучше\ndata=data-np.reshape(data.loc[:,:100].median(axis=1).values,(-1,1))\n\n#идея - убрать шум внизу \n#(площади под сигналом одного типа от этого не перестанут быть близки)\n#(можно попробовать разные границы)\ndata=data.clip(lower=1)\n\n#варианты обработки\n#в финальной версии я решил, что найти пик для меня важнее\n#и убрал сглаживание:), хотя и с ним все работало неплохо\n#пики выравнивал на этапе выделения признака\n\n#сглаживание:\n#-----------------------------\n#скользящее среднее\n#data=data.rolling(3,axis=1).mean()\n#медиана\ndata=data.rolling(3,axis=1).median()\n#вместе\n#data=data.rolling(3,axis=1).median().rolling(3,axis=1).mean()\n#а здесь, я пытался сглаживать скорость :)\n#data=data.diff(1,axis=1).rolling(3,axis=1).median().rolling(5,axis=1).mean()\n\n#здесь можно попробовать написать код для частотной фильтрации из разбора\n\n#про следующие два варианта я думал пока не появился clip\n#\n#а здесь экспоненциальное сглаживание (например из statmodels, там где-то кажется и ноутбуки есть на эту тему)\n\n#а здесь фильтрацию фильтром Кальмана (уж не знаю какой вариант хороший, но в statmodels она тоже была)\n\n#забавные момены:\n#-----------------------------\n#эта строчка кода из времени, когда я пытался разделять по точке перегиба\n#как видите, я дошел до 7-й производной :)\n#здесь он работать не будет, но можно попробовать переписать его\n#если кто-нибудь реализует идею с экстремумами через сплайны из разбора, я с интересом посмотрю\n#ax = np.log1p((2**14-dataset.T[N]-1560))[140:200].diff(1).diff(1).diff(1).diff(1).diff(1).diff(1).diff(1).plot(title='Signal' ,legend=None,figsize=(20,10))\n\n#а тут мне пришла идея про clip\n#ax = np.log1p((2**14-dataset.T[N]-1560))[140:200].plot(title='Signal' ,legend=None,figsize=(20,10))\n\n\ndata[\"amp\"]=data.max(axis=1)\n\n#amp - амплитуда\n#(можно поиграться с границами)\nmin_amp=109\nmax_amp=110\nd=data.loc[(data[\"amp\"]>=min_amp)&(data[\"amp\"]<max_amp),]\nplt.figure(figsize=(20,10))\nfor i in d.index:\n  plt.plot(d.loc[i].values[130:170])#!kaggle competitions download -c scintillation-detector-signal-types\n","metadata":{"execution":{"iopub.status.busy":"2022-07-25T15:58:16.414767Z","iopub.execute_input":"2022-07-25T15:58:16.415144Z","iopub.status.idle":"2022-07-25T15:58:23.812791Z","shell.execute_reply.started":"2022-07-25T15:58:16.415113Z","shell.execute_reply":"2022-07-25T15:58:23.811064Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#код для загрузки датасета, если ноутбук запущен на google.colab\n#----------------------------------------------------------\n#загрузка датасета\n#https://github.com/Kaggle/kaggle-api\n#\n#!pip install kaggle --upgrade\n\n#from google.colab import drive\n#drive.mount('/gdrive')\n#!rm -r /content/sample_data\n\n#взять kaggle.json с kaggle и положить себе на google.disk\n#drive_path = \"/gdrive/My Drive/Colab Notebooks/<Ваш путь до папки с kaggle.json>\"\n\n#!mkdir ~/.kaggle/\n#!cp \"{drive_path}/kaggle.json\" ~/.kaggle/\n\n#!kaggle competitions download -c scintillation-detector-signal-types\n\n#!unzip -q scintillation-detector-signal-types.zip -d /content/data\n#!rm scintillation-detector-signal-types.zip\n#!rm /content/data/test-dataset.ipynb\n\n#data_path=\"/content/data/\"\n\n#import numpy as np\n#import pandas as pd","metadata":{},"execution_count":null,"outputs":[]}]}