{"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 os\nimport pandas as pd\nimport numpy as np\nfrom sklearn.linear_model import LogisticRegression\n\n# 데이터셋 로드\ndata_dir = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train'  # train 폴더 경로\ndataset = []\nlabels = []\n\nfor folder_name in os.listdir(data_dir):\n    if folder_name == 'notype':\n        continue\n    if folder_name == 'tdcsfog':\n        folder_path = os.path.join(data_dir, folder_name)\n        if os.path.isdir(folder_path):\n            for file_name in os.listdir(folder_path):\n                if file_name.endswith('.csv'):\n                    file_path = os.path.join(folder_path, file_name)\n                    df = pd.read_csv(file_path)\n                    selected_features = df[[\"Time\", \"AccV\", \"AccML\", \"AccAP\"]]\n                    labels_features = df[[\"StartHesitation\", \"Turn\", \"Walking\"]]\n                    dataset.extend(selected_features.values.tolist())  # extend를 사용하여 각 행을 리스트로 추가\n                    labels.extend(labels_features.values.tolist())  # 폴더명을 클래스 라벨로 사용\n    if folder_name == 'defog':\n        folder_path = os.path.join(data_dir, folder_name)\n        if os.path.isdir(folder_path):\n            for file_name in os.listdir(folder_path):\n                if file_name.endswith('.csv'):\n                    file_path = os.path.join(folder_path, file_name)\n                    df = pd.read_csv(file_path)\n                    df = df[df['Valid'] == True]\n                    selected_features = df[[\"Time\", \"AccV\", \"AccML\", \"AccAP\"]]\n                    labels_features = df[[\"StartHesitation\", \"Turn\", \"Walking\"]]\n                    dataset.extend(selected_features.values.tolist())  # extend를 사용하여 각 행을 리스트로 추가\n                    labels.extend(labels_features.values.tolist())  # 폴더명을 클래스 라벨로 사용\n\ndataset = pd.DataFrame(dataset, columns=[\"Time\", \"AccV\", \"AccML\", \"AccAP\"])\nlabels = pd.DataFrame(labels, columns=[\"StartHesitation\", \"Turn\", \"Walking\"])\n# 조건에 따라 라벨 값 변경\nlabels.loc[labels['Turn'] == 1, 'Turn'] = 2\nlabels.loc[labels['Walking'] == 1, 'Walking'] = 3\n\n# 데이터셋과 라벨을 NumPy 배열로 변환\ndataset = np.array(dataset)\nlabels = np.array(labels)\nlabel = labels[:, 0] + labels[:, 1] + labels[:, 2]\n\n# 데이터셋과 라벨의 샘플 수 확인\nprint(\"Dataset shape:\", dataset.shape)\nprint(\"Labels length:\", label.shape)\n\n# 로지스틱 다중분류 모델 생성 및 학습\nmodel = LogisticRegression(multi_class='multinomial', solver='lbfgs')\nmodel.fit(dataset, label)\n\n# Load notype data\nnotype_dir = os.path.join(data_dir, 'notype')\nif os.path.isdir(notype_dir):\n    notype_dataset = []\n    for file_name in os.listdir(notype_dir):\n        if file_name.endswith('.csv'):\n            file_path = os.path.join(notype_dir, file_name)\n            df = pd.read_csv(file_path)\n            df = df[df['Valid'] == True]\n            selected_features = df[[\"Time\", \"AccV\", \"AccML\", \"AccAP\"]]\n            notype_dataset.extend(selected_features.values.tolist())  # extend를 사용하여 각 행을 리스트로 추가\n    notype_dataset = np.array(notype_dataset)\n\n    # 예측 수행\n    predictions = model.predict(notype_dataset)  # StartHesitation, Turn, Walking 열을 제외한 열로 예측\n\n    # Load notype data with predictions\n    notype_dir = os.path.join(data_dir, 'notype')\n    if os.path.isdir(notype_dir):\n        for file_name in os.listdir(notype_dir):\n            if file_name.endswith('.csv'):\n                file_path = os.path.join(notype_dir, file_name)\n                df = pd.read_csv(file_path)\n                df = df[df['Valid'] == True][:len(predictions)]  # 예측값의 길이와 일치하도록 제한\n                df['Label'] = predictions[:len(df)]  # 예측값을 일치하는 길이로 슬라이싱하여 할당\n\n                # 결과 출력\n                print(df)\n\n                # 결과를 CSV 파일로 저장\n                output_path = '/kaggle/working/notype_predictions.csv'\n                df.to_csv(output_path, index=False)\n                print(f\"Predictions saved to: {output_path}\")\n","metadata":{"execution":{"iopub.status.busy":"2023-06-03T06:00:03.973605Z","iopub.execute_input":"2023-06-03T06:00:03.974016Z","iopub.status.idle":"2023-06-03T06:06:57.058085Z","shell.execute_reply.started":"2023-06-03T06:00:03.973988Z","shell.execute_reply":"2023-06-03T06:06:57.056704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pandas as pd\nimport numpy as np\nfrom sklearn.linear_model import LogisticRegression\n\n# 데이터셋 로드\ndataset = []\nlabels = []\n\n# Load notype data\nnotype_file_path = '/kaggle/working/notype_predictions.csv'\nif os.path.isfile(notype_file_path):\n    notype_dataset = pd.read_csv(notype_file_path)\n    selected_features = notype_dataset.loc[notype_dataset['Valid'] == True, [\"Time\", \"AccV\", \"AccML\", \"AccAP\"]]\n    dataset.extend(selected_features.values.tolist())\n    label = notype_dataset.loc[notype_dataset['Valid'] == True, \"Label\"]\n    labels.extend(label.values.flatten().tolist())\n\n# Load 'defog' data\ndefog_data_dir = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/defog'\nfor file_name in os.listdir(defog_data_dir):\n    if file_name.endswith('.csv'):\n        file_path = os.path.join(defog_data_dir, file_name)\n        df = pd.read_csv(file_path)\n        selected_features = df[[\"Time\", \"AccV\", \"AccML\", \"AccAP\"]]\n        dataset.extend(selected_features.values.tolist())\n        label = np.ones(len(df))  # 모든 'defog' 데이터에 대해 라벨을 1로 설정\n        labels.extend(label.tolist())\n\n# Load 'tdcsfog' data\ntdcsfog_data_dir = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/tdcsfog'\nfor file_name in os.listdir(tdcsfog_data_dir):\n    if file_name.endswith('.csv'):\n        file_path = os.path.join(tdcsfog_data_dir, file_name)\n        df = pd.read_csv(file_path)\n        selected_features = df[[\"Time\", \"AccV\", \"AccML\", \"AccAP\"]]\n        dataset.extend(selected_features.values.tolist())\n        label = np.ones(len(df)) * 2  # 모든 'tdcsfog' 데이터에 대해 라벨을 2로 설정\n        labels.extend(label.tolist())\n\ndataset = pd.DataFrame(dataset, columns=[\"Time\", \"AccV\", \"AccML\", \"AccAP\"])\nlabels = pd.DataFrame(labels, columns=[\"Label\"])\n\n# 라벨 값이 없는 경우 해당 데이터 제거\nvalid_indices = labels['Label'].notnull()\ndataset = dataset[valid_indices]\nlabels = labels[valid_indices]\n\n# 데이터셋과 라벨의 샘플 수 확인\nprint(\"Dataset shape:\", dataset.shape)\nprint(\"Labels length:\", labels.shape)\n\n# 로지스틱 다중분류 모델 생성 및 학습\nunique_labels = np.unique(labels)\nif len(unique_labels) < 2:\n    raise ValueError(\"This solver needs samples of at least 2 classes in the data, but the data contains only one class.\")\n\n# 로지스틱 다중분류 모델 생성 및 학습\nmodel = LogisticRegression(multi_class='multinomial', solver='lbfgs')\nmodel.fit(dataset, labels)\n\n# Load test data\ntest_data_dirs = ['/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/defog', '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/tdcsfog']\ntest_dataset = []\n\nfor test_data_dir in test_data_dirs:\n    for file_name in os.listdir(test_data_dir):\n        if file_name.endswith('.csv'):\n            file_path = os.path.join(test_data_dir, file_name)\n            df = pd.read_csv(file_path)\n            selected_features = df[[\"Time\", \"AccV\", \"AccML\", \"AccAP\"]]\n            test_dataset.extend(selected_features.values.tolist())\n\ntest_dataset = pd.DataFrame(test_dataset, columns=[\"Time\", \"AccV\", \"AccML\", \"AccAP\"])\n\n# test 데이터셋 예측\ntest_predictions = model.predict(test_dataset)\n\n# 예측 결과를 DataFrame으로 변환\ntest_predictions_df = pd.DataFrame(test_predictions, columns=[\"Label\"])\ntest_predictions_df = pd.concat([test_dataset, test_predictions_df], axis=1)  # 테스트 데이터와 예측 결과 열을 병합\n\n# Label 열을 StartHesitation, Walking, Turn으로 쪼개기\nlabel_mapping = {\n    0: \"StartHesitation\",\n    1: \"Walking\",\n    2: \"Turn\"\n}\ntest_predictions_df[\"Label\"] = test_predictions_df[\"Label\"].map(label_mapping)\n\n# 결과를 CSV 파일로 저장\noutput_path = '/kaggle/working/Submission.CSV'\ntest_predictions_df.to_csv(output_path, index=False)\nprint(f\"Test predictions saved to: {output_path}\")\n","metadata":{"execution":{"iopub.status.busy":"2023-06-03T06:00:03.973605Z","iopub.execute_input":"2023-06-03T06:00:03.974016Z","iopub.status.idle":"2023-06-03T06:06:57.058085Z","shell.execute_reply.started":"2023-06-03T06:00:03.973988Z","shell.execute_reply":"2023-06-03T06:06:57.056704Z"},"trusted":true},"execution_count":null,"outputs":[]}]}