{"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":"# Data Importing And Cleaning","metadata":{}},{"cell_type":"code","source":"# Importing Modules\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Reading Files\ntrain = pd.read_csv('../input/titanic/train.csv')\ntest = pd.read_csv('../input/titanic/test.csv')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Number of rows in Train: ' + str(len(train)))\nprint('Number of duplicated rows in Train: ' + str(train.duplicated().sum()))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Number of rows in Test: ' + str(len(test)))\nprint('Number of duplicated rows in Test: ' + str(test.duplicated().sum()))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Getting Complete Info of Data\n\nfor col in train.columns:\n    print(col + ': ' + str(train[col].nunique()) + ' unique values')\nprint('-'*80)\n\nprint('TRAIN INFO:')\nprint(train.info())\nprint('-'*40)\n\nprint('TEST INFO:')\nprint(test.info())\nprint('-'*80)\n\nprint('TRAIN DESCRIPTION:')\nprint(train.describe())\nprint('-'*40)\n\nprint('TEST DESCRIPTION:')\nprint(test.describe())\nprint('-'*80)\n\nprint('Number of NULL values in Train: \\n' + str(train.isnull().sum()))\nprint('-'*40)\n\nprint('Number of NULL values in Test: \\n' + str(test.isnull().sum()))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Cleaning Train Data ","metadata":{}},{"cell_type":"code","source":"# Filling the Missing Values\n\nprint(train['Embarked'].value_counts())\ntrain['Age'] = train['Age'].fillna(train['Age'].mean())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['Embarked'] = train['Embarked'].fillna('S')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Getting Titles of Names\n\ntrain['Title'] = train['Name'].str.extract(' ([A-Za-z]+)\\.', expand=False)\npd.crosstab(train['Title'], train['Sex'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Cleaning and Rearranging Titles in a Proper Format\n\ncommon = ['Master', 'Mr', 'Miss', 'Mrs']\ntrain['Title'] = train['Title'].replace('Mlle', 'Miss')\ntrain['Title'] = train['Title'].replace('Ms', 'Miss')\ntrain['Title'] = train['Title'].replace('Mme', 'Mrs')\ntrain['Title'] = [x if x in common else 'Non Common' for x in train['Title']]\n\ntrain['Title'].value_counts()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Making New Column of Family Size by Combining Siblings(SibSp) and Parents/Children(Parch) Columns\n\ntrain['Family Size'] = train['SibSp'] + train['Parch'] + 1","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Dropping Unnecessary Columns so that Model have good Accuracy\n\ntrain.drop(['Name', 'SibSp', 'Parch', 'PassengerId', 'Cabin', 'Ticket'], axis = 1, inplace = True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Replacing Sex with Categorical Variables\n\ntrain['Sex'].replace(['male', 'female'], [0,1],inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Replacing Embarked and Titles to Categorical Variables by get_dummies() function\n\ntrain1 = pd.get_dummies(train['Embarked'], prefix = 'Embarked', drop_first = True)\ntrain = pd.concat([train.drop('Embarked', axis = 1), train1], axis = 1)\n\ntrain2 = pd.get_dummies(train['Title'], prefix = 'Title', drop_first = True)\ntrain = pd.concat([train.drop('Title', axis = 1), train2], axis = 1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Number of NULL Values in Train: \\n' + str(train.isnull().sum()))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Plotting Correlation of Columns\n\ntrain.corr()\nsns.set(rc = {'figure.figsize':(15,8)})\nCorr_plot = sns.heatmap(train.corr(), cmap=\"YlGnBu\", annot=True)\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Cleaning Test Data","metadata":{}},{"cell_type":"code","source":"# Getting Information of Test Data\n\ntest.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Filling the Missing Values of Age and Fare Column\n\ntest['Age'] = test['Age'].fillna(test['Age'].mean())\ntest['Fare'] = test['Fare'].fillna(test['Fare'].mean())\n\n\n# Making New Column of Family Size\n\ntest['Family Size'] = test['SibSp'] + test['Parch'] + 1\n\n\n# Changing Sex to Categorical Data\n\ntest['Sex'].replace(['male', 'female'], [0,1],inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Extracting Titles from Names of Passengers\n\ntest['Title'] = test['Name'].str.extract(' ([A-Za-z]+)\\.', expand=False)\npd.crosstab(test['Title'], test['Sex'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Cleaning and Rearranging Titles in a Proper Format\n\ncommon = ['Master', 'Mr', 'Miss', 'Mrs']\ntest['Title'] = test['Title'].replace('Mlle', 'Miss')\ntest['Title'] = test['Title'].replace('Ms', 'Miss')\ntest['Title'] = test['Title'].replace('Mme', 'Mrs')\ntest['Title'] = [x if x in common else 'Non Common' for x in test['Title']]\n\ntest['Title'].value_counts()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Replacing Embarked and Titles to Categorical Variables by get_dummies() function\n\ntest1 = pd.get_dummies(test['Embarked'], prefix = 'Embarked', drop_first = True)\ntest = pd.concat([test.drop('Embarked', axis = 1), test1], axis = 1)\ntest2 = pd.get_dummies(test['Title'], prefix = 'Title', drop_first = True)\ntest = pd.concat([test.drop('Title', axis = 1), test2], axis = 1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Droping the Unnecessary Columns from Test Data\n\ntest.drop(['Name', 'SibSp', 'Parch', 'Cabin', 'Ticket'], axis = 1, inplace = True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Checking If there is any null value remaining or Not\n\nprint('Number of NULL Values in Test: \\n' + str(test.isnull().sum()))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Dividing the training data to data to fit the model\n\nX = train.drop(columns = 'Survived')\ny = train.Survived","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Modeling","metadata":{}},{"cell_type":"code","source":"# We will be using the Decision Tree Classifier for our Modeling\n\nfrom sklearn.tree import DecisionTreeClassifier\n\ndtc = DecisionTreeClassifier()\ndtc.fit(X, y)\n\n# Calculating The Accuracy Score of our Model\ndtc_acc = dtc.score(X, y)\nprint('Accuracy Score: ' + str(dtc_acc))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dtc = DecisionTreeClassifier(random_state=42, max_depth = 4, max_features = 'auto')\ndtc.fit(X, y)\n\n# Predicting Our Test Data\nX_test = test.drop('PassengerId', axis = 1)\nprediction = dtc.predict(X_test)\n\n# Converting Our output to DataFrame and then Writing the CSV File\noutput = pd.DataFrame({'PassengerId': test.PassengerId,\n                      'Survived': prediction})\n\noutput.to_csv('Titanic Submission Test Data.csv', index= False)","metadata":{},"execution_count":null,"outputs":[]}]}