{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30886,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport os\nfrom tqdm import tqdm\nfrom concurrent.futures import ThreadPoolExecutor","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-02-13T19:35:38.652010Z","iopub.execute_input":"2025-02-13T19:35:38.652327Z","iopub.status.idle":"2025-02-13T19:35:38.656128Z","shell.execute_reply.started":"2025-02-13T19:35:38.652299Z","shell.execute_reply":"2025-02-13T19:35:38.655337Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def time_features(df):\n    # Convert time_of_day to hours\n    df[\"hours\"] = df[\"time_of_day\"] // (3_600 * 1_000_000_000)\n    # Basic features \n    features = [\n        df[\"non-wear_flag\"].mean(),\n        df[\"enmo\"][df[\"enmo\"] >= 0.05].sum(),\n    ]\n    \n    # Define conditions for night, day, and no mask (full data)\n    night = ((df[\"hours\"] >= 22) | (df[\"hours\"] <= 5))\n    day = ((df[\"hours\"] <= 20) & (df[\"hours\"] >= 7))\n    no_mask = np.ones(len(df), dtype=bool)\n    \n    # List of columns of interest and masks\n    keys = [\"enmo\", \"anglez\", \"light\", \"battery_voltage\"]\n    masks = [no_mask, night, day]\n    \n    # Helper function for feature extraction\n    def extract_stats(data):\n        return [\n            data.mean(), \n            data.std(), \n            data.max(), \n            data.min(), \n            data.diff().mean(), \n            data.diff().std()\n        ]\n    \n    # Iterate over keys and masks to generate the statistics\n    for key in keys:\n        for mask in masks:\n            filtered_data = df.loc[mask, key]\n            features.extend(extract_stats(filtered_data))\n\n    return features\n\n# Code for parallelized computation of time series data from: Sheikh Muhammad Abdullah \n# https://www.kaggle.com/code/abdmental01/cmi-best-single-model\ndef process_file(filename, dirname):\n    # Process file and extract time features\n    df = pd.read_parquet(os.path.join(dirname, filename, 'part-0.parquet'))\n    df.drop('step', axis=1, inplace=True)\n    return time_features(df), filename.split('=')[1]\n\ndef load_time_series(dirname) -> pd.DataFrame:\n    # Load time series from directory in parallel\n    ids = os.listdir(dirname)\n    \n    with ThreadPoolExecutor() as executor:\n        results = list(tqdm(executor.map(lambda fname: process_file(fname, dirname), ids), total=len(ids)))\n    \n    stats, indexes = zip(*results)\n    \n    df = pd.DataFrame(stats, columns=[f\"stat_{i}\" for i in range(len(stats[0]))])\n    df['id'] = indexes\n    \n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T19:35:38.797624Z","iopub.execute_input":"2025-02-13T19:35:38.797889Z","iopub.status.idle":"2025-02-13T19:35:38.806231Z","shell.execute_reply.started":"2025-02-13T19:35:38.797869Z","shell.execute_reply":"2025-02-13T19:35:38.805420Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T19:35:38.949246Z","iopub.execute_input":"2025-02-13T19:35:38.949561Z","iopub.status.idle":"2025-02-13T19:36:33.444667Z","shell.execute_reply.started":"2025-02-13T19:35:38.949536Z","shell.execute_reply":"2025-02-13T19:36:33.443955Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/train.csv')\ntest = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/test.csv')\ntrain = pd.merge(train, train_ts, how=\"left\", on='id')\ntest = pd.merge(test, test_ts, how=\"left\", on='id')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T19:39:22.409769Z","iopub.execute_input":"2025-02-13T19:39:22.410074Z","iopub.status.idle":"2025-02-13T19:39:22.464956Z","shell.execute_reply.started":"2025-02-13T19:39:22.410051Z","shell.execute_reply":"2025-02-13T19:39:22.464052Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T19:39:27.719803Z","iopub.execute_input":"2025-02-13T19:39:27.720136Z","iopub.status.idle":"2025-02-13T19:39:27.759934Z","shell.execute_reply.started":"2025-02-13T19:39:27.720105Z","shell.execute_reply":"2025-02-13T19:39:27.758988Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T19:40:24.470312Z","iopub.execute_input":"2025-02-13T19:40:24.470682Z","iopub.status.idle":"2025-02-13T19:40:24.498279Z","shell.execute_reply.started":"2025-02-13T19:40:24.470653Z","shell.execute_reply":"2025-02-13T19:40:24.497474Z"}},"outputs":[],"execution_count":null}]}