You are currently viewing Data Science bagi Pemula | #3 Melakukan Analisa Data Korban Titanic Menggunakan Logistic Regression dan Python

Data Science bagi Pemula | #3 Melakukan Analisa Data Korban Titanic Menggunakan Logistic Regression dan Python

Analisa Data Korban Titanic Menggunakan Logistic Regression – Hello teman-teman bagaimana nih kabarnya? Semoga baik-baik aja ya. Pada artikel kali ini kita akan membahas tutorial tentang analisa data Korban kapal Titanic menggunakan metode Logistic Regression. Proses analisa data ini dilakukan dengan menggunakan Pemrograman Python pada Google Colab. Sedangkan Untuk Datasetnya kita menggunakan data titanic.csv yang dapat di download pada Link Berikut

Baca Juga: Data Science bagi Pemula | #1 Melakukan Analisa Produk Menggunakan Pemrograman Python

Adapun Penjelasan setiap koding dan penjelasan Lengkap tentang hasil/output dari Analisa Data korban kapal Titanic dapat teman-teman lihat pada Video Youtube kami ini.

ANALISA DATA KORBAN KAPAL TITANIC MENGGUNAKAN PYTHON

Sebelum memulai tahapan analisa data korban kapal titanic, pertama-tama kita harus tau terlebih dahulu apa itu Logistic Regression. Logistic Regression merupakan suatu algoritma atau teknik statistika yang digunakan untuk melakukan prediksi terhadap suatu pernyataan. Algoritma ini juga dapat disebut sebagai algoritma klasifikasi untuk mencari hubungan dan klasifikasi antara setiap variabel independen dengan variabel dependen.

Pada proses analisa data menggunakan Python, pertama-tama kita harus panggil dulu library yang kita butuhkan untuk proses analisa

import pandas as pd 
import numpy as np 
import seaborn as sns

Lalu kita panggil dataset yang akan kita gunakan dan tampilkan 10 data pertama dari dataset tersebut. Disini nama dataset kita yaitu titanic.csv yang di ambil melalui google drive.

data = pd.read_csv('/content/drive/MyDrive/KumpulanDataset/titanic.csv') 
data.head(10)

Selanjutnya kita lihat informasi dari data yang kita miliki tersebut. Dapat dilihat dari sintak dibawah ini bahwa total data yang ada pada dataset ini yaitu 891 data dengan 12 kolom.

print("Total Data : ", data.shape, "\n")
data.info()

Lalu kita lihat grafik banyaknya data korban yang selamat dan tidak selamat dari dataset ini. Dari grafik yang dihasilkan dapat dilihat bahwa total jumlah korban yang tidak selamat (0) lebih banyak dibandingkan korban yang selamat (1).

sns.countplot(x="Survived", data=data)

Lalu kita lihat grafik terhadap banyaknya data korban yang selamat dan tidak selamat dari dataset ini. Data yang ditampilkan ini dikelompokkan berdasarkan kolom Jenis Kelamin (Sex). Dapat kita lihat bahwa banyaknya korban yang tidak selamat tersebut berjenis kelamin Laki-laki.

sns.countplot(x="Survived", hue="Sex", data=data)

Sekarang kita cek banyaknya data korban yang selamat dan tidak selamat berdasarkan pengelompokan kolom PClass. Dapat diperhatikan bahwa korban yang tidak selamat itu banyak pada PClass 3.

sns.countplot(x="Survived", hue="Pclass", data=data)

Kita lihat grafik banyaknya penumpang berdasarkan pengelompokan Umur. Dapat dilihat dari grafik bahwasannya penumpang banyak berada pada umur 20 – 40 tahun.

data['Age'].plot.hist()

Sekarang kita lihat banyaknya data berdasarkan kolom Fare (Tarif). Dapat dilihat bahwa tarif penumpang paling banyak berada pada range 0 – 100.

data['Fare'].plot.hist(bins=20, figsize=(10,5))

Lalu kita cek banyaknya jumlah anggota keluarga penumpang ke dalam bentuk grafik. Dapat dilihat bahwa data yang paling banyak berada pada nilai 0 (Sendirian).

sns.countplot(x='SibSp', data=data)

Sebelum melakukan proses analisa data, pertama-tama kita harus melakukan pengecekan terhadap banyaknya data Null/NaN (Kosong) pada dataset kita. Dapat kita lihat bahwa data yang paling banyak kosong berada pada kolom Cabin dan Age.

data.isnull().sum()

Disini kita juga dapat menggunakan Grafik atau Heatmap untuk mengecek banyaknya data yang bernilai Kosong (Null/NaN) pada dataset kita. Hasil output yang ditampilkan sama seperti pada sintak sebelumnya, perbedaannya pada proses penampilan data saja yaitu ke dalam bentuk Grafik. Data yang memiliki nilai Kosong (Null/NaN) akan digambarkan dalam bentuk garis berwarna kuning.

sns.heatmap(data.isnull(), yticklabels=False, cmap='viridis')

Sekarang kita akan melihat range umur penumpang berdasarkan grafik box yang dikelompokkan berdasarkan kolom Pclass. Dapat kita lihat bahwa Class 1 banyak penumpang yang berumur 30-50 tahun, Class 2 banyak penumpang berumur 25-40 Tahun sedangkan Class 3 banyak penumpang yang berumur 20-30 Tahun.

sns.boxplot(x='Pclass',y='Age', data=data)

Selanjutnya kita hapus kolom Cabin karena kita tidak membutuhkan kolom ini dalam proses Analisa data kita. Alasan lain kolom ini dihapus karena banyaknya data yang kosong pada kolom Cabin ini sehingga kurang baik untuk proses analisa data.

data.drop('Cabin', axis=1, inplace=True)

Berdasarkan hasil Grafik yang diperoleh dari pengelompokan Kolom Pclass dan Age. Sekarang kita akan melakukan pengecekan rata-rata umur berdasarkan pengelompokan Class tersebut. Dapat dilihat bahwa Class 1 memiliki rata-rata 38 Tahun, Class 2 memiliki rata-rata 29 Tahun dan Class 3 memiliki rata-rata 25 Tahun.

kelas_1 = data.loc[data['Pclass'] == 1,'Age'].mean()
kelas_2 = data.loc[data['Pclass'] == 2,'Age'].mean()
kelas_3 = data.loc[data['Pclass'] == 3,'Age'].mean()

print("Rata-Rata Umur Berdasarkan Pclass 1 : %i" %kelas_1, "Tahun")
print("Rata-Rata Umur Berdasarkan Pclass 2 : %i" %kelas_2, "Tahun")
print("Rata-Rata Umur Berdasarkan Pclass 3 : %i" %kelas_3, "Tahun")

Setelah itu kita buat sebuat Function atau method untuk mengatur nilai yang kosong pada Kolom Age berdasarkan hasil rata-rata yang kita peroleh dari sintak sebelumnya.

def setting_umur(cols):
  Age = cols[0]
  Pclass = cols[1]
  
  if(pd.isnull(Age)):
    if(Pclass == 1):
      return 38
    elif(Pclass == 2):
      return 29
    elif(Pclass == 3):
      return 25
  else:
    return Age

Sekarang kita aplikasikan Function atau Method yang kita buat ini ke dalam Kolom Age yang kosong tersebut.

data['Age'] = data[['Age','Pclass']].apply(setting_umur, axis=1)

Lalu kita hapus data yang memiliki nilai Kosong. Dari hasil pengecekan sebelumnya bahwa masih ada data yang kosong pada Kolom Embarked sebanyak 2 data. Data ini kita hapus menggunakan sintak dropna().

data.dropna(inplace=True)

Selanjutnya kita cek kembali dataset kita apakah masih memiliki data yang bernilai kosong atau tidak pada setiap kolom dataset. Dari deskripsi yang diperoleh bahwa tidak ada lagi data yang bernilai kosong pada dataset kita.

data.isnull().sum()

Sekarang kita lihat 2 data pertama kita menggunakan sintak head(). Tujuannya disini untuk memeriksa format data dari dataset yang kita miliki.

data.head(2)

Selanjutnya kita pisahkan data jenis kelamin (Sex) berdasarkan value yang dimilikinya. Dari proses ini kita akan memiliki 2 kolom yaitu Male dan Female.

