RMS Titanic'in 1912'de batması tarihteki en ölümcül deniz felaketlerinden biri olmaya devam ediyor. Geminin buzdağına çarpıp Kuzey Atlantik Okyanusu'nda batması sonucu 1.500'den fazla kişi hayatını kaybetti. Takip eden yıllarda ölüm oranlarının yüksek olmasına katkıda bulunan faktörleri anlamak için kapsamlı araştırmalar yapıldı.
Yolcuların yalnızca %38'i bu yıkıcı olaydan sağ kurtuldu ve bu da beni o kader gecesinde Titanik'te bulunan kişileri merak etmeye yöneltti.
Sınıf farklılıkları, gemidekilerin kaderini belirlemede, ayrıcalık ve tehlike arasında bir ayrım yaratmada rol oynadı mı? Yaş ve cinsiyet, kimin hayatta kalacağını ve kimin amansız denize yenik düşeceğini nasıl etkiledi? Kaosun ortasında aile üyelerinin varlığı rahatlık ve destek sağlayarak yolcuları fırtınayla birlikte yüzleşmeye teşvik etti mi? Peki gemiye biniş limanı, farklı yerlerden gemiye binenlerin kaderini etkiledi mi?
Neyse ki bu soruları Kaggle'da bulunan Titanic veri setini kullanarak cevaplayabiliyoruz. Batmasının üzerinden yüz yılı aşkın süre geçtikten sonra, verileri, bilet fiyatının hayatta kalmayı nasıl etkilediğini ve trajik olaylar sırasında belirli kabin konumlarının sığınak sağlayıp sağlamadığını anlamak için kullanabiliriz. Bu Keşifsel Veri Analizi (EDA), yolcuların deneyimlerine ilişkin içgörüleri ortaya çıkaracak ve onların o kader gecesindeki cesaret ve kayıp hikayelerine ışık tutacak.
Analiz sırasında keşfedeceğimiz bazı bilgiler şunlardır:
Titanic veri seti, 1912 yılında batan RMS Titanic'in yolcuları ve mürettebatına ilişkin verilerin bir derlemesidir. Veri seti, her yolcunun adı, yaşı, cinsiyeti, bilet sınıfı ve batmadan sağ kurtulup kurtulmadıkları hakkında bilgiler içermektedir. Titanic veri kümesi, makine öğrenimi ve veri bilimi projeleri için popüler bir veri kümesidir. Yolcuların özelliklerine göre batmadan sağ kurtulup kurtulamayacaklarını tahmin etmek için genellikle modelleri eğitmek için kullanılır. Titanic veri seti aynı zamanda sosyal ağları ve insan davranışlarını incelemek için de kullanılıyor.
Titanic veri kümesi, bir veri bilimi topluluğu olan Kaggle tarafından oluşturuldu. Veri seti Kaggle web sitesinden ücretsiz olarak indirilebilir.
Veri setini buradan alabilirsiniz
Gerekli modülleri ve titanic veri setini yükleyerek analizimize başlayalım.
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Load the Titanic dataset df = pd.read_csv('/kaggle/input/titanic/train.csv') df.head()
Bu veri setinin, bu yazının giriş bölümünde anlattığım her bir yolcuya ait tüm bilgilerin yer aldığını görebilirsiniz.
Şimdi pandaları kullanarak analizimize başlayalım ve matplotlib ve seaborn'u kullanarak içgörüleri görselleştirelim.
# Calculate the overall survival rate survival_rate = df['Survived'].mean() * 100 # Create a bar plot to visualize the survival rate sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.countplot(x='Survived', data=df) plt.xlabel('Survived') plt.ylabel('Passenger Count') plt.title('Survival Rate: {:.2f}%'.format(survival_rate)) plt.xticks([0, 1], ['No', 'Yes']) plt.show()
Çubuk grafiği, Titanik'teki yolcuların genel hayatta kalma oranının açık ve kısa bir görsel temsilini sağlar. Yolcuların yalnızca %38'inin felaketten sağ kurtulabildiği ortaya çıkıyor.
Çubukların yüksekliği her kategorideki yolcu sayısını temsil eder (hayatta kalmayanlar için 0 ve hayatta kalanlar için 1). Olay örgüsünün başlığında belirtilen hayatta kalma oranı, trajik olaydan sağ kurtulan yolcuların yüzdesini vurgulamaktadır.
# Calculate the survival rate by gender survival_by_gender = df.groupby('Sex')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rate by gender sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.barplot(x=survival_by_gender.index, y=survival_by_gender.values) plt.xlabel('Gender') plt.ylabel('Survival Rate') plt.title('Survival Rate by Gender') plt.show()
Hayatta kalan yolcuların %70'inden fazlasının kadın olduğunu görebilirsiniz. Kadınlarda erkeklere göre önemli ölçüde daha yüksek hayatta kalma oranı çarpıcı bir gözlemdir.
Bu tutarsızlık, Titanik trajedisi sırasında hayatta kalma şansını belirlemede cinsiyetin önemli bir rol oynadığını gösteriyor.
# Plot the distribution of passenger ages sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.histplot(data=df, x='Age', bins=20, kde=True) plt.xlabel('Age') plt.ylabel('Count') plt.title('Distribution of Passenger Ages') plt.show()
KDE grafiğini içeren histogram, Titanik'teki yolcuların yaş dağılımını göstermektedir. Veriler sola çarpık bir dağılım gösteriyor; bu da yolcular arasında yaşlı yetişkinlere veya çocuklara kıyasla özellikle 18-35 yaş arası genç yetişkinlerin daha fazla olduğunu gösteriyor.
Yolcu yaşlarının dağılımını analiz etmek için KDE (Çekirdek Yoğunluğu Tahmini) grafiğini içeren bir histogram kullandık. X ekseni farklı yaş aralıklarını (kutuları) temsil ederken, y ekseni her yaş grubuna düşen yolcu sayısını gösterir. Verileri bu şekilde görselleştirerek Titanik'teki yaş dağılımının çarpık doğasını fark edebildik ve yolcular arasında genç yetişkinlerin yaygınlığını ortaya çıkardık.
# Calculate the survival rates by passenger class survival_by_class = df.groupby('Pclass')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by passenger class sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.barplot(x=survival_by_class.index, y=survival_by_class.values) plt.xlabel('Passenger Class') plt.ylabel('Survival Rate') plt.title('Survival Rate by Passenger Class') plt.show()
Çubuk grafiği, Titanic veri setindeki yolcular için yolcu sınıfına dayalı olarak hayatta kalma oranlarını göstermektedir. Yolcu sınıfı ne kadar yüksek olursa hayatta kalma oranının da o kadar yüksek olduğu çizimden açıkça görülmektedir. Bu gözlem, üst sınıflardaki (1. sınıf) yolcuların cankurtaran filikalarına ve güvenlik önlemlerine daha iyi erişime sahip olduğu ve bunun muhtemelen hayatta kalma şanslarının daha yüksek olmasına katkıda bulunduğu yönündeki tarihsel anlayışla uyumludur. Buna karşılık, alt sınıflardaki (3. sınıf) yolcular tahliye sürecinde daha fazla zorlukla karşılaştı ve bu da potansiyel olarak o grup için daha düşük bir hayatta kalma oranına yol açtı.
Yolcu sınıfına göre hayatta kalma oranlarını analiz etmek için bir çubuk grafiği oluşturduk. Her çubuk, her sınıf kategorisinde (1., 2. veya 3. sınıf) hayatta kalan yolcuların yüzdesini temsil eder. Olay örgüsünü görsel olarak inceleyerek, farklı yolcu sınıfları arasında hayatta kalma oranlarındaki eşitsizlikleri tespit edebildik. Çubukların yükseklikleri hayatta kalma oranlarını gösterir; daha yüksek çubuklar, belirli yolcu sınıfları için daha yüksek hayatta kalan yüzdelerini gösterir.
# Create age groups age_bins = [0, 12, 18, 30, 50, 100] # Define the age group boundaries age_labels = ['Child', 'Teenager', 'Young Adult', 'Adult', 'Elderly'] # Define the age group labels df['AgeGroup'] = pd.cut(df['Age'], bins=age_bins, labels=age_labels, right=False) # Calculate the survival rates by age group survival_by_age_group = df.groupby('AgeGroup')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by age group sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.barplot(x=survival_by_age_group.index, y=survival_by_age_group.values) plt.xlabel('Age Group') plt.ylabel('Survival Rate') plt.title('Survival Rate by Age Group') plt.show()
Çubuk grafiği, Titanic veri setindeki yolcular arasındaki farklı yaş gruplarındaki hayatta kalma oranlarını göstermektedir. Çocuklar, yetişkinler ve yaşlılar gibi belirli yaş gruplarının afet sırasında hayatta kalma şansının daha yüksek olduğunu ortaya koyuyor. Bu gözlem, tahliye sürecinde önceliğin bu hassas yaş gruplarına verildiğini ve bunun da daha yüksek hayatta kalma oranlarıyla sonuçlandığını gösteriyor.
Yaş gruplarına göre hayatta kalma oranlarını analiz etmek için bir çubuk grafiği oluşturduk. Her çubuk, belirli bir yaş grubunda hayatta kalanların yüzdesini temsil eder. Olay örgüsünü inceleyerek farklı yaş grupları arasında hayatta kalma oranlarındaki farklılıkları gözlemleyebildik. Bu, trajik olay sırasında çocuklar, yetişkinler ve yaşlılar gibi belirli yaş gruplarının öncelik aldığı ve hayatta kalma şansının daha yüksek olduğu sonucunu çıkarmamızı sağladı. Burada kullanılan metodoloji, afet sırasında en savunmasız yolcuları korumaya yönelik insani çabaları yansıtarak, yaşın hayatta kalma sonuçları üzerindeki etkisine ilişkin değerli bilgiler sağladı.
# Calculate the survival rates by port of embarkation survival_by_embarkation = df.groupby('Embarked')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by port of embarkation sns.set(style='darkgrid') plt.figure(figsize=(6, 4)) sns.barplot(x=survival_by_embarkation.index, y=survival_by_embarkation.values) plt.xlabel('Port of Embarkation') plt.ylabel('Survival Rate') plt.title('Survival Rate by Port of Embarkation') plt.show()
Çubuk grafiği, Titanic veri setindeki yolcuların gemiye bindikleri limana göre hayatta kalma oranlarını göstermektedir. Grafiği analiz ederek, en yüksek hayatta kalma oranının Cherbourg'dan gemiye binen yolcularla ilişkili olduğunu, en düşük hayatta kalma oranının ise Southampton'dan gemiye binenlerle bağlantılı olduğunu açıkça gözlemleyebiliriz.
Bu görselleştirme, biniş limanına bağlı olarak hayatta kalma oranlarındaki değişikliklere ilişkin değerli bilgiler sunarak, yolcuların hayatta kalma şansını etkilemiş olabilecek potansiyel faktörleri ortaya koyuyor.
Gemiye biniş limanına bağlı olarak hayatta kalma oranlarını analiz etmek için bir çubuk grafiği oluşturduk. Her çubuk, her bir gemiye binme limanı kategorisinde (Cherbourg, Queenstown, Southampton) hayatta kalanların yüzdesini temsil eder. Olay örgüsünü görsel olarak inceleyerek, farklı gemiye binme noktaları arasında hayatta kalma oranları açısından önemli farklılıklar tespit edebildik.
# Create fare groups fare_bins = [0, 50, 100, 150, 200, 300, 1000] # Define the fare group boundaries fare_labels = ['0-50', '50-100', '100-150', '150-200', '200-300', '300+'] # Define the fare group labels df['FareGroup'] = pd.cut(df['Fare'], bins=fare_bins, labels=fare_labels, right=False) # Calculate the survival rates by fare group survival_by_fare_group = df.groupby('FareGroup')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by fare group sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.barplot(x=survival_by_fare_group.index, y=survival_by_fare_group.values) plt.xlabel('Fare Group') plt.ylabel('Survival Rate') plt.title('Survival Rate by Fare Group') plt.show()
Grafik, hayatta kalma oranının en yüksek ücret grubundaki (300+) yolcular için en yüksek olduğunu ve bunu ikinci en yüksek ücret grubundaki (200-300) takip ettiğini göstermektedir. Tersine, en düşük ücret grubundaki (0-50) yolcular için en düşük hayatta kalma oranıyla, ücret grubu azaldıkça hayatta kalma oranı da azaldı.
Bu analiz, ödenen ücretin Titanik'te hayatta kalma şansını belirlemede önemli bir rol oynadığını gösteriyor. Daha yüksek ücret ödeyen yolcuların, genel olarak hayatta kalma oranının daha yüksek olduğu birinci sınıfta olma olasılıkları daha yüksekti.
Ek olarak, kurtarma çalışmaları sırasında bu yüksek maaşlı yolculara öncelik verilmiş olabilir, bu da onların daha yüksek hayatta kalma oranlarına katkıda bulunabilir. Ücret grupları ile hayatta kalma oranları arasındaki ilişkiyi analiz etmek için, her ücret grubu için hayatta kalma yüzdelerini gösteren bir çubuk grafiği oluşturduk. Grafik, ücret gruplarına göre hayatta kalma oranlarının eğilimini gözlemlememize olanak tanıdı ve daha yüksek ücretlerin daha yüksek hayatta kalma oranlarıyla ilişkili olduğunu ortaya çıkardı.
# Extract the cabin deck from the Cabin column df['CabinDeck'] = df['Cabin'].str.extract(r'([A-Za-z])') # Plot the distribution of passenger cabin locations sns.set(style='darkgrid') plt.figure(figsize=(10, 6)) sns.countplot(data=df, x='CabinDeck', order=sorted(df['CabinDeck'].dropna().unique())) plt.xlabel('Cabin Deck') plt.ylabel('Count') plt.title('Distribution of Passenger Cabin Locations') plt.show() # Calculate the survival rates by cabin deck survival_by_cabin_deck = df.groupby('CabinDeck')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by cabin deck sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.barplot(x=survival_by_cabin_deck.index, y=survival_by_cabin_deck.values) plt.xlabel('Cabin Deck') plt.ylabel('Survival Rate') plt.title('Survival Rate by Cabin Deck') plt.show()
Grafik, kabin güvertesi seviyesi azaldıkça hayatta kalma oranlarındaki azalma eğilimini açıkça göstermektedir; en düşük hayatta kalma oranı A güvertesindeki yolcular için gözlemlenmiştir.
Bu analiz, yolcu kabininin konumunun gerçekten de Titanik'te hayatta kalma şanslarında önemli bir faktör olduğunu öne sürüyor. Daha yüksek güvertelerdeki yolcuların cankurtaran botlarına daha iyi erişimleri vardı ve daha kolay kurtarıldılar.
Ek olarak, kurtarma operasyonları sırasında bunlara öncelik verilmiş olabilir, bu da daha yüksek hayatta kalma oranlarına katkıda bulunabilir. Kabin güvertesi seviyeleri ile hayatta kalma oranları arasındaki ilişkiyi analiz etmek için, her güverte için hayatta kalma yüzdelerini gösteren bir çubuk grafiği oluşturduk. Grafiği inceleyerek kabin güvertesi seviyelerine göre hayatta kalma oranlarındaki eğilimleri belirleyebildik.
# Create age groups age_bins = [0, 12, 18, 30, 50, 100] # Define the age group boundaries age_labels = ['Child', 'Teenager', 'Young Adult', 'Adult', 'Elderly'] # Define the age group labels df['AgeGroup'] = pd.cut(df['Age'], bins=age_bins, labels=age_labels, right=False) # Calculate the survival rates by age group and gender survival_by_age_gender = df.groupby(['AgeGroup', 'Sex'])['Survived'].mean() * 100 # Convert the survival rates into a pivot table for easier visualization survival_pivot = survival_by_age_gender.unstack() # Create a heatmap to visualize the survival rates by age group and gender sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.heatmap(data=survival_pivot, annot=True, cmap='coolwarm', fmt=".2f", cbar=True) plt.xlabel('Gender') plt.ylabel('Age Group') plt.title('Survival Rate by Age Group and Gender') plt.show()
Isı haritası, Titanic veri kümesindeki yolcular arasındaki farklı yaş grupları ve cinsiyetler için hayatta kalma oranlarının görsel bir temsilini sağlar. Isı haritasını analiz ederek yaşa ve cinsiyete dayalı hayatta kalma oranlarındaki kalıpları ve eğilimleri gözlemleyebiliriz, bu da hangi yaş ve cinsiyet gruplarının felaket sırasında hayatta kalma şansının daha yüksek veya daha düşük olduğunu belirlememize olanak tanır. Isı haritasındaki renk yoğunluğu net bir gösterge görevi görüyor; daha koyu renkler daha yüksek hayatta kalma oranlarını, daha açık renkler ise daha düşük hayatta kalma oranlarını temsil ediyor.
Isı haritasından çeşitli bilgiler elde edebiliriz. Yaşlı kadın yolcuların hayatta kalma şansı en yüksekken, yaşlı erkek yolcuların hayatta kalma şansı en düşüktü. Ek olarak ısı haritası, genel olarak kadınların tüm yaş kategorilerinde hayatta kalma olasılığının daha yüksek olduğunu ortaya koyuyor. Bu gözlemler, bu tarihi trajedi sırasında yolcuların hayatta kalma sonuçlarını belirlemede yaş ve cinsiyetin önemli etkisine ışık tutuyor.
Yaş gruplarına ve cinsiyetlere göre hayatta kalma oranlarını görselleştirmek için bir ısı haritası kullandık. Isı haritasındaki her hücre, belirli bir yaş grubu ve cinsiyet kombinasyonu için hayatta kalma oranını (yüzdesini) temsil eder. Isı haritasındaki renk yoğunluğunu inceleyerek çeşitli yaş ve cinsiyet grupları arasında hayatta kalma oranlarındaki farklılıkları ayırt edebildik.
# Calculate the total number of family members for each passenger df['FamilySize'] = df['SibSp'] + df['Parch'] + 1 # Calculate the survival rates by family size survival_by_family_size = df.groupby('FamilySize')['Survived'].mean() * 100 # Create a bar plot to visualize the survival rates by family size sns.set(style='darkgrid') plt.figure(figsize=(10, 6)) sns.barplot(x=survival_by_family_size.index, y=survival_by_family_size.values) plt.xlabel('Family Size') plt.ylabel('Survival Rate') plt.title('Survival Rate by Family Size') plt.show()
Grafik, daha büyük ailelere sahip yolcuların Titanik'in batmasında hayatta kalma olasılıklarının daha yüksek olduğunu göstermektedir. Aile büyüklüğü 1 ile 4 arasında değişen yolcuların hayatta kalma oranı, aile üyesi sayısı arttıkça arttı.
Bu görüş önemlidir, çünkü aile büyüklüğünün Titanik'te hayatta kalmanın en güçlü belirleyicilerinden biri olduğunu vurgulamaktadır. Daha büyük ailelere sahip yolcular muhtemelen birlikte seyahat ediyorlardı ve bu da onları kurtarma çalışmaları için bir öncelik haline getiriyordu.
Ek olarak, daha fazla aile üyesine sahip olmak, yiyecek ve su gibi kaynakların paylaşılması gibi karşılıklı desteği kolaylaştırmış olabilir ve bu da hayatta kalma şanslarının artmasına katkıda bulunabilir.
Aile büyüklüğü ile hayatta kalma oranları arasındaki ilişkiyi analiz etmek için, her aile büyüklüğü kategorisi için hayatta kalma yüzdelerini gösteren bir çubuk grafiği oluşturduk. Grafiği görsel olarak inceleyerek aile büyüklüğünün yolcuların hayatta kalma sonuçlarını nasıl etkilediğini tespit edebildik.
# Calculate the survival rates by port of embarkation and passenger class survival_by_embark_class = df.groupby(['Embarked', 'Pclass'])['Survived'].mean() * 100 # Convert the survival rates into a pivot table for easier visualization survival_pivot = survival_by_embark_class.unstack() # Create a heatmap to visualize the survival rates sns.set(style='darkgrid') plt.figure(figsize=(8, 6)) sns.heatmap(data=survival_pivot, annot=True, cmap='coolwarm', fmt=".2f", cbar=True) plt.xlabel('Passenger Class') plt.ylabel('Port of Embarkation') plt.title('Survival Rate by Port of Embarkation and Passenger Class') plt.show()
Grafik, biniş limanına ve yolcu sınıfına bağlı olarak hayatta kalma oranlarına ilişkin birkaç önemli modeli ortaya koymaktadır. Cherbourg'dan gemiye binen yolcuların hayatta kalma oranı Queenstown veya Southampton'dan gelen yolculara göre daha yüksekti.
Bunun nedeni muhtemelen Cherbourg'un ilk uğrak limanı olması ve oraya daha fazla birinci sınıf yolcu binme olasılığıdır. Ayrıca bir Fransız limanı olarak Fransız yolcuları kurtarmaya yönelik bir önyargı da oluşmuş olabilir.
Ayrıca grafik, birinci sınıftaki yolcuların ikinci veya üçüncü sınıftakilere göre daha yüksek hayatta kalma oranına sahip olduğunu gösteriyor. Bu, birinci sınıf yolcuların kurtarma için bir öncelik olarak görülmesine ve daha yüksek sosyal statüleri ve hayat kurtarıcı önlemleri karşılayabilecek potansiyel yetenekleri nedeniyle cankurtaran botlarına daha iyi erişime sahip olmalarına bağlanabilir.
Son olarak, tüm limanlarda dikkate değer bir eğilim, yolcu sınıfı azaldıkça hayatta kalma oranının azalmasıdır. Bu, yolcu sınıfının Titanik'te hayatta kalmanın önemli bir belirleyicisi olduğunu ve birinci sınıf yolcuların hayatta kalma şansının en yüksek olduğunu gösteriyor. Biniş limanı, yolcu sınıfı ve hayatta kalma oranları arasındaki ilişkiyi analiz etmek için bir ısı haritası oluşturduk. Isı haritası, farklı biniş limanı ve yolcu sınıfı kombinasyonları için hayatta kalma oranı yüzdelerini temsil eder. Isı haritasını inceleyerek bu iki faktöre dayalı olarak hayatta kalma oranlarındaki modelleri ve eğilimleri tespit edebildik.