{"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":"# INTRODUCTION\nRMS Titanic, It was the world's largest steam passenger ship when it was completed in 1912. On the night of April 15, 1912, it hit an iceberg on its first voyage and sank into the icy waters of the North Atlantic in about two hours and forty minutes. Its sinking resulted in the deaths of 1,514 people and went down in history as one of the greatest maritime disasters.\n\n1. [Load and Check Data](#1)\n2. [Variable Description](#2)\n    * [Univariate Variable Analysis](#3)\n        * [Categorical Variable Analysis](#4)\n        * [Numerical Variable Analysis](#5)\n3. [Basic Data Analysis](#6)\n4. [Outlier Detection](#7)\n5. [Missing Value](#8)\n    * [Find Missing Value](#9)\n    * [Fill Missing Value](#10)\n6. [Visualization](#11)\n    * [Correlation Between Sibsp-Parch-Age-Fare-Survived](#12)\n    * [SibSp-Survived](#13)\n    * [Parch-Survived](#14)\n    * [Pclass-Survived](#15)\n    * [Age-Survived](#16)\n    * [Pclass-Survived-Age](#17)\n    * [Embarked-Sex-Pclass-Survived](#18)\n    * [Embarked-Sex-Fare-Survived](#19)\n    * [Fill Missing: Age Feature](#20)","metadata":{}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport matplotlib.pyplot as plt\nplt.style.use(\"seaborn-whitegrid\")\n\nimport seaborn as sns\n\nfrom collections import Counter\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-08-05T06:37:18.659248Z","iopub.execute_input":"2022-08-05T06:37:18.659983Z","iopub.status.idle":"2022-08-05T06:37:18.676733Z","shell.execute_reply.started":"2022-08-05T06:37:18.659944Z","shell.execute_reply":"2022-08-05T06:37:18.675532Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='1'></a>\n## Load and Check Data","metadata":{}},{"cell_type":"code","source":"train_df= pd.read_csv(\"../input/titanic/train.csv\")\ntest_df= pd.read_csv(\"../input/titanic/test.csv\")\ntest_PassengerId= test_df[\"PassengerId\"]\n# PassengerId özelliği daha sonradan kullanılacağı ve bozulmasını istemediğimiz için onu farklı bir değişkene atadık","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:18.678496Z","iopub.execute_input":"2022-08-05T06:37:18.678877Z","iopub.status.idle":"2022-08-05T06:37:18.700630Z","shell.execute_reply.started":"2022-08-05T06:37:18.678842Z","shell.execute_reply":"2022-08-05T06:37:18.699390Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.columns","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:18.702559Z","iopub.execute_input":"2022-08-05T06:37:18.703017Z","iopub.status.idle":"2022-08-05T06:37:18.710653Z","shell.execute_reply.started":"2022-08-05T06:37:18.702972Z","shell.execute_reply":"2022-08-05T06:37:18.709682Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:18.712467Z","iopub.execute_input":"2022-08-05T06:37:18.712868Z","iopub.status.idle":"2022-08-05T06:37:18.739839Z","shell.execute_reply.started":"2022-08-05T06:37:18.712834Z","shell.execute_reply":"2022-08-05T06:37:18.738496Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.describe()\n# sayısal sütunlar ile ilgili istatstikleri verir descrive() metodu","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:18.741236Z","iopub.execute_input":"2022-08-05T06:37:18.741700Z","iopub.status.idle":"2022-08-05T06:37:18.779883Z","shell.execute_reply.started":"2022-08-05T06:37:18.741662Z","shell.execute_reply":"2022-08-05T06:37:18.778419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='2'></a>\n## Variable Description\n1. PassengerId : Unique ID number to each pessenger ///Yolcu Numarası\n2. Survived    : pessenger survive(1) or died(0) ///Hayatta kalıp kalmadığı\n3. Pclass      : pessenger class ///Yolcu sınıfı\n4. Name        : İsim \n5. Sex         : Cinsiyet\n6. Age         : Yaş\n7. SibSp       : number of siblings or spouses ///Kardeş ya da Eşinin gemide olup olmadığı\n8. Parch       : number of parents or children ///Ebeveynlerinin ya da Çocuklarının gemide olup olmadığı\n9. Ticket      : ticket number ///Bilet numarası\n10. Fare       : amount of money spent on ticket ///Bilet Ücreti\n11. Cabin      : cabin category ///Kabin kategorisi (kalınan oda)\n12. Embarked   : port where passenger embarked (C: Cherbourg, Q: Queenstown, S: Southampton )///Gemiye hangi limandan binilidiği (C-Q-S)","metadata":{}},{"cell_type":"code","source":"train_df.info()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:18.781318Z","iopub.execute_input":"2022-08-05T06:37:18.781715Z","iopub.status.idle":"2022-08-05T06:37:18.798652Z","shell.execute_reply.started":"2022-08-05T06:37:18.781678Z","shell.execute_reply":"2022-08-05T06:37:18.797696Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* float64(2): Fare and Age\n* int64(5): Pclass, SibSp, Parch, PassengerId and Survived\n* object(5): Cabin, Embarked, Ticket, Name and Sex","metadata":{}},{"cell_type":"markdown","source":"<a id='3'></a>\n## Univariate Variable Analysis\n* Categorical Variable: Survived, Sex, Pclass, Embarked, Cabin, Name, Ticket, SibSp and Parch\n* Numerical Variable: Fare, Age, PassengerId","metadata":{}},{"cell_type":"markdown","source":"<a id='4'></a>\n### Categorical Variable","metadata":{}},{"cell_type":"code","source":"def bar_plot(variable):\n    \"\"\"\n        input: variable ex: \"Sex\"\n        output: bar plot & value count\n    \"\"\"\n    # get feature\n    var = train_df[variable]\n    # count number of categorical variable (value/sample)\n    varValue = var.value_counts()\n    \n    # visualize\n    plt.figure(figsize=(9,3))\n    plt.bar(varValue.index, varValue)\n    plt.xticks(varValue.index,varValue.index.values)\n    plt.ylabel(\"Frequency\")\n    plt.title(variable)\n    plt.show()\n    print(\"{}: \\n {}\".format(variable,varValue))","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:18.800088Z","iopub.execute_input":"2022-08-05T06:37:18.800469Z","iopub.status.idle":"2022-08-05T06:37:18.807749Z","shell.execute_reply.started":"2022-08-05T06:37:18.800434Z","shell.execute_reply":"2022-08-05T06:37:18.806652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"category1= [\"Survived\",\"Sex\",\"Pclass\",\"Embarked\",\"SibSp\",\"Parch\"]\nfor c in category1:\n    bar_plot(c)","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:18.809126Z","iopub.execute_input":"2022-08-05T06:37:18.810042Z","iopub.status.idle":"2022-08-05T06:37:19.805545Z","shell.execute_reply.started":"2022-08-05T06:37:18.810003Z","shell.execute_reply":"2022-08-05T06:37:19.800440Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"category2 =[\"Cabin\",\"Name\",\"Ticket\"]\nfor c in category2:\n    print(\"{} \\n\".format(train_df[c].value_counts()))","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:19.807266Z","iopub.execute_input":"2022-08-05T06:37:19.807770Z","iopub.status.idle":"2022-08-05T06:37:19.826139Z","shell.execute_reply.started":"2022-08-05T06:37:19.807722Z","shell.execute_reply":"2022-08-05T06:37:19.824656Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='5'></a>\n### Numerical Variable","metadata":{}},{"cell_type":"markdown","source":"Histogram ile bir veri setindeki herhangi bir feature'ın dağılımını inceleyeceğiz.","metadata":{}},{"cell_type":"code","source":"def plot_hist(variable):\n    plt.figure(figsize=(9,3))\n    plt.hist(train_df[variable], bins= 10)\n    plt.xlabel(variable)\n    plt.ylabel(\"Frequency\")\n    plt.title(\"{} distribution with hist\".format(variable))\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:19.828208Z","iopub.execute_input":"2022-08-05T06:37:19.828620Z","iopub.status.idle":"2022-08-05T06:37:19.834508Z","shell.execute_reply.started":"2022-08-05T06:37:19.828584Z","shell.execute_reply":"2022-08-05T06:37:19.833495Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"numericVar= [\"Fare\",\"Age\",\"PassengerId\"]\nfor n in numericVar:\n    plot_hist(n)","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:19.835539Z","iopub.execute_input":"2022-08-05T06:37:19.837244Z","iopub.status.idle":"2022-08-05T06:37:20.850976Z","shell.execute_reply.started":"2022-08-05T06:37:19.837203Z","shell.execute_reply":"2022-08-05T06:37:20.850008Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"histogramı belirlerken default olarak bins=10 olarak alındığından dolayı PassengerId feature'ının sıklığı 80den fazla olarak gözüküyor bins değerini 800 civarında yaptığımızda (800den fazla yolcu olduğu için) bu sıklık değerini her PassengerId için 1.0 olarak görürüz bu aslında bizim almamız gereken doğru sonuçtur. Analiz yaparken PassengerId bizim için çok önemli bir analiz sonucunu etkileyecek özellik değildir.","metadata":{}},{"cell_type":"markdown","source":"<a id='6'></a>\n## Basic Data Analysis\n* Pclass - Survived\n* Sex - Survived\n* SibSp - Survived\n* Parch - Survived\n<br><br>\n\nBu bölümde hangi özelliğin yolcunun hayatta kalması ile alakalı olduğu incelenecektir.","metadata":{}},{"cell_type":"code","source":"# Pclass - Survived\ntrain_df[[\"Pclass\",\"Survived\"]].groupby([\"Pclass\"], as_index = False).mean().sort_values(by=\"Survived\",ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.852203Z","iopub.execute_input":"2022-08-05T06:37:20.853018Z","iopub.status.idle":"2022-08-05T06:37:20.869078Z","shell.execute_reply.started":"2022-08-05T06:37:20.852978Z","shell.execute_reply":"2022-08-05T06:37:20.867673Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Data frame'den sadece Pclass ve Survived sütunları alınarak Pclass'a göre gruplandı ve bu grubun ortalaması alındı.Bu ortalamalar Survived özelliğinde azalan olarak sıralandı.\n* Buradaki analizimizin sonucunda %62 olasılıkla 1.sınıf yolcuların hayatta kaldığını görmüş olduk","metadata":{}},{"cell_type":"code","source":"# Sex - Survived\ntrain_df[[\"Sex\",\"Survived\"]].groupby([\"Sex\"], as_index = False).mean().sort_values(by=\"Survived\",ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.870578Z","iopub.execute_input":"2022-08-05T06:37:20.871335Z","iopub.status.idle":"2022-08-05T06:37:20.888994Z","shell.execute_reply.started":"2022-08-05T06:37:20.871297Z","shell.execute_reply":"2022-08-05T06:37:20.887766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Kadınlar %74 oranında hayatta kalmıştır.","metadata":{}},{"cell_type":"code","source":"# SibSp - Survived\ntrain_df[[\"SibSp\",\"Survived\"]].groupby([\"SibSp\"], as_index = False).mean().sort_values(by=\"Survived\",ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.890382Z","iopub.execute_input":"2022-08-05T06:37:20.891002Z","iopub.status.idle":"2022-08-05T06:37:20.905711Z","shell.execute_reply.started":"2022-08-05T06:37:20.890964Z","shell.execute_reply":"2022-08-05T06:37:20.904753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"2 ve 2den küçük SibSp değerine sahip yolcuların hayatta kalma oranı daha yüksektir","metadata":{}},{"cell_type":"code","source":"# Parch - Survived\ntrain_df[[\"Parch\",\"Survived\"]].groupby([\"Parch\"], as_index = False).mean().sort_values(by=\"Survived\",ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.907435Z","iopub.execute_input":"2022-08-05T06:37:20.908034Z","iopub.status.idle":"2022-08-05T06:37:20.922740Z","shell.execute_reply.started":"2022-08-05T06:37:20.907996Z","shell.execute_reply":"2022-08-05T06:37:20.921480Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Bir yolcunun Parch özelliğinin değeri arttıkça bu yolcunun hayatta kalma oranı azalmaktadır.","metadata":{"execution":{"iopub.status.busy":"2022-07-05T11:23:47.172704Z","iopub.execute_input":"2022-07-05T11:23:47.173216Z","iopub.status.idle":"2022-07-05T11:23:47.180958Z","shell.execute_reply.started":"2022-07-05T11:23:47.173166Z","shell.execute_reply":"2022-07-05T11:23:47.179057Z"}}},{"cell_type":"markdown","source":"<a id='7'></a>\n## Outlier Detection\nElimizde olan değerlerden çok yüksek ya da çok düşük bir değer varsa verinin içerisinde buna outlier denir ve analiz sırasında yanlış çıkarımlara neden olabilir.\n* First Quartile: Q1\n* Third Quartile: Q3\n* Second Quartile: Q2 : Median\n* IQR= Q3 -Q1 \n* * IQR x 1.5 = Outlier Detection Step\n* * Q1-Outlier Detection Step || Q3+Outlier Detection Step  : İle belirlenen aralığın dışında kalan sayılar outlier sayılır","metadata":{}},{"cell_type":"code","source":"def detect_outliers(df, features):\n    outlier_indices = []\n    \n    for c in features:\n        # 1st quartile\n        Q1=np.percentile(df[c],25)\n        # 3rd quartile\n        Q3=np.percentile(df[c],75)\n        # IQR\n        IQR = Q3 - Q1\n        # Outlier Step\n        outlier_step= IQR*1.5\n        # detect outlier and their indeces\n        outlier_list_col=df[(df[c]< Q1-outlier_step) | (df[c]> Q3+outlier_step)].index   # Burada bir df oluşturulduğu için outlier indexini aldık.\n        # store indeces\n        outlier_indices.extend(outlier_list_col)\n        \n    outlier_indices = Counter(outlier_indices)\n    multiple_outliers= list(i for i, v in outlier_indices.items() if v > 2)  \n    # eğer df içerisinde 2den fazla feature outlier'a sahipse o zaman bu iki index çıkarılır. Daha az ise feature çıkarmaya çok büyük verilerde gerek yoktur.\n    \n    return multiple_outliers","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.924479Z","iopub.execute_input":"2022-08-05T06:37:20.925103Z","iopub.status.idle":"2022-08-05T06:37:20.933636Z","shell.execute_reply.started":"2022-08-05T06:37:20.925065Z","shell.execute_reply":"2022-08-05T06:37:20.932215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.loc[detect_outliers(train_df,[\"Age\",\"SibSp\",\"Parch\",\"Fare\"])]","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.935142Z","iopub.execute_input":"2022-08-05T06:37:20.935943Z","iopub.status.idle":"2022-08-05T06:37:20.970800Z","shell.execute_reply.started":"2022-08-05T06:37:20.935904Z","shell.execute_reply":"2022-08-05T06:37:20.969594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# drop outliers\ntrain_df= train_df.drop(detect_outliers(train_df,[\"Age\",\"SibSp\",\"Parch\",\"Fare\"]), axis=0).reset_index(drop=True)","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.972556Z","iopub.execute_input":"2022-08-05T06:37:20.973558Z","iopub.status.idle":"2022-08-05T06:37:20.986461Z","shell.execute_reply.started":"2022-08-05T06:37:20.973508Z","shell.execute_reply":"2022-08-05T06:37:20.985339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.loc[detect_outliers(train_df,[\"Age\",\"SibSp\",\"Parch\",\"Fare\"])]","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:20.988398Z","iopub.execute_input":"2022-08-05T06:37:20.991379Z","iopub.status.idle":"2022-08-05T06:37:21.010770Z","shell.execute_reply.started":"2022-08-05T06:37:20.991333Z","shell.execute_reply":"2022-08-05T06:37:21.009869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Görüldüğü üzere artık data frame'de hiçbir outlier kalmamıştır.","metadata":{}},{"cell_type":"markdown","source":"<a id='8'></a>\n## Missing Value\n    * Find Missing Value\n    * Fill Missing Value","metadata":{}},{"cell_type":"code","source":"train_df_len= len(train_df)\ntrain_df= pd.concat([train_df,test_df],axis=0).reset_index(drop=True)\n# burada şöyle bir sorun ile karşılaşabiliriz, kodu ilk run edişimizde train ve test df'leri birleştiriyoruz ve tekrar run edersek yine birleştirmiş oluyoruz bu yüzden restart and run seceneğini kullanmamız gerekir.","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.011875Z","iopub.execute_input":"2022-08-05T06:37:21.012666Z","iopub.status.idle":"2022-08-05T06:37:21.024286Z","shell.execute_reply.started":"2022-08-05T06:37:21.012631Z","shell.execute_reply":"2022-08-05T06:37:21.023080Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.025622Z","iopub.execute_input":"2022-08-05T06:37:21.026636Z","iopub.status.idle":"2022-08-05T06:37:21.047694Z","shell.execute_reply.started":"2022-08-05T06:37:21.026595Z","shell.execute_reply":"2022-08-05T06:37:21.046730Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='9'></a>\n### Find Missing Value","metadata":{}},{"cell_type":"code","source":"train_df.columns[train_df.isnull().any()]\n# nerelerde missing value olduğuna bakalım","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.049425Z","iopub.execute_input":"2022-08-05T06:37:21.049776Z","iopub.status.idle":"2022-08-05T06:37:21.060337Z","shell.execute_reply.started":"2022-08-05T06:37:21.049744Z","shell.execute_reply":"2022-08-05T06:37:21.059163Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.isnull().sum()\n# kaç tane missing value olduğunu görelim","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.061725Z","iopub.execute_input":"2022-08-05T06:37:21.062631Z","iopub.status.idle":"2022-08-05T06:37:21.073947Z","shell.execute_reply.started":"2022-08-05T06:37:21.062593Z","shell.execute_reply":"2022-08-05T06:37:21.072563Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='10'></a>\n### Fill Missing Value\n* Embarked has 2 missing value\n* Fare has only 1 missing value","metadata":{}},{"cell_type":"code","source":"train_df[train_df[\"Embarked\"].isnull()]","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.075513Z","iopub.execute_input":"2022-08-05T06:37:21.076552Z","iopub.status.idle":"2022-08-05T06:37:21.098652Z","shell.execute_reply.started":"2022-08-05T06:37:21.076506Z","shell.execute_reply":"2022-08-05T06:37:21.097786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"60 ve 821 id'lerine sahip iki yolcunun embarked değerinin ne olduğu bilinmiyor. Bu boş değerleri dolduralım, peki hangi özelliğe göre doldurmamız daha doğru olur? Yolcunun bindiği limanı hangi özellik daha iyi yansıtabilir ? Pclass'a bakıp 1.sınıf yolcuların çoğunlukla hangi limandan bindiğine bakıp yorum yapılabilir ya da ücret olarak(fare) 80 birim para ödeyen kişilerin hangi limandan bindiğine bakılarak bir çıkarım yapılabilir. ","metadata":{}},{"cell_type":"code","source":"train_df.boxplot(column=\"Fare\", by=\"Embarked\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.100092Z","iopub.execute_input":"2022-08-05T06:37:21.100448Z","iopub.status.idle":"2022-08-05T06:37:21.302378Z","shell.execute_reply.started":"2022-08-05T06:37:21.100395Z","shell.execute_reply":"2022-08-05T06:37:21.300993Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Burada ödenen ücret ile binilen liman arasındaki ilişki boxplot ile gösterilmektedir. \n<br> Q ve S limanlarından binen yolcuların ödedikleri ücret 80 birimden daha düşük gözükmektedir. O halde muhtemelen bu iki kayıp değere sahip yolcu C limanından binmiştir. O halde bu boş değerleri C ile dolduralım.","metadata":{}},{"cell_type":"code","source":"train_df[\"Embarked\"]= train_df[\"Embarked\"].fillna(\"C\")\n# doğru işlem yapıp yapmadığımızı kontrol edelim\ntrain_df[train_df[\"Embarked\"].isnull()]","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.303825Z","iopub.execute_input":"2022-08-05T06:37:21.304169Z","iopub.status.idle":"2022-08-05T06:37:21.319553Z","shell.execute_reply.started":"2022-08-05T06:37:21.304139Z","shell.execute_reply":"2022-08-05T06:37:21.318222Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Boş olduğuna göre artık missing value sahip bir yolcu kalmamıştır.","metadata":{}},{"cell_type":"code","source":"# Şimdi NaN olan Fare değerine sahip yolcuya bakalım.\ntrain_df[train_df[\"Fare\"].isnull()]","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.321023Z","iopub.execute_input":"2022-08-05T06:37:21.321365Z","iopub.status.idle":"2022-08-05T06:37:21.344153Z","shell.execute_reply.started":"2022-08-05T06:37:21.321334Z","shell.execute_reply":"2022-08-05T06:37:21.343180Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Bu yolcu S limanından binmiş, az önceki boxplot'tan yola çıkarsak orta seviye yolcu olabilir, 3.sınıfta konaklamış. Burada Pclass değerini kullanabiliriz.","metadata":{}},{"cell_type":"code","source":"avg_fare= np.mean(train_df[train_df[\"Pclass\"] == 3][\"Fare\"])\n# 3.sınıfta kalan yolcular ortalama ne kadar ücret ödemişler ona bakıyoruz, çıkan sonuç ile boş indexleri dolduruyoruz\ntrain_df[\"Fare\"]= train_df[\"Fare\"].fillna(avg_fare)\navg_fare","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.345481Z","iopub.execute_input":"2022-08-05T06:37:21.345829Z","iopub.status.idle":"2022-08-05T06:37:21.357920Z","shell.execute_reply.started":"2022-08-05T06:37:21.345797Z","shell.execute_reply":"2022-08-05T06:37:21.356482Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# boş Fare değeri kaldı mı bakalım\ntrain_df[train_df[\"Fare\"].isnull()]","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.359435Z","iopub.execute_input":"2022-08-05T06:37:21.360347Z","iopub.status.idle":"2022-08-05T06:37:21.372039Z","shell.execute_reply.started":"2022-08-05T06:37:21.360309Z","shell.execute_reply":"2022-08-05T06:37:21.371060Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Kalmadı.","metadata":{}},{"cell_type":"markdown","source":"<a id='11'></a>\n## Visualization","metadata":{}},{"cell_type":"markdown","source":"<a id='12'></a>\n### Correlation Between Sibsp-Parch-Age-Fare-Survived","metadata":{}},{"cell_type":"code","source":"list1=[\"SibSp\",\"Parch\",\"Age\",\"Fare\",\"Survived\"]\nsns.heatmap(train_df[list1].corr(), annot=True, fmt=\".2f\")\nplt.show()\n# annot true ile korelasyon oranları tablonun üstünde gözükür","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.373356Z","iopub.execute_input":"2022-08-05T06:37:21.374216Z","iopub.status.idle":"2022-08-05T06:37:21.666916Z","shell.execute_reply.started":"2022-08-05T06:37:21.374178Z","shell.execute_reply":"2022-08-05T06:37:21.665679Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Survived feature'ını ele alacak olursak diğer feature'lar arasından fare ile daha yakın ilişkiye sahiptir bu da demek oluyor ki bir yolcu bilete ne kadar para ödemişse hayatta kalma oranı o doğrultuda değişmektedir.","metadata":{}},{"cell_type":"markdown","source":"<a id='13'></a>\n### SibSp-Survived","metadata":{}},{"cell_type":"code","source":"g= sns.factorplot(x=\"SibSp\", y=\"Survived\", data=train_df, kind= \"bar\", size=6)\ng.set_ylabels(\"Survived Probability\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:21.668707Z","iopub.execute_input":"2022-08-05T06:37:21.669441Z","iopub.status.idle":"2022-08-05T06:37:22.092071Z","shell.execute_reply.started":"2022-08-05T06:37:21.669373Z","shell.execute_reply":"2022-08-05T06:37:22.090885Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Yolcu 2den fazla SibSp değerine sahipse hayatta kalma oranı azalmaktadır.","metadata":{}},{"cell_type":"markdown","source":"<a id='14'></a>\n### Parch-Survived","metadata":{}},{"cell_type":"code","source":"g=sns.factorplot(x=\"Parch\", y=\"Survived\", kind=\"bar\", data=train_df, size=6)\ng.set_ylabels(\"Survived Probability\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:22.093779Z","iopub.execute_input":"2022-08-05T06:37:22.094577Z","iopub.status.idle":"2022-08-05T06:37:22.511767Z","shell.execute_reply.started":"2022-08-05T06:37:22.094527Z","shell.execute_reply":"2022-08-05T06:37:22.510492Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Çekirdek ailelerin hayatta kalma şansı, tek başına yolculuğa çıkanlara ve geniş aile olarak yolculuğa çıkanlara göre daha yüksektir yorumunu yapabiliriz.\n* Parch'nin 3 olduğu bar'a bakarsak içerisindeki siyah çubuğun geniş bir aralıkta olduğunu görürüz. Bu çubuk standart sapmayı temsil etmektedir. Bu demek oluyor ki bir yolcunun 3 yakın akrabası gemideyse hayatta kalma oranı 1 de olabilir 0.2 de olabilir yani yüksek ihtimalle hayatta kalabilir de , yüksek ihtimalle ölebilir de.","metadata":{}},{"cell_type":"markdown","source":"SibSP ve Parch yeni bir feature olarak birlikte kullanılabilir.","metadata":{}},{"cell_type":"markdown","source":"<a id='15'></a>\n### Pclass-Survived","metadata":{}},{"cell_type":"code","source":"g=sns.factorplot(x=\"Pclass\", y=\"Survived\", data=train_df, kind=\"bar\", size=6)\ng.set_ylabels(\"Survived Probability\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:22.513234Z","iopub.execute_input":"2022-08-05T06:37:22.513608Z","iopub.status.idle":"2022-08-05T06:37:22.842894Z","shell.execute_reply.started":"2022-08-05T06:37:22.513574Z","shell.execute_reply":"2022-08-05T06:37:22.841669Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* 1.sınıf en pahalı sınıf olduğundan dolayı bu sınıfta kalan yolcuların hayatta kalma oranı diğerlerine göre daha yüksektir. Sınıf derecesi azaldıkça hayatta kalma oranı düşmüştür.","metadata":{}},{"cell_type":"markdown","source":"<a id='16'></a>\n### Age-Survived","metadata":{}},{"cell_type":"code","source":"g= sns.FacetGrid(train_df, col=\"Survived\")\ng.map(sns.distplot, \"Age\", bins=25)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:22.844706Z","iopub.execute_input":"2022-08-05T06:37:22.845461Z","iopub.status.idle":"2022-08-05T06:37:23.324215Z","shell.execute_reply.started":"2022-08-05T06:37:22.845388Z","shell.execute_reply":"2022-08-05T06:37:23.322998Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Bu plot yapısında hayatta kalmama ve hayatta kalma grafikleri bir arada verilmiştir. Hayatta kalanlara bakıldığında çocukların hayatta kaldığı gözükmektedir.\n* Eğer 10 yaşından küçükse yolcu yüksek ihtimalle hayatta kalmıştır.\n* Eğer yolcu yaşlı ise o da hayatta kalmıştır, survived= 1.0 grafiğinde oranın düşük gözükme sebebi yaşlı yolcu sayısının az olması denebilir çünkü survived=0.0 grafiğinde de hayatta kalmama oranları düşüktür.\n* Hayatta kalanlar grafiğinde pik oranı 30'lu yaşlardaki yolculardır.\n* Hayatta kalmama grafiğinde pik oranı 20'li ve 35'e yakın yaşlarda olan yolculardır.\n* Yolcuların çoğu 15-35 yaş aralığında olduğunu da görebiliriz.","metadata":{}},{"cell_type":"markdown","source":"<a id='17'></a>\n### Pclass-Survived-Age","metadata":{}},{"cell_type":"code","source":"g= sns.FacetGrid(train_df, col=\"Survived\", row=\"Pclass\", size=3)\ng.map(plt.hist, \"Age\", bins=25)\ng.add_legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:23.326019Z","iopub.execute_input":"2022-08-05T06:37:23.326751Z","iopub.status.idle":"2022-08-05T06:37:24.801607Z","shell.execute_reply.started":"2022-08-05T06:37:23.326704Z","shell.execute_reply":"2022-08-05T06:37:24.800396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Pclass=3 | Survived= 0.0 grafiğinde yolcu sayısının çok daha fazla olduğu açıkça gözükmektedir, fakat yolcuların büyük bir kısmı hayatta kalamamıştır.\n* Pclass= 2'de yaşama oranı ile ölüm oranı dengeli gibi gözükmektedir, kabaca yorumlarsak.\n* Pclass=1'de ise yaşama oranı ölüm oranından yüksektir.\n<br><br>\nPclass model eğitiminde (training) önemli bir özellik olarak kullanılacaktır.","metadata":{}},{"cell_type":"markdown","source":"<a id='18'></a>\n### Embarked-Sex-Pclass-Survived","metadata":{}},{"cell_type":"code","source":"g= sns.FacetGrid(train_df, row=\"Embarked\", size= 3)\ng.map(sns.pointplot, \"Pclass\", \"Survived\", \"Sex\")\ng.add_legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:24.803381Z","iopub.execute_input":"2022-08-05T06:37:24.804238Z","iopub.status.idle":"2022-08-05T06:37:25.911249Z","shell.execute_reply.started":"2022-08-05T06:37:24.804188Z","shell.execute_reply":"2022-08-05T06:37:25.910329Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Kadınların hayatta kalma oranları 2 grafikte erkeklerden daha fazladır bu sebeple cinsiyetin hayatta kalma konusunda önemli bir rol oynadığı söylenebilir.\n* C limanından binen erkeklerin hayatta kalma oranı daha yüksektir.\n* Embarked ve sex feature'ların training yaparken kullanılacaktır.","metadata":{}},{"cell_type":"markdown","source":"<a id='19'></a>\n### Embarked-Sex-Fare-Survived","metadata":{}},{"cell_type":"code","source":"g= sns.FacetGrid(train_df, row=\"Embarked\", col=\"Survived\", size=3)\ng.map(sns.barplot,\"Sex\",\"Fare\")\ng.add_legend()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:25.912394Z","iopub.execute_input":"2022-08-05T06:37:25.913222Z","iopub.status.idle":"2022-08-05T06:37:27.189498Z","shell.execute_reply.started":"2022-08-05T06:37:25.913185Z","shell.execute_reply":"2022-08-05T06:37:27.188015Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* S limanından binen yolcularda daha çok fare değerine sahip olanların hayatta kalma oranı daha yüksektir, C limanında da aynı durum söz konusudur.\n* Q limanında ise oranlar birbirine çok yakındır.\n* Fare değerleri training'te kategori olarak kullanılabilir.","metadata":{}},{"cell_type":"markdown","source":"<a id='20'></a>\n## Fill Missing: Age Feature","metadata":{}},{"cell_type":"code","source":"train_df[train_df[\"Age\"].isnull()]  # Age feature'ında null olan değerleri aldık burada.","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:27.191217Z","iopub.execute_input":"2022-08-05T06:37:27.191622Z","iopub.status.idle":"2022-08-05T06:37:27.221949Z","shell.execute_reply.started":"2022-08-05T06:37:27.191584Z","shell.execute_reply":"2022-08-05T06:37:27.220643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.factorplot(x=\"Sex\", y=\"Age\", data=train_df, kind=\"box\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:27.223650Z","iopub.execute_input":"2022-08-05T06:37:27.224065Z","iopub.status.idle":"2022-08-05T06:37:27.474034Z","shell.execute_reply.started":"2022-08-05T06:37:27.224027Z","shell.execute_reply":"2022-08-05T06:37:27.472812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Veride age feature'ında null olan değerleri doldurmak için sex feature'ı faydalı değildir çünkü kadın ve erkeklerin yaşı birbirine çok yakın. Birinin diğerine üstünlüğü olmadığından dolayı tahmin yapamıyoyoruz.","metadata":{}},{"cell_type":"code","source":"sns.factorplot(x=\"Sex\", y=\"Age\", hue= \"Pclass\", data=train_df, kind=\"box\")\nplt.show()\n# Sınıf olarak pclass'ı ekleyelim.","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:27.475462Z","iopub.execute_input":"2022-08-05T06:37:27.475815Z","iopub.status.idle":"2022-08-05T06:37:27.897905Z","shell.execute_reply.started":"2022-08-05T06:37:27.475785Z","shell.execute_reply":"2022-08-05T06:37:27.895934Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"1. sınıf yolcular 2. ve 3. sınıf yolculardan daha yaşlıdır. 2.sınıf yolcular 3. sınıf yolculardan daha yaşlıdır. O halde sınıflara göre yaş tahmini yapılabilir. ","metadata":{}},{"cell_type":"code","source":"sns.factorplot(x=\"Parch\", y=\"Age\", data=train_df, kind=\"box\")\nsns.factorplot(x=\"SibSp\", y=\"Age\", data=train_df, kind=\"box\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:27.899272Z","iopub.execute_input":"2022-08-05T06:37:27.899741Z","iopub.status.idle":"2022-08-05T06:37:28.575552Z","shell.execute_reply.started":"2022-08-05T06:37:27.899697Z","shell.execute_reply":"2022-08-05T06:37:28.574463Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Burada da görüldüğü gibi Parch ve SibSp değerlerine göre yaş tahmini yapılabilir.","metadata":{}},{"cell_type":"code","source":"train_df[\"Sex\"]=[1 if i==\"male\" else 0 for i in train_df[\"Sex\"]]","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:28.576886Z","iopub.execute_input":"2022-08-05T06:37:28.577219Z","iopub.status.idle":"2022-08-05T06:37:28.584586Z","shell.execute_reply.started":"2022-08-05T06:37:28.577188Z","shell.execute_reply":"2022-08-05T06:37:28.583393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.heatmap(train_df[[\"Age\",\"Sex\",\"SibSp\",\"Parch\",\"Pclass\"]].corr(), annot=True)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:28.597519Z","iopub.execute_input":"2022-08-05T06:37:28.598519Z","iopub.status.idle":"2022-08-05T06:37:28.895984Z","shell.execute_reply.started":"2022-08-05T06:37:28.598475Z","shell.execute_reply":"2022-08-05T06:37:28.894798Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Sex feature'ı burada gözükmemektedir çünkü sayısal bir değere sahip değildir male-female değerleri alıyor, bu yüzden bunları sayısal bir değere dönüştürmeliyiz. Bu işlemi heatmap yazdırmadan önce yaparız.\n* Age, Sex ile tahmin yapılabilecek bir correlation'a sahip değildir.","metadata":{}},{"cell_type":"code","source":"# age feature'ında bulunan NaN değerlerin indexlerini bulmakla başlayalım\nindex_nan_age=list(train_df[\"Age\"][train_df[\"Age\"].isnull()].index)\n# list(x[x.isnull()].index) şeklinde bir yazım oldu\nfor i in index_nan_age:\n    age_pred=train_df[\"Age\"][((train_df[\"SibSp\"]== train_df.iloc[i][\"SibSp\"])&(train_df[\"Parch\"]== train_df.iloc[i][\"Parch\"])&(train_df[\"Pclass\"]== train_df.iloc[i][\"Pclass\"]))].median()\n    # prediction yapılamayan durumlar için train_df[\"Age\"]'in median'ını kullanılacak.\n    age_med=train_df[\"Age\"].median()\n    if not np.isnan(age_pred):\n        train_df[\"Age\"].iloc[i]= age_pred  # eğer nan değer yoksa age_pred işlemi yeterli olacaktır.\n    else:\n        train_df[\"Age\"].iloc[i]=age_med  # eğer nan değer var ise age_med işleminin yapılması gerekmektedir.","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:28.897321Z","iopub.execute_input":"2022-08-05T06:37:28.897860Z","iopub.status.idle":"2022-08-05T06:37:29.471229Z","shell.execute_reply.started":"2022-08-05T06:37:28.897823Z","shell.execute_reply":"2022-08-05T06:37:29.469820Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df[train_df[\"Age\"].isnull()]\n# Şimdi veride NaN değer olup olmadığını kontrol edelim.","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:37:29.473038Z","iopub.execute_input":"2022-08-05T06:37:29.473533Z","iopub.status.idle":"2022-08-05T06:37:29.488055Z","shell.execute_reply.started":"2022-08-05T06:37:29.473485Z","shell.execute_reply":"2022-08-05T06:37:29.486751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Datada hiçbir NaN değer kalmamıştır.","metadata":{}},{"cell_type":"code","source":"age_pred\n# burada age predict edildi fakat data'da hâlâ age feature'ında NaN değerler bulunmaktadır.\n# bunun sebebi ise prediction yapabilmek için kullandığımız SibSp, Parch ve Pclass feature'larında da NaN değerler olmasıdır.","metadata":{"execution":{"iopub.status.busy":"2022-08-05T06:42:19.694201Z","iopub.execute_input":"2022-08-05T06:42:19.694682Z","iopub.status.idle":"2022-08-05T06:42:19.702676Z","shell.execute_reply.started":"2022-08-05T06:42:19.694646Z","shell.execute_reply":"2022-08-05T06:42:19.701322Z"},"trusted":true},"execution_count":null,"outputs":[]}]}