Laporan ini menganalisis data 10 negara dengan pengguna Instagram terbanyak di dunia berdasarkan data Statista tahun 2025. Analisis mencakup statistik deskriptif dan berbagai visualisasi data.
Dataset diinput secara manual berdasarkan data Statista 2025.
# Import dataset secara manual
negara <- c("India", "Amerika Serikat", "Brasil", "Indonesia",
"Jepang", "Turki", "Meksiko", "Inggris", "Jerman", "Argentina")
pengguna_juta <- c(480.55, 181.75, 147.00, 107.60,
63.20, 62.25, 53.55, 35.45, 31.25, 31.05)
# Membuat data frame
df <- data.frame(
No = 1:10,
Negara = negara,
Pengguna = pengguna_juta
)
# Tampilkan dataset
knitr::kable(df,
col.names = c("No", "Negara", "Jumlah Pengguna (Juta)"),
caption = "Tabel 1. 10 Negara dengan Pengguna Instagram Terbanyak (Statista, 2025)",
align = c("c", "l", "r"))| No | Negara | Jumlah Pengguna (Juta) |
|---|---|---|
| 1 | India | 480.55 |
| 2 | Amerika Serikat | 181.75 |
| 3 | Brasil | 147.00 |
| 4 | Indonesia | 107.60 |
| 5 | Jepang | 63.20 |
| 6 | Turki | 62.25 |
| 7 | Meksiko | 53.55 |
| 8 | Inggris | 35.45 |
| 9 | Jerman | 31.25 |
| 10 | Argentina | 31.05 |
## Mean: 119.36 juta pengguna
## Median: 62.73 juta pengguna
Karena data bersifat kontinu dan unik, modus dicari menggunakan pendekatan frekuensi tertinggi. Jika semua nilai unik, modus adalah nilai yang pertama kali muncul.
modus_func <- function(x) {
tbl <- table(x)
as.numeric(names(tbl)[tbl == max(tbl)])
}
modus_val <- modus_func(df$Pengguna)
cat("Modus:", paste(modus_val, collapse = ", "), "juta pengguna\n")## Modus: 31.05, 31.25, 35.45, 53.55, 62.25, 63.2, 107.6, 147, 181.75, 480.55 juta pengguna
## (Catatan: Semua nilai unik, sehingga setiap nilai muncul 1 kali)
q1 <- quantile(df$Pengguna, 0.25)
q3 <- quantile(df$Pengguna, 0.75)
cat("Q1 (Kuartil 1):", round(q1, 2), "juta pengguna\n")## Q1 (Kuartil 1): 39.98 juta pengguna
## Q3 (Kuartil 3): 137.15 juta pengguna
## IQR : 97.18 juta pengguna
range_val <- max(df$Pengguna) - min(df$Pengguna)
cat("Nilai Minimum:", min(df$Pengguna), "juta (", df$Negara[which.min(df$Pengguna)], ")\n")## Nilai Minimum: 31.05 juta ( Argentina )
## Nilai Maksimum: 480.55 juta ( India )
## Range : 449.5 juta pengguna
## Varians: 18733.6
## Standar Deviasi: 136.87 juta pengguna
statistik <- data.frame(
Ukuran = c("Mean", "Median", "Modus", "Q1", "Q3", "IQR",
"Min", "Maks", "Range", "Varians", "Standar Deviasi"),
Nilai = c(
round(mean_val, 2),
round(median_val, 2),
ifelse(length(modus_val) == length(df$Pengguna), NA, modus_val[1]),
round(q1, 2),
round(q3, 2),
round(q3 - q1, 2),
min(df$Pengguna),
max(df$Pengguna),
round(range_val, 2),
round(var_val, 2),
round(sd_val, 2)
),
Satuan = rep("Juta Pengguna", 11)
)
knitr::kable(statistik,
col.names = c("Ukuran Statistik", "Nilai", "Satuan"),
caption = "Tabel 2. Ringkasan Statistik Deskriptif",
align = c("l", "r", "l"))| Ukuran Statistik | Nilai | Satuan |
|---|---|---|
| Mean | 119.36 | Juta Pengguna |
| Median | 62.73 | Juta Pengguna |
| Modus | NA | Juta Pengguna |
| Q1 | 39.98 | Juta Pengguna |
| Q3 | 137.15 | Juta Pengguna |
| IQR | 97.18 | Juta Pengguna |
| Min | 31.05 | Juta Pengguna |
| Maks | 480.55 | Juta Pengguna |
| Range | 449.50 | Juta Pengguna |
| Varians | 18733.60 | Juta Pengguna |
| Standar Deviasi | 136.87 | Juta Pengguna |
# Hitung persentase
df$Persen <- round(df$Pengguna / sum(df$Pengguna) * 100, 1)
df$Label <- paste0(df$Negara, "\n", df$Persen, "%")
# Warna
warna <- c("#003f88","#0077b6","#00b4d8","#48cae4","#90e0ef",
"#ff6b6b","#ff9f43","#f7b731","#20bf6b","#a29bfe")
ggplot(df, aes(x = "", y = Pengguna, fill = Negara)) +
geom_col(width = 1, color = "white", linewidth = 0.5) +
coord_polar(theta = "y") +
scale_fill_manual(values = warna) +
geom_text(aes(label = paste0(Persen, "%")),
position = position_stack(vjust = 0.5),
size = 3, color = "white", fontface = "bold") +
labs(title = "Proporsi Pengguna Instagram per Negara (2025)",
subtitle = "Total: ~1,19 Miliar dari 10 Negara Teratas",
fill = "Negara") +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, size = 10, color = "gray50"),
legend.position = "right"
)Gambar 1. Proporsi Pengguna Instagram per Negara (2025)
# Urutkan dari terbesar ke terkecil
df$Negara <- factor(df$Negara, levels = df$Negara[order(df$Pengguna, decreasing = TRUE)])
ggplot(df, aes(x = Negara, y = Pengguna, fill = Negara)) +
geom_col(show.legend = FALSE, width = 0.7) +
geom_text(aes(label = paste0(Pengguna, " Jt")),
vjust = -0.4, size = 3.2, fontface = "bold") +
scale_fill_manual(values = warna) +
scale_y_continuous(labels = label_number(suffix = " Jt"),
expand = expansion(mult = c(0, 0.12))) +
labs(title = "Jumlah Pengguna Instagram per Negara (2025)",
subtitle = "Sumber: Statista, 2025",
x = "Negara",
y = "Jumlah Pengguna (Juta)") +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray50"),
axis.text.x = element_text(angle = 30, hjust = 1, size = 9),
panel.grid.major.x = element_blank()
)Gambar 2. Jumlah Pengguna Instagram per Negara (2025)
ggplot(df, aes(x = Pengguna)) +
geom_histogram(binwidth = 60, fill = "#0077b6", color = "white",
boundary = 0) +
geom_vline(aes(xintercept = mean_val, linetype = "Mean"),
color = "red", linewidth = 1) +
geom_vline(aes(xintercept = median_val, linetype = "Median"),
color = "orange", linewidth = 1) +
scale_linetype_manual(name = "Garis",
values = c("Mean" = "dashed", "Median" = "dotted")) +
scale_x_continuous(labels = label_number(suffix = " Jt")) +
labs(title = "Histogram Distribusi Jumlah Pengguna Instagram (2025)",
subtitle = paste0("Mean = ", round(mean_val, 1),
" Jt | Median = ", round(median_val, 1), " Jt"),
x = "Jumlah Pengguna (Juta)",
y = "Frekuensi") +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray50"),
legend.position = "top"
)Gambar 3. Distribusi Jumlah Pengguna Instagram
ggplot(df, aes(x = Pengguna)) +
geom_density(fill = "#0077b6", color = "#003f88", alpha = 0.6, linewidth = 1) +
geom_vline(xintercept = mean_val, color = "red", linewidth = 1.2,
linetype = "dashed") +
geom_vline(xintercept = median_val, color = "orange", linewidth = 1.2,
linetype = "dotted") +
geom_vline(xintercept = q1, color = "#a29bfe", linewidth = 1,
linetype = "dotdash") +
geom_vline(xintercept = q3, color = "#a29bfe", linewidth = 1,
linetype = "dotdash") +
annotate("text", x = mean_val + 8, y = Inf, vjust = 2, hjust = 0,
label = paste0("Mean = ", round(mean_val, 1), " Jt"),
color = "red", size = 3.5, fontface = "bold") +
annotate("text", x = median_val - 8, y = Inf, vjust = 3.8, hjust = 1,
label = paste0("Median = ", round(median_val, 1), " Jt"),
color = "orange", size = 3.5, fontface = "bold") +
annotate("text", x = q1 - 8, y = Inf, vjust = 5.5, hjust = 1,
label = paste0("Q1 = ", round(q1, 1), " Jt"),
color = "#6c5ce7", size = 3.2, fontface = "bold") +
annotate("text", x = q3 + 8, y = Inf, vjust = 5.5, hjust = 0,
label = paste0("Q3 = ", round(q3, 1), " Jt"),
color = "#6c5ce7", size = 3.2, fontface = "bold") +
scale_x_continuous(labels = label_number(suffix = " Jt")) +
labs(title = "Density Plot Distribusi Jumlah Pengguna Instagram (2025)",
subtitle = "Kurva menunjukkan distribusi right-skewed akibat dominasi India",
x = "Jumlah Pengguna (Juta)",
y = "Density") +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray50")
)Gambar 4. Density Plot Distribusi Pengguna Instagram (2025)
ggplot(df, aes(y = Pengguna, x = "")) +
geom_boxplot(fill = "#90e0ef", color = "#003f88",
outlier.color = "red", outlier.size = 3,
width = 0.4, linewidth = 0.8) +
geom_jitter(aes(color = Negara), width = 0.1, size = 3, alpha = 0.9) +
geom_text(aes(label = Negara), hjust = -0.15, size = 3,
position = position_jitter(width = 0.1, seed = 42)) +
scale_color_manual(values = warna) +
scale_y_continuous(labels = label_number(suffix = " Jt")) +
annotate("text", x = 0.65, y = q1, label = paste0("Q1 = ", round(q1, 1)), size = 3, color = "#003f88") +
annotate("text", x = 0.65, y = median_val, label = paste0("Median = ", round(median_val, 1)), size = 3, color = "#003f88") +
annotate("text", x = 0.65, y = q3, label = paste0("Q3 = ", round(q3, 1)), size = 3, color = "#003f88") +
labs(title = "Boxplot Distribusi Jumlah Pengguna Instagram (2025)",
subtitle = paste0("IQR = ", round(q3 - q1, 1), " Jt | Range = ", round(range_val, 1), " Jt"),
x = NULL,
y = "Jumlah Pengguna (Juta)") +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray50"),
axis.text.x = element_blank(),
legend.position = "none"
)Gambar 5. Boxplot Distribusi Pengguna Instagram
Berdasarkan analisis data 10 negara dengan pengguna Instagram terbanyak tahun 2025:
Sumber data: Statista, 2025. Laporan dibuat menggunakan R Markdown.