{"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 pandas            as pd\nimport numpy             as np\nimport matplotlib.pyplot as plt\n\nfrom sklearn.decomposition import PCA","metadata":{"_uuid":"3c8082caa41f1bb3e3383e68af5a355dfdfdd48d","execution":{"iopub.status.busy":"2022-07-20T23:43:10.978022Z","iopub.execute_input":"2022-07-20T23:43:10.978568Z","iopub.status.idle":"2022-07-20T23:43:12.689333Z","shell.execute_reply.started":"2022-07-20T23:43:10.978509Z","shell.execute_reply":"2022-07-20T23:43:12.688358Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"FCSV_TRAIN=\"/kaggle/input/titanic/train.csv\"\nFCSV_TESTX=\"/kaggle/input/titanic/test.csv\"\nFCSV_TESTY=\"/kaggle/input/titanic/gender_submission.csv\"\nY=\"Survived\"\nREMOVE=[\"PassengerId\",\"Name\",\"Sex\",\"Embarked\",\"Ticket\",\"Cabin\",\"Age\"]","metadata":{"_uuid":"022dcba422cea76e61eb07a3c1f1e74367e4d5ef","execution":{"iopub.status.busy":"2022-07-20T23:43:12.690860Z","iopub.execute_input":"2022-07-20T23:43:12.691209Z","iopub.status.idle":"2022-07-20T23:43:12.697488Z","shell.execute_reply.started":"2022-07-20T23:43:12.691141Z","shell.execute_reply":"2022-07-20T23:43:12.696213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load training data from train.csv\ndata_train=pd.read_csv(FCSV_TRAIN)\ndata_train=pd.concat([data_train.drop(REMOVE,axis=1),pd.get_dummies(data_train['Sex']),      \\\n                                                     pd.get_dummies(data_train['Embarked'])],axis=1)\ndata_train=data_train.drop(['female'],axis=1)\ndata_train=data_train.drop(['C']     ,axis=1)\ndata_train=data_train.dropna()","metadata":{"_uuid":"352772ad5c9b91be1bcbac350603a4c714efdf95","execution":{"iopub.status.busy":"2022-07-20T23:43:12.698961Z","iopub.execute_input":"2022-07-20T23:43:12.699311Z","iopub.status.idle":"2022-07-20T23:43:12.746232Z","shell.execute_reply.started":"2022-07-20T23:43:12.699247Z","shell.execute_reply":"2022-07-20T23:43:12.745310Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load test data from test.csv and gender_submission.csv\ndata_testx=pd.read_csv(FCSV_TESTX)\ndata_testy=pd.read_csv(FCSV_TESTY)\ndata_test=pd.concat([data_testy,data_testx],axis=1)\ndata_test=pd.concat([data_test.drop(REMOVE,axis=1),pd.get_dummies(data_test['Sex']),      \\\n                                                   pd.get_dummies(data_test['Embarked'])],axis=1)\ndata_test=data_test.drop(['female'],axis=1)\ndata_test=data_test.drop(['C'],axis=1)\ndata_test=data_test.dropna()","metadata":{"_uuid":"eb147a34f68aae6f7b4099a62e5feff48a2ff9cb","execution":{"iopub.status.busy":"2022-07-20T23:43:12.748457Z","iopub.execute_input":"2022-07-20T23:43:12.748776Z","iopub.status.idle":"2022-07-20T23:43:12.792394Z","shell.execute_reply.started":"2022-07-20T23:43:12.748736Z","shell.execute_reply":"2022-07-20T23:43:12.791333Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Incorporate x in training and test data \ndata_all=pd.concat([data_train,data_test])\n\nx_all=data_all.drop([Y],axis=1)\ny_all=data_all[Y]\nx_all_ave=x_all.mean(axis=0)\ny_all_ave=y_all.mean(axis=0)\nx_all_std=x_all.std(axis=0,ddof=1)\ny_all_std=y_all.std(axis=0,ddof=1)","metadata":{"_uuid":"11315e4fe352c5e749887396371de4037c34a860","execution":{"iopub.status.busy":"2022-07-20T23:43:12.795031Z","iopub.execute_input":"2022-07-20T23:43:12.795374Z","iopub.status.idle":"2022-07-20T23:43:12.806550Z","shell.execute_reply.started":"2022-07-20T23:43:12.795303Z","shell.execute_reply":"2022-07-20T23:43:12.805254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Auto-scaling with mean=0 and var=1 for all x variables (case 1)\nxs_all=(x_all-x_all_ave)/x_all_std\nprint(xs_all.mean(axis=0))\nprint(xs_all.std(axis=0,ddof=1))","metadata":{"_uuid":"b18f48a2168bcc6660819c1b73814ed4ce40ac1d","execution":{"iopub.status.busy":"2022-07-20T23:43:12.808327Z","iopub.execute_input":"2022-07-20T23:43:12.808625Z","iopub.status.idle":"2022-07-20T23:43:12.945006Z","shell.execute_reply.started":"2022-07-20T23:43:12.808567Z","shell.execute_reply":"2022-07-20T23:43:12.944282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Auto-scaling with mean=0 and var=1 for four x variables (case 2)\nxs_part_all=x_all\nxs_part_all['Pclass']=(xs_part_all['Pclass']-xs_part_all['Pclass'].mean(axis=0))/xs_part_all['Pclass'].std(axis=0,ddof=1)\nxs_part_all['Parch'] =(xs_part_all['Parch'] -xs_part_all['Parch'].mean(axis=0)) /xs_part_all['Parch'].std(axis=0,ddof=1)\nxs_part_all['SibSp'] =(xs_part_all['SibSp'] -xs_part_all['SibSp'].mean(axis=0)) /xs_part_all['SibSp'].std(axis=0,ddof=1)\nxs_part_all['Fare']  =(xs_part_all['Fare']  -xs_part_all['Fare'].mean(axis=0))  /xs_part_all['Fare'].std(axis=0,ddof=1)\n\nxs_part=pd.concat([xs_part_all['Pclass'],xs_part_all['Parch'],xs_part_all['SibSp'],xs_part_all['Fare']],axis=1)\nprint(xs_part_all.mean(axis=0))\nprint(xs_part_all.std(axis=0,ddof=1))","metadata":{"_uuid":"63440fd03b0a2af8d0e577e281c4f2a4cf9204aa","execution":{"iopub.status.busy":"2022-07-20T23:43:12.946552Z","iopub.execute_input":"2022-07-20T23:43:12.946763Z","iopub.status.idle":"2022-07-20T23:43:12.964789Z","shell.execute_reply.started":"2022-07-20T23:43:12.946730Z","shell.execute_reply":"2022-07-20T23:43:12.963283Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Done PCA for case 1 and calculate some quantities\npca_case1=PCA()\npca_case1.fit(xs_all)\ncontribution_ratios_case1=pca_case1.explained_variance_ratio_ \ncumulative_contribution_ratios_case1=np.cumsum(contribution_ratios_case1)\nscore_case1=pca_case1.transform(xs_all)\n\n# Done PCA for case 2 and calculate some quantities\npca_case2=PCA()\npca_case2.fit(xs_part)\ncontribution_ratios_case2=pca_case2.explained_variance_ratio_ \ncumulative_contribution_ratios_case2=np.cumsum(contribution_ratios_case2)\nscore_case2=pca_case2.transform(xs_part)","metadata":{"_uuid":"052d05ac997259dacb92b08fe7f95322a770f382","_kg_hide-input":false,"execution":{"iopub.status.busy":"2022-07-20T23:43:12.966566Z","iopub.execute_input":"2022-07-20T23:43:12.966877Z","iopub.status.idle":"2022-07-20T23:43:13.065855Z","shell.execute_reply.started":"2022-07-20T23:43:12.966832Z","shell.execute_reply":"2022-07-20T23:43:13.065096Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Show results and visualization of reduced principle component space \n# Show results principle componets\nfig,axes=plt.subplots(ncols=2,figsize=(10,4))\naxes[0].set_xlabel(\"Number of PCs\")\naxes[0].set_ylabel(\"Contribution ratio (blue), Cumulative contribution ratio (red)\")\naxes[0].bar(np.arange(1,len(contribution_ratios_case1)+1),contribution_ratios_case1,align=\"center\")\naxes[0].plot(np.arange(1,len(cumulative_contribution_ratios_case1)+1),cumulative_contribution_ratios_case1,\"ro-\")\naxes[0].grid(linestyle='dashed')\naxes[1].bar(np.arange(1,len(pca_case1.explained_variance_)+1),pca_case1.explained_variance_,align=\"center\")\naxes[1].set_xlabel(\"Number of PCs\")\naxes[1].set_ylabel(\"Eigenvalues\")\naxes[1].grid(linestyle='dashed')\nplt.tight_layout()\nplt.show()\n\n# Plot the reduced PC space: PC_m vs PC_n (m<n)\nfig,axes=plt.subplots(nrows=2,ncols=3,figsize=(10,7))\nm,n=0,0\nfor i in range(4):  \n   for j in range(4):  \n      if j>i: \n         if n==3:\n            m+=1 \n            n =0 \n            if m==2: \n               break                  \n         axes[m,n].grid(True,linestyle='dashed')\n         x_ax_name=\"PC_\"+str(i+1)\n         y_ax_name=\"PC_\"+str(j+1)\n         axes[m,n].set_xlim(-4,8)\n         axes[m,n].set_ylim(-4,8)\n         axes[m,n].set_xlabel(x_ax_name)\n         axes[m,n].set_ylabel(y_ax_name)\n         axes[m,n].set_aspect('equal')\n         axes[m,n].scatter(score_case1[:,i],score_case1[:,j],s=10,c=y_all)\n         n+=1\nplt.tight_layout()\nplt.show()\n# The boxplot of each of principle components             ","metadata":{"_kg_hide-input":true,"_uuid":"596fe9d798082e843439e0ff2e231120cedae38a","execution":{"iopub.status.busy":"2022-07-20T23:43:13.067411Z","iopub.execute_input":"2022-07-20T23:43:13.067679Z","iopub.status.idle":"2022-07-20T23:43:15.022621Z","shell.execute_reply.started":"2022-07-20T23:43:13.067624Z","shell.execute_reply":"2022-07-20T23:43:15.021821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Show results and visualization of reduced principle component space \n# Show results principle componets\nfig,axes=plt.subplots(ncols=2,figsize=(10,4))\naxes[0].set_xlabel(\"Number of PCs\")\naxes[0].set_ylabel(\"Contribution ratio (blue), Cumulative contribution ratio (red)\")\naxes[0].bar(np.arange(1,len(contribution_ratios_case2)+1),contribution_ratios_case2,align=\"center\")\naxes[0].plot(np.arange(1,len(cumulative_contribution_ratios_case2)+1),cumulative_contribution_ratios_case2,\"ro-\")\naxes[0].grid(linestyle='dashed')\naxes[1].bar(np.arange(1,len(pca_case2.explained_variance_)+1),pca_case2.explained_variance_,align=\"center\")\naxes[1].set_xlabel(\"Number of PCs\")\naxes[1].set_ylabel(\"Eigenvalues\")\naxes[1].grid(linestyle='dashed')\nplt.tight_layout()\nplt.show()\n\n# Plot the reduced PC space: PC_m vs PC_n (m<n)\nfig,axes=plt.subplots(nrows=2,ncols=3,figsize=(10,7))\nm,n=0,0\nfor i in range(4):  \n   for j in range(4):  \n      if j>i: \n         if n==3:\n            m+=1 \n            n =0 \n            if m==2: \n               break                  \n         axes[m,n].grid(True,linestyle='dashed')\n         x_ax_name=\"PC_\"+str(i+1)\n         y_ax_name=\"PC_\"+str(j+1)\n         axes[m,n].set_xlim(-4,8)\n         axes[m,n].set_ylim(-4,8)\n         axes[m,n].set_xlabel(x_ax_name)\n         axes[m,n].set_ylabel(y_ax_name)\n         axes[m,n].set_aspect('equal')\n         axes[m,n].scatter(score_case2[:,i],score_case2[:,j],s=10,c=y_all)\n         n+=1\nplt.tight_layout()\nplt.show()         ","metadata":{"_kg_hide-input":true,"_uuid":"3a1c1cff46e4fe9397e007267c8b40ae1be29d4e","execution":{"iopub.status.busy":"2022-07-20T23:43:15.023811Z","iopub.execute_input":"2022-07-20T23:43:15.024162Z","iopub.status.idle":"2022-07-20T23:43:17.019095Z","shell.execute_reply.started":"2022-07-20T23:43:15.024123Z","shell.execute_reply":"2022-07-20T23:43:17.018073Z"},"trusted":true},"execution_count":null,"outputs":[]}]}