1. Sumber Data


2. Import Data

data <- read_excel("Data_Warung_Kelontong.xlsx", skip = 2)

# Bersihkan data
data <- data %>%
  filter(!is.na(No), No != "TOTAL") %>%
  mutate(
    Harga_Beli       = as.numeric(Harga_Beli),
    Harga_Jual       = as.numeric(Harga_Jual),
    Jumlah_Terjual   = as.numeric(Jumlah_Terjual),
    Total_Pendapatan = as.numeric(Total_Pendapatan),
    Total_Modal      = as.numeric(Total_Modal),
    Laba_Rugi        = as.numeric(Laba_Rugi),
    Status           = as.character(Status)
  ) %>%
  filter(!is.na(Laba_Rugi), !is.na(Status))

cat("Jumlah data:", nrow(data), "\n")
## Jumlah data: 50
head(data)
## # A tibble: 6 × 11
##   No    Nama_Produk    Kategori        Metode_Pembayaran Harga_Beli Harga_Jual
##   <chr> <chr>          <chr>           <chr>                  <dbl>      <dbl>
## 1 1     Beras 1kg      Kebutuhan Dapur Tunai                  11000      14000
## 2 2     Roti Tawar     Makanan         Tunai                   9000      12000
## 3 3     Kopi Kapal Api Minuman         Tunai                   1500       2000
## 4 4     Indomie Kuah   Makanan         Transfer                2800       3500
## 5 5     Roti Tawar     Makanan         QRIS                    9000      12000
## 6 6     Sabun Lifebuoy Kebutuhan Rumah Tunai                   3500       2834
## # ℹ 5 more variables: Jumlah_Terjual <dbl>, Total_Pendapatan <dbl>,
## #   Total_Modal <dbl>, Laba_Rugi <dbl>, Status <chr>

3. Variabel yang Digunakan

Variabel Tipe Keterangan
Kategori Kategorik Jenis produk (Makanan, Minuman, Snack, dll)
Status Kategorik Untung / Rugi / BEP
Harga Jual Numerik Harga jual per produk (Rp)
Laba/Rugi Numerik Selisih pendapatan dan modal (Rp)

4. Statistik Deskriptif

modus <- function(x) { names(sort(table(x), decreasing=TRUE))[1] }

cat("======= HARGA JUAL =======\n")
## ======= HARGA JUAL =======
cat("Mean            :", mean(data$Harga_Jual, na.rm=TRUE), "\n")
## Mean            : 8217.7
cat("Median          :", median(data$Harga_Jual, na.rm=TRUE), "\n")
## Median          : 8000
cat("Modus           :", modus(data$Harga_Jual), "\n")
## Modus           : 8000
cat("Q1              :", quantile(data$Harga_Jual, 0.25, na.rm=TRUE), "\n")
## Q1              : 4000
cat("Q3              :", quantile(data$Harga_Jual, 0.75, na.rm=TRUE), "\n")
## Q3              : 12000
cat("Range           :", diff(range(data$Harga_Jual, na.rm=TRUE)), "\n")
## Range           : 18342
cat("Varians         :", var(data$Harga_Jual, na.rm=TRUE), "\n")
## Varians         : 25845974
cat("Standar Deviasi :", sd(data$Harga_Jual, na.rm=TRUE), "\n")
## Standar Deviasi : 5083.894
cat("\n======= LABA/RUGI =======\n")
## 
## ======= LABA/RUGI =======
cat("Mean            :", mean(data$Laba_Rugi, na.rm=TRUE), "\n")
## Mean            : 8724.42
cat("Median          :", median(data$Laba_Rugi, na.rm=TRUE), "\n")
## Median          : 7000
cat("Modus           :", modus(data$Laba_Rugi), "\n")
## Modus           : 9000
cat("Q1              :", quantile(data$Laba_Rugi, 0.25, na.rm=TRUE), "\n")
## Q1              : 1500
cat("Q3              :", quantile(data$Laba_Rugi, 0.75, na.rm=TRUE), "\n")
## Q3              : 13125
cat("Range           :", diff(range(data$Laba_Rugi, na.rm=TRUE)), "\n")
## Range           : 48906
cat("Varians         :", var(data$Laba_Rugi, na.rm=TRUE), "\n")
## Varians         : 120401005
cat("Standar Deviasi :", sd(data$Laba_Rugi, na.rm=TRUE), "\n")
## Standar Deviasi : 10972.74
cat("\n======= KATEGORIK =======\n")
## 
## ======= KATEGORIK =======
cat("Modus Kategori :", modus(data$Kategori), "\n")
## Modus Kategori : Kebutuhan Dapur
cat("Modus Status   :", modus(data$Status), "\n")
## Modus Status   : Untung