pd.get_dummies(data['Sex'])

Lalu kita ambil data Penumpang yang berjenis kelamin Laki-laki untuk proses analisa kita selanjutnya. Hal ini dikarenakan data korban yang tidak selamat banyak berjenis kelamin laki-laki.

jenkel = pd.get_dummies(data['Sex'], drop_first=True) 
jenkel.head()

Selanjutnya kita lakukan juga hal yang sama pada kolom Embarked. Disini kita akan memisahkan setiap data yang ada pada kolom ini menjadi beberapa kolom. Pada tahapan ini kita juga menghapus kolom data embarked = C

emb = pd.get_dummies(data['Embarked'], drop_first=True) 
emb.head()

Lalu kita pisahkan dan simpan juga untuk kolom Pclass. Proses ini digunakan untuk memecahkan data kategorial menjadi data tunggal. Pada tahapan ini kita menghapus kolom dengan nilai Pclass = 1 karena korban dari titanic pada Pclass 1 sedikit.

Pcl = pd.get_dummies(data['Pclass'], drop_first=True) 
Pcl.head()

Setelah semua data dipisahkan, tahapan selanjutnya kita masukkan seluruh variabel yang menyimpan data pemisahan tadi ke dalam dataset kita. Dan cek kondisi dari dataset kita. Disini dapat kita lihat bahwa dataset kita memiliki tambahan beberapa kolom seperti Male, Q, S, 2 dan 3.

data = pd.concat([data, jenkel, emb, Pcl], axis=1) 
data.head()

Selanjutnya kita hapus beberapa kolom yang tidak kita butuhkan pada proses analisa data kita nantinya. Adapun kolom yang dihapus adalah Sex, Embarked, Pclass, PassengerID, Name dan Ticket.

data.drop(['Sex','Embarked','Pclass', 'PassengerId','Name','Ticket'], axis=1, inplace=True) 
data.head()

Baca Juga: Data Science bagi Pemula | #2 Melakukan Analisa Data Kasus Covid19 Menggunakan Pemrograman Python

Analisa Data Menggunakan Logistic Regression

Sebelum melakukan analisa data menggunakan Logistic Regression, Pertama-tama kita harus memisahkan terlebih dahulu antara Variabel Dependen (Y) dan Variabel Independent (X). Untuk variabel Y yaitu kolom Survived dan Varibel X yaitu kolom selain kolom Survived. Hal ini bertujuan untuk melakukan prediksi korban (Selamat  / Tidak Selamat) berdasarkan kolom variabel X.

X= data.drop('Survived', axis=1) 
y= data['Survived']

Selanjutnya kita pisahkan antara data Training dan data Testing yang kita gunakan pada proses Analisa / prediksi data. Disini data testing yang kita gunakan yaitu sebanyak 30% dan diambil secara random dari dataset kita.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

Lalu kita masukkan semua data training yang kita miliki ke dalam Function atau Library dari Analisa Logistic Regression kita.

from sklearn.linear_model import LogisticRegression
logModel = LogisticRegression()
logModel.fit(X_train, y_train)

Lalu kita lakukan prediksi terhadap data Testing yang kita miliki. Prediksi ini dilakukan untuk melihat apakah data testing yang kita miliki menghasilkan Output sesuai dengan data Training yang kita miliki.

prediksi = logModel.predict(X_test)

Sekarang kita lihat hasil Prediksi yang dilakukan dengan menggunakan Confusion Matrix. Berdasarkah hasil yang diperoleh bahwa nilai TP (True Positive) yaitu 143 dan TN (True Negative) yaitu 79.

from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, prediksi)

Lalu kita cek akurasi hasil prediksi yang kita gunakan tersebut. Berdasarkan hasil prediksi yang dilakukan dapat dilihat bahwa akurasi prediksi tersebut bernilai 83%.

from sklearn.metrics import accuracy_score 
accuracy_score(y_test, prediksi)

Sekian materi tentang Analisa Data Korban Titanic Menggunakan Pemograman PYTHON dan Logistic Regression. Untuk Project lengkapnya dapat didownload pada link ((GITHUB)) kami ini.

Leave a Reply