(paragraf penjelasan: pendahuluan, rumusan masalah dan tujuan dalam poin-poin)
(paragraf penjelasan: syntax r input)
# Memuat dataset
resto_data <- read.csv("C:/Users/LENOVO/OneDrive/ドキュメント/4 VISDAT/AyamSerayu_3Years_Transaction_Data.csv")
colnames(resto_data)
## [1] "Tanggal...Waktu" "ID.Struk" "Outlet"
## [4] "Tipe.Penjualan" "Kasir" "Nama.Produk"
## [7] "Kategori" "Jumlah.Produk" "Harga.Produk"
## [10] "Penjualan.Kotor" "Total" "Metode.Pembayaran"
## [13] "Status.Pembayaran" "Diskon" "Pajak"
(paragraf penjelasan: ukuran dataset, pengantar tujuan recode (feature engineering?) berikut)
resto_data <- resto_data %>%
rename(
Waktu = Tanggal...Waktu,
Layanan = Tipe.Penjualan,
Menu = Nama.Produk,
Jumlah = Jumlah.Produk,
Harga = Harga.Produk,
Subtotal = Penjualan.Kotor,
Metode = Metode.Pembayaran,
Status = Status.Pembayaran
)
resto_data <- resto_data %>%
mutate(
Waktu = ymd_hms(Waktu),
Bulan = format(Waktu, "%b %Y"),
Tanggal = floor_date(Waktu, "month") %>% as.Date(),
Hari = wday(Waktu, label = TRUE, abbr = FALSE, locale = "id_ID"),
Hari = factor(Hari, levels = c("Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu")),
Jam = case_when(
hour(Waktu) >= 0 & hour(Waktu) <= 10 ~ "Pagi (00:00-10:59)",
hour(Waktu) >= 11 & hour(Waktu) <= 14 ~ "Siang (11:00-14:59)",
hour(Waktu) >= 15 & hour(Waktu) <= 18 ~ "Sore (15:00-17:59)",
hour(Waktu) >= 19 & hour(Waktu) <= 23 ~ "Malam (18:00-23:59)"
),
Outlet = case_when(
Outlet == "AYAM SERAYU - PUSAT" ~ "Pusat",
Outlet == "AYAM SERAYU - CABANG 1" ~ "Cabang 1",
Outlet == "AYAM SERAYU - CABANG 2" ~ "Cabang 2"
)
)
(paragraf penjelasan: dampak hasil recode di atas)
glimpse(resto_data)
## Rows: 626,311
## Columns: 19
## $ Waktu <dttm> 2023-01-01 00:51:19, 2023-01-01 00:51:19, 2023-01-01 03:33:0…
## $ ID.Struk <chr> "TRX-20230101-8589", "TRX-20230101-8589", "TRX-20230101-3069"…
## $ Outlet <chr> "Cabang 2", "Cabang 2", "Pusat", "Pusat", "Pusat", "Pusat", "…
## $ Layanan <chr> "Dine in", "Dine in", "Dine in", "Dine in", "Dine in", "Dine …
## $ Kasir <chr> "Rina", "Rina", "Budi", "Budi", "Budi", "Budi", "Budi", "Nabi…
## $ Menu <chr> "Ayam Bakar Madu", "Air Mineral", "Cah Kangkung", "Kulit Ayam…
## $ Kategori <chr> "Makanan", "Minuman", "Makanan", "Makanan", "Makanan", "Makan…
## $ Jumlah <int> 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1…
## $ Harga <int> 31000, 5000, 12000, 19000, 20000, 29000, 31000, 5000, 12000, …
## $ Subtotal <int> 31000, 5000, 12000, 19000, 40000, 29000, 62000, 5000, 12000, …
## $ Total <int> 36000, 36000, 162000, 162000, 162000, 162000, 162000, 46000, …
## $ Metode <chr> "Tunai", "QRIS", "QRIS", "Tunai", "Debit", "Tunai", "Debit", …
## $ Status <chr> "Success", "Success", "Success", "Success", "Success", "Succe…
## $ Diskon <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ Pajak <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ Bulan <chr> "Jan 2023", "Jan 2023", "Jan 2023", "Jan 2023", "Jan 2023", "…
## $ Tanggal <date> 2023-01-01, 2023-01-01, 2023-01-01, 2023-01-01, 2023-01-01, …
## $ Hari <ord> Minggu, Minggu, Minggu, Minggu, Minggu, Minggu, Minggu, Mingg…
## $ Jam <chr> "Pagi (00:00-10:59)", "Pagi (00:00-10:59)", "Pagi (00:00-10:5…
(paragraf penjelasan: list tabel variabel utama yang dianalisis beserta keterangan dan jenis data)
datatable(head(resto_data, 50), options = list(pageLength = 5, width = '100%'))
(paragraf penjelasan: “Setelah proses ini dilakukan, dataset siap digunakan untuk eksplorasi dan visualisasi.”)
(paragraf penjelasan: penjelasan visualisasi kategorik adalah…)
Jenis layanan apa yang paling diminati oleh pelanggan?
metode_ramai <- resto_data %>%
group_by(Layanan) %>%
summarise(
Jumlah_Transaksi = n_distinct(ID.Struk),
.groups = "drop"
) %>%
mutate(
Persentase = Jumlah_Transaksi / sum(Jumlah_Transaksi) * 100,
Label = paste0(Layanan, "\n", round(Persentase, 1), "%")
)
ggplot(metode_ramai, aes(x = "", y = Jumlah_Transaksi, fill = Layanan)) +
geom_col(width = 2) +
coord_polar(theta = "y") +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5), size = 4) +
scale_fill_manual(values = c(
"Dine in" = "#c1460d",
"Online" = "#eca129",
"Take Away" = "#e7ccb6"
)) +
labs(
title = "Proporsi Jenis Layanan Restoran Ayam Serayu",
subtitle = "Berdasarkan preferensi pelanggan",
fill = "Jenis Layanan"
) +
theme_void()
(3 paragraf penjelasan: Paragraf 1: jenis grafik, variabel, tujuan, Paragraf 2: apa yang terlihat (pola/data), Paragraf 3: interpretasi (makna, implikasi bagi restoran)
contoh: Visualisasi pertama menggunakan diagram batang untuk menggambarkan distribusi jumlah data pada masing-masing kategori variabel X. Grafik ini bertujuan untuk mengidentifikasi kategori yang dominan dalam dataset. Berdasarkan grafik, terlihat bahwa kategori A memiliki jumlah data yang paling tinggi dibandingkan kategori lainnya. Sementara itu, kategori C memiliki jumlah data paling rendah. Kondisi ini menunjukkan bahwa distribusi data tidak merata antar kategori. Dominasi kategori A mengindikasikan bahwa sebagian besar data terpusat pada kelompok tersebut, yang dapat memengaruhi hasil analisis lanjutan.
(paragraf penjelasan: penjelasan visualisasi bivariate adalah…)
Bagaimana variasi penggunaan metode pembayaran dari para pelanggan? Bagaimana pula distribusi performa kasir yang melayani tiap metode pembayaran?
top_kasir <- resto_data %>%
group_by(Metode, Kasir) %>%
summarise(
Jumlah = n_distinct(ID.Struk),
.groups = "drop"
) %>%
group_by(Metode) %>%
slice_max(order_by = Jumlah, n = 3) %>%
# Langkah kunci: Urutkan Kasir berdasarkan Jumlah (descending) di tiap Layanan
mutate(Kasir_Order = reorder_within(Kasir, -Jumlah, Metode)) %>%
ungroup()
ggplot(top_kasir, aes(x = Metode, y = Jumlah, fill = Kasir, group = Kasir_Order)) +
geom_col(position = position_dodge(width = 0.9)) +
scale_fill_manual(values = c(
"Rina" = "#e7ccb6",
"Budi" = "#eca129",
"Fikri" = "#c1460d",
"Siti" = "#7f201c"
)) +
labs(
title = "Top 3 Kasir Restoran Ayam Serayu Terproduktif",
subtitle = "Perbandingan kasir yang paling aktif melayani di tiap metode pembayaran",
x = "Metode Pembayaran",
y = "Jumlah Transaksi",
fill = "Nama Kasir"
) +
theme_minimal()
(3 paragraf penjelasan: Paragraf 1: jenis grafik, variabel, tujuan, Paragraf 2: apa yang terlihat (pola/data), Paragraf 3: interpretasi (makna, implikasi bagi restoran)
contoh: Visualisasi pertama menggunakan diagram batang untuk menggambarkan distribusi jumlah data pada masing-masing kategori variabel X. Grafik ini bertujuan untuk mengidentifikasi kategori yang dominan dalam dataset. Berdasarkan grafik, terlihat bahwa kategori A memiliki jumlah data yang paling tinggi dibandingkan kategori lainnya. Sementara itu, kategori C memiliki jumlah data paling rendah. Kondisi ini menunjukkan bahwa distribusi data tidak merata antar kategori. Dominasi kategori A mengindikasikan bahwa sebagian besar data terpusat pada kelompok tersebut, yang dapat memengaruhi hasil analisis lanjutan.
(paragraf penjelasan: penjelasan visualisasi kontinu adalah…)
“Bagaimana distribusi pendapatan total restoran?”
ggplot(resto_data, aes(x = Total)) +
geom_histogram(fill = "#7f201c", bins = 30, color = "grey") +
scale_x_continuous(labels = comma) +
labs(
title = "Distribusi Pendapatan Total Restoran Ayam Serayu",
subtitle = "Berdasarkan hasil penjualan (per transaksi) seluruh outlet selama 3 tahun",
x = "Pendapatan Total (Rp)",
y = "Frekuensi"
) +
theme_minimal()
(3 paragraf penjelasan: Paragraf 1: jenis grafik, variabel, tujuan, Paragraf 2: apa yang terlihat (pola/data), Paragraf 3: interpretasi (makna, implikasi bagi restoran)
contoh: Visualisasi pertama menggunakan diagram batang untuk menggambarkan distribusi jumlah data pada masing-masing kategori variabel X. Grafik ini bertujuan untuk mengidentifikasi kategori yang dominan dalam dataset. Berdasarkan grafik, terlihat bahwa kategori A memiliki jumlah data yang paling tinggi dibandingkan kategori lainnya. Sementara itu, kategori C memiliki jumlah data paling rendah. Kondisi ini menunjukkan bahwa distribusi data tidak merata antar kategori. Dominasi kategori A mengindikasikan bahwa sebagian besar data terpusat pada kelompok tersebut, yang dapat memengaruhi hasil analisis lanjutan.
(paragraf penjelasan: penjelasan visualisasi data time series adalah…)
Bagaimana tren penjualan selama 3 tahun? Di bulan apa penjualan menghasilkan pendapatan tertinggi? Apakah ada pola musiman?
# Agregasi per bulan
bulanan <- resto_data %>%
group_by(Tanggal) %>%
summarise(
Total_Pendapatan = sum(Total, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(Tanggal)
# Hitung Moving Average
bulanan$MA3 <- rollmean(bulanan$Total_Pendapatan,
k = 3,
fill = NA,
align = "center")
ggplot(bulanan, aes(x = Tanggal)) +
geom_line(aes(y = Total_Pendapatan), color = "#e7ccb6", size = 1) +
geom_line(aes(y = MA3), color = "#c1460d", size = 1.3) +
geom_point(aes(y = Total_Pendapatan), color = "#eca129", size = 1.5) +
scale_x_date(date_labels = "%b %Y", date_breaks = "6 months") +
scale_y_continuous(labels = comma) +
labs(
title = "Tren Pendapatan Bulanan Restoran Ayam Serayu",
subtitle = "Garis merah: Moving Average (per 3 bulan)",
x = "Bulan",
y = "Pendapatan Total (Rp)",
) +
theme_minimal()
(3 paragraf penjelasan: Paragraf 1: jenis grafik, variabel, tujuan, Paragraf 2: apa yang terlihat (pola/data), Paragraf 3: interpretasi (makna, implikasi bagi restoran)
contoh: Visualisasi pertama menggunakan diagram batang untuk menggambarkan distribusi jumlah data pada masing-masing kategori variabel X. Grafik ini bertujuan untuk mengidentifikasi kategori yang dominan dalam dataset. Berdasarkan grafik, terlihat bahwa kategori A memiliki jumlah data yang paling tinggi dibandingkan kategori lainnya. Sementara itu, kategori C memiliki jumlah data paling rendah. Kondisi ini menunjukkan bahwa distribusi data tidak merata antar kategori. Dominasi kategori A mengindikasikan bahwa sebagian besar data terpusat pada kelompok tersebut, yang dapat memengaruhi hasil analisis lanjutan.
Bagaimana pola pesanan berdasarkan jam? Apakah lonjakan pesanan tertinggi di sekitar jam makan siang (lunch rush)?
# Agregasi jumlah pesanan per kategori jam
jam_pesanan <- resto_data %>%
group_by(Jam) %>%
summarise(
Jumlah_Transaksi = n_distinct(ID.Struk),
.groups = "drop"
) %>%
# Urutkan jam sesuai urutan waktu
mutate(Jam = factor(Jam, levels = c("Pagi (00:00-10:59)", "Siang (11:00-14:59)", "Sore (15:00-17:59)", "Malam (18:00-23:59)")))
ggplot(jam_pesanan, aes(x = Jam, y = Jumlah_Transaksi, group = 1)) +
geom_line(color = "#ee7c1d", size = 1) +
geom_point(color = "#7f201c", size = 3) +
scale_y_continuous(labels = comma) +
labs(
title = "Pola Pesanan Berdasarkan Waktu dalam Sehari",
x = "Waktu",
y = "Jumlah Transaksi",
) +
theme_minimal()
(3 paragraf penjelasan: Paragraf 1: jenis grafik, variabel, tujuan, Paragraf 2: apa yang terlihat (pola/data), Paragraf 3: interpretasi (makna, implikasi bagi restoran)
contoh: Visualisasi pertama menggunakan diagram batang untuk menggambarkan distribusi jumlah data pada masing-masing kategori variabel X. Grafik ini bertujuan untuk mengidentifikasi kategori yang dominan dalam dataset. Berdasarkan grafik, terlihat bahwa kategori A memiliki jumlah data yang paling tinggi dibandingkan kategori lainnya. Sementara itu, kategori C memiliki jumlah data paling rendah. Kondisi ini menunjukkan bahwa distribusi data tidak merata antar kategori. Dominasi kategori A mengindikasikan bahwa sebagian besar data terpusat pada kelompok tersebut, yang dapat memengaruhi hasil analisis lanjutan. Interpretasi
Bagaimana pula pola pesanan berdasarkan hari? Apakah saat hari pekan menunjukkan pola tertinggi dibandingkan hari biasa?
# Agregasi jumlah pesanan per hari
hari_pesanan <- resto_data %>%
group_by(Hari) %>%
summarise(
Jumlah_Transaksi = n_distinct(ID.Struk),
.groups = "drop"
) %>%
# Urutkan hari Senin–Minggu
mutate(Hari = factor(Hari, levels = c("Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu")))
ggplot(hari_pesanan, aes(x = Hari, y = Jumlah_Transaksi, group = 1)) +
geom_line(color = "#ee7c1d", size = 1) +
geom_point(color = "#7f201c", size = 3) +
scale_y_continuous(labels = comma) +
labs(
title = "Pola Pesanan Berdasarkan Hari dalam Seminggu",
x = "Hari",
y = "Jumlah Pesanan (transaksi)",
) +
theme_minimal()
(3 paragraf penjelasan: Paragraf 1: jenis grafik, variabel, tujuan, Paragraf 2: apa yang terlihat (pola/data), Paragraf 3: interpretasi (makna, implikasi bagi restoran)
contoh: Visualisasi pertama menggunakan diagram batang untuk menggambarkan distribusi jumlah data pada masing-masing kategori variabel X. Grafik ini bertujuan untuk mengidentifikasi kategori yang dominan dalam dataset. Berdasarkan grafik, terlihat bahwa kategori A memiliki jumlah data yang paling tinggi dibandingkan kategori lainnya. Sementara itu, kategori C memiliki jumlah data paling rendah. Kondisi ini menunjukkan bahwa distribusi data tidak merata antar kategori. Dominasi kategori A mengindikasikan bahwa sebagian besar data terpusat pada kelompok tersebut, yang dapat memengaruhi hasil analisis lanjutan.
(2-3 paragraf penjelasan: kesimpulan yang menjawab rumusan masalah dan tujuan penelitian. Minimal 1–2 paragraf. Setiap paragraf dalam penulisan laporan minimal terdiri dari 3 kalimat (gagasan utama, gagasan pendukung), lanjut dalam poin-poin jelaskan saran peneliti ke depannya)