5. Pie Chart - Status Transaksi (Untung/Rugi/BEP)

status_count <- data %>%
  count(Status) %>%
  mutate(persen = round(n/sum(n)*100, 1),
         label  = paste0(Status, "\n", persen, "%"))

ggplot(status_count, aes(x = "", y = n, fill = Status)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y") +
  geom_text(aes(label = label), position = position_stack(vjust = 0.5), size = 4) +
  scale_fill_manual(values = c("Untung" = "#70AD47", "Rugi" = "#FF4444", "BEP" = "#FFC000")) +
  labs(title = "Pie Chart - Proporsi Status Transaksi") +
  theme_void() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 13))

Interpretasi: Pie chart menunjukkan proporsi transaksi yang menghasilkan untung, rugi, atau BEP (Break Even Point). Semakin besar porsi hijau, semakin sehat kondisi keuangan warung.


6. Bar Chart - Total Laba/Rugi per Kategori

laba_kat <- data %>%
  group_by(Kategori) %>%
  summarise(Total_Laba = sum(Laba_Rugi, na.rm=TRUE))

ggplot(laba_kat, aes(x = reorder(Kategori, Total_Laba), y = Total_Laba, fill = Total_Laba > 0)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  scale_fill_manual(values = c("TRUE" = "#70AD47", "FALSE" = "#FF4444"),
                    labels = c("Rugi", "Untung")) +
  labs(title = "Bar Chart - Total Laba/Rugi per Kategori Produk",
       x = "Kategori", y = "Total Laba/Rugi (Rp)", fill = "Status") +
  scale_y_continuous(labels = scales::comma) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

Interpretasi: Bar chart menampilkan total laba atau rugi tiap kategori produk. Batang hijau = menguntungkan, batang merah = merugi.


7. Histogram - Distribusi Laba/Rugi per Transaksi

ggplot(data, aes(x = Laba_Rugi)) +
  geom_histogram(bins = 15, fill = "steelblue", color = "white") +
  geom_vline(xintercept = 0, color = "red", linetype = "dashed", linewidth = 1) +
  labs(title = "Histogram - Distribusi Laba/Rugi per Transaksi",
       x = "Laba/Rugi (Rp)", y = "Frekuensi",
       caption = "Garis merah = titik BEP (0)") +
  scale_x_continuous(labels = scales::comma) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

Interpretasi: Histogram menunjukkan sebaran nilai laba/rugi tiap transaksi. Nilai di kanan garis merah = untung, di kiri = rugi.


8. Density Plot - Distribusi Harga Jual

ggplot(data, aes(x = Harga_Jual)) +
  geom_density(fill = "orange", alpha = 0.6, color = "darkorange") +
  labs(title = "Density Plot - Distribusi Harga Jual Produk",
       x = "Harga Jual (Rp)", y = "Density") +
  scale_x_continuous(labels = scales::comma) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

Interpretasi: Density plot menggambarkan pola sebaran harga jual produk. Puncak kurva menunjukkan kisaran harga yang paling banyak dijual di warung kelontong.


9. Boxplot - Laba/Rugi per Kategori

ggplot(data, aes(x = Kategori, y = Laba_Rugi, fill = Kategori)) +
  geom_boxplot() +
  geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
  labs(title = "Boxplot - Laba/Rugi per Kategori Produk",
       x = "Kategori", y = "Laba/Rugi (Rp)") +
  scale_y_continuous(labels = scales::comma) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.text.x = element_text(angle = 30, hjust = 1),
        legend.position = "none") +
  scale_fill_brewer(palette = "Set2")

Interpretasi: Boxplot menunjukkan sebaran laba/rugi tiap kategori. Garis merah = titik BEP. Kategori dengan median di atas garis merah berarti secara umum menguntungkan.


10. Kesimpulan

Berdasarkan analisis data penjualan Warung Kelontong: