{"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\nimport seaborn as sns","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-18T06:45:44.158455Z","iopub.execute_input":"2022-07-18T06:45:44.159181Z","iopub.status.idle":"2022-07-18T06:45:45.262702Z","shell.execute_reply.started":"2022-07-18T06:45:44.159086Z","shell.execute_reply":"2022-07-18T06:45:45.261896Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"../input/titanic/train.csv\")\ntest = pd.read_csv('../input/titanic/test.csv')\nsubmission = pd.read_csv('../input/titanic/gender_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2022-07-18T06:50:02.452285Z","iopub.execute_input":"2022-07-18T06:50:02.452638Z","iopub.status.idle":"2022-07-18T06:50:02.488136Z","shell.execute_reply.started":"2022-07-18T06:50:02.452609Z","shell.execute_reply":"2022-07-18T06:50:02.487329Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### ML PJT를 위한 EDA를 수행하면서 체크해야하는 3가지!\n\n1. 데이터 사이즈 체크\n\n> N rows x M columns\n\n> memory size\n\n\n2. 결측치 여부 체크\n\n> 어떤 column에 얼마나 결측치가 포함되어 있는지 체크.\n\n> 결측치를 포함한 데이터를 버릴지, 결측치를 채울지 체크.\n\n\n3. dtype이 object인 column 체크\n\n> categorical feature일 가능성이 높기 때문에 체크.\n\n\n> 나중에 encoding을 해주어야 하기 때문에 체크.","metadata":{}},{"cell_type":"code","source":"test.info()","metadata":{"execution":{"iopub.status.busy":"2022-07-18T06:59:11.575242Z","iopub.execute_input":"2022-07-18T06:59:11.576321Z","iopub.status.idle":"2022-07-18T06:59:11.589833Z","shell.execute_reply.started":"2022-07-18T06:59:11.576241Z","shell.execute_reply":"2022-07-18T06:59:11.588983Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 결측치 처리\n## Age, Cabin, Embarked, (test)Fare\n\n# 1. Cabin column은 결측치가 너무 많으므로, 제거합니다.\ntrain = train.drop(columns=[\"Cabin\"])\n\n# 2. Age column 평균으로 채웁니다.\ntrain.Age.fillna(train.Age.mean(), inplace=True)\n\n# 3. Embarked column 결측치를 포함한 데이터 2개를 제거합니다.\ntrain = train.dropna()","metadata":{"execution":{"iopub.status.busy":"2022-07-18T07:28:21.703340Z","iopub.execute_input":"2022-07-18T07:28:21.703782Z","iopub.status.idle":"2022-07-18T07:28:21.717638Z","shell.execute_reply.started":"2022-07-18T07:28:21.703746Z","shell.execute_reply":"2022-07-18T07:28:21.716220Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 4. 테스트 데이터에 포함된 Fare column을 train data에 있는 Fare column의 평균으로 채웁니다.\ntest.Fare = test.Fare.fillna(train.Fare.mean())\n\n# 5. 테스트 데이터에 포함된 Age column을 train data에 있는 Age column의 평균으로 채웁니다.\ntest.Age = test.Age.fillna(train.Age.mean())\n\n# 6. 테스트 데이터에 포함된 cabin column을 제거합니다.\ntest = test.drop(columns=[\"Cabin\"])","metadata":{"execution":{"iopub.status.busy":"2022-07-18T07:33:10.073353Z","iopub.execute_input":"2022-07-18T07:33:10.073911Z","iopub.status.idle":"2022-07-18T07:33:10.084867Z","shell.execute_reply.started":"2022-07-18T07:33:10.073862Z","shell.execute_reply":"2022-07-18T07:33:10.083322Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# dtype이 object인 Column 처리\n## Name, Sex, Ticket, Embarked\n## Name, Ticket column은 drop\n## Sex, Embarked column은 Ordinal Encoding.\n\n# 1. Name, Ticket column은 생존자 예측에 도움이 되지 않으므로 제거합니다.\ntrain = train.drop(columns=[\"Name\", \"Ticket\"])\ntest = test.drop(columns=[\"Name\", \"Ticket\"])\n\n# 2. Sex column\ntrain.Sex = train.Sex.map({'male':0, 'female':1})\ntest.Sex = test.Sex.map({'male':0, 'female':1})\n\n# 3. Embarked column\n## S -> 0, C -> 1, Q -> 2\ntrain.Embarked = train.Embarked.map({'S':0, 'C':1, 'Q':2})\ntest.Embarked = test.Embarked.map({'S':0, 'C':1, 'Q':2})","metadata":{"execution":{"iopub.status.busy":"2022-07-18T07:44:32.427539Z","iopub.execute_input":"2022-07-18T07:44:32.427923Z","iopub.status.idle":"2022-07-18T07:44:32.440820Z","shell.execute_reply.started":"2022-07-18T07:44:32.427895Z","shell.execute_reply":"2022-07-18T07:44:32.439879Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### training - Evaluation - Prediction\n\n1. train-validation split\n\n\n2. RandomForestClassifier를 이용하여 학습\n\n\n3. train, validation 성능 검증\n\n\n4. 테스트 데이터에 대해서 예측!","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split # 1\nfrom sklearn.ensemble import RandomForestClassifier # 2\nfrom sklearn.metrics import accuracy_score # 3\n\n# 학습 데이터 정의\nX = train.drop(columns=[\"PassengerId\", \"Survived\"])\ny = train.Survived\n\n# train-val split\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Training\nclf = RandomForestClassifier()\nclf.fit(X_train, y_train)\n\n# Evaluation  (overfitting check!)\npreds = clf.predict(X_train)\npreds2 = clf.predict(X_val)\nprint(\"Train accuracy : %.4f\" % accuracy_score(y_train, preds))\nprint(\"Validation accuracy : %.4f\" % accuracy_score(y_val, preds2))","metadata":{"execution":{"iopub.status.busy":"2022-07-18T07:56:52.354040Z","iopub.execute_input":"2022-07-18T07:56:52.355457Z","iopub.status.idle":"2022-07-18T07:56:52.708467Z","shell.execute_reply.started":"2022-07-18T07:56:52.355399Z","shell.execute_reply":"2022-07-18T07:56:52.706951Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Prediction","metadata":{}},{"cell_type":"code","source":"# 테스트 데이터 생성\nX_test = test.drop(columns=[\"PassengerId\"])\n\n# 예측\nresult = clf.predict(X_test) # 4\n\n# 제출 파일 생성\nsubmission[\"Survived\"] = result\nsubmission.to_csv(\"submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-18T08:00:28.166325Z","iopub.execute_input":"2022-07-18T08:00:28.166912Z","iopub.status.idle":"2022-07-18T08:00:28.203158Z","shell.execute_reply.started":"2022-07-18T08:00:28.166867Z","shell.execute_reply":"2022-07-18T08:00:28.201699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}