Install dan load

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)
## Warning: package 'scales' was built under R version 4.4.3

Input Data

Data diinput dari Microsoft Excel dengan syntax sebagai berikut:

setwd ("C:/Users/user/OneDrive/Documents")
data <- read_excel("Mobiles 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)) 
brand_counts <- table(data$`Company Name`) 
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)`))
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`)

1. Pie Chart

Dari data tersebut akan di visualisasikan data dalam bentuk Pie Chart. Berikut terlampir hasil visualisasi datanya :

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%.

2. Bar Chart

Hasil visualisasi data di atas disajikan dalam bentuk Bar Chart sebagai berikut :

data <- data %>% rename(Merek = `Company Name`, RAM = RAM)
data$RAM <- gsub("[^0-9.]", "", data$RAM)
data$RAM <- as.numeric(data$RAM)

avg_ram <- data %>%  
  filter(!is.na(RAM)) %>%
  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.

3. Histogram

Hasil visualisasi data di atas disajikan dalam bentuk Histogram sebagai berikut :

ggplot(data[data$Price_USD < 5000, ], aes(x = Price_USD)) +
  geom_histogram(binwidth = 50, fill = "steelblue", 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.

4. Density Plot

Hasil visualisasi data di atas disajikan dalam bentuk Density Plot sebagai berikut :

data_clean <- data %>% filter(!is.na(`Launched Price (Dubai)`) & `Launched Price (Dubai)` > 0)

if (nrow(data_clean) > 1) {
  ggplot(data_clean, aes(x = `Launched Price (Dubai)`)) +
    geom_density(fill = "blue", 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.

5. Box plot

Hasil visualisasi data di atas disajikan dalam bentuk Box Plot sebagai berikut :

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 = "blue", 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.

Hitung Mean

mean(data$`Launched Price (USA)`)
## [1] 625.5158

Data di atas menunjukkan bahwa hasil dari perhitungan rata - rata harga ponsel dalam dataset Launched Price (USA) yaitu 625.5158.

Hitung Median

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.

Hitung Modus

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 muncul dari harga ponsel dalam dataset Launched Price (USA) yaitu 449 USD.

Hitung Q

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

Hitung Kuartil

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.

Hitung Range

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.

Hitung Standar Deviasi

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.

Hitung Varians

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.