Rata-rata Pengeluaran Perkapita Konsumsi Rokok/Tembakau 2018-2022

Talia Thaib

2022-11-03

Pendahuluan

Pada sesi ini saya akan melakukan analisis mengenai rata-rata pengeluaran perkapita berdasarkan data Rata-rata Pengeluaran Perkapita Seminggu Menurut Kelompok Rokok dan Tembakau per Kabupaten/Kota periode 2018-2021 yang diterbitkan oleh Badan Pusat Statistik(BPS).

Untuk menyamakan pemahaman konsep mengenai data yang akan saya gunakan, maka ada baiknya saya menjabarkan pengertian sesuai dengan judul data tersebut diatas yang dapat diartikan sebagai: Besar pengeluaran rata-rata dalam satu minggu yang dikeluarkan per individu untuk konsumsi rokok yang dihitung dalam nilai rupiah di tiap kabupaten/kota di wilayah Indonesia.


Menyiapkan Data dan Library

#library preparation

library(prettydoc)
library(readxl)
library(tidyverse)
library(glue)
library(ggplot2)
library(plotly)
library(scales)
library(wesanderson)

Data yang akan digunakan merupakan data dengan format file xlsx, sehingga saya akan menggunakan fungsi read_xlsx dari package readxl. Sebelum melakukan fungsi read_xlsx, ada baiknya kita melakukan inspeksi untuk melihat struktur file. Sesuai dengan gambar tampilan data, terlihat bahwa isi data terdapat pada sheet pertama sehingga parameter sheet tidak diperlukan, namun begitu kita tidak memerlukan row 1, karena row isi berisi judul data saja dan kita tidak membutuhkan dalam proses analisis.

Dapat diperhatikan bahwa nama kolom dimulai dari row 2. Sehingga saya akan menambahkan parameter skip dan menentukan argumen = 1 sehingga pembacaan data dimulai langsung kepada row 2 (nama kolom).


Read Data

# read data

rokok <- read_xlsx("BPS Dataset/Rata-rata Pengeluaran Perkapita Seminggu  Menurut Kelompok Rokok dan Tembakau Per Kabupaten_kota.xlsx",skip = 1)

Setelah membaca data dan menyimpan data dalam sebuah variable (dalam kasus ini saya menyimpan data dengan nama rokok), saya akan melakukan skimming data dengan melakukan function head() dan tail untuk menentukan Business Question yang akan saya analisis.

# Cek isi awal data
head(rokok)
# Cek akhir isi data

tail(rokok)

Sesuai dengan tampilan data diatas, poin-poin informasi yang diperoleh adalah:

No Poin Informasi
1 Nama wilayah (dalam kabupaten/kota)
2 Kategori tipe rokok
3 Informasi tahun (menentukan nilai rata-rata pengeluaran pada periode tahun tertentu)
4 Besar nilai pengeluaran rata-rata perkapita per wilayayah

Objectives

Sesuai dengan tampilan head dan tail, serta informasi yang didapat dari skimming, berikut Business Question yang saya peroleh dan akan saya analisis:

  1. Penyebaran pengeluaran rata-rata konsumsi gabungan (rokok dan tembakau) di tiap periode tahun
  2. Analisa wilayah dengan pengeluaran rata-rata konsumsi gabungan (rokok dan tembakau) tertinggi selama periode 2018 - 2019
  3. Analisa pengeluaran rokok berdasarkan kategorinya di setiap periode tahun
  4. Daerah-daerah dengan nilai rata-rata pengeluaran rokok/tembakau setiap kategorinya pada 2021

Data Wrangling

Sesuai dengan tampilan data dalam head maupun tail terdapat beberapa poin yang harus disesuaikan pada table sebelum membersihkan isi data. Berikut poin-poin yang harus disesuaikan dari bentuk table:

  1. Informasi tahun masuk kedalam isi data (row) bukan nama kolom
  2. Terdapat nama kolom dengan angka (..1, …3, …5 dst) akibat dari merge kolom dari format xlsx
  3. 4 row terakhir tidak digunakan karena berisi URL dari sumber data.

