{"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":"markdown","source":"<center><img src=\"https://ichef.bbci.co.uk/news/800/cpsprodpb/91D1/production/_108392373_mediaitem108392372.jpg\"></center>\n\n# <center>**TITANIC**</center>\n\n## **INDEX**\n\n1. [Imports and Data](#import)\n2. [EDA](#eda)\n    1. [Overview](#overview)\n    2. [Age](#age)\n    3. [Survived](#class)\n    4. [Heatmap](#heatmap)\n3. [Models](#models)\n    1. [Decision Tree](#decisiontree)\n    2. [Random Forest](#randomforest)\n    3. [K-Nearest-Neighbor](#knn)\n3. [Submit File](#submit)\n\n    \n\n\n","metadata":{"execution":{"iopub.status.busy":"2022-07-15T08:21:13.608427Z","iopub.execute_input":"2022-07-15T08:21:13.609141Z","iopub.status.idle":"2022-07-15T08:21:13.614479Z","shell.execute_reply.started":"2022-07-15T08:21:13.609102Z","shell.execute_reply":"2022-07-15T08:21:13.613012Z"}}},{"cell_type":"markdown","source":"# **1. Imports and Data** <a id=\"imports\"></a>","metadata":{}},{"cell_type":"code","source":"#importamos las librerias y comprobamos los ficheros\n#import the libraries and check the files\nimport numpy as np \nimport pandas as pd \nimport seaborn as sns\nimport os\nimport matplotlib.pyplot as plt\n\npd.options.mode.chained_assignment = None\n\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-22T16:11:59.831444Z","iopub.execute_input":"2022-07-22T16:11:59.832134Z","iopub.status.idle":"2022-07-22T16:11:59.857003Z","shell.execute_reply.started":"2022-07-22T16:11:59.832067Z","shell.execute_reply":"2022-07-22T16:11:59.855686Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Cargamos los datos en dataframes\n#load the data into dataframes\ntrain_data = pd.read_csv(\"/kaggle/input/titanic/train.csv\")\ntest_data = pd.read_csv(\"/kaggle/input/titanic/test.csv\")\n\n","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2022-07-22T16:11:59.859488Z","iopub.execute_input":"2022-07-22T16:11:59.860258Z","iopub.status.idle":"2022-07-22T16:11:59.881388Z","shell.execute_reply.started":"2022-07-22T16:11:59.860205Z","shell.execute_reply":"2022-07-22T16:11:59.880216Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **2. EDA**  <a id=\"eda\"></a>","metadata":{}},{"cell_type":"markdown","source":"## **2.1 overview** <a id=\"eda\"></a>","metadata":{}},{"cell_type":"code","source":"#Miramos algunas filas del dataset\n#We look at some rows of the dataset\ntrain_data.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:11:59.883319Z","iopub.execute_input":"2022-07-22T16:11:59.883817Z","iopub.status.idle":"2022-07-22T16:11:59.905443Z","shell.execute_reply.started":"2022-07-22T16:11:59.883769Z","shell.execute_reply":"2022-07-22T16:11:59.904299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Estadisticas generales\n#general statistics\ntrain_data.describe()","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:11:59.907079Z","iopub.execute_input":"2022-07-22T16:11:59.907742Z","iopub.status.idle":"2022-07-22T16:11:59.953707Z","shell.execute_reply.started":"2022-07-22T16:11:59.907693Z","shell.execute_reply":"2022-07-22T16:11:59.952686Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Nulos (Nulls)\ntrain_data.isna().sum()","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:11:59.957132Z","iopub.execute_input":"2022-07-22T16:11:59.957457Z","iopub.status.idle":"2022-07-22T16:11:59.966519Z","shell.execute_reply.started":"2022-07-22T16:11:59.957417Z","shell.execute_reply":"2022-07-22T16:11:59.965637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Rellenamos los valores nulos\n#Fill the null values\n\n#train\ntrain_data['Age'] = train_data['Age'].fillna(train_data['Age'].median())\ntrain_data['Cabin'] = train_data['Cabin'].fillna('NotSet')\ntrain_data['Embarked'] = train_data['Embarked'].fillna('N')\n#test\ntest_data['Age'] = test_data['Age'].fillna(test_data['Age'].median())\ntest_data['Cabin'] = test_data['Cabin'].fillna('NotSet')\ntest_data['Embarked'] = test_data['Embarked'].fillna('N')","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:11:59.969830Z","iopub.execute_input":"2022-07-22T16:11:59.970274Z","iopub.status.idle":"2022-07-22T16:11:59.982703Z","shell.execute_reply.started":"2022-07-22T16:11:59.970229Z","shell.execute_reply":"2022-07-22T16:11:59.981627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **2.2 Ages** <a id=\"age\"></a>","metadata":{}},{"cell_type":"code","source":"#distribucion de edades\n#Age distribution\nsns.set(color_codes=True)\nsns.distplot(train_data['Age'])","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:11:59.984198Z","iopub.execute_input":"2022-07-22T16:11:59.984837Z","iopub.status.idle":"2022-07-22T16:12:00.313694Z","shell.execute_reply.started":"2022-07-22T16:11:59.984794Z","shell.execute_reply":"2022-07-22T16:12:00.312596Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **2.3 Survived** <a id=\"survived\"></a>","metadata":{}},{"cell_type":"markdown","source":"### 2.3.1 Sex","metadata":{}},{"cell_type":"code","source":"#supervivencia por sexo\n#survival by sex\ntrain_data[['Sex','Survived']].groupby('Sex').sum()#.values.tolist()\n","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:00.315251Z","iopub.execute_input":"2022-07-22T16:12:00.315893Z","iopub.status.idle":"2022-07-22T16:12:00.333397Z","shell.execute_reply.started":"2022-07-22T16:12:00.315841Z","shell.execute_reply":"2022-07-22T16:12:00.332347Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ndf_survivedsex=train_data[['Sex','Survived']]\n\ndef superviviente (row):\n    if row['Survived'] == 1 :\n        return 0\n    else:\n        return 1\n\ndf_survivedsex['NotSurvived']=df_survivedsex.apply (lambda row: superviviente(row), axis=1)\n\ndf_survivedsex=df_survivedsex.groupby('Sex').sum()\n\ndf_survivedsex.plot(kind = 'bar' \n             , stacked = 'True'          # Muestra las barras apiladas\n             , alpha = 0.4               # nivel de transparencia\n             , width = 0.9               # Grosor de las barras para dejar espacio entre ellas\n             ,figsize=(7,6)              # Cambiamos el tamaño de la figura\n            );            ","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:00.334743Z","iopub.execute_input":"2022-07-22T16:12:00.335190Z","iopub.status.idle":"2022-07-22T16:12:00.539770Z","shell.execute_reply.started":"2022-07-22T16:12:00.335142Z","shell.execute_reply":"2022-07-22T16:12:00.538824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 2.3.2 Class","metadata":{}},{"cell_type":"code","source":"#supervivencia por clase\n#survival by class\ntrain_data[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:00.541066Z","iopub.execute_input":"2022-07-22T16:12:00.541375Z","iopub.status.idle":"2022-07-22T16:12:00.560084Z","shell.execute_reply.started":"2022-07-22T16:12:00.541345Z","shell.execute_reply":"2022-07-22T16:12:00.558627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_survivedclass=train_data[['Pclass','Survived']]\ndf_survivedclass['NotSurvived']=df_survivedclass.apply (lambda row: superviviente(row), axis=1)\ndf_survivedclass=df_survivedclass.groupby('Pclass').sum()\n\ndf_survivedclass.plot(kind = 'bar', \n             stacked = 'True',          # Muestra las barras apiladas\n             alpha = 0.4,               # nivel de transparencia\n             width = 0.9,               # Grosor de las barras para dejar espacio entre ellas\n             figsize=(7,6));            # Cambiamos el tamaño de la figura\n","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:00.561604Z","iopub.execute_input":"2022-07-22T16:12:00.562023Z","iopub.status.idle":"2022-07-22T16:12:00.765163Z","shell.execute_reply.started":"2022-07-22T16:12:00.561978Z","shell.execute_reply":"2022-07-22T16:12:00.764228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:00.766550Z","iopub.execute_input":"2022-07-22T16:12:00.767137Z","iopub.status.idle":"2022-07-22T16:12:00.795929Z","shell.execute_reply.started":"2022-07-22T16:12:00.767090Z","shell.execute_reply":"2022-07-22T16:12:00.794862Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **2.4 Heatmap** <a id=\"heatmap\"></a>","metadata":{}},{"cell_type":"code","source":"#Mapa de calor\n#heatmap\ndf_mapa=train_data[['Survived','Pclass','Sex','Age','SibSp','Parch','Fare']]\ndf_mapa=pd.get_dummies(df_mapa, columns=['Sex'])\nax = sns.heatmap(df_mapa.corr(), cmap=\"PiYG\")","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:00.797317Z","iopub.execute_input":"2022-07-22T16:12:00.797692Z","iopub.status.idle":"2022-07-22T16:12:01.105462Z","shell.execute_reply.started":"2022-07-22T16:12:00.797658Z","shell.execute_reply":"2022-07-22T16:12:01.104681Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **3. Models**  <a id=\"models\"></a>","metadata":{}},{"cell_type":"code","source":"#Borramos Id, Ticket y name. Pensamos que no son relevantes\n#Delete Id, Ticket and name. We think they are not relevant\ntrain_data_2 = train_data.drop([\"PassengerId\",\"Ticket\",\"Name\"], axis=1)\ntest_data_2 = test_data.drop([\"PassengerId\",\"Ticket\",\"Name\"], axis=1)\n\n#Categorias a columnas\n#Categories to columns\ntrain_data_2 = pd.get_dummies(train_data_2, columns=[\"Sex\", \"Cabin\", \"Embarked\"])\ntest_data_2 = pd.get_dummies(test_data_2, columns=[\"Sex\", \"Cabin\", \"Embarked\"])\n\n#Rellenamos los nulos con la media\n#FillNa  wiith mean\ntrain_data_2 = train_data_2.fillna(train_data_2.mean())\ntest_data_2 = test_data_2.fillna(test_data_2.mean())\n\ntest_data_2 = test_data_2.reindex(columns = train_data_2.columns, fill_value=0)\ntest_data_2=test_data_2.drop(['Survived'], axis=1)\n\n#Separamos el dataset en entrenamiento y validación\n#separate the dataset into training and validation\nfrom sklearn.model_selection import train_test_split\n#X, Y = imputeddata.drop([\"Survived\"], axis=1), imputeddata[\"Survived\"]\nXtrain, Xtest, Ytrain, Ytest = train_test_split(train_data_2.drop([\"Survived\"], axis=1), train_data_2[\"Survived\"], test_size=0.33)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:01.106555Z","iopub.execute_input":"2022-07-22T16:12:01.107003Z","iopub.status.idle":"2022-07-22T16:12:01.193751Z","shell.execute_reply.started":"2022-07-22T16:12:01.106970Z","shell.execute_reply":"2022-07-22T16:12:01.192752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 3.1 Decision Tree <a id=\"decisiontree\"></a>","metadata":{}},{"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier\n\n#Creamos instancia de DecisionTree\n#create an instance of decisiontree\ndecisiontree = DecisionTreeClassifier()\n","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:01.195453Z","iopub.execute_input":"2022-07-22T16:12:01.196115Z","iopub.status.idle":"2022-07-22T16:12:01.201399Z","shell.execute_reply.started":"2022-07-22T16:12:01.196054Z","shell.execute_reply":"2022-07-22T16:12:01.200390Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import tree\nfrom graphviz import Source\n\n#Función que retorna la visualización\n#Function that returns the visualization\n\ndef plottree(decisiontree, features_names=None, class_names=None):\n    \"\"\"Returns a graphviz visualization of a scikit-learn decision tree\n    \n    Inputs\n        - decisiontree: tree to visualize\n        - feature_names: iterable with the names of the features present in the data.\n        - class_names: iterable with the names of the classes present in the data, in increasing order.\n        \n    If the call to this function is the last line of a notebook cell, the tree is rendered automatically.\n    \"\"\"\n    dot_data = tree.export_graphviz(\n        decisiontree, \n        out_file=None, \n        filled=True, \n        rounded=True, \n        rotate=True,\n        feature_names=features_names,\n        class_names=class_names\n    )\n    return Source(dot_data)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:01.202898Z","iopub.execute_input":"2022-07-22T16:12:01.203217Z","iopub.status.idle":"2022-07-22T16:12:01.215005Z","shell.execute_reply.started":"2022-07-22T16:12:01.203185Z","shell.execute_reply":"2022-07-22T16:12:01.214029Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Entrenamos el modelo\n#Train the model\ndecisiontree = DecisionTreeClassifier()\ndecisiontree.fit(Xtrain, Ytrain)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:01.216626Z","iopub.execute_input":"2022-07-22T16:12:01.217164Z","iopub.status.idle":"2022-07-22T16:12:01.240195Z","shell.execute_reply.started":"2022-07-22T16:12:01.217115Z","shell.execute_reply":"2022-07-22T16:12:01.239013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Precisión del modelo\n#Accuracy\nfrom sklearn.metrics import accuracy_score\n\nYpred = decisiontree.predict(Xtest)\ndecision_tree_model_acc = accuracy_score(Ypred, Ytest) * 100\nprint(\"Accuracy:\", decision_tree_model_acc)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:01.241441Z","iopub.execute_input":"2022-07-22T16:12:01.241963Z","iopub.status.idle":"2022-07-22T16:12:01.252685Z","shell.execute_reply.started":"2022-07-22T16:12:01.241928Z","shell.execute_reply":"2022-07-22T16:12:01.251566Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Mostramos el arbol generado\n#Show the generated tree\nplottree(decisiontree, features_names=Xtrain.columns, class_names=[\"Deceased\", \"Survived\"])","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:01.254143Z","iopub.execute_input":"2022-07-22T16:12:01.254654Z","iopub.status.idle":"2022-07-22T16:12:01.430928Z","shell.execute_reply.started":"2022-07-22T16:12:01.254612Z","shell.execute_reply":"2022-07-22T16:12:01.429895Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 3.2 Random Forest <a id=\"randomforest\"></a>","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\n\nrandom_forest_model = RandomForestClassifier(criterion='gini',\n                                            n_estimators=1750,\n                                            max_depth=7,\n                                            min_samples_split=6,\n                                            min_samples_leaf=6,\n                                            max_features='auto',\n                                            verbose=1,\n                                            random_state = 3)\n\nrandom_forest_model.fit(Xtrain, Ytrain)\nYpred = random_forest_model.predict(Xtest)\nrandom_forest_model_acc = accuracy_score(Ypred, Ytest) * 100\nprint(\"Accuracy:\", random_forest_model_acc)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:01.432508Z","iopub.execute_input":"2022-07-22T16:12:01.432850Z","iopub.status.idle":"2022-07-22T16:12:05.209217Z","shell.execute_reply.started":"2022-07-22T16:12:01.432816Z","shell.execute_reply":"2022-07-22T16:12:05.208063Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfn=train_data_2.drop([\"Survived\"], axis=1).columns.to_numpy()\ncn=np.array(['Decease', 'Survived'])\nfig, axes = plt.subplots(nrows = 1,ncols = 1,figsize = (5,5), dpi=800)\ntree.plot_tree(random_forest_model.estimators_[0],\n               feature_names = fn, \n               class_names=cn,\n               filled = True);","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:05.210508Z","iopub.execute_input":"2022-07-22T16:12:05.210821Z","iopub.status.idle":"2022-07-22T16:12:06.375914Z","shell.execute_reply.started":"2022-07-22T16:12:05.210792Z","shell.execute_reply":"2022-07-22T16:12:06.374919Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 3.3 K-Nearest-Neighbor <a id=\"knn\"></a>","metadata":{}},{"cell_type":"code","source":"from sklearn import metrics\nfrom sklearn.neighbors import KNeighborsClassifier\n\nk_range = range(1,26)\nscores=[]\n\nfor k in k_range:\n    knn = KNeighborsClassifier(n_neighbors=k)\n    knn.fit(Xtrain, Ytrain)\n    Ypred = knn.predict(Xtest)\n    scores.append(metrics.accuracy_score(Ytest,Ypred))\nprint(scores)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:06.377248Z","iopub.execute_input":"2022-07-22T16:12:06.377535Z","iopub.status.idle":"2022-07-22T16:12:07.364401Z","shell.execute_reply.started":"2022-07-22T16:12:06.377507Z","shell.execute_reply":"2022-07-22T16:12:07.363532Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nplt.plot(k_range, scores)\nplt.xlabel('Value of k for KNN')\nplt.ylabel('Testing Accuracy')","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:07.365787Z","iopub.execute_input":"2022-07-22T16:12:07.366106Z","iopub.status.idle":"2022-07-22T16:12:07.643490Z","shell.execute_reply.started":"2022-07-22T16:12:07.366075Z","shell.execute_reply":"2022-07-22T16:12:07.642420Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#K value equal 9 has the highest accuracy rate.\n\nknn = KNeighborsClassifier(n_neighbors=9)\nknn.fit(Xtrain, Ytrain)\nYpred = knn.predict(Xtest)\nprint(metrics.accuracy_score(Ytest,Ypred))","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:07.645095Z","iopub.execute_input":"2022-07-22T16:12:07.645489Z","iopub.status.idle":"2022-07-22T16:12:07.696504Z","shell.execute_reply.started":"2022-07-22T16:12:07.645455Z","shell.execute_reply":"2022-07-22T16:12:07.695399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **4. Submit File** <a id=\"submit\"></a>","metadata":{}},{"cell_type":"code","source":"#TEST DATA\n#test_data = test_data.drop([\"PassengerId\",\"Ticket\",\"Name\"], axis=1)\n#test_data = pd.get_dummies(test_data, columns=[\"Sex\", \"Cabin\", \"Embarked\"])\n#test_data = test_data.fillna(test_data.mean())\n\n\nYpred = knn.predict(test_data_2)\n\nSubmission = pd.DataFrame({\n\"PassengerId\": test_data[\"PassengerId\"],\n\"Survived\": Ypred\n})\n\nSubmission.to_csv('my_submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-22T16:12:07.697710Z","iopub.execute_input":"2022-07-22T16:12:07.698015Z","iopub.status.idle":"2022-07-22T16:12:08.115184Z","shell.execute_reply.started":"2022-07-22T16:12:07.697979Z","shell.execute_reply":"2022-07-22T16:12:08.114208Z"},"trusted":true},"execution_count":null,"outputs":[]}]}