{"cells":[{"metadata":{"trusted":true,"_uuid":"a8358c550e5ef7fc8840b86897c7e26a6f83f052"},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sb\nimport math","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"921b59858d46e0e5816625e00e8edf297339c0c6"},"cell_type":"code","source":"titanic=pd.read_csv('../input/train.csv')\ntitanic.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5e6a3c71f6fb4d5219155233c0ced66ad971729f"},"cell_type":"code","source":"titanic=titanic.fillna(method='ffill').fillna(method='bfill')\ntitanic.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"589645c88ce02ea6125a053de5458d94a712a888"},"cell_type":"code","source":"titanic.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1faa57f28d6299cb23974b317760225f6071ee1b"},"cell_type":"code","source":"titanic.describe()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"6a9032006659d78f77cae1f2730cfb39469cdfd6"},"cell_type":"code","source":"def split(passenger):\n    age,sex=passenger\n    if age <18:return 'child/teen'\n    elif (age>=18 and age <50): return 'young'\n    else: return 'old'\ntitanic['AgeGroup']=titanic[['Age','Sex']].apply(split,axis=1)\n\n#titanic=pd.read_csv('train.csv')\n\n\nchildren=titanic.loc[titanic['AgeGroup']=='child/teen']\nyoung=titanic.loc[(titanic['AgeGroup']=='young')]\nold=titanic.loc[titanic['AgeGroup']=='old']\ntitanic.head()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"311d5e673add692f4818039c1769d7cf896e4b5a"},"cell_type":"code","source":"children.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7ebb815cee8b4637ecc00f20029fa907fa10bf53"},"cell_type":"code","source":"young.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1141aaeb2af9df70e9a26474278f7a571269bc5c"},"cell_type":"code","source":"old.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bd7bd15e992bb99b367ea4334e8a28ee38af8703"},"cell_type":"code","source":"male=titanic.loc[titanic['Sex']=='male']\nfemale=titanic.loc[titanic['Sex']=='female']","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"da973ea749e0b1b72f98a7726038c02890452075"},"cell_type":"code","source":"male.head(5)","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"effb33fe40d6354abfe6d397112b03754f041e5e"},"cell_type":"code","source":"female.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"330cd38872637315d2eae9362522c62e033aba94"},"cell_type":"code","source":"plt.pie(titanic['Sex'].value_counts().values,labels=titanic['Sex'].value_counts().index,autopct='%1.1f%%')\nplt.title('Male and Female %',color='red')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"09d84aab35537da68fde9a45d501864899a40671"},"cell_type":"code","source":"plt.pie(titanic['AgeGroup'].value_counts().values,labels=titanic['AgeGroup'].value_counts().index,autopct='%1.1f%%')\nplt.title('% of different Age Groups:',color='red')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"92c9cb1763018c522f58ef34b47fd2cef15c4ed0"},"cell_type":"code","source":"titanic['Age'].hist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"252799c1c07a418c28ea8b22b927917f2f7c0801"},"cell_type":"code","source":"sb.catplot('Sex',kind='count',hue='AgeGroup',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2053d1924060c2177971e12bd6d41109384244e8"},"cell_type":"code","source":"sb.boxplot(x='Embarked',y='Age',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5125c9211d687a5dc4fd1afe055ff8783fc6d53a"},"cell_type":"code","source":"sb.swarmplot(x='Sex',y='Age',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"38948ddb5f825d4f95957a77375e306d524a411c"},"cell_type":"code","source":"plt.pie(titanic['Survived'].value_counts().values,labels=titanic['Survived'].value_counts().index,autopct='%1.1f%%')\nplt.title('1:Survived, 0:Not survived :',color='red')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aa3f78019c6c2040577fdfc05f9c54c61d4ef202"},"cell_type":"code","source":"sb.catplot('Survived',kind='count',hue='AgeGroup',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"72036c1004bd2f088435064a8a8bb1a3c246a599"},"cell_type":"code","source":"titanic['AloneOrNot']=titanic['SibSp']+titanic['Parch']\ntitanic.loc[titanic['AloneOrNot']==0,'AloneOrNot']=0\ntitanic.loc[titanic['AloneOrNot']>0,'AloneOrNot']=1\ntitanic.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f13f539a5c6a98b7d4bcf21efd1a35d545a36764"},"cell_type":"code","source":"sb.swarmplot(x='AloneOrNot',y='Age',hue='Sex',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b16ff89c90060b3b492aa6ee9883237d62bd098d"},"cell_type":"code","source":"sb.catplot('Survived',kind='count',hue='Embarked',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4fe69d2feea246f085d00d37958b26c60918a577"},"cell_type":"code","source":"sb.catplot('Survived',kind='count',hue='Sex',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c94a43166e1d2760f9e486e8a3f34ac55f16e7d8"},"cell_type":"code","source":"sb.catplot('Survived',kind='count',hue='AloneOrNot',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2373db6e6a18ee1905b6f0c10a970fd781a3af0d"},"cell_type":"code","source":"#sb.catplot('Pclass',kind='count',data=titanic)\nplt.pie(titanic['Pclass'].value_counts().values,labels=titanic['Pclass'].value_counts().index,autopct='%1.1f%%')\nplt.title('Classes: 1,2 and 3:',color='red')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e07ad45ed6ff66b3ddd0d52e4db2c9a9cd20c575"},"cell_type":"code","source":"sb.catplot('Survived',kind='count',hue='AgeGroup',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1178383155eabc49d1180ba5e5cb9eb0345ca6d7"},"cell_type":"code","source":"sb.catplot('Survived',kind='count',hue='Pclass',data=titanic)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d15b2d36d1665896322653b6d5af17f1b3639d33"},"cell_type":"code","source":"titanic.loc[:,'Fare'].hist()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"306249efb9575504e68bd22069d64420a97e614c"},"cell_type":"markdown","source":"# Confusion Matrices (Function):"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"e4455fb76bf0dbf6f778771dee6ee58fcb8e8ae6"},"cell_type":"code","source":"# Elements Of Confusion Matrices:\ndef confusionmatrices(n,tp,tn,fp,fn):\n    print('Total values of test data: ',n)\n    print('True Positive',tp)\n    print('False Positive',fp)\n    print('False Negative',fn)\n    print('True Negative',tn)\n    print('So:')\n    accuracy=(tp+tn)*100/(tp+tn+fp+fn)\n    recall=(tp)*100/(tp+fn)\n    precision=(tp)*100/(tp+fp)\n    f1=(2*precision*recall)/(precision+recall)\n    print('Accuracy = ',accuracy,'%')\n    print('Recall = ',recall,'%')\n    print('Precision = ',precision,'%')\n    print('F1 Score = ',f1,'%')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3810b0802940a6e57f2037d2aefb2dd510be6f43"},"cell_type":"markdown","source":"# KNN Algorithm:"},{"metadata":{"scrolled":true,"trusted":true,"_uuid":"5f8e954b0c3641a040fde19bd7626cf07261eb49"},"cell_type":"code","source":"#KNN Algorithm (No any biult-in modules):\n\n#separation of training data and test data (cross validation):\ntrainval=titanic.loc[:830,'PassengerId':'AloneOrNot']\ntestval=titanic.loc[831:,'PassengerId':'AloneOrNot']\n\n#values of k:\n#k=int(math.sqrt(trainval.shape[0]))\nk=7\n# for confusion matrices:\ntp=tn=fp=fn=0\n\n# this processes for all values of test data:\nfor i in range(trainval.shape[0],trainval.shape[0]+testval.shape[0]):  \n#for i in range(trainval.shape[0],trainval.shape[0]+testval.shape[0]):      \n    \n    # finding eucledian distance:\n    euc_dist=np.sqrt(((testval.loc[i,'Fare']-trainval['Fare'])**2)+((testval.loc[i,'AloneOrNot']-trainval['AloneOrNot'])**2)+((testval.loc[i,'Age']-trainval['Age'])**2)+((testval.loc[i,'Pclass']-trainval['Pclass'])**2))\n    trainval['Distance']=euc_dist\n    \n    # sorting the dataset according to the column of distance:\n    newvals=trainval.sort_values('Distance')\n    \n    # actual survival status:\n    print('Actual Survival status of test data (person#',i,'): ',testval.loc[i,'Survived'])\n    \n    # predicted survival status:\n    if newvals['Survived'].head(k).value_counts().max()==newvals['Survived'].head(k).value_counts()[0]:\n        predicted=newvals['Survived'].value_counts().index[0]\n    elif newvals['Survived'].head(k).value_counts().max()==newvals['Survived'].head(k).value_counts()[1]:\n        predicted=newvals['Survived'].value_counts().index[1]\n    print('Predicted Survival status of test data (person#',i,'): ',predicted,'\\n')\n    \n    # for the calculation of confusion matrices:\n    if testval.loc[i,'Survived']==1 and predicted==1: tp+=1\n    elif testval.loc[i,'Survived']==1 and predicted==0: fp+=1\n    elif testval.loc[i,'Survived']==0 and predicted==1: fn+=1\n    elif testval.loc[i,'Survived']==0 and predicted==0: tn+=1\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7031c62ee6caff9f1906c4f2c0a7e982c030398b"},"cell_type":"code","source":"#Checking KNN Accuracy:\nconfusionmatrices(testval.shape[0],tp,tn,fp,fn)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"0edf23c253428553e811ea9c426649dacf047ebf"},"cell_type":"markdown","source":"# Naive Bayes Approach "},{"metadata":{"trusted":true,"_uuid":"eeefdc5fa77603d2821f80215537b6716ccdd69b"},"cell_type":"code","source":"# Naive Bayes Approach (pclass, sex, alone or not)\n\ntitanic=titanic.loc[:,'PassengerId':'AloneOrNot']\n#titanic\n\n# Pclass:\nx01=titanic.loc[(titanic['Survived']==1)]\nx01=x01.loc[(x01['Pclass']==3),'Pclass']\n\nx11=titanic.loc[(titanic['Survived']==1)]\nx11=x11.loc[(x11['Pclass']==1),'Pclass']\n\nx21=titanic.loc[(titanic['Survived']==1)]\nx21=x21.loc[(x21['Pclass']==2),'Pclass']\n\nx02=titanic.loc[(titanic['Survived']==0)]\nx02=x02.loc[(x02['Pclass']==3),'Pclass']\n\nx12=titanic.loc[(titanic['Survived']==0)]\nx12=x12.loc[(x12['Pclass']==1),'Pclass']\n\nx22=titanic.loc[(titanic['Survived']==0)]\nx22=x22.loc[(x22['Pclass']==2),'Pclass']\n\n#Sex\ny01=titanic.loc[(titanic['Survived']==1)]\ny01=y01.loc[(y01['Sex']=='male'),'Sex']\n\ny11=titanic.loc[(titanic['Survived']==1)]\ny11=y11.loc[(y11['Sex']=='female'),'Sex']\n\ny02=titanic.loc[(titanic['Survived']==0)]\ny02=y02.loc[(y02['Sex']=='male'),'Sex']\n\ny12=titanic.loc[(titanic['Survived']==0)]\ny12=y12.loc[(y12['Sex']=='female'),'Sex']\n\n# Alone Or Not:\nz01=titanic.loc[(titanic['Survived']==1)]\nz01=z01.loc[(z01['AloneOrNot']==0),'AloneOrNot']\n\nz11=titanic.loc[(titanic['Survived']==1)]\nz11=z11.loc[(z11['AloneOrNot']==1),'AloneOrNot']\n\nz02=titanic.loc[(titanic['Survived']==0)]\nz02=z02.loc[(z02['AloneOrNot']==0),'AloneOrNot']\n\nz12=titanic.loc[(titanic['Survived']==0)]\nz12=z12.loc[(z12['AloneOrNot']==1),'AloneOrNot']\n\n# Frequency Tables:\nprint('Frequency Tables:')\npclass_freq=pd.DataFrame(np.array([[titanic['Pclass'].value_counts().index[0],x01.value_counts(),x02.value_counts()],[titanic['Pclass'].value_counts().index[1],x11.value_counts(),x12.value_counts()],[titanic['Pclass'].value_counts().index[2],x21.value_counts(),x22.value_counts()]]),columns=['Pclass','Yes', 'No'])\nprint(pclass_freq)\nprint()\n\nsex_freq=pd.DataFrame(np.array([[1,y01.value_counts(),y02.value_counts()],[0,y11.value_counts(),y12.value_counts()]]),columns=['Sex','Yes','No'])\nprint(sex_freq)\nprint()\n\nalone_freq=pd.DataFrame(np.array([[titanic['AloneOrNot'].value_counts().index[0],z01.value_counts(),z02.value_counts()],[titanic['AloneOrNot'].value_counts().index[1],z11.value_counts(),z12.value_counts()]]),columns=['AloneOrNot','Yes', 'No'])\nprint(alone_freq)\nprint()\n\n# Likelihood Tables:\nprint('Likelihood Tables:\\n')\n\npclass_likelihood=pd.DataFrame(np.array([[titanic['Pclass'].value_counts().index[0],x01.value_counts()/titanic['Survived'].value_counts().values[1],x02.value_counts()/titanic['Survived'].value_counts().values[0]],[titanic['Pclass'].value_counts().index[1],x11.value_counts()/titanic['Survived'].value_counts().values[1],x12.value_counts()/titanic['Survived'].value_counts().values[0]],[titanic['Pclass'].value_counts().index[2],x21.value_counts()/titanic['Survived'].value_counts().values[1],x22.value_counts()/titanic['Survived'].value_counts().values[0]]]),columns=['Pclass','Yes', 'No'])\nprint(pclass_likelihood)\nprint()\n\nsex_likelihood=pd.DataFrame(np.array([[1,y01.value_counts()/titanic['Survived'].value_counts().values[1],y02.value_counts()/titanic['Survived'].value_counts().values[0]],[0,y11.value_counts()/titanic['Survived'].value_counts().values[1],y12.value_counts()/titanic['Survived'].value_counts().values[0]]]),columns=['Sex','Yes','No'])\nprint(sex_likelihood)\nprint()\n\nalone_likelihood=pd.DataFrame(np.array([[titanic['AloneOrNot'].value_counts().index[0],z01.value_counts()/titanic['Survived'].value_counts().values[1],z02.value_counts()/titanic['Survived'].value_counts().values[0]],[titanic['AloneOrNot'].value_counts().index[1],z11.value_counts()/titanic['Survived'].value_counts().values[1],z12.value_counts()/titanic['Survived'].value_counts().values[0]]]),columns=['AloneOrNot','Yes', 'No'])\nprint(alone_likelihood)\nprint()\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"60ada88d4cc1f423f271557798aa11012a8bebec"},"cell_type":"code","source":"# Naive Bayes Test on Test-Data:\n\ntest=testval\n\nprob_no=titanic['Survived'].value_counts().values[0]/titanic['Survived'].value_counts().sum()\nprob_yes=titanic['Survived'].value_counts().values[1]/titanic['Survived'].value_counts().sum()\n\ntp=tn=fp=fn=0\n\nfor i in range(testval.index[0],testval.index[0]+testval.shape[0]):  \n    likelihood_yes=likelihood_no=1\n\n    if testval.loc[i,'Pclass']==3:\n        likelihood_yes*=pclass_likelihood.loc[0,'Yes']\n        likelihood_no*=pclass_likelihood.loc[0,'No']\n    elif testval.loc[i,'Pclass']==1:\n        likelihood_yes*=pclass_likelihood.loc[1,'Yes']\n        likelihood_no*=pclass_likelihood.loc[1,'No']\n    elif testval.loc[i,'Pclass']==2:\n        likelihood_yes*=pclass_likelihood.loc[2,'Yes']\n        likelihood_no*=pclass_likelihood.loc[2,'No']\n\n    if testval.loc[i,'Sex']==1:\n        likelihood_yes*=sex_likelihood.loc[0,'Yes']\n        likelihood_no*=sex_likelihood.loc[0,'No']\n    elif testval.loc[i,'Sex']==0:\n        likelihood_yes*=sex_likelihood.loc[1,'Yes']\n        likelihood_no*=sex_likelihood.loc[1,'No']\n\n    if testval.loc[i,'AloneOrNot']==0:\n        likelihood_yes*=alone_likelihood.loc[0,'Yes']\n        likelihood_no*=alone_likelihood.loc[0,'No']\n    elif testval.loc[i,'AloneOrNot']==1:\n        likelihood_yes*=alone_likelihood.loc[1,'Yes']\n        likelihood_no*=alone_likelihood.loc[1,'No']\n\n    likelihood_yes*=prob_yes\n    likelihood_no*=prob_no\n    \n    #print('Likelihood-YES: ',likelihood_yes)\n    #print('Likelihood-NO: ',likelihood_no)\n    actual=test.loc[i,'Survived']\n    prob=likelihood_yes/(likelihood_yes+likelihood_no)\n    predicted=(prob>0.5)\n    #print('Probability of surival = ',prob)\n    print('Actual Survival status = ',actual)\n    print('Predicted Survival status = ',predicted)\n    print()\n    \n    if (test.loc[i,'Survived']==1 and predicted==1): tp+=1\n    elif actual==1 and predicted==0: fp+=1\n    elif actual==0 and predicted==1: fn+=1\n    elif actual==0 and predicted==0: tn+=1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1b699f5bf42be426c518743389b5f274ba8da091"},"cell_type":"code","source":"# Naive-Bayes Accuracy:\nconfusionmatrices(testval.shape[0],tp,tn,fp,fn)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}