Sehingga berikut tahap-tahap yang diperlukan untuk menyesuaikan table menjadi struktur yang lebih baik:

  1. Drop 4 rows terakhir
  2. melakukan transpose
  3. mengubah data yang telah di transpose menjadi dataframe
  4. mengisi kolom 1 dan 2 pada baris 1 , 2 sesuai dengan nama yang akan digunakan untuk nama kolom
  5. mengubah row 1 menjadi nama kolom
  6. Mengahpus row 1 (karena duplicated dengan nama kolom)
  7. Mengubah rownames menjadi sebuah kolom
  8. Mengisi data (..1, …3, …5 dst) dengan kategori rokok
  9. Reshaping dataframe dengan pivot_longer
#Drop 4 row terakhir
rokok <- rokok[-(516:519),]

# Transpose data dan menyimpan kedalam variable baru dengan bentuk dataframe
rokok1 <- data.frame(t(rokok))
head(rokok1)

Transpose mengubah antar kolom dan baris dan hasilnya menjadi matrix. Setelah dilakukan transpose, saya mengaplikasikan function data.frame sehingga dalam kasus ini nama tipe rokok saat ini menjadi rownames dari dataframe rokok1. Setelah menjadi dataframe dengan tampilan seperti diatas, saya akan mengisi kolom 1 (X1), row 1 dengan Tahun. Karena nantinya semua row 1 akan saya ubah menjadi nama kolom.

# Mengisi kolom 1 row 1, dengan nilai yang akan menjadi nama kolom
rokok1[1,1] <- "Tahun"

# Melakukan assign agar semua nama kolom diambil dari row 1
names(rokok1) <- rokok1[1,]
head(rokok1)
# Drop row ke-1
rokok1 <- rokok1[-1,]

# Mengubah rownames menaadi kolom
rokok1 <- rownames_to_column(rokok1)
head(rokok1)

Setelah rowname menjadi sebuah kolom, sekarang saya akan melakukan penyesuaian dengan kolom pertama yang berisi tipe-tipe rokok/tembakau. Sesuai dengan informasi dari table awal (bentuk xlsx) value yang berisi angka merupakan nama kolom yang sebelumnya di merge pada format xlsx. Sehingga saya akan mengganti nilai-nilai tersebut sesuai dengan nilai pada row sebelumnya.

# Mengubah nama kolom 1, menjadi kategori
names(rokok1)[1] <- "Kategori"
head(rokok1)
# Menyesuaikan isi kolom Kategori
rokok1[1:2,1] <- "Total rokok dan tembakau"
rokok1[4, 1] <- "Rokok kretek filter"
rokok1[6, 1] <- "Rokok kretek tanpa filter"
rokok1[8, 1] <- "Rokok putih"
rokok1[10,1] <- "Tembakau"
rokok1[11:12,1] <- "Lainnya"

head(rokok1)

Sebelum membersihkan isi data, terdapat satu penyesuaian yang akan saya lakukan yaitu mengubah dimensi data sehingga tidak memiliki kolom yang terlalu banyak. Tentu mengubah dimensi dataframe menjadi bentuk yang lebih sesuai akan membantu dalam proses analisis. Dengan demikian saya akan melakukan function pivot_longer untuk mengubah dimensi dataframe.

# Mengubah dimensi dengan pivot longer
rokok1 <- pivot_longer(data = rokok1, #dataframe yang akan diubah
             cols = -c(Kategori, Tahun), #kolom yang tidak dilakukan perubahan
             names_to = "Kota/Kabupaten", # Nama kolom untuk menyimpan variable nama dari kolom yang dilebur
             values_to = "avg") # Nama kolom yang akan kita pakai sebagai kolom berisi nilai-nilai dari rows yang dilebur

head(rokok1)

Mengubah Tipe Data

