library(ggplot2)
library(readxl)
library(ggthemes)
library(gridExtra)

import data

Berikut adalah data trenyang telah di import dari file excel:

setwd("C:/test/testR")
titanic <- read_excel("titanic.xlsx")
head(titanic)
## # A tibble: 6 × 8
##   Survived Pclass Name                        Sex     Age Siblings/Spouses Abo…¹
##      <dbl>  <dbl> <chr>                       <chr> <dbl>                  <dbl>
## 1        0      3 Mr. Owen Harris Braund      male     22                      1
## 2        1      1 Mrs. John Bradley (Florenc… fema…    38                      1
## 3        1      3 Miss. Laina Heikkinen       fema…    26                      0
## 4        1      1 Mrs. Jacques Heath (Lily M… fema…    35                      1
## 5        0      3 Mr. William Henry Allen     male     35                      0
## 6        0      3 Mr. James Moran             male     27                      0
## # ℹ abbreviated name: ¹​`Siblings/Spouses Aboard`
## # ℹ 2 more variables: `Parents/Children Aboard` <dbl>, Fare <dbl>

pie chart - Proporsi Jenis Kelamin

sex_count <- table(titanic$Sex)
sex_percent <- round(100 * sex_count / sum(sex_count), 1)
sex_data <- data.frame(
  Sex = names(sex_count),
  Count = as.numeric(sex_count),
  Percent = as.numeric(sex_percent)
)

ggplot(sex_data, aes(x = "", y = Count, fill = Sex)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  geom_text(aes(label = paste0(Percent, "%")), position = position_stack(vjust = 0.5)) +
  labs(title = "Proporsi Jenis Kelamin", fill = "Jenis Kelamin") +
  theme_void()

Deskripsi: - Pie chart ini menunjukkan proporsi penumpang berdasarkan jenis kelamin. Dari chart ini, terlihat bahwa 64.6% penumpang adalah laki-laki, sedangkan 35.4% adalah perempuan. Hal ini menunjukkan bahwa jumlah penumpang laki-laki lebih dominan dibandingkan perempuan.

bar chart - Jumlah Penumpang per Kelas

ggplot(titanic, aes(x = as.factor(Pclass))) +
  geom_bar(fill = "skyblue") +
  labs(title = "Jumlah Penumpang per Kelas", x = "Kelas", y = "Jumlah") +
  theme_minimal()

Deskripsi: - Bar chart ini menunjukkan jumlah penumpang di setiap kelas (Pclass). Kelas 3 (ekonomi) memiliki jumlah penumpang terbanyak, diikuti oleh Kelas 1 (pertama) dan Kelas 2 (menengah).

Histogram - Distribusi Umur

ggplot(titanic, aes(x = Age)) +
  geom_histogram(bins = 20, fill = "blue", alpha = 0.7, color = "black") +
  labs(title = "Distribusi Umur", x = "Usia", y = "Frekuensi") +
  theme_minimal()

Deskripsi: - Histogram ini menunjukkan distribusi usia penumpang. Sebagian besar penumpang berada dalam rentang usia 20-40 tahun, dengan puncak di sekitar usia 20-30 tahun. Ada juga beberapa penumpang anak-anak (usia di bawah 10 tahun) dan penumpang yang lebih tua (usia di atas 60 tahun).

Density Plot - Distribusi Tarif Tiket

ggplot(titanic, aes(x = Fare)) +
  geom_density(fill = "green", alpha = 0.5) +
  labs(title = "Distribusi Tarif Tiket", x = "Tarif", y = "Kepadatan") +
  theme_minimal()

Deskripsi: - Density plot ini menunjukkan distribusi tarif tiket yang dibayar oleh penumpang. Sebagian besar penumpang membayar tarif yang relatif rendah, dengan puncak di sekitar tarif 10-20. Namun, ada beberapa penumpang yang membayar tarif sangat tinggi, yang mungkin berasal dari Kelas 1.

Boxplot - Usia Berdasarkan Jenis Kelamin

ggplot(titanic, aes(x = Sex, y = Age, fill = Sex)) +
  geom_boxplot() +
  labs(title = "Boxplot Usia Berdasarkan Jenis Kelamin", x = "Jenis Kelamin", y = "Usia") +
  theme_minimal()

Deskripsi: - Boxplot ini membandingkan distribusi usia penumpang berdasarkan jenis kelamin. Median usia penumpang laki-laki sedikit lebih tinggi daripada perempuan. Rentang usia penumpang laki-laki lebih luas, dengan beberapa outlier di usia yang lebih tua. Penumpang perempuan cenderung memiliki distribusi usia yang lebih terkonsentrasi di rentang yang lebih muda.

Statiistik Deskriptif

age_summary <- summary(titanic$Age)
age_mean <- mean(titanic$Age, na.rm = TRUE)
age_median <- median(titanic$Age, na.rm = TRUE)
age_mode <- as.numeric(names(sort(table(titanic$Age), decreasing = TRUE)[1]))
age_q1 <- quantile(titanic$Age, 0.25, na.rm = TRUE)
age_q3 <- quantile(titanic$Age, 0.75, na.rm = TRUE)
age_range <- range(titanic$Age, na.rm = TRUE)
age_var <- var(titanic$Age, na.rm = TRUE)
age_sd <- sd(titanic$Age, na.rm = TRUE)

age_stats <- data.frame(
  Statistic = c("Mean", "Median", "Mode", "Q1", "Q3", "Range", "Variance", "Standard Deviation"),
  Value = c(age_mean, age_median, age_mode, age_q1, age_q3, paste(age_range, collapse = " - "), age_var, age_sd)
)

print(age_stats)
##            Statistic            Value
## 1               Mean 29.4714430665163
## 2             Median               28
## 3               Mode               22
## 4                 Q1            20.25
## 5                 Q3               38
## 6              Range        0.42 - 80
## 7           Variance 199.428297012274
## 8 Standard Deviation 14.1219084054626

Interpretasi: