library(ggplot2)
library(readxl)
library(randomcoloR)
## Warning: package 'randomcoloR' was built under R version 4.4.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(scales)
Data diinput dari Microsoft Excel dengan syntax sebagai berikut:
knitr::opts_chunk$set(echo = TRUE)
data <- readxl::read_excel("C:/Users/Win10-21H2/Documents/Mobile Dataset 2025.xlsx")
head(data)
## # A tibble: 6 × 15
## `Company Name` `Model Name` `Mobile Weight` RAM `Front Camera` `Back Camera`
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Apple iPhone 16 1… 174g 6GB 12MP 48MP
## 2 Apple iPhone 16 2… 174g 6GB 12MP 48MP
## 3 Apple iPhone 16 5… 174g 6GB 12MP 48MP
## 4 Apple iPhone 16 P… 203g 6GB 12MP 48MP
## 5 Apple iPhone 16 P… 203g 6GB 12MP 48MP
## 6 Apple iPhone 16 P… 203g 6GB 12MP 48MP
## # ℹ 9 more variables: Processor <chr>, `Battery Capacity` <chr>,
## # `Screen Size` <chr>, `Launched Price (Pakistan)` <chr>,
## # `Launched Price (India)` <chr>, `Launched Price (China)` <chr>,
## # `Launched Price (USA)` <chr>, `Launched Price (Dubai)` <chr>,
## # `Launched Year` <dbl>
colnames(data) <- trimws(colnames(data)) # Bersihkan nama kolom
brand_counts <- table(data$`Company Name`) # Buat data merek HP untuk Pie Chart & Bar Chart
brand_df <- as.data.frame(brand_counts)
colnames(brand_df) <- c("Brand", "Count")
data$`Launched Price (USA)` <- as.numeric(gsub("[^0-9.]", "", data$`Launched Price (USA)`))
data$Price_USD <- as.numeric(gsub("[^0-9.]", "", data$`Launched Price (USA)`)) # Hapus karakter selain angka
data$Price_USD[data$Price_USD == 0 | is.na(data$Price_USD)] <- median(data$Price_USD, na.rm = TRUE)
colnames(data) <- trimws(colnames(data))
data$`Launched Price (Dubai)` <- gsub("[^0-9.]", "", data$`Launched Price (Dubai)`)
data$`Launched Price (Dubai)` <- as.numeric(data$`Launched Price (Dubai)`)
data$`Launched Year` <- as.numeric(data$`Launched Year`)
Dari data tersebut akan di visualisasikan data dalam bentuk Pie Chart. Berikut terlampir hasil visualisasi datanya :
# Definisikan warna sebelum dipakai
palette_colors <- distinctColorPalette(length(unique(brand_df$Brand)))
ggplot(brand_df, aes(x = "", y = Count, fill = Brand)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
scale_fill_manual(values = palette_colors) +
theme_void() +
labs(title = "Distribusi Merek HP") +
geom_text(aes(label = percent(Count / sum(Count), accuracy = 0.1)),
position = position_stack(vjust = 0.5), size = 5)
Dari hasil visualisasi di atas tersebut dapat dijelaskan bahwa HP OPPO
merupakan merek yang paling banyak distribusinya dalam dataset dengan
persentase sebesar 13.9% sedangkan distribusi merek HP yang paling
sedikit dalam dataset adalah Poco dengan persentase sebesar 0.2%.
data <- data %>% rename(Merek = `Company Name`, RAM = RAM)
data$RAM <- gsub("[^0-9.]", "", data$RAM)
data$RAM <- as.numeric(data$RAM)
# Filter dan hitung rata-rata
avg_ram <- data %>%
filter(!is.na(RAM)) %>% # Hilangkan nilai NA hasil konversi
group_by(Merek) %>%
summarise(RataRataRAM = mean(RAM, na.rm = TRUE)) %>%
arrange(desc(RataRataRAM))
ggplot(avg_ram, aes(x = reorder(Merek, RataRataRAM), y = RataRataRAM, fill = Merek)) +
geom_bar(stat = "identity", show.legend = FALSE) +
coord_flip() +
labs(title = "Rata-rata RAM per Merek", x = "Merek", y = "Rata-rata RAM (GB)") +
theme_minimal()
Berdasarkan Bar Plot visualisasi data rata-rata RAM berdasarkan merek HP
dapat disimpulkan bahwa kategori HP dengan RAM terbanyak adalah Huawei
yang mendekati 50GB. Kategori RAM merek HP Xiaomi, OnePlus, dan Oppo
mengikuti rata-rata RAM sekitar 6-10 GB, sementara Nokia dan Apple
memiliki RAM terendah, sekitar 2-4 GB.
ggplot(data[data$Price_USD < 5000, ], aes(x = Price_USD)) +
geom_histogram(binwidth = 50, fill = "pink", color = "white") +
theme_minimal() +
labs(title = "Distribusi Harga HP (<$5000)", x = "Harga (USD)", y = "Frekuensi") +
theme(plot.title = element_text(hjust = 0.5))
Dari Histogram distribusi harga ponsel, dapat disimpulkan bahwa
mayoritas ponsel dalam dataset berada dalam kategori harga terjangkau
yakni di bawah $500. Frekuensi tertinggi dapat diperkirakan pada kisaran
$100 hingga $300. Maka, dapat ditarik kesimpulan bahwa jumlah ponsel
semakin berkurang seiring dengan meningkatnya harga,dapat dilihat dari
visualisasi data bahwa sangat sedikit perangkat di atas $1000.
data_clean <- data %>% filter(!is.na(`Launched Price (Dubai)`) & `Launched Price (Dubai)` > 0)
# Plot density
if (nrow(data_clean) > 1) {
ggplot(data_clean, aes(x = `Launched Price (Dubai)`)) +
geom_density(fill = "pink", alpha = 0.5) +
labs(title = "Distribusi Harga Peluncuran di Dubai", x = "Harga Peluncuran (AED)", y = "Density") +
theme_minimal()
} else {
print("Tidak cukup data untuk membuat density plot.")
}
Dari Density Plot, menunjukkan bahwa sebagian besar harga peluncuran
perangkat berada di kisaran 0 hingga 3000 AED dengan puncak kepadatan
data tertinggi di rentang 100-200. Setelahnya, distribusi menurun secara
bertahap dengan sedikit lonjakan di sekitar 4000-6000 AED. Harga di atas
6000 AED lebih jarang menandakan bahwa hanya sedikit perangkat yang
dirilis dengan harga sangat tinggi.
data_clean_year <- data %>% filter(!is.na(`Launched Year`) & `Launched Year` > 0)
# Plot boxplot
if (nrow(data_clean_year) > 1) {
ggplot(data_clean_year, aes(y = `Launched Year`)) +
geom_boxplot(fill = "pink", alpha = 0.5) +
labs(title = "Box Plot Tahun Peluncuran", y = "Tahun Peluncuran") +
theme_minimal()
} else {
print("Tidak cukup data untuk membuat box plot.")
}
Dari visualisasi data Box Plot diatas menunjukkan bahwa mayoritas
perangkat dirilis antara 2020 hingga 2024, dengan median sekitar 2022.
Beberapa perangkat dirilis lebih awal, dengan outlier di bawah 2018.
mean(data$`Launched Price (USA)`)
## [1] 625.5158
Dari data perhitungan Mean di atas menunjukkan harga rata-rata ponsel dalam dataset Launched Price (USA) yaitu 625.5158 USD
median(data$`Launched Price (USA)`)
## [1] 449
Dari data perhitungan Median di atas menunjukkan nilai tengah yang telah diurutkan dari harga ponsel dalam dataset Launched Price (USA) yaitu 449 USD
x <- data$`Launched Price (USA)`
modus <- function(x) {
uniqx <- unique(x)
uniqx[which.max(tabulate(match(x, uniqx)))]
}
modus(data$`Launched Price (USA)`)
## [1] 499
Dari data di atas menunjukkan nilai yang paling sering mucul dari harga ponsel dalam dataset Launched Price (USA) yaitu 449 USD
quantile(data$`Launched Price (USA)`)
## 0% 25% 50% 75% 100%
## 79 250 449 849 39622
Dari data quartil di atas memberikan gambaran penyebaran harga ponsel dalam dataset Launched Price (USA): Q1 (Kuartil 1 / 25%): 25% ponsel memiliki harga di nilai 250 USD Q2 (Kuartil 2 / 50%): Separuh ponsel memiliki harga di nilai 445 USD Q3 (Kuartil 3 / 75%): 75% ponsel memiliki harga di nilai 849 USD
Q3 <- quantile(data$Price_USD, 0.75, na.rm = TRUE)
Q3
## 75%
## 849
Data menunjukkan bahwa sebesar 75% dari harga ponsel dalam Mobile Datasets 2025 ini berada dibawah 849 USD. Sisanya sebesar 25% harganya cenderung lebih tinggi dari angka ini. Dapat dikatakan bahwa mayoritas harga ponsel berada di bawah angka ini.
range_value <- max(data$Price_USD, na.rm = TRUE) - min(data$Price_USD, na.rm = TRUE)
range_value
## [1] 39543
Data menunjukkan bahwa Range atau Jangkauan dari Dataset ini memiliki perbedaan yang sangat besar antara harga ponsel termurah dan termahal. Selisihnya hampir menyentuh 40.000 USD.
std_dev <- sd(data$Price_USD, na.rm = TRUE)
std_dev
## [1] 1347.561
Data menunjukkan bahwa Standar Deviasi dari Dataset ini sebesar 1,347.56 USD, yang berarti rata - rata harga ponsel terdistribusi sekitar ±1,347.56 USD dari nilai rata - rata harga dalam USD.
variance <- var(data$Price_USD, na.rm = TRUE)
variance
## [1] 1815921
Varians berperan sebagai pengukur seberapa jauh angka - angka dalam data menyebar dari rata - rata. Dalam data ini varian yang dihasilkan cukup besar, yang artinya ada harga yang jauh lebih rendah atau lebih tinggi dibanding rata - rata, menyebabkan datanya menyebar luas.