# Mengubah tipe data ke faktor / kategorikal
rokok1[, c("Kategori","Tahun")] <- lapply(rokok1[, c("Kategori", "Tahun")], as.factor)

#Mengubah tipe data ke numeric
rokok1$avg <- as.numeric(rokok1$avg)
summary(rokok1)
>>                       Kategori     Tahun      Kota/Kabupaten    
>>  Lainnya                  :1028   2018:3084   Length:6168       
>>  Rokok kretek filter      :1028   2019:3084   Class :character  
>>  Rokok kretek tanpa filter:1028               Mode  :character  
>>  Rokok putih              :1028                                 
>>  Tembakau                 :1028                                 
>>  Total rokok dan tembakau :1028                                 
>>                                                                 
>>       avg         
>>  Min.   :    0.0  
>>  1st Qu.:  191.5  
>>  Median : 1419.0  
>>  Mean   : 5568.4  
>>  3rd Qu.:11202.5  
>>  Max.   :35389.0  
>>  NA's   :273

Setelah melihat summary dari dataframe rokok1 terdapat NA value sebanyak 273, treatment nilai NA akan saya lakukan setelah menambahkan data tahun 2020 dan 2021.

Menambahkan data

Untuk data periode 2020 dan 2021 tersedia dalam file yang berbeda, namun memiliki struktur isi data yang sama sehingga penyesuaian table akan dilakukan tahap yang sama dan disimpan kedalam variable rokok2.

#menyimpan data 2020 dan 2021 serta menyesuaikan bentuk table

rokok2 <- read_xlsx("BPS Dataset/Rata-rata Pengeluaran Perkapita Seminggu  Menurut Kelompok Rokok dan Tembakau Per Kabupaten_kota (1).xlsx",skip = 1)
rokok2 <- rokok2[-(516:519),]
rokok2 <- data.frame(t(rokok2))
rokok2[1,1] <- "Tahun"
names(rokok2) <- rokok2[1,]
rokok2 <- rokok2[-1,]
rokok2 <- rownames_to_column(rokok2)
names(rokok2)[1] <- "Kategori"

rokok2[1:2,1] <- "Total rokok dan tembakau"
rokok2[4, 1] <- "Rokok kretek filter"
rokok2[6, 1] <- "Rokok kretek tanpa filter"
rokok2[8, 1] <- "Rokok putih"
rokok2[10,1] <- "Tembakau"
rokok2[11:12,1] <- "Lainnya"

rokok2 <- pivot_longer(data = rokok2,
             cols = -c(Kategori, Tahun),
             names_to = "Kota/Kabupaten",
             values_to = "avg")
rokok2[, c("Kategori","Tahun")] <- lapply(rokok2[, c("Kategori","Tahun")], as.factor)
rokok2$avg <- as.numeric(rokok2$avg)

# Melihat head(rokok2)
head(rokok2)

Menggabungkan data dengan rbind()

Setelah dataframe rokok2 disesuaikan, saya akan menggabungkan dataframe rokok1 dan dataframe rokok2 menjadi rokok.All

rokok.All <- rbind(rokok2, rokok1)
str(rokok.All)
>> tibble [12,336 × 4] (S3: tbl_df/tbl/data.frame)
>>  $ Kategori      : Factor w/ 6 levels "Lainnya","Rokok kretek filter",..: 6 6 6 6 6 6 6 6 6 6 ...
>>  $ Tahun         : Factor w/ 4 levels "2020","2021",..: 1 1 1 1 1 1 1 1 1 1 ...
>>  $ Kota/Kabupaten: chr [1:12336] "Simeulue" "Aceh Singkil" "Aceh Selatan" "Aceh Tenggara" ...
>>  $ avg           : num [1:12336] 17697 18408 18704 20164 25768 ...
# Menyesuaikan unrutan level pada kolom Tahun
rokok.All$Tahun <- factor(rokok.All$Tahun,
                              levels = c("2018", "2019", "2020", "2021"))

Informasi Tambahan Kolom Kategori:

unique(rokok.All$Kategori)
>> [1] Total rokok dan tembakau  Rokok kretek filter      
>> [3] Rokok kretek tanpa filter Rokok putih              
>> [5] Tembakau                  Lainnya                  
>> 6 Levels: Lainnya Rokok kretek filter ... Total rokok dan tembakau

Total rokok dan tembakauk adalah nilai gabungan (dalam Rp) dari nilai:

  • Rokok kretek filter
  • Rokok kretek tanpa filter
  • Rokok putih
  • Tembakau
  • Lainnya

Cek duplicated data dan NA value

any(duplicated(rokok.All))
>> [1] FALSE
# tidak ada data duplicate
# Melihat distribusi NA value pada kategori
rokok.All %>% 
  filter(is.na(avg)) %>% 
  group_by(Kategori) %>% 
  summarise(NA.total = n()) %>% 
  arrange(desc(NA.total))

Sesuai dengan informasi distribusi NA value, saya berkesimpulan untuk tidak merubah nilai NA dengan nilai lain atau 0, karena frekuensi nilai NA (selain kategori Lainnya) tidak memiliki jumlah yang signifikan pada tiap kategorinya sehingga untuk melakukan operasi matematis saya akan menggunakan parameter na.rm.

Khusus kepada kategori Lainnya tidak akan dilakukan analisis karena kurangnya data yang untuk dianalisis dan tidak ada informasi mengenai apa yang termasuk kepada kategori lainnya dalam rokok dan tembakau.


Analisis Data

Question 1

Penyebaran pengeluaran rata-rata konsumsi gabungan (rokok dan tembakau) ditiap periode tahun
# Menyiapkan dataframe yang relevan
avg.gabungan <- rokok.All %>% 
  filter(Kategori == "Total rokok dan tembakau") %>% 
  mutate(label = glue("
                      Rata-rata 2018-2021:
                      Rp {comma(median(avg))}"))

plot1 <- ggplot(avg.gabungan, aes(x = Tahun, y = avg)) +
  geom_boxplot(outlier.colour = "red", col = "blue", show.legend = F) + 
  geom_hline(aes(yintercept = median(avg)), col = "red", linetype = 2) +
  scale_y_continuous(labels = comma) +
  coord_flip() +
  labs(x = NULL, y = NULL,
       title = "Penyebaran Konsumsi Rata-rata Mingguan Rokok & Tembakau",
       subtitle = "Berdasarkan Tahun") +
  theme_minimal() +
  theme(plot.title = element_text(face = "bold"),
        axis.line.x.bottom = element_line(colour = "grey"),
        axis.line.y.left  = element_line(colour = "grey"))

  
plot1

Insights

  1. Setiap tahunnya rata-rata pengeluaran mingguan rokok/tembakau mengalami peningkatan (dalam Rupiah). Hal ini mungkin dipengaruhi oleh harga rokok/tembakau yang juga naik tiap tahunnya
  2. Rata-rata pengeluaran tahun 2020 dan 2021 berada di atas rata-rata dalam periode 2018-2022
  3. Disetiap tahun terdapat pengeluaran yang jauh dari rata-rata (outlier) yang mana setiap titik merepresentasikan nilai rata-rata sebuah wilayah

untuk melihat detail dari penyebaran rata-rata mingguan, saya akan memisahkan tiap boxplot ke dalam sebuah facet dan menggunakan ggplotly agar nilai IQR dan min max setiap tahun dapat mudah dibandingkan.

plotly1 <- ggplot(avg.gabungan, aes(x = Tahun, y = avg)) +
  geom_boxplot(outlier.colour = "red", col = "blue", show.legend = F) + 
  geom_hline(aes(yintercept = median(avg), text = label), col = "red", linetype = 2) +
  scale_y_continuous(labels = comma) +
  facet_wrap(~Tahun, scales = "free") +
  coord_flip() +
  labs(x = NULL, y = NULL,
       title = "Penyebaran Rata-rata Pengeluaran Mingguan Rokok & Tembakau",
       subtitle = "Berdasarkan Tahun") +
  theme_linedraw() +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(lineheight = 30),
        axis.text.y = element_blank(),
        panel.grid = element_line(colour = "grey"),
        )

ggplotly(plotly1, tooltip = "text")

Insights

  1. Distribusi nilai dari tahun 2018 dan 2019 tidak jauh berbeda, namun nilai rata-rata 2019 mengalami kenaikan cukup tinggi dibandingkan tahun 2018 (dari Rp 15.161 ke 16.465).
  2. Tahun 2019 memiliki banyak nilai signifikan baik yang sangat tinggi maupun sangat rendah dari range(Rp 1.668 ke Rp 34.289)
  3. Distribusi rata-rata pengeluaran tahun 2021 semakin menyempit (tidak menunjukan variasi nilai yang banyak) dibandingkan tahun 2020. Dapat disimpulkan rata-rata pengeluaran mingguan konsumsi rokok di tahun 2021 memiliki nilai yang tidak jauh berbeda antar wilayah
  4. IQR (50% dari populasi rata-rata) pengeluaran tahun 2020 adalah dalam range Rp 13.958 - Rp 20.241
  5. IQR (50% dari populasi rata-rata) pengeluaran tahun 2021 adalah dalam range Rp 14.436 - Rp 21.205

Question 2

Analisa wilayah dengan pengeluaran rata-rata konsumsi gabungan (rokok dan tembakau) tertinggi selama periode 2018 - 2019
# Menyiapkan data yang relevan
topavg <- rokok.All %>% 
  filter(Kategori == "Total rokok dan tembakau") %>% # Hanya mengambil informasi Total
  group_by(Tahun) %>% 
  arrange(desc(avg)) %>% 
  head(5) %>% 
  mutate(label = glue(
    "Rata-raata Rp: {comma(avg)}
     Tahun: {Tahun}"))

plot2 <- ggplot(topavg, aes(x = avg, y= reorder(`Kota/Kabupaten`, avg))) +
  geom_col(aes(fill = avg, text = label), show.legend = F) +
  scale_x_continuous(labels = comma) +
  scale_fill_gradient(high = "#feca3c", low = "#42eae4") +
  labs(x = NULL, y = NULL,
       title = str_wrap("Rata-rata Tertinggi Konsumsi Mingguan Rokok & Tembakau", 40)) +
  theme_light() +
  theme(
    plot.title = element_text(face = "bold", color = "white", size = 11, hjust = 0.5),
    plot.background = element_rect(fill = "#065fae", color = "#065fae"),
    axis.text = element_text(colour = "white", size= 11),
    panel.grid = element_line(colour = "#065fae")
  )


ggplotly(plot2, tooltip = "text")

Insights

  1. Nilai tertinggi pengeluaran mingguan rata-rata perkapita adalah Rp 78.460 yaitu pada tahun 2021 di Kab/Kota Puncak Jaya
  2. Sedangkan nilai tinggi lainnya berada pada range RP 34.604 - Rp 41.965 yang terjadi pada tahun 2021 (kecuali pada kep. Seribu yang terjadi pada tahun 2018)

Question 3

Analisa pengeluaran rokok berdasarkan kategorinya di setiap periode tahun
# Menyesuaikan data yang relevan
avgCategory <- rokok.All %>% 
  filter(Kategori != "Total rokok dan tembakau") %>%  
  group_by(Kategori, Tahun) %>% 
  summarise(avg = round(mean(avg, na.rm = T),2)) %>% 
  mutate(label = glue(
    "Tahun: {Tahun}
     Rata-rata Rp: {comma(avg)}"
  ))
  
# Plotting
plot3 <- ggplot(avgCategory, aes(x = avg, y = reorder(Kategori, avg), fill = Tahun)) +
  geom_col(position = "dodge2", show.legend = F, aes(text = label)) +
  scale_x_continuous(labels = comma) +
  scale_y_discrete(labels = scales::wrap_format(15)) +
  scale_fill_manual(values = wes_palette("Darjeeling1")) +
  labs(x = NULL, y = NULL,
       title = "Rata-rata Pengeluaran Mingguan Berdasarkan Kategori") +
  theme_minimal() +
  theme(
    axis.text = element_text(size = 12),
    plot.title = element_text(size = 16)
  )


ggplotly(plot3, tooltip = "text")

Insight

Selama tahun 2018-2022 pengeluaran konsumsi rokok perkapita tertinggi berada pada kategori rokok kretek filter dengan range perbedaan yang sangat jauh dengan rokok kretek tanpa filter yang menempati posisi kedua terbanyak.


Question 4

Daerah-daerah dengan nilai rata-rata pengeluaran rokok/tembakau setiap kategorinya pada 2021
# Membuat data yang relevan
kretekfilter <- rokok.All %>% 
  filter(Kategori == "Rokok kretek filter", 
         Tahun == "2021") %>% 
  na.omit() %>% 
  mutate(label = glue(
    "Rata-rata Pengeluaran
    Rp {comma(avg)}"),
    labelmedian = glue("Rata-rata Keseluruhan Rp: {comma(median(avg))}")) %>% 
  arrange(desc(avg))


#Sesi Plotting
plot4 <- ggplot(kretekfilter[1:10,], aes(x = avg, y = reorder(`Kota/Kabupaten`, avg))) +
  geom_segment(aes(y = reorder(`Kota/Kabupaten`, avg), yend =  reorder(`Kota/Kabupaten`, avg), x= 0 , xend = avg, col = avg ), show.legend = F) +
  geom_point(size = 3, aes(col = avg, text = label), show.legend = F) +
  geom_vline(aes(xintercept = median(avg), text = labelmedian), data = kretekfilter, col = "red", linetype = 2) +
  scale_x_continuous(labels = comma) +
  scale_color_gradient(high = "#2ec0e3", low = "#acc670") +
  labs(x = NULL, y = NULL,
       title = "Rata-rata Pengeluaran Tertinggi Rokok Kretek Filter 2021") +
  theme(
    axis.text = element_text(size = 12),
    plot.title = element_text(face = "bold")
  )

ggplotly(plot4, tooltip = "text" )
kretek.no.filter <- rokok.All %>% 
  filter(Kategori == "Rokok kretek tanpa filter", 
         Tahun == "2021") %>% 
  na.omit() %>% 
  mutate(label = glue(
    "Rata-rata Pengeluaran
    Rp {comma(avg)}"
  ),
  labelmedian = glue("Rata-rata Keseluruhan Rp: {comma(median(avg))}")) %>%
  arrange(desc(avg)) 



#Plotting
plot5 <- ggplot(kretek.no.filter[1:10,], aes(x = avg, y = reorder(`Kota/Kabupaten`, avg))) +
  geom_segment(aes(y = reorder(`Kota/Kabupaten`, avg), yend =  reorder(`Kota/Kabupaten`, avg), x= 0 , xend = avg, col = avg ), show.legend = F) +
  geom_point(size = 3, aes(col = avg, text = label), show.legend = F) +
  geom_vline(aes(xintercept = mean(avg), text = labelmedian), data = kretek.no.filter, col = "red", linetype = 2) +
  scale_x_continuous(labels = comma) +
  scale_color_gradient(high = "#6a4f89", low = "#ed6227") +
  labs(x = NULL, y = NULL,
       title = "Rata-rata Pengeluaran Tertinggi Rokok Kretek Tanpa Filter 2021") +
  theme(
    axis.text = element_text(size = 12),
    plot.title = element_text(face = "bold")
  )

ggplotly(plot5, tooltip = "text" )
rokok.putih <- rokok.All %>% 
  filter(Kategori == "Rokok putih", 
         Tahun == "2021") %>% 
  na.omit() %>% 
  mutate(label = glue(
    "Rata-rata Pengeluaran
    Rp {comma(avg)}"
  ),
   labelmedian = glue("Rata-rata Keseluruhan Rp: {comma(median(avg))}")) %>%
  arrange(desc(avg)) 

#Plotting
plot6 <- ggplot(rokok.putih[1:10,], aes(x = avg, y = reorder(`Kota/Kabupaten`, avg))) +
  geom_segment(aes(y = reorder(`Kota/Kabupaten`, avg), yend =  reorder(`Kota/Kabupaten`, avg), x= 0 , xend = avg, col = avg ), show.legend = F) +
  geom_point(size = 3, aes(col = avg, text = label), show.legend = F) +
   geom_vline(aes(xintercept = mean(avg), text = labelmedian), data = rokok.putih, col = "red", linetype = 2) +
  scale_x_continuous(labels = comma) +
   scale_y_discrete(labels = scales::wrap_format(15)) +
  scale_color_gradient(high = "#03371c", low = "#e96982") +
  labs(x = NULL, y = NULL,
       title = "Rata-rata Pengeluaran Tertinggi Rokok Putih 2021") +
  theme(
    axis.text = element_text(size = 12),
    plot.title = element_text(face = "bold")
  )

ggplotly(plot6, tooltip = "text" )
tembakau <- rokok.All %>% 
  filter(Kategori == "Tembakau", 
         Tahun == "2021") %>% 
    na.omit() %>% 
   mutate(label = glue(
    "Rata-rata Pengeluaran
    Rp {comma(avg)}"
  ),
  labelmedian = glue("Rata-rata Keseluruhan Rp: {comma(median(avg))}")) %>%
  arrange(desc(avg))

#Plotting
plot7 <- ggplot(tembakau[1:10,], aes(x = avg, y = reorder(`Kota/Kabupaten`, avg))) +
  geom_segment(aes(y = reorder(`Kota/Kabupaten`, avg), yend =  reorder(`Kota/Kabupaten`, avg), x= 0 , xend = avg, col = avg ), show.legend = F) +
  geom_point(size = 3, aes(col = avg, text = label), show.legend = F) +
  geom_vline(aes(xintercept = mean(avg), text = labelmedian), data = tembakau, col = "red", linetype = 2) +
  scale_x_continuous(labels = comma) +
   scale_y_discrete(labels = scales::wrap_format(15)) +
  scale_color_gradient(high = "#2ec0e3", low = "#acc670") +
  labs(x = NULL, y = NULL,
       title = "Rata-rata Pengeluaran Tertinggi Tembakau 2021") +
  theme(
    axis.text = element_text(size = 12),
    plot.title = element_text(face = "bold")
  )

ggplotly(plot7, tooltip = "text" )

Final Insights

  1. Nilai rata-rata pengeluaran perkapita untuk konsumsi gabungan rokok/tembakau di wilayah Indonesia selalu mengalami peningkatan (selama periode 2018-2021). Dengan nilai rata-rata dan kenaikan ke tiap tahunnya sebagai berikut:
avg.gabungan %>% 
  group_by(Kategori, Tahun) %>% 
  summarise(`Rata-rata` = mean(avg)) %>% 
  mutate(`Kenaikan Rata-rata` = c(0, round(diff(`Rata-rata`),2)))
  1. Nilai rata-rata pengeluaran perkapita tertinggi untuk konsumsi rokok/tembakau selama periode 2018-2021 selalu pada kategori rokok kretek filter

  2. Terdapat nilai pengeluran yang sangat tinggi pada tahun 2021 yaitu di Puncak Jaya, kemungkinan bisa dikarenakan harga rokok yang bervariasi sesuai dengan harga penjualan di sebuah wilayah

  3. Pengeluaran rata-rata setiap kategori di tahun 2021:

Tipe Rokok Pengeluaran Rata-rata Tahun 2021
Rokok Kretek Filter Rp 14.728
Rokok Kretek Tanpa Filter Rp 1.154
Rokok Putih Rp 767
Tembakau Rp 80