{"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":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm\nfrom pathlib import Path\nfrom tsfresh import select_features\nfrom tsfresh.utilities.dataframe_functions import impute\nfrom tsfresh import extract_relevant_features\nfrom tsfresh.feature_extraction import settings, extract_features, MinimalFCParameters, EfficientFCParameters, ComprehensiveFCParameters","metadata":{"execution":{"iopub.status.busy":"2021-06-21T09:28:39.013799Z","iopub.execute_input":"2021-06-21T09:28:39.014145Z","iopub.status.idle":"2021-06-21T09:28:42.175449Z","shell.execute_reply.started":"2021-06-21T09:28:39.014115Z","shell.execute_reply":"2021-06-21T09:28:42.174712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/predict-volcanic-eruptions-ingv-oe/train.csv')\ntest = pd.read_csv('../input/predict-volcanic-eruptions-ingv-oe/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2021-06-21T09:28:46.623377Z","iopub.execute_input":"2021-06-21T09:28:46.62369Z","iopub.status.idle":"2021-06-21T09:28:46.652195Z","shell.execute_reply.started":"2021-06-21T09:28:46.623661Z","shell.execute_reply":"2021-06-21T09:28:46.651462Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['segment_id']=train['segment_id'].astype(str)","metadata":{"execution":{"iopub.status.busy":"2021-06-21T09:28:47.65055Z","iopub.execute_input":"2021-06-21T09:28:47.650863Z","iopub.status.idle":"2021-06-21T09:28:47.665559Z","shell.execute_reply.started":"2021-06-21T09:28:47.650835Z","shell.execute_reply":"2021-06-21T09:28:47.664691Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2021-06-21T09:28:48.307612Z","iopub.execute_input":"2021-06-21T09:28:48.307955Z","iopub.status.idle":"2021-06-21T09:28:48.323004Z","shell.execute_reply.started":"2021-06-21T09:28:48.307911Z","shell.execute_reply":"2021-06-21T09:28:48.322048Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def agg_stats(df, idx):\n    df = df.agg(['sum', 'min', \"mean\", \"std\", \"median\", \"skew\", \"kurtosis\"])\n    df_flat = df.stack()\n    df_flat.index = df_flat.index.map('{0[1]}_{0[0]}'.format)\n    df_out = df_flat.to_frame().T\n    df_out[\"segment_id\"] = int(idx)\n    return df_out","metadata":{"execution":{"iopub.status.busy":"2021-06-21T09:28:49.486551Z","iopub.execute_input":"2021-06-21T09:28:49.486865Z","iopub.status.idle":"2021-06-21T09:28:49.492911Z","shell.execute_reply.started":"2021-06-21T09:28:49.486835Z","shell.execute_reply":"2021-06-21T09:28:49.491837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def features_generator(signals,seg):\n    \n    signals['segment_id'] = seg\n    \n    sel = signals.fillna(0).astype(bool).sum(axis=0) / 60001 > 0.5\n    signals = signals.fillna(0).loc[:,sel]\n    fc_parameters = {\n#  'standard_deviation': None,\n 'last_location_of_maximum': None,\n 'first_location_of_maximum': None,\n 'last_location_of_minimum': None,\n 'first_location_of_minimum': None,\n#  'maximum': None,\n#  'minimum': None,\n 'number_cwt_peaks': [{'n': 1}, {'n': 5}],\n#  'binned_entropy': [{'max_bins': 10}],\n\n#   'fft_aggregated': [{'aggtype': 'centroid'},\n#   {'aggtype': 'variance'},\n#   {'aggtype': 'skew'},\n#   {'aggtype': 'kurtosis'}]}\n\n 'fourier_entropy': [{'bins': 2},\n  {'bins': 3},\n  {'bins': 5}]\n#   {'bins': 10},\n#   {'bins': 100}],\n#     'permutation_entropy': [{'tau': 1, 'dimension': 3},\n#   {'tau': 1, 'dimension': 4}]\n    }\n\n                     \n    extracted_features = extract_features(signals.iloc[:,:], \n                                          column_id = 'segment_id', \n                                          default_fc_parameters= fc_parameters,\n                                          n_jobs = 0,\n                                          disable_progressbar = True,\n                                          chunksize = None,\n                                         )\n    return extracted_features","metadata":{"execution":{"iopub.status.busy":"2021-06-21T09:28:50.512633Z","iopub.execute_input":"2021-06-21T09:28:50.513006Z","iopub.status.idle":"2021-06-21T09:28:50.522075Z","shell.execute_reply.started":"2021-06-21T09:28:50.51293Z","shell.execute_reply":"2021-06-21T09:28:50.521001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"summary_stats.to_csv('summary_stats.csv')\ntest_data.to_csv('test_data.csv')","metadata":{"execution":{"iopub.status.busy":"2021-06-21T09:28:51.263372Z","iopub.execute_input":"2021-06-21T09:28:51.263698Z","iopub.status.idle":"2021-06-21T09:28:51.383644Z","shell.execute_reply.started":"2021-06-21T09:28:51.263668Z","shell.execute_reply":"2021-06-21T09:28:51.382318Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\nsummary_stats = pd.DataFrame()\nfor csv in tqdm(Path(\"../input/predict-volcanic-eruptions-ingv-oe/train/\").glob(\"**/*.csv\"),total=4431):\n    df = pd.read_csv(csv)\n    summary_stats = summary_stats.append(features_generator(df,csv.stem))","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2021-06-21T09:29:32.216516Z","iopub.execute_input":"2021-06-21T09:29:32.216852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"summary_stats['segment_id'] = summary_stats.index\nsummary_stats.reset_index(inplace=True)\ndel summary_stats['index']\nsummary_stats.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"summary = summary_stats.merge(train, on='segment_id')\nsummary.head()\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = pd.DataFrame()\nfor csv in tqdm(Path(\"../input/predict-volcanic-eruptions-ingv-oe/test/\").glob(\"**/*.csv\"), total=4501):\n    df = pd.read_csv(csv)\n    test_data = test_data.append(features_generator(df, csv.stem))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"summary.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"time= summary[['time_to_eruption']]\nfeat = summary.drop(['time_to_eruption','segment_id'], axis=1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nxtrain,xtest,ytrain,ytest = train_test_split(feat, time, test_size=0.2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.impute import SimpleImputer\nimputer = SimpleImputer(strategy='median')\ntrain_df =pd.DataFrame( imputer.fit_transform(xtrain))\ntest_df = pd.DataFrame( imputer.transform(xtest))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.columns = feat.columns\ntest_df.columns = feat.columns\n\ntrain_df.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.feature_selection import RFE\nfrom sklearn.linear_model import LassoCV\nfrom sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lcv = LassoCV()\nlcv.fit(train_df, ytrain.to_numpy().reshape(-1,))\nlcv_mask = lcv.coef_ !=0\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rfe_gb = RFE(estimator=GradientBoostingRegressor(),  step=3)\nrfe_gb.fit(train_df, ytrain.to_numpy().reshape(-1,))\ngb_mask= rfe_gb.support_\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rfe_rf = RFE(estimator=RandomForestRegressor(),  step=3)\nrfe_rf.fit(train_df, ytrain.to_numpy().reshape(-1,))\nrf_mask = rfe_rf.support_ \n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"votes = np.sum([lcv_mask,rf_mask, gb_mask], axis=0)\nmeta_mask = votes >=2","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xtrain_reduced = train_df.loc[:, meta_mask]\nXtest_reduced = test_df.loc[:, meta_mask]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xtrain_reduced.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from xgboost import XGBRegressor\nxgb=XGBRegressor()\nxgb.fit(Xtrain_reduced, ytrain.values)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import mean_absolute_error as mae\nypred = xgb.predict(Xtest_reduced)\nscore= mae(ytest.values, ypred)\nprint(score)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rf=RandomForestRegressor()\nrf.fit(Xtrain_reduced, ytrain.values.reshape(-1,))\nypred2 = rf.predict(Xtest_reduced)\nscore2= mae(ytest.values, ypred2)\nprint(score2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"svr=GradientBoostingRegressor()\nsvr.fit(Xtrain_reduced, ytrain.values.reshape(-1,))\nypred4 = svr.predict(Xtest_reduced)\nscore4= mae(ytest.values, ypred4)\nprint(score4)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from catboost import CatBoostRegressor\ncbr=CatBoostRegressor()\ncbr.fit(Xtrain_reduced, ytrain.values.reshape(-1,),verbose = False)\nypred3 = cbr.predict(Xtest_reduced)\nscore3= mae(ytest.values, ypred3)\nprint(score3)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data.reset_index(inplace=True)\ntest_data.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data['segment_id'] = test_data['index']\ntest_data.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xtest2 = test_data.drop(['segment_id','index'], axis=1)\nXtest2_imputed = pd.DataFrame( imputer.transform(Xtest2))\nXtest2_imputed.columns = Xtest2.columns\nXtest2_reduced = Xtest2_imputed.loc[:, meta_mask]\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xtest2_reduced=Xtest2_reduced.reindex(columns=Xtrain_reduced.columns)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xtrain_reduced.columns","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xtest2_imputed.columns","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y = rf.predict(Xtest2_reduced)\ny2 = xgb.predict(Xtest2_reduced)\ny3 = cbr.predict(Xtest2_reduced)\ny_mean = np.mean([y,y2,y3], axis=0)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data['time_to_eruption'] = y\ntest_data.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = test_data[['segment_id','time_to_eruption']]\nsub.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub.to_csv('sub10.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}