1 Pendahuluan

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.


2 Import Dataset

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"))
Tabel 1. 10 Negara dengan Pengguna Instagram Terbanyak (Statista, 2025)
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

3 Statistik Deskriptif

3.1 Mean (Rata-rata)

mean_val <- mean(df$Pengguna)
cat("Mean:", round(mean_val, 2), "juta pengguna\n")
## Mean: 119.36 juta pengguna

3.2 Median

median_val <- median(df$Pengguna)
cat("Median:", round(median_val, 2), "juta pengguna\n")
## Median: 62.73 juta pengguna

3.3 Modus

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
cat("(Catatan: Semua nilai unik, sehingga setiap nilai muncul 1 kali)\n")
## (Catatan: Semua nilai unik, sehingga setiap nilai muncul 1 kali)

3.4 Kuartil (Q1 dan Q3)

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
cat("Q3 (Kuartil 3):", round(q3, 2), "juta pengguna\n")
## Q3 (Kuartil 3): 137.15 juta pengguna
cat("IQR            :", round(q3 - q1, 2), "juta pengguna\n")
## IQR            : 97.18 juta pengguna

3.5 Range (Jangkauan)

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 )
cat("Nilai Maksimum:", max(df$Pengguna), "juta (", df$Negara[which.max(df$Pengguna)], ")\n")
## Nilai Maksimum: 480.55 juta ( India )
cat("Range         :", round(range_val, 2), "juta pengguna\n")
## Range         : 449.5 juta pengguna

3.6 Varians

var_val <- var(df$Pengguna)
cat("Varians:", round(var_val, 2), "\n")
## Varians: 18733.6

3.7 Standar Deviasi

sd_val <- sd(df$Pengguna)
cat("Standar Deviasi:", round(sd_val, 2), "juta pengguna\n")
## Standar Deviasi: 136.87 juta pengguna

3.8 Ringkasan Statistik Deskriptif

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"))
Tabel 2. Ringkasan Statistik Deskriptif
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

4 Visualisasi Data

# Load library visualisasi
library(ggplot2)
library(scales)

4.1 Pie Chart

# 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)

Gambar 1. Proporsi Pengguna Instagram per Negara (2025)

4.2 Bar Chart

# 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)

Gambar 2. Jumlah Pengguna Instagram per Negara (2025)

4.3 Histogram

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

Gambar 3. Distribusi Jumlah Pengguna Instagram

4.4 Density Plot

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)

Gambar 4. Density Plot Distribusi Pengguna Instagram (2025)

4.5 Boxplot

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

Gambar 5. Boxplot Distribusi Pengguna Instagram


5 Kesimpulan

Berdasarkan analisis data 10 negara dengan pengguna Instagram terbanyak tahun 2025:

  • India mendominasi dengan 480,55 juta pengguna — jauh melampaui negara lain.
  • Indonesia berada di peringkat ke-4 dengan 107,6 juta pengguna.
  • Nilai mean (119.36 juta) jauh lebih besar dari median (62.73 juta), menandakan distribusi right-skewed yang dipengaruhi oleh India sebagai outlier.
  • Density plot mempertegas bentuk distribusi right-skewed, dengan ekor panjang ke kanan akibat dominasi India dan Amerika Serikat.
  • Standar deviasi sebesar 136.87 juta menunjukkan variasi yang sangat tinggi antar negara.
  • Dari boxplot terlihat bahwa India dan Amerika Serikat merupakan outlier di atas kuartil atas.

Sumber data: Statista, 2025. Laporan dibuat menggunakan R Markdown.