{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":102335,"databundleVersionId":12518947,"sourceType":"competition"}],"dockerImageVersionId":31040,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# 必要なライブラリのインポート\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n# ファイルパスの定義\ntrain_path = \"/kaggle/input/cmi-detect-behavior-with-sensor-data/train.csv\"\ntest_path = \"/kaggle/input/cmi-detect-behavior-with-sensor-data/test.csv\"\ntrain_demo_path = \"/kaggle/input/cmi-detect-behavior-with-sensor-data/train_demographics.csv\"\ntest_demo_path = \"/kaggle/input/cmi-detect-behavior-with-sensor-data/test_demographics.csv\"\n\n# データの読み込み\ntrain = pd.read_csv(train_path)\ntest = pd.read_csv(test_path)\ntrain_demo = pd.read_csv(train_demo_path)\ntest_demo = pd.read_csv(test_demo_path)\n\n# データの基本情報の表示\nprint(\"Train Data Info:\")\nprint(train.info())\nprint(\"\\nTest Data Info:\")\nprint(test.info())\nprint(\"\\nTrain Demographics Info:\")\nprint(train_demo.info())\nprint(\"\\nTest Demographics Info:\")\nprint(test_demo.info())\n\n# データの先頭5行の表示\nprint(\"\\nTrain Data Head:\")\nprint(train.head())\nprint(\"\\nTest Data Head:\")\nprint(test.head())\nprint(\"\\nTrain Demographics Head:\")\nprint(train_demo.head())\nprint(\"\\nTest Demographics Head:\")\nprint(test_demo.head())\n\n# 欠損値の確認\nprint(\"\\nMissing Values in Train Data:\")\nprint(train.isnull().sum())\nprint(\"\\nMissing Values in Test Data:\")\nprint(test.isnull().sum())\n\n# ジェスチャーの分布\ngesture_counts = train['gesture'].value_counts()\nplt.figure(figsize=(12,6))\nsns.barplot(x=gesture_counts.index, y=gesture_counts.values)\nplt.title('Gesture Distribution in Training Data')\nplt.xlabel('Gesture')\nplt.ylabel('Count')\nplt.xticks(rotation=45)\nplt.show()\n\n# センサーデータの統計量\nsensor_columns = [col for col in train.columns if col.startswith(('acc_', 'rot_', 'thm_', 'tof_'))]\nprint(\"\\nSensor Data Statistics:\")\nprint(train[sensor_columns].describe())","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-05-30T09:34:26.833016Z","iopub.execute_input":"2025-05-30T09:34:26.833313Z","iopub.status.idle":"2025-05-30T09:35:15.451953Z","shell.execute_reply.started":"2025-05-30T09:34:26.833278Z","shell.execute_reply":"2025-05-30T09:35:15.450986Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# センサー列の抽出\nacc_columns = [col for col in train.columns if col.startswith('acc_')]\nthm_columns = [col for col in train.columns if col.startswith('thm_')]\ntof_columns = [col for col in train.columns if col.startswith('tof_')]\n\ngesture_name = 'Text on phone'\ngesture_data = train[train['gesture'] == gesture_name]\n\n# 特定のsequence_idを選択\nsequence_id = gesture_data['sequence_id'].unique()[0]\nsequence_data = gesture_data[gesture_data['sequence_id'] == sequence_id]\n\n# 加速度データのプロット\nplt.figure(figsize=(12, 6))\nfor axis in ['acc_x', 'acc_y', 'acc_z']:\n    plt.plot(sequence_data['sequence_counter'], sequence_data[axis], label=axis)\nplt.title(f'Accelerometer Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Acceleration (m/s^2)')\nplt.legend()\nplt.show()\n\n# 温度センサーデータのプロット\nplt.figure(figsize=(12, 6))\nfor sensor in thm_columns:\n    plt.plot(sequence_data['sequence_counter'], sequence_data[sensor], label=sensor)\nplt.title(f'Thermopile Sensor Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Temperature (°C)')\nplt.legend()\nplt.show()\n\n# ToFセンサーデータの平均値を計算しプロット\ntof_avg = sequence_data[tof_columns].replace(-1, np.nan).mean(axis=1)\nplt.figure(figsize=(12, 6))\nplt.plot(sequence_data['sequence_counter'], tof_avg)\nplt.title(f'Average ToF Sensor Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Average ToF Value')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-30T09:39:22.511734Z","iopub.execute_input":"2025-05-30T09:39:22.512579Z","iopub.status.idle":"2025-05-30T09:39:23.274687Z","shell.execute_reply.started":"2025-05-30T09:39:22.512548Z","shell.execute_reply":"2025-05-30T09:39:23.273817Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# センサー列の抽出\nacc_columns = [col for col in train.columns if col.startswith('acc_')]\nthm_columns = [col for col in train.columns if col.startswith('thm_')]\ntof_columns = [col for col in train.columns if col.startswith('tof_')]\n\ngesture_name = 'Cheek - pinch skin'\ngesture_data = train[train['gesture'] == gesture_name]\n\n# 特定のsequence_idを選択\nsequence_id = gesture_data['sequence_id'].unique()[0]\nsequence_data = gesture_data[gesture_data['sequence_id'] == sequence_id]\n\n# 加速度データのプロット\nplt.figure(figsize=(12, 6))\nfor axis in ['acc_x', 'acc_y', 'acc_z']:\n    plt.plot(sequence_data['sequence_counter'], sequence_data[axis], label=axis)\nplt.title(f'Accelerometer Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Acceleration (m/s^2)')\nplt.legend()\nplt.show()\n\n# 温度センサーデータのプロット\nplt.figure(figsize=(12, 6))\nfor sensor in thm_columns:\n    plt.plot(sequence_data['sequence_counter'], sequence_data[sensor], label=sensor)\nplt.title(f'Thermopile Sensor Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Temperature (°C)')\nplt.legend()\nplt.show()\n\n# ToFセンサーデータの平均値を計算しプロット\ntof_avg = sequence_data[tof_columns].replace(-1, np.nan).mean(axis=1)\nplt.figure(figsize=(12, 6))\nplt.plot(sequence_data['sequence_counter'], tof_avg)\nplt.title(f'Average ToF Sensor Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Average ToF Value')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-30T09:40:06.299894Z","iopub.execute_input":"2025-05-30T09:40:06.300207Z","iopub.status.idle":"2025-05-30T09:40:07.034868Z","shell.execute_reply.started":"2025-05-30T09:40:06.300180Z","shell.execute_reply":"2025-05-30T09:40:07.033938Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# センサー列の抽出\nacc_columns = [col for col in train.columns if col.startswith('acc_')]\nthm_columns = [col for col in train.columns if col.startswith('thm_')]\ntof_columns = [col for col in train.columns if col.startswith('tof_')]\n\ngesture_name = 'Forehead - pull hairline'\ngesture_data = train[train['gesture'] == gesture_name]\n\n# 特定のsequence_idを選択\nsequence_id = gesture_data['sequence_id'].unique()[0]\nsequence_data = gesture_data[gesture_data['sequence_id'] == sequence_id]\n\n# 加速度データのプロット\nplt.figure(figsize=(12, 6))\nfor axis in ['acc_x', 'acc_y', 'acc_z']:\n    plt.plot(sequence_data['sequence_counter'], sequence_data[axis], label=axis)\nplt.title(f'Accelerometer Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Acceleration (m/s^2)')\nplt.legend()\nplt.show()\n\n# 温度センサーデータのプロット\nplt.figure(figsize=(12, 6))\nfor sensor in thm_columns:\n    plt.plot(sequence_data['sequence_counter'], sequence_data[sensor], label=sensor)\nplt.title(f'Thermopile Sensor Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Temperature (°C)')\nplt.legend()\nplt.show()\n\n# ToFセンサーデータの平均値を計算しプロット\ntof_avg = sequence_data[tof_columns].replace(-1, np.nan).mean(axis=1)\nplt.figure(figsize=(12, 6))\nplt.plot(sequence_data['sequence_counter'], tof_avg)\nplt.title(f'Average ToF Sensor Data for Gesture: {gesture_name} (Sequence ID: {sequence_id})')\nplt.xlabel('Sequence Counter')\nplt.ylabel('Average ToF Value')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-30T09:40:43.739163Z","iopub.execute_input":"2025-05-30T09:40:43.739471Z","iopub.status.idle":"2025-05-30T09:40:44.586175Z","shell.execute_reply.started":"2025-05-30T09:40:43.739446Z","shell.execute_reply":"2025-05-30T09:40:44.584998Z"}},"outputs":[],"execution_count":null}]}