1 Descriptive Visualizations

1.1 Transformed Business Dataset

library(knitr)
library(kableExtra)

# Baca dataset
data <- read.csv("data_dv.csv")

# Menampilkan tabel dengan scroll otomatis
options(knitr.kable.NA = '')
kable(data[, c("Transaction_ID", "Transaction_Date", "Customer_ID", "Product_Category", 
               "Quantity", "Unit_Price", "Total_Price", "Region")],
      col.names = c("ID Transaksi", "Tanggal", "ID Pelanggan", "Kategori Produk", 
                    "Jumlah", "Harga Satuan", "Total Harga", "Wilayah"),
      align = 'lccclccc') %>%
  kable_styling(full_width = FALSE) %>%
  scroll_box(width = "100%", height = "400px")
ID Transaksi Tanggal ID Pelanggan Kategori Produk Jumlah Harga Satuan Total Harga Wilayah
7zmPHxF7XfN9 2021-07-14 BAl3Y7yxev Clothing 2 15.18 30.36 North
y4bCY9pKTBWU 2020-11-16 TYY0h5C190 Electronics 5 10.22 43.44 West
8k0B7XX19Ykf 2023-03-22 nUX640AaXg Home 3 17.74 50.56 West
l8ahQz5YNOKz 2023-01-02 sBZyUSJLEP Home 6 28.30 132.44 North
kmufgw8wx5qk 2023-06-05 GMfVH2ZWNX Groceries 3 11.91 31.09 North
aI0KADT0mn7C 2023-03-15 YxqAmfTU9M Clothing 1 5.43 5.05 North
zu0iP1OBFuNI 2021-09-25 ifYw95qmoL Groceries 2 13.37 18.72 West
l0Bz1iXOUzUy 2020-02-18 F5zL0GjDJh Clothing 5 6.56 25.26 South
kgU3mL1c8BdA 2023-02-25 Zm9ROmGygf Clothing 4 18.23 53.23 South
MDp09wloF78Q 2023-08-19 fgldeSSYSL Home 1 11.94 10.87 South
M8Wk6MDt6qq1 2020-01-24 y5n7T2vCfd Electronics 2 21.06 33.70 South
lH96iSOc84fn 2020-12-21 SS9WdTh6Gp Books 4 9.38 37.14 North
NnorQ5sHIoaf 2024-06-12 9l5PBRrmgl Clothing 3 15.61 38.87 South
dEbUZoU5Sbu2 2020-06-13 A03t0cAGgC Clothing 1 9.17 7.79 South
o5Gqu5Y2GBZ4 2021-09-13 7hcyxq0KSE Groceries 1 16.31 12.40 West
RYXFAjCauCpJ 2024-04-04 A9pnVHddZb Electronics 2 18.49 33.65 East
BWBDxByvDM5r 2021-02-13 a4dbAEtGwn Groceries 0 3.87 0.00 West
zZahZAWUvSQ4 2022-06-17 R8Qx2GZT0X Electronics 2 13.98 22.65 West
vJPOga9LZlsj 2023-08-13 QT4CDiQyhV Books 2 19.80 29.30 South
Q1t7z4pMOxXd 2021-08-23 v9KVPPPsJB Groceries 0 12.19 0.00 North
K6zf0MWYXYa3 2023-07-30 NOlqxawsS2 Groceries 3 19.68 58.45 East
3tapZKt4h3rp 2022-07-20 iEHE4Sh6dH Groceries 3 13.27 37.82 North
AoRFZgbfFxvh 2022-09-23 w1Qj2Kba4S Groceries 3 13.71 30.85 North
Gy3belkqpTAy 2021-09-12 8iJeK256qA Electronics 1 14.41 14.27 East
Ol5tnddtoUjm 2024-03-20 c2B1Cp6SdR Clothing 2 22.96 45.92 East
GiZt1ggZpIBA 2023-05-20 oNK8qhNcbT Groceries 0 9.77 0.00 East
173n85tjVH6q 2022-05-09 reDrX4hkKp Electronics 2 13.83 19.36 East
in0FOKrAM1uq 2020-09-15 YRePsho5Lb Home 3 9.65 28.95 East
xc7v7YBzhFnN 2023-08-30 jXwfGVvV5N Electronics 2 12.21 20.02 South
s8ttrWpvZOBs 2021-04-25 BiYC2oc91b Electronics 4 6.83 27.05 West
Ewe9x9xe1QCc 2023-08-14 EXAzpV85tG Clothing 6 12.85 58.60 East
vZ8M37iAx3yU 2020-01-24 CDMnC5rG5p Groceries 1 12.93 9.96 North
hilsiFUk05mI 2023-03-27 lKpaLe5Ulg Electronics 4 13.92 40.65 East
Leq4Gi3KtEZB 2020-10-25 ANBrFxA6wx Books 2 6.08 9.36 South
zVodqgm9GGMG 2021-02-09 j3dfHyqO9O Home 1 12.82 12.56 West
rjqjiyAlxG5E 2020-11-09 Prr6AHVPDb Clothing 4 3.82 13.90 North
KxzRhtpjeq9M 2024-07-29 L2TMQmpYjN Home 8 23.23 174.69 West
H7Zf0nCfmxNW 2023-08-08 nZnAuRa6kv Home 2 13.58 24.99 North
O8ogIQjq4H6D 2022-04-15 McSZh1M6LV Home 8 14.95 99.27 North
23X6P7v0Tkum 2022-09-08 bKwm5qJ8eQ Home 3 14.26 38.07 North
yAJRegCnle8f 2020-05-25 cx4kEp8CTq Electronics 5 10.00 47.00 North
9Zc9XZbqWFIq 2024-07-02 u2UNPGzvGM Clothing 6 27.05 121.73 East
RhwZUU5xCX8E 2023-10-03 XLMEBXjhI3 Books 5 11.87 56.98 East
Be6H0Dk1kcOL 2020-07-15 nRLwRKCBNj Groceries 6 15.73 74.56 South
ElCDeUaQfcVI 2024-03-19 ej149xbZ8x Electronics 3 18.16 53.94 South
jqfViygzxl9A 2020-08-13 p89XCPPyOD Books 3 5.82 14.14 North
vTMKTvXuKI0T 2021-05-18 Ome8ic2spy Books 6 11.66 65.06 East
N8Wn2ihtH8vd 2023-10-10 uDDO1l3114 Home 4 19.73 71.03 East
bIDoZubCoeR8 2022-09-10 cXjEvmcnoz Books 3 11.87 32.05 South
1h65CzfzOoGT 2021-12-27 HA9AbKdK1p Clothing 3 8.14 21.98 West
CkYDC3LcA05B 2022-08-02 p7GPSg9rjI Home 5 14.76 69.37 West
pO5tWpHm8Ebt 2023-06-22 ML4tc831Qd Books 3 20.94 61.56 East
eQtwc5RMzUFi 2022-07-10 V5zOh96PeD Books 5 13.63 49.07 East
9JIgS1jKeMSa 2021-09-17 SsaI3yxuiC Home 1 5.06 5.06 East
CGr7oZEZk6f7 2020-09-18 L01Aea5e7o Electronics 3 3.47 10.10 East
qOYU7pmfExha 2021-01-24 hPlpLN3e0Y Electronics 1 8.16 6.85 North
xu44wAuAI2Ob 2020-05-09 5sFUACczC6 Books 6 7.36 34.44 South
F1HoiWBfQYRv 2023-10-27 gasCKh5m7r Groceries 5 15.89 78.66 South
ScZgw2KnDOm1 2022-10-23 m13rwzbOp8 Books 2 17.35 28.45 West
eZaaik4jrify 2021-01-08 E6G6fkQci0 Books 5 9.83 45.22 West
pwHZ2RJEBpzB 2023-11-29 QvQkxBgv0a Groceries 4 10.43 36.71 South
LSPqrRjfkxzy 2022-02-08 l3FIVSuBx0 Groceries 4 17.04 58.62 East
ZuyxbC4P0zkn 2022-10-11 1A35fVGWJI Electronics 4 15.38 57.21 South
9oWtxldxNF1L 2021-11-28 tsJM7kNdmn Electronics 0 17.79 0.00 South
DJHIkQgwVBZf 2021-10-11 aimP2BXUkB Clothing 3 3.59 9.15 North
NxV2bof9xv8m 2020-02-09 ur0hDynQhO Electronics 2 10.44 16.91 East
vdkS32OBGCAt 2021-05-31 da3ON805VB Home 2 18.77 36.79 East
3PJQKENU11fp 2020-02-02 964gZRxN3W Groceries 1 13.62 12.39 North
llmumQZnv7Bl 2022-08-02 BeQ5Et9Qjm Clothing 5 9.84 37.88 South
6cdrfqE8Vgcy 2020-04-12 9pRYpZdR3T Home 4 13.66 50.27 East
eIompY0Sxlfp 2023-06-05 uxh3auRBBI Clothing 2 11.64 17.46 East
HJ8aolc6rvTB 2020-04-18 C5At5ohS56 Electronics 4 7.73 23.50 East
PyzX1HeveXfx 2022-09-28 flCZoSq9VK Clothing 5 19.94 94.72 West
iLOIsP05DfSQ 2023-09-14 eUbB4WmVm8 Clothing 1 14.55 11.06 East
Z2ehjY4ZVShP 2024-08-19 Bo9fdG8bZ6 Groceries 3 22.14 61.77 North
uESnwmOrT9Y9 2020-03-16 jhOrR6FANj Home 5 8.54 40.56 South
Jmlq5JUBIcI6 2022-09-06 HNzGjbrfJD Home 4 6.12 20.32 West
sgqxw1OGVl3v 2024-12-05 P1zgCnGbR8 Clothing 5 13.76 65.36 East
LPxWKd7tWotN 2024-02-23 re0cyS8m6o Clothing 1 12.56 9.04 North
3LObgCy1GIwb 2024-04-19 M9k1C31JJy Clothing 2 15.58 26.80 West
KY9S73PXUbNy 2022-01-02 cFo6siKnvj Books 4 12.32 36.96 East
q0Z9SdG66x1t 2020-01-16 s1J9ocq25P Home 3 9.23 19.94 South
afVFuZcXmlWI 2023-10-12 wDTpgJS8FC Home 3 14.78 39.91 West
CRcediCOUJyo 2024-10-21 wPuc8xUQh4 Groceries 3 27.46 69.20 South
8Tv9P5voCcTd 2023-06-25 2zKcgSMz1e Books 1 9.07 7.53 North
ctSuklQ2sLZ2 2022-10-02 4aBQZL2sgk Groceries 2 11.93 21.95 East
ks7FF0rPhJRo 2023-09-10 rjHMp8p6Uk Groceries 2 17.75 25.20 East
SLmyPfW732xL 2022-09-14 MUQ11wikdL Clothing 2 22.14 42.51 South
mDnL1dUGL45w 2024-07-11 Rx0ac4ifBI Electronics 3 18.44 54.77 East
lxtzHmPNxV38 2024-07-23 qqi47mApPU Books 4 24.20 80.34 North
loN2S5Gvrz8X 2020-03-22 9g9CuO7Sbq Electronics 2 1.78 2.63 West
pyv93p8Ni3AN 2022-07-02 3bUiiErG8B Clothing 6 21.23 104.45 South
FPK7MalXGwXr 2020-11-20 EooWiaNQWB Electronics 1 6.55 5.76 South
lh3lF7nyL50R 2024-07-03 JglidgSaCj Groceries 4 16.62 65.82 South
C3nJKzLhRMlm 2023-10-15 bcNQ1BA325 Groceries 3 10.45 26.02 East
JGgiiR96TvIS 2022-08-08 pnvSzLykEK Groceries 5 14.67 56.48 South
fP46wwu8CfFp 2020-10-22 6vGnt89gE8 Clothing 2 18.93 35.21 South
BwRrJsXd1PY8 2020-05-28 EkORkE4TUQ Electronics 2 22.11 36.26 West
VZ3hb9WnPJUe 2022-09-22 2Oqxn5bkPR Clothing 4 8.62 33.79 North
eVdMK2sWU8RD 2024-05-11 qOjg7DzuGb Home 2 20.43 30.64 East
pnqxEn9IEb7c 2020-04-09 9KfzbEYL4O Clothing 1 16.94 15.75 North
2ccUR7jiUHe7 2022-09-25 X0epzADTlf Clothing 4 13.02 44.79 South
JcARmKm72Jop 2020-10-24 CVcmAl1i0E Electronics 6 8.91 46.51 North
2oTEL8R5rX6s 2021-02-05 ohW2eA1bRT Clothing 1 10.48 9.64 West
O7zv4sGcTWZr 2020-03-31 XGwuFFmjUS Home 3 12.99 30.40 East
IIOJrQQPbZdp 2022-02-19 poZDYaQFXX Home 3 20.99 52.89 North
eXg2WnEyT0Av 2023-04-19 X5QdRgn3Q1 Home 4 19.44 74.65 South
XgMkSH8pOn8V 2022-12-13 CUSV68x3zo Home 2 15.60 29.64 West
LqhlaTovgiXQ 2022-04-30 UKVHApcvpL Clothing 7 12.49 72.57 North
q4si56o7mCp1 2020-10-14 mgUUtDxONb Books 2 12.49 18.49 East
BUzB07VKXiRX 2021-12-20 fys5NOYO8L Home 1 9.25 7.68 West
liYFDdvwN9jU 2024-11-16 BK0BF0ILrY Electronics 2 16.60 32.20 South
Fp8aGw9uhH3h 2020-02-29 8HSULOLjYq Home 3 15.48 36.22 South
AAVK2qJTNeun 2023-08-01 vO7bkFFB8q Electronics 2 18.21 29.86 South
O8IHFmfSNGIT 2022-04-28 nb66A3qwSl Clothing 5 15.21 69.21 West
O1r8wYG2VUNZ 2024-07-01 w5ziZtmrXN Home 2 16.72 26.75 North
y5im2CKZ05SR 2022-08-26 H4ENrKlagt Books 2 18.66 36.95 West
lrBl6DtnAzoR 2021-01-11 ok7K8VYrhm Clothing 5 18.67 83.08 West
asokqPsut0cS 2021-09-29 smv4ZS8a7x Home 1 7.65 5.97 North
ZtAl7lGwRXAg 2021-03-02 AvuBeevTFW Books 3 12.28 29.84 East
nlDCdlop7Hq6 2021-03-17 T8jDdv7f4E Clothing 3 12.25 29.40 South
1PaWvGiAokHB 2023-02-09 02kNipUny9 Groceries 3 13.11 36.58 East
cbrd5rqU41Jj 2021-08-06 bqJMsUqKEf Groceries 5 7.01 27.69 North
zShwShp3PXj9 2023-08-01 W1oqpuRu63 Electronics 1 15.99 11.35 East
M10ng1IwHMVG 2022-08-08 x6YJJbNTKQ Electronics 0 17.28 0.00 North
uBc2nfj2Xck9 2024-03-16 2FQwpxz6IB Clothing 4 25.38 74.11 North
Rh6lda01A4Ty 2023-03-10 QDkUQ1IPME Groceries 6 6.45 35.60 South
RwKUpp870jmD 2024-10-07 aH0XG2YQgA Books 4 14.49 52.74 East
WBSWLj2HAHhq 2022-08-26 A5H722gpjc Books 3 12.44 26.87 South
Vx4Wi6mRRjU6 2020-11-06 TYVW0hvsNk Electronics 2 1.68 2.45 South
vEestyT5vJTY 2022-06-30 H1VhjUwNeY Electronics 3 10.25 25.22 West
odMT8EqozjNV 2021-04-18 8BTzXeZmpE Groceries 5 8.11 33.66 South
vZPDoU9ib6DX 2022-03-21 SWDnu6zMN9 Groceries 0 10.39 0.00 North
58kswFDCBC8h 2024-04-26 pgrao4LHkR Books 4 7.06 28.24 West
KNkHl4fumjJd 2020-02-11 t7zeePWsAI Groceries 1 11.07 9.96 East
QKk1OIAc5Dz7 2022-01-29 VYl7kfBMV1 Home 5 10.84 41.73 East
2tV3y9n9QBhn 2023-06-28 8VedXktgYT Home 1 23.60 23.13 South
x2ZQHLvuynAG 2024-01-04 qtiwC54fTZ Clothing 2 21.98 35.61 South
lpY8l5hpUXf2 2024-08-19 z0mihMjctT Electronics 0 10.73 0.00 West
7g4JlLXtRK2O 2020-01-25 xWp4t6qBvN Clothing 5 10.49 50.35 North
HGZdJgXleURJ 2021-12-03 sk3LEiPDUw Electronics 3 9.03 23.84 East
f0PqNqOjjKno 2024-04-16 yUeNrqOIZf Books 3 22.44 59.24 East
zrAaETj1wwtb 2023-06-15 Q2RAx1cIdd Books 3 16.27 39.54 South
JeFqxSwBaOx9 2021-06-09 TNHEQp6CUl Books 2 9.21 13.45 West
UkCPTRWN3rQ6 2021-09-14 DisBvZ7A6p Groceries 4 14.19 44.84 West
KQg3IUgUhdOV 2020-09-18 JpTLYzmZ9h Clothing 2 10.76 18.51 North
TkzUwXwuWnCv 2024-03-07 beGnG3hdY4 Clothing 7 17.18 102.22 East
ilWJzX12QavR 2022-07-31 liCRXvQqqq Electronics 0 24.10 0.00 East
1qOhdrPzACRS 2020-10-25 UdDDlchznV Electronics 3 7.35 15.66 East
uT5HvxoA6Q4d 2024-01-09 ZlCR4urRpH Home 1 15.65 12.21 North
VZbSsPUVfHtJ 2021-12-20 Vw0hSvnQJd Books 2 4.27 8.20 South
sonvcAeTslrc 2021-01-03 cv9AhZ50IY Home 2 11.80 22.42 West
TvdHxKvgAMvy 2021-05-26 t9PIv3ddtp Groceries 5 16.45 78.14 West
SI3dtpX9pry4 2022-01-27 TdkXh4L5wd Electronics 5 3.64 14.74 East
rBMzRrABC1g0 2023-10-24 ozCMsyJJ0P Home 5 14.75 56.05 East
NykunDd5Ly4o 2022-01-23 PYApLzGm0J Home 3 8.09 19.17 East
XF9Rjwmpc89c 2022-03-09 JGpi2AvHwV Books 4 21.21 74.66 West
DqJmYozHBi0y 2022-05-11 A5zt8aY7LD Clothing 4 20.79 66.53 South
S3C60vByLv8q 2023-06-01 tN6OJh4inW Clothing 0 17.67 0.00 East
ldoVNt44ixCR 2022-02-12 i8RcDHAHX9 Books 3 21.15 62.18 North
CvYNAyNUDKek 2023-05-22 5vyI8xT0Hb Clothing 0 11.66 0.00 North
CHCZAwV2tCBZ 2020-10-20 OnTihZC0AZ Books 4 14.75 52.51 West
ayFn8FrcHewS 2021-08-29 mnyqlEfZZB Groceries 4 9.07 35.92 North
FWk9rdy9CqW7 2024-03-21 WQ1LiIJgck Clothing 3 19.60 58.80 North
pqJtisKz710D 2022-02-02 vcRLieEJvx Groceries 0 12.50 0.00 East
h2MVx68cJUm0 2022-02-21 vSmGmBcWed Groceries 2 12.61 19.67 West
OfguuGz4WsCa 2021-06-29 giQWIBNahl Groceries 3 14.73 41.54 South
8vIGKD7riwv6 2021-03-01 Lh1fleaBFm Clothing 5 5.48 22.19 North
Kj9h6cmZVH1J 2021-04-15 PIezw6rGGi Home 3 10.75 27.09 North
R5VzCu6bKrEI 2020-07-06 zStFgqesJx Clothing 3 10.86 24.11 West
Fi0QRepasHyn 2020-09-10 hGk0RoggCq Clothing 7 7.98 44.69 West
bo9GgJrgy7nY 2020-09-24 sgSA2IKfbt Books 6 10.52 53.65 West
vHfB6DC3yFlO 2021-10-01 jo7FWMSuJC Electronics 4 10.41 41.64 East
FnE9BwYjOEAz 2023-12-04 A15eaI8YDC Electronics 1 24.09 20.72 South
t4Vtm6LjZXqH 2020-02-10 mTI5cFqBar Home 4 13.57 38.54 West
kBpb2VZiQiFu 2023-05-01 WwG7DNB7dv Electronics 2 30.83 54.26 North
Hwx8fwRSpgIc 2024-05-20 1bfU7mZFtV Clothing 6 14.02 69.82 North
YXvJMLDwIz9q 2022-04-03 hROHc63MHv Books 1 18.07 17.17 North
bpcSn7xXvX6Y 2021-10-25 Ot0txvc6qE Groceries 8 22.49 152.93 South
yUYvLwyqfExY 2023-01-26 UKggyAVZc1 Home 3 17.50 46.73 South
TvEk1FrNB9oo 2021-06-20 hOe7jBP9Nj Groceries 3 6.58 16.98 East
XIgqtuJpJLP8 2020-12-13 7AMkKQHfhG Clothing 3 4.97 14.31 West
rDJXQMmrmVm0 2020-04-16 cO8LKPbUdr Clothing 2 9.82 17.87 East
WomybJGdxO17 2020-11-12 XCGGx6fdGb Home 5 16.55 57.92 East
nJdRVLGcO5xq 2022-11-03 tHKKxIVI9z Clothing 4 17.75 70.29 South
SBLQBgJnS35A 2020-06-10 f0tZDm9Dbb Clothing 4 -0.69 -2.37 West
sPX5vaqPvy53 2021-09-27 2LNuHckq2L Home 4 8.50 28.90 North
iOM6TBHva4Xu 2021-12-06 3hOYBreqO9 Groceries 3 11.95 32.98 East
1LnkY8Ao8rF4 2024-06-18 Hove1DzZaH Home 3 10.71 26.99 West
3qYOvvZHha4F 2024-04-16 Eo8y8ll6q8 Books 6 21.47 109.50 South
3fBrllB8itPJ 2022-06-24 FyriaIGguB Groceries 1 1.69 1.32 West
eb9uAdSKPf2K 2024-09-16 m769nsubP0 Books 5 18.72 66.46 South
hO1xLsWZE54x 2022-03-06 HSmlwGKHf4 Home 1 12.04 8.43 North
LoS5Bo5l7kIi 2021-09-21 xqPlMUFm8J Books 1 9.54 7.25 North
Kivg6peHKaXY 2022-11-26 5mi4Nr48hS Electronics 3 12.58 34.72 East
FXmB2bYPVjqY 2023-03-07 GV2mFh8sTj Groceries 3 17.57 36.90 North
PEgjegGISMRy 2023-10-24 lKqPgUDfgI Books 4 17.98 71.20 North
rYaJcHzjfedi 2022-10-05 8LlCQ3Lwjj Electronics 5 12.87 61.78 East
hNwHp3dkGyd2 2022-02-11 dO1i1ty7Zo Books 4 4.38 15.07 North
Yj253L2RvbjL 2024-04-19 u6vhTc5U45 Clothing 3 10.80 26.24 West
0kgKWZOpEp6Z 2020-03-18 0NwgTyo7P2 Clothing 5 2.65 10.60 North
nmHsRLi9hBLR 2021-06-09 t8cMcGO4S1 Home 1 15.81 14.07 North
IubP7EcgZLby 2024-08-18 px0UCD8GLy Electronics 2 16.78 26.51 South
Oq2Q116wd9RP 2023-01-25 9tkEtvptrf Books 5 17.35 71.14 West
EgDphW3clNf1 2024-10-30 nbo0AU26zI Books 0 10.21 0.00 East
BjSRouuuvXd3 2021-04-27 Gix23JRAR6 Books 2 9.32 14.73 West
PWfMOF9WnRkd 2020-06-30 ZIAtNmn5Ti Clothing 6 12.81 72.25 South
tNxivNmDUgSw 2024-02-06 H9JczWFcjV Clothing 2 17.11 26.69 North
L0D2L6jjes7G 2023-02-24 th8YMleatt Electronics 3 15.42 35.62 East
sythvk6XLiLk 2024-12-27 sTTCdLZRb4 Books 3 17.64 48.16 West
KHHCHGAAHVMw 2024-02-25 Q31COjcyeP Home 1 24.05 22.85 North
ZXjJpeDLWuzI 2024-04-27 U6eGOO2tQN Clothing 3 14.93 41.21 North
JdlEF8r6hXBC 2024-09-11 RF0MoV8zjw Groceries 5 21.38 88.73 East
qfrcov0TYDwy 2024-03-09 aiAwa6t6Zs Books 5 22.49 100.08 South
QoFaRB0N7xSE 2022-09-18 NdVtNX32YD Clothing 3 8.05 18.60 West
nfafjf9bvNsh 2020-12-02 Bx331NLajO Clothing 4 10.61 35.23 East
jHQjnQGmBA0N 2021-06-22 3hEvff6VvM Home 1 11.94 9.07 East
Zn0sUbfPmjqf 2024-04-14 C5JWsdhWnQ Home 6 23.15 122.23 North
jtCyoaWv1iSk 2023-04-18 74rWUzgiV5 Books 1 20.57 14.81 East
2g9FGaHFpkT8 2022-05-17 Qdyl5tv9MM Groceries 3 13.99 29.38 South
AuGsHtZghGKM 2020-07-30 EpkIL2oVAb Electronics 3 10.68 25.31 East
MLh6B5RvRGDn 2024-05-29 89tAlWQZgY Groceries 4 14.40 43.78 East
F3NuBLSx62e4 2020-07-19 W6W9JQbgSp Groceries 5 9.01 39.64 East
JGm8fuIiMQjG 2023-11-25 tK2ukPHjIQ Groceries 2 10.85 20.83 North
lVgRce2mXR4p 2020-03-02 Txuw4WBwP4 Electronics 9 5.17 44.67 North
WwFlSt7kQpwG 2023-07-16 ZzZ0yraITq Books 3 9.90 29.40 South
xf0h344y6Py1 2023-11-06 ZkBJlvEnA4 Groceries 3 20.18 50.25 East
qdSqpTzXjrxU 2023-02-21 fliL3quI1a Clothing 1 21.57 15.31 North
7F8Vruoaoigz 2022-12-22 qOW6sZiEvx Clothing 3 11.94 30.45 West
JNpDxtt65wgH 2021-07-14 Uln585SSvO Home 2 6.36 11.58 North
VVXyQI6Pd2u4 2021-07-26 lJ4EGeYjB4 Home 3 11.56 28.78 West
w9giE5HXGZjP 2024-07-09 DQxd8yalnF Electronics 4 29.21 84.12 South
PmzdOUYYP6Gw 2024-11-27 aZQikTJkwZ Clothing 6 28.21 120.17 South
ncIVVMOG0skY 2021-06-23 Hg790cbc9O Clothing 4 3.40 12.38 North
Y7Cnum6Q2EFA 2020-01-02 Wf3kpyPIrr Home 3 8.22 23.43 East
7gmaX9MXVgAY 2021-11-01 hJpribaov3 Electronics 2 19.67 36.19 East
ZvZyTmU18spD 2024-07-29 Kv6sy3Orpy Groceries 6 17.81 100.45 West
43zdwahU5Hfl 2023-02-24 NMbPhA1NdG Books 2 23.99 40.30 West
2dO9m5n4VTPj 2023-05-16 A9ytkotAOZ Electronics 0 14.33 0.00 East
bs3rLZxR2gwa 2022-02-09 XrdueCAoPK Books 2 17.02 28.59 North
hSMbzJUzy0Vv 2022-01-10 6xv9Pul8RC Groceries 7 15.12 100.55 North
izHVAp1LGslq 2020-09-25 mRdaqwo7g0 Groceries 5 26.15 128.14 North
8975KfY8Juth 2022-11-01 L5KWifD5sj Groceries 1 18.60 13.76 West
ciUc8eAtgXMf 2021-12-05 jYgeWepLcf Home 5 5.97 24.78 North
rY3pdII4vOf1 2021-10-31 RjN2SroAao Clothing 3 8.98 26.67 West
995Ua9NmSTQA 2024-05-05 JGPA0xbjpt Groceries 3 19.85 47.64 South
ko8LzjcYISR9 2021-03-19 7OXBJ9DjXe Home 1 2.49 2.09 South
h0j1231ESsnG 2021-11-07 ElTjuH2CFo Books 2 2.98 4.71 West
Z1qAedecxA8H 2024-05-01 Kot3oATm6m Clothing 3 12.39 28.99 West
DXeHbW0ohc6f 2023-05-06 bxXNgsVq4e Clothing 2 14.26 23.96 North
6lxAsKEcx2I8 2022-06-30 NCvu2eYXwU Home 4 20.19 71.07 South
qQu9uttvNIIf 2022-10-30 KTglJ1eD5y Books 1 12.63 12.12 South
tATJFK9muWma 2022-08-24 GJrCzmKce3 Home 0 14.81 0.00 North
vBGYbb8oXICY 2023-07-02 tePLYDmj0x Electronics 0 15.68 0.00 East
ecU9v5clLo2c 2023-05-09 jDB1X4NlTA Home 3 12.47 35.17 East
KoHpstfXHmaD 2024-11-03 oycVI7Xdo1 Home 1 24.81 22.58 North
YCdxNWs8uR7I 2024-03-18 hN4R0eehMV Books 6 12.52 62.35 West
q1ESakqogWUy 2022-04-29 eIcpJBeciK Electronics 5 12.86 62.37 East
Xdz0vvVCNLxW 2020-06-29 pSX7B7Qk6u Groceries 0 8.26 0.00 West
XEeGueG0KYLg 2022-01-20 Yv4Xys1sR7 Books 4 16.66 62.64 East
ZY0nKmllcwdI 2023-07-31 y98qCX1I3F Groceries 3 24.04 52.65 West
3baQSkVJoGvd 2024-11-22 923KeMvECL Clothing 2 20.57 38.67 North
OQHEOVmhSQKE 2021-04-07 8YsG4sdAmJ Books 3 18.91 54.46 West
Tgu7BRNP9yz0 2021-08-27 yUgLC2uH3U Electronics 3 15.82 36.54 North
JbobVWQuMJDU 2023-08-29 hgXG04TMeD Home 0 12.88 0.00 West
uojNVU8RJjpX 2020-03-24 Vqw5KJ5sOt Electronics 3 10.41 21.86 West
9EHBmSe2Hbw7 2022-09-11 Zt0ULljeSb Home 2 20.88 37.17 South
7dvznz1Zc7mr 2021-04-08 ihwq2Dvgl3 Books 3 4.19 9.93 West
DzUP3zBiY9bD 2022-09-10 uHkcX1ybPM Clothing 5 15.62 68.73 South
TrDniWu1GSWT 2020-08-12 11Wb15uk4J Home 6 9.22 47.02 East
I9TeYhSJMUJg 2024-05-15 s8EXMivtga Home 3 22.39 61.12 North
ViQ8IgeTeDZy 2023-01-30 5EQ5MzBRj8 Electronics 3 19.75 47.40 East
8jesfKO3iHtq 2020-06-19 zn8iPJzka7 Groceries 9 11.51 99.45 West
ckmyt7wNJaLg 2021-05-03 MeUL2lRY8f Books 4 19.46 73.17 East
NQruinpkcONs 2024-08-12 6UaPE4hjfu Clothing 6 10.37 49.78 East
4e2GyVVUi2kU 2022-07-10 dyYthz8z6Y Home 5 18.55 84.40 South
vTjiVOl9dTGB 2021-11-24 DgsyTaQ3PZ Books 3 4.10 9.47 East
pAZZU8BXsaLx 2024-05-09 XNhPVppKti Home 6 20.94 101.77 South
SWUpTsiioQhO 2024-05-08 rqZivFYiaq Groceries 1 18.45 15.68 East
4c0gMZQ3Ro5H 2022-10-19 YMlOGaDUw6 Electronics 5 18.84 86.66 South
FV26zwhtUd1L 2024-09-04 5atN3exITS Books 7 18.39 126.16 South
O8nXmpfRvm2y 2023-12-15 zZdWG7ohbO Groceries 5 8.16 37.13 West
88UkYxI7sr10 2024-04-27 lQbsuhpwLc Home 2 7.96 13.37 East
9hwdoC44nzdZ 2023-05-15 aow2ZftJrU Groceries 2 18.70 35.53 South
5Cdyor9Uhn6Y 2023-01-13 aMnuI4TzyA Electronics 2 15.63 25.32 West
hKALLR9AkURz 2020-06-01 b6tRKh0kBg Clothing 3 7.14 16.49 North
g3jYUqSCezi1 2022-08-18 PU6enpUfAs Clothing 3 12.44 29.48 South
U9f1m1kDu319 2020-08-27 rzNf7lSvYd Books 5 6.64 25.23 West
dzYODuD2hLMH 2020-02-18 ztbrMe9OZj Books 1 9.21 8.93 East
OzhKsiymmayH 2023-03-08 MInUbGvsaQ Home 2 11.34 17.01 East
tldnbDya9BWh 2020-06-04 5zBnUpjczA Home 4 0.08 0.31 West
ZL07MjdK0pd4 2020-09-30 kji16bd55T Electronics 5 8.90 34.71 North
O8fJllvS2eWD 2024-05-09 HkntphLXHu Books 1 23.23 19.28 East
G1VdRO7y2Pyq 2023-06-03 OlyN0TRPr5 Home 2 25.39 37.58 West
5GbO8uvG2bBj 2022-01-31 Qq7IkZom6H Groceries 4 14.01 53.24 East
6mW5JGzMUwui 2020-06-18 N9k3D8TiPg Home 5 9.60 33.60 North
nGkXhbbGEcMr 2020-10-18 QkQJtdrXgF Home 5 14.81 70.35 West
gu0j1IKh1qXk 2020-05-27 PY27AIrcBj Home 1 10.27 8.93 East
gQotrPilhJaO 2021-12-19 NTrY5fx0Sg Groceries 3 9.83 28.02 North
VOCzzxDOxQps 2020-07-07 0S9qOEuCr9 Clothing 3 1.31 3.46 West
yYl9KuNU5KqN 2023-02-10 leeMSGIN8F Electronics 1 9.68 9.58 North
WeTPWtGmKlm0 2022-11-16 qBX4pNzsfb Books 4 16.03 58.99 North
upWDbRaFZSP0 2021-08-28 Rgq1K0fHy2 Home 2 4.70 8.46 West
i7luaBh5HoZR 2021-10-06 GkAq8otRi0 Clothing 7 17.24 85.68 West
jTSJRFJuiFb6 2023-01-14 tslbaGaeXu Home 1 9.27 8.44 South
zDRrX19WoQN2 2024-07-07 FsYmNZlL8t Electronics 2 17.03 27.59 North
YhpRwLOwMAaO 2020-09-06 70w8QKuYqo Home 2 9.99 18.78 East
smX3ZDmWlbr4 2020-06-17 DTAAG01bcn Books 4 9.94 38.57 West
1w7S74e55oPx 2022-06-25 Ic4sCAt6sb Electronics 1 14.76 12.99 North
fCyXPsUMaPH8 2022-01-01 s2Ftw0Bjkn Electronics 5 16.99 69.66 South
0UvxMxE9cjGv 2021-07-03 Q7vckx31vC Groceries 1 11.37 9.44 West
oiKAnmP6Adlr 2023-10-17 MuFNMK6tJi Books 1 14.76 13.14 East
zM9GK87awuYN 2021-04-01 6XvVTr096a Clothing 7 12.80 70.78 East
0w0MpZcN1i7k 2022-07-07 NW0N1B2NpM Home 1 11.83 9.82 North
eWWC1tlAKZt2 2020-04-24 bDPt4mJX7k Home 3 17.69 38.74 East
fnsF1YlsqyhM 2024-12-07 XghdQtcIrq Groceries 3 7.15 19.73 East
8kTs16HnE2dV 2022-01-01 Vi90y4aLJu Home 2 19.14 29.86 North
zGdgK6oqmzbM 2023-05-21 RpbkRHFWkU Books 3 14.76 38.08 South
Fti0kkcFymzu 2023-08-08 SQG81NH8ep Electronics 2 18.11 30.79 West
95eN6qIoKDRW 2023-12-20 jI6Yvp8kG7 Groceries 2 20.94 31.41 South
x0COhVmxajiS 2023-05-22 Z0fOUlHR2X Home 0 20.18 0.00 West
FqKcFn0IjoLk 2022-09-11 9bbLdIbFTW Clothing 2 10.70 20.97 North
QpkRWqS7I9wK 2021-03-13 UrXmzMVh9F Groceries 2 19.82 37.26 North
YtXpppeJBsLU 2021-09-16 rcv5nDSj3X Books 4 3.89 15.09 South
DD2CQXiyIjfP 2021-06-25 mgso709AFz Groceries 0 16.32 0.00 North
mLSBJ1EbO2wv 2021-11-29 B0UJ1TY8MR Groceries 3 9.44 24.64 West
XRJXKTWqYhuR 2024-02-01 ud8ZyqQyXO Clothing 2 8.41 12.95 West
KvpqGYa8Mtql 2022-07-05 CV2H3fXzUW Home 6 4.67 27.18 East
uMwak4JnR2cl 2022-08-23 tDSatCxFbt Books 5 15.23 74.63 South
1Svd8CKfuoeL 2024-05-01 ppLz34QlQF Books 1 29.12 24.75 South
gJEV3FDJgylN 2023-02-02 76SXvVKhxO Home 3 17.37 43.25 South
W6L0eFGFhL87 2023-05-10 9k5H4PdDOz Home 2 21.65 30.31 East
yg00vnFYtu4j 2020-03-28 YypDuhJTwk Home 2 14.19 22.14 West
MwaY9eI4gQh3 2023-10-25 RWM95O96S3 Clothing 3 12.73 34.37 West
6r9Ua0vflc3k 2021-01-25 aYAlretn1e Home 4 16.77 61.04 West
Ez2cmtBQULjj 2021-02-01 Etl1pbZzSi Groceries 4 13.76 50.09 South
RoCDXt5CzK0Z 2020-09-24 W5f2ZszYEp Groceries 1 11.03 8.38 North
zZiaHKbETQzM 2024-09-12 FRk2ryXIWr Clothing 6 23.01 138.06 South
zbmWOlYHDPAv 2022-03-29 R7t4L5NmsP Books 4 17.74 54.64 South
Ndw7JjbWt8fA 2024-03-25 soN3M6wZuq Groceries 5 14.87 59.48 West
haFdYTATDL7r 2023-02-18 smEs5opnYI Electronics 1 17.98 16.00 East
Kod2S5AdA957 2024-06-12 tV6JyHNVRT Home 2 13.54 26.54 North
eabT4Y2CTCKX 2020-02-06 bpFHZ2GJar Electronics 4 13.15 37.35 North
7VqUTCUcjWft 2021-12-06 BTDqmbzeOk Clothing 4 9.84 33.85 East
NJ7psA2bu9Ip 2020-06-11 FepMOBkW32 Clothing 0 12.26 0.00 East
yfPNIRWduh2t 2023-12-12 hwyOant0XM Home 8 17.84 117.03 North
NLcGYzXBNc7r 2024-12-23 pxLfKCfXgh Home 3 16.65 35.96 West
z04tpn8J1KYY 2020-02-15 tlp9E6NbQX Electronics 2 12.33 24.41 West
yzjp3EFHEI7i 2023-08-03 j34LqdVXYG Home 2 18.87 32.08 North
qzzR4dnb8yr5 2022-05-08 leTiEXEkHE Clothing 2 12.85 18.25 West
aLOklBzAvzQa 2024-01-27 bV4r6doLDP Home 4 23.86 80.17 South
mC8efJp6fhHx 2022-05-17 KPzqL4Lshr Clothing 4 20.96 80.49 West
TyH8f0NwPiG9 2021-01-10 nNmjzMyntA Groceries 5 8.69 32.15 North
rAd7AbbdIaXP 2022-03-31 6zOR135Ja5 Clothing 8 10.11 61.47 South
yP9aad47jw44 2020-10-06 gt90LIwFV8 Electronics 1 12.57 10.06 West
26i4Ey1h5UrD 2022-07-22 shgcNBD5gJ Groceries 0 9.43 0.00 North
ZUaKowZf04V6 2022-01-25 GNSycZTmAe Groceries 3 11.75 27.14 South
5mAA3ZdIzPgY 2022-09-07 8HcWj2cPhp Electronics 1 18.01 17.65 West
yqPWIXmn6X5W 2023-11-28 80OKlJvWBA Electronics 4 13.13 44.12 West
0T0NKxYDMF11 2021-12-15 39Xtdtoxv0 Books 3 2.36 6.73 South
75DFolcOCS3M 2023-06-02 Tu5P3P3YUB Groceries 0 19.32 0.00 North
QC2RFSNrtiob 2023-11-03 eXG2uCixPS Books 2 7.99 13.58 North
aHP4Jhj55DMS 2020-07-24 kOfcMTgPtT Clothing 3 3.23 7.66 South
tvCu3JVwczxP 2023-10-03 ntjmISZs9c Books 5 0.91 4.00 South
BaIWtsO2cJgN 2024-12-29 dTKFClBjWn Groceries 4 22.16 82.44 South
ttoiTA6NTwlI 2021-08-27 P5BhW3xBxZ Clothing 2 13.26 22.01 North
takx3dYY78Jg 2023-08-17 EJFaWDM0xh Home 7 18.31 89.72 West
8txZQPyF2QDq 2023-10-13 gqiyizNYn6 Groceries 6 20.22 90.99 North
mYIuyoFK0GSb 2022-07-06 5UUjuE2k99 Electronics 2 13.79 20.41 East
LfR7CBFWD1LO 2021-11-14 8FltUwOrl5 Clothing 1 6.47 6.21 North
7prBBItt4LnE 2022-02-03 2ppBJkeCqI Clothing 5 16.82 82.42 East
G6YkmMBcaNTV 2021-10-08 FZxSQAnS3g Groceries 2 18.52 36.30 East
8ii604wKsFQr 2024-12-01 BnSypqX84g Home 3 10.50 22.36 North
KUd3J4QNaySP 2020-06-07 icaeqmSpzk Books 3 6.97 19.03 West
xCMRBC7mHFA7 2022-07-16 8kj9w0Kmjl Groceries 3 12.54 31.22 West
pLbHSWVjBZzk 2022-09-04 dLLSxFOgD8 Clothing 6 7.55 44.39 South
nDmBZOYXkJfM 2022-07-23 1KoV6jicfm Clothing 5 17.47 71.63 South
mkKltl4dxsSj 2021-10-14 0yYHXOmDBC Electronics 1 9.00 7.92 West
aNTtCLJbvRy5 2023-11-02 tzqSz2vLCh Groceries 1 22.28 18.49 East
9cd3IsXgdcIQ 2024-04-14 WSIx4R1xUr Home 3 18.27 44.40 North
cFxt8VLxccey 2022-12-13 7hdZnftsOh Books 1 17.64 15.70 South
WZdAQuZuTHoW 2021-05-28 rAsGeQIjpQ Clothing 3 19.81 55.27 East
lAUQu2Zqipa4 2021-06-23 1PuDtRS0bd Clothing 1 13.33 10.40 North
GQlX1IASjStb 2021-01-21 2dFvKjyu49 Home 2 17.38 32.33 North
49sL5GHM5EQa 2022-07-17 AQbXbBP6WO Books 5 15.05 72.99 West
W7edKjU2cvAp 2024-07-04 mWNzrBmtxd Home 5 10.44 52.20 East
Evua0zpnrauU 2022-09-15 Ot9Sa8oyun Electronics 1 14.11 12.42 East
L8niaWGwijdD 2023-05-20 yE1ULdubAT Home 3 19.59 49.95 West
LBKsOfgJTG52 2022-01-16 MA6zCZEiCr Groceries 5 16.45 59.22 East
cfMdmw7x17JO 2023-07-12 i91DUJv05e Books 3 15.13 41.30 North
GBkY1u8RReEz 2023-03-07 gd7zNOZlpP Clothing 3 9.91 25.57 North
QF7TC7B428ew 2024-09-30 aMEmmN3cl8 Home 3 21.23 49.68 West
IAHtrikcFVoX 2021-09-18 AG7VXb1JFD Clothing 5 7.42 27.45 South
LkKeZ6YWSoOX 2024-06-05 CW8zZLXGhD Electronics 5 11.74 48.72 North
ebqMLwv2CFyv 2023-12-03 xgRoy12D2V Home 3 18.97 43.82 North
nBMo1yLCMbvv 2021-09-11 9YOYS3wRK0 Electronics 6 5.84 25.23 South
eY2mb0Az22oM 2020-07-20 qlZhogrl2S Clothing 4 11.22 44.88 West
j7LkvsNx29oy 2020-03-13 jSKuJ38fM0 Books 3 10.01 30.03 East
FcYFBo5sf5B5 2024-08-09 5rC4VVOgla Clothing 4 11.36 34.99 South
IYlg0MAGwsUw 2020-11-30 04npfK5VJa Books 3 15.90 36.25 North
2RTqWHDLFlUZ 2022-12-05 MxT08Z7exz Books 5 11.04 41.40 North
nWC6lX1EyCmw 2023-06-24 ATC7Vuq4At Home 2 22.00 39.60 West
G7SI61ABcF1p 2020-05-10 b1s4YdP4dw Electronics 4 7.62 25.60 North
kKnsYxDNjUQJ 2023-03-19 X79qcSBayq Electronics 3 13.12 37.79 East
xqgQy9GQsfp3 2022-12-20 B5wkf9iAVY Clothing 3 13.84 38.20 North
jhxqsLrPu6EG 2022-11-09 5YUDP4zMeL Home 4 12.21 44.93 West
krtU1Rt38m4V 2021-11-12 SzWfyr3rSn Electronics 2 10.22 18.80 South
SR2BD4n1XNt8 2023-10-09 YebduFEo1l Clothing 6 11.61 60.60 South
bU2N7nYUKgo1 2022-09-09 I1DC12ZrYS Home 4 7.94 30.17 West
Ya8gIgqWA24P 2021-06-12 Aiz3vYGyu8 Clothing 3 15.07 42.05 West
i0ZFDYTmYdDF 2020-03-22 7hYpz2phLg Electronics 5 5.97 21.19 South
ddFsMFlQOa2J 2023-05-19 0PlvCaxPuS Electronics 3 9.12 21.89 East
OM2qIrGKztg4 2023-04-12 d8vj3KzXwg Books 1 13.46 11.44 West
f8ZXIQ0ZxLI3 2020-09-29 tVg4CmJILD Electronics 7 6.00 41.58 South
CeGOrslvuNbu 2020-04-03 uL1CNhii2S Groceries 2 -0.96 -1.57 West
SvO13nb3MdLJ 2020-11-25 IOwdZ7rIT7 Home 3 8.55 21.80 North
qQsozRg3StB6 2022-07-21 oOiercVP9k Home 3 14.84 43.18 North
UvxkPdx0P3a2 2023-12-23 56mvK1CdkB Clothing 4 17.47 56.60 North
z1V34cFT9BXr 2024-09-09 ez782o4SvY Clothing 1 19.96 18.76 South
HDeKwIA49yOw 2020-06-27 fbOph1Sl4i Clothing 5 5.00 17.50 North
o2eNX1wfOYxI 2023-01-02 o3p35KviRK Home 5 14.37 52.45 North
42bEoss149GX 2020-10-30 DDz3Q52JXM Groceries 3 4.96 11.31 North
1rPGJ0pze8Nv 2022-07-18 jir3e9SkHn Clothing 1 10.82 10.60 East
u9RZuEkTkQo4 2022-08-11 jJFdoYL71G Groceries 3 7.95 23.37 South
GR4Tnn5DByPk 2021-04-17 nuOBVAw2Qv Books 0 6.42 0.00 East
iAj82paX24z2 2023-10-01 aPYKwTNPDJ Home 2 19.15 37.15 East
AmxWMrj7DrXF 2022-04-08 EL1f1KucTi Clothing 2 12.64 19.97 East
jBw7GY376rYN 2023-06-08 WIa9s0OCQ0 Groceries 1 14.71 12.94 West
bhOaWFN6KNz5 2023-10-21 pprHps7zZH Groceries 3 24.65 53.98 North
X5tczO5rRpU3 2023-02-13 KDKcbZwV2p Books 5 15.71 63.63 South
sqNtceZ5egGt 2021-12-26 CnUULLnaQw Home 6 9.31 53.07 West
zJ7dNvfsfQ7x 2022-10-07 J0vZpE9K2D Groceries 1 17.74 13.48 South
RR59oLBl8oUs 2020-04-17 a6zCJx578K Electronics 3 7.56 17.69 West
6saYHaGQ3Y0x 2021-10-20 54Mqprcgqq Books 3 18.86 43.00 East
r3xvtNSNYpdA 2023-09-11 s3ardvAdkq Home 3 14.11 36.83 East
MmgZnZpJsmKo 2024-11-06 XDDmM2aTzU Electronics 3 14.92 38.94 North
dHSO6mBkO2bY 2021-08-23 tTBWkVB3i2 Groceries 3 6.16 17.56 West
t3nn6XjMBcoL 2024-04-14 6443ZQoAAI Clothing 1 19.64 13.94 North
An6iX3Ctrr9k 2021-09-09 pGt7kTrSXH Clothing 4 19.33 66.50 South
hvpoMEf4HV7z 2020-04-12 xfpeaCHAZq Home 3 8.22 23.18 West
0hA4eQWX9iTO 2022-01-24 tykBFpCnhi Books 2 15.31 29.40 West
0wnhBVR7eZC0 2023-09-30 AvuXTBZQ0Y Books 4 17.67 60.08 North
vQcAfenkoFhA 2023-07-05 u4Mkn61Ghc Home 2 23.11 41.60 West
zdGDw25AIiJa 2023-11-17 di3sZD6hBr Electronics 4 19.32 67.23 South
B0X6kpCddAjl 2023-04-22 jfSVOZE51X Electronics 3 10.63 24.24 North
XaDZ84C1h8xy 2022-04-22 eE0crPZ4XT Home 2 10.52 19.99 East
HLvL9QHWTbKq 2023-11-14 JO12gVckL4 Electronics 4 12.27 43.68 South
Zlnzqyms41Hw 2024-12-27 bRnpgBkegR Books 5 18.71 82.32 North
Mbkn3EFlkxpa 2020-07-15 GUyFiledM7 Books 3 9.98 28.14 North
cJxi0faTT19f 2024-08-04 2JPKJu14mE Electronics 4 19.84 58.73 East
HVactibZklAY 2023-04-30 TBurRzva7b Electronics 1 12.71 9.91 South
KkU0YohTQsm0 2022-01-15 85N7rv4qxv Home 3 12.12 27.63 East
bz5Vdw2fGncs 2024-05-01 iAioCqZjE6 Groceries 2 21.71 32.56 East
5ASjSZRCB0ii 2023-05-01 QONrntLnG8 Groceries 3 15.50 45.10 South
lhLafICQVVmf 2023-12-19 UijSnEjeur Clothing 7 12.73 85.55 North
bvYfukEnmLaO 2022-12-08 nH2Sv4pTIS Clothing 2 18.86 30.93 East
EmTiLJkfet2a 2021-04-04 uD3UV4xVjk Books 4 12.07 44.42 North
wY1nktEJrtem 2022-11-11 hj1H6bBAHS Home 2 9.42 15.07 North
ukQt0UPHXbtS 2024-11-27 wzRsFhRut7 Books 2 26.55 41.42 West
7iOiK0v83Wr0 2024-11-05 eKM50XlEMp Books 1 12.16 8.88 North
sOS3nihhE1Fc 2023-11-01 b4RWPGfwao Groceries 6 7.09 41.26 East
1Gwzt9tVUcH6 2020-05-11 VZx0AxgHdk Clothing 2 -1.27 -2.36 South
3bH1Bd5xcoJn 2024-05-21 Fn3JfTkvli Home 1 21.26 19.77 North
f7Dby0zUvLSU 2020-07-05 azdHUHNJlV Home 4 7.34 23.78 South
jJ445XKVxUPS 2020-02-22 fUy9OW66Jo Books 3 8.62 21.72 North
oZT8M4ZIRRvo 2022-07-22 cXl8Xyescv Groceries 3 15.45 39.40 West
5aX2ULRHGolS 2021-09-28 ojymsdgXcy Groceries 3 9.67 27.56 North
4pmj04wvlLWt 2022-12-18 9RjZ5KJNyT Electronics 4 5.96 23.36 West
0fSjEes73k3m 2022-04-16 JphihvKQG3 Groceries 2 4.25 7.39 West
P9T9GsQnOxIa 2021-11-12 oXyTZNCsUB Electronics 1 10.30 9.06 North
FyRCpwyOqKWK 2021-12-02 0dEDsy4fWM Groceries 2 12.87 24.97 West
79oKvLQOQItf 2023-11-28 yK8aGlRhrV Groceries 3 4.61 11.89 South
Zvz6Tf3Rred9 2023-03-31 JlAqOxH3dU Electronics 3 17.45 48.69 East
O26foEikb1wk 2020-03-27 RnP47ExaAd Electronics 3 12.11 29.43 North
8NazOChvfqSG 2020-08-15 2AIX99u2SL Electronics 3 16.47 37.55 South
4QWHvX1YIAgh 2024-05-11 DJbRe9qSHB Clothing 2 18.82 26.72 North
8t9v98DTdHyW 2024-08-10 6opiWjNbc4 Books 4 19.02 73.80 East
iYCCHT8qEQFL 2024-04-11 T2JLIhQTM6 Groceries 5 21.02 76.72 North
vijZ2fnltNPM 2023-04-12 YEqoAZrvfU Home 2 15.90 26.71 East
u8d9jnNOvUWK 2023-04-12 BbMtrYuSbM Books 1 15.60 11.86 North
OIglSNOBlCQd 2020-01-03 QT1h2Jjrb4 Clothing 3 10.58 27.93 South
K2Ic54wJF6Lx 2021-08-29 oYwpsIKzpZ Groceries 3 15.72 42.92 North
XkGb1ofuh3OC 2021-12-03 Ipmsv6W4n0 Groceries 5 9.84 46.74 North
ImDJyfNfUWXx 2021-02-05 A2VNB7YuGI Books 2 9.50 16.53 East
PVzRUj8Xc3rU 2020-05-17 MsJLNkDPFr Clothing 5 5.67 21.26 West
97xZbHQ1oJ4R 2021-04-25 OqsMtpUVjX Groceries 3 7.21 18.60 East
vtHiBkIfV0Ab 2022-02-05 sSEDOOgxjm Books 5 15.63 67.21 North
0mY4nEP5edmT 2024-06-07 Pnb6X3Jz0F Home 6 25.74 123.55 West
AqxQCkWJxba5 2022-03-31 jukknhPUxW Books 4 9.16 32.61 West
U57J7dIrKDxH 2022-05-18 n6tlW40fqp Clothing 4 13.06 50.15 South
HI7qlkYIXNvq 2021-10-30 Fb9CKExv0r Electronics 3 6.85 18.70 North
qesyPJQOSJCO 2024-11-08 GLtbK5tWtC Books 4 22.54 72.13 South
7xeOQ3V8swFD 2021-12-08 yyoj2A1d0y Clothing 4 10.41 33.31 East
yAKhmI7wbQDs 2024-02-07 7W0vMC681O Clothing 7 18.90 127.01 North
ER66Ufm1QMO0 2022-06-23 6tIzPP6ava Home 1 15.74 12.43 West
KkkwqU0fJWov 2023-04-06 QJoTkxo9S6 Books 2 10.73 15.02 North
w3i0Rfjoa6hX 2023-01-15 VU7NlQ74hC Clothing 4 15.48 50.77 North
gWv8dQLDqODX 2021-05-10 NR2BItfWF0 Books 2 10.86 18.90 South
NH0dZkjh2bzu 2020-08-05 lq9xTX2WFJ Clothing 5 13.38 52.18 East
A46eNvcTKJgP 2020-11-27 CDHnObcgGN Books 3 3.83 10.34 East

1.2 Categorical Data

1.2.1 Bar Chart

# Load libraries
library(dplyr)
library(ggplot2)
library(viridis)
library(scales)

# Step 1: Siapkan dan ringkas data
data_bisnis <- read.csv("data_dv.csv")
sales_summary <- data_bisnis %>%
  group_by(Product_Category) %>%
  summarise(Total_Sales = sum(Total_Price, na.rm = TRUE)) %>%
  arrange(desc(Total_Sales))

# Step 2: Palet warna turbo dari viridis
custom_colors <- viridis::turbo(n = nrow(sales_summary))

# Step 3: Plot bar chart clean dan putih
ggplot(sales_summary, aes(x = reorder(Product_Category, -Total_Sales),
                          y = Total_Sales,
                          fill = Product_Category)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = label_comma(prefix = "Rp ")(Total_Sales)),
            vjust = -0.5, size = 5) +
  scale_fill_manual(values = custom_colors) +
  scale_y_continuous(labels = label_comma(prefix = "Rp "),
                     expand = expansion(mult = c(0, 0.1))) +
  labs(
    title = "Total Sales by Product Category (2020–2024)",
    subtitle = "Based on Transaction Value",
    x = "Product Category",
    y = "Total Sales",
    caption = "@azkyaaa"
  ) +
  theme_minimal(base_size = 18)  # Tema putih dan bersih

1.2.2 Pie Chart

# Load necessary libraries
library(dplyr)
library(ggplot2)
library(viridis)
library(scales)

# Step 1: Summarize total sales by product category
data_bisnis <- read.csv("data_dv.csv")
sales_summary <- data_bisnis %>%
  group_by(Product_Category) %>%
  summarise(Total_Sales = sum(Total_Price, na.rm = TRUE)) %>%
  arrange(desc(Total_Sales)) %>%
  mutate(
    Percentage = Total_Sales / sum(Total_Sales),
    Label = paste0(Product_Category, "\n", percent(Percentage, accuracy = 1))
  )

# Step 2: Create custom color palette
custom_colors <- viridis::turbo(n = nrow(sales_summary))

# Step 3: Plot donut chart
ggplot(sales_summary, aes(x = 2, y = Percentage, fill = Product_Category)) +
  geom_col(width = 1, color = "white", show.legend = FALSE) +
  coord_polar(theta = "y") +
  geom_text(
    aes(label = Label),
    position = position_stack(vjust = 0.5),
    size = 4.5,                      # Ukuran teks label disesuaikan agar tidak besar
    color = "white", fontface = "bold"
  ) +
  scale_fill_manual(values = custom_colors) +
  xlim(0.5, 2.5) +
  labs(
    title = "Sales Distribution by Product Category (2020–2024)",
    subtitle = "Based on Total Transaction Value",
    caption = "@azkyaaa"
  ) +
  theme_void(base_size = 14) +       # Ukuran font dasar lebih normal dan rapi
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(margin = margin(t = 5, b = 10), hjust = 0.5),
    plot.caption = element_text(margin = margin(t = 10), hjust = 1,
                                color = "gray30", face = "italic")
  )

1.2.3 Treemap

# ==============================
# 1. Install & Load Required Packages
# ==============================
packages <- c("treemapify", "dplyr", "ggplot2")
new_packages <- packages[!(packages %in% installed.packages()[, "Package"])]
if(length(new_packages)) install.packages(new_packages)

# Load libraries
library(treemapify)
library(ggplot2)
library(dplyr)

# ==============================
# 2. Prepare Aggregated Treemap Data
# ==============================
data_bisnis <- read.csv("data_dv.csv")
tree_data <- data_bisnis %>%
  group_by(Product_Category, Region) %>%
  summarise(
    Total_Sales = sum(Total_Price, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    label_combined = paste0(Region, "\n", round(Total_Sales, 0))
  )

# ==============================
# 3. Create Static Tree Map with Combined Labels
# ==============================

ggplot(tree_data, aes(
  area = Total_Sales,
  fill = Product_Category,
  subgroup = Product_Category
)) +
  geom_treemap() +
  geom_treemap_subgroup_border(color = "white") +

  geom_treemap_text(
    aes(label = label_combined),
    colour = "white",
    place = "centre",
    grow = FALSE,
    reflow = TRUE,
    size = 50 / .pt,       # Adjust overall font size
    min.size = 3
  ) +

  labs(
    title = "Tree Map of Total Sales by Product Category and Region"
  ) +
  theme_minimal()

1.3 Numerical Data

1.3.1 Histogram

library(ggplot2)
library(dplyr)

data_bisnis <- read.csv("data_dv.csv")
data_bisnis <- data_bisnis %>%
  mutate(Quantity = as.numeric(Quantity))

ggplot(data_bisnis, aes(x = Quantity)) +
  geom_histogram(binwidth = 1,
                 fill = "skyblue",
                 color = "gray",
                 alpha = 0.7) +
  labs(
    title = "Histogram of Quantity Distribution",
    x = "Quantity",
    y = "Frequency"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 18, face = "bold"),  # title diperkecil
    axis.title.x = element_text(size = 14),               # label x diperkecil
    axis.title.y = element_text(size = 14),               # label y diperkecil
    axis.text.x = element_text(size = 12),                # angka x diperkecil
    axis.text.y = element_text(size = 12)                 # angka y diperkecil
  )

1.3.2 Density Plot

library(ggplot2)
library(dplyr)

data_bisnis <- read.csv("data_dv.csv")

data_bisnis <- data_bisnis %>%
  mutate(Quantity = as.numeric(Quantity)) %>%
  filter(!is.na(Quantity))

mean_quantity <- mean(data_bisnis$Quantity, na.rm = TRUE)

density_data <- density(data_bisnis$Quantity)
max_y <- max(density_data$y)

ggplot(data_bisnis, aes(x = Quantity)) +
  geom_density(fill = "skyblue", alpha = 0.6) +
  geom_vline(xintercept = mean_quantity, color = "red",
             linetype = "dashed", linewidth = 0.7) +  # garis lebih tipis
  geom_text(
    data = data.frame(x = mean_quantity, y = max_y * 0.8),
    aes(x = x, y = y),
    label = paste("Mean =", round(mean_quantity, 2)),
    color = "black",
    angle = 90,
    vjust = -0.5,
    size = 5,         # font lebih kecil
    fontface = "bold",
    inherit.aes = FALSE
  ) +
  labs(
    title = "Density Plot of Quantity with Mean",
    x = "Quantity",
    y = "Density"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 22, face = "bold"),   # title lebih kecil
    axis.title = element_text(size = 16),
    axis.text = element_text(size = 12)
  )

1.3.3 Bloxplot

library(ggplot2)
library(dplyr)

data_bisnis <- read.csv("data_dv.csv", stringsAsFactors = FALSE)

data_bisnis <- data_bisnis %>%
  mutate(Quantity = as.numeric(Quantity)) %>%
  filter(!is.na(Quantity))

Q1 <- quantile(data_bisnis$Quantity, 0.25)
Q3 <- quantile(data_bisnis$Quantity, 0.75)
IQR_value <- IQR(data_bisnis$Quantity)
lower_whisker <- Q1 - 1.5 * IQR_value
upper_whisker <- Q3 + 1.5 * IQR_value

stats <- data_bisnis %>%
  summarise(
    Mean = mean(Quantity),
    Q1 = Q1,
    Median = median(Quantity),
    Q3 = Q3,
    Min = min(Quantity),
    Max = max(Quantity),
    Outliers = sum(Quantity < lower_whisker | Quantity > upper_whisker)
  )

ggplot(data_bisnis, aes(x = factor(1), y = Quantity)) +
  geom_boxplot(fill = "skyblue", outlier.shape = NA) +
  geom_jitter(aes(color = Quantity < lower_whisker | Quantity > upper_whisker),
              width = 0.1, size = 2, alpha = 0.5) +
  scale_color_manual(values = c("FALSE" = "black", "TRUE" = "red"), guide = "none") +
  geom_point(data = data_bisnis %>% filter(Quantity == stats$Max[[1]] & Quantity <= upper_whisker),
             aes(x = factor(1), y = Quantity),
             color = "red", size = 6) +  # ukuran titik max diperkecil

  annotate("text", x = 1.2, y = stats$Mean[[1]],
           label = paste("Mean:", round(stats$Mean[[1]], 2)),
           hjust = 0, fontface = "bold", color = "blue", size = 5) +
  annotate("text", x = 1.2, y = stats$Q1[[1]],
           label = paste("Q1:", round(stats$Q1[[1]], 2)),
           hjust = 0, color = "darkgreen", size = 4.5) +
  annotate("text", x = 1.2, y = stats$Median[[1]],
           label = paste("Median:", round(stats$Median[[1]], 2)),
           hjust = 0, color = "purple", size = 4.5) +
  annotate("text", x = 1.2, y = stats$Q3[[1]],
           label = paste("Q3:", round(stats$Q3[[1]], 2)),
           hjust = 0, color = "darkgreen", size = 4.5) +
  annotate("text", x = 1.2, y = stats$Min[[1]],
           label = paste("Min:", round(stats$Min[[1]], 2)),
           hjust = 0, color = "orange", size = 4.5) +
  annotate("text", x = 1.2, y = stats$Max[[1]],
           label = paste("Max:", round(stats$Max[[1]], 2)),
           hjust = 0, color = "orange", size = 4.5) +
  annotate("text", x = 1, y = stats$Max[[1]] + 0.05 * stats$Max[[1]],
           label = paste("Outliers:", stats$Outliers[[1]]),
           color = "red", fontface = "italic", hjust = 0.5, size = 5) +

  labs(
    title = "Boxplot of Quantity with Jitter",
    x = NULL,
    y = "Quantity"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_blank(),
    axis.ticks.x = element_blank(),
    plot.title = element_text(size = 28, face = "bold"),
    axis.title = element_text(size = 18),
    axis.text = element_text(size = 14)
  )

1.3.4 Violin Plot

# =================================
# 1. Load Required Libraries
# =================================
library(ggplot2)
library(dplyr)

# =================================
# 2. Load and Prepare Data
# =================================
# Buat dummy df jika df belum ada (untuk testing saat knit)
if (!exists("df") || !is.data.frame(df)) {
  set.seed(123)
  df <- data.frame(
    Quantity = c(rpois(95, lambda = 20), 150, 160, 170, 5, 2)
  )
}

data_bisnis <- df
data_bisnis <- data_bisnis %>%
  mutate(Quantity = as.numeric(Quantity)) %>%
  filter(!is.na(Quantity))

# Hitung statistik dasar
Q1 <- quantile(data_bisnis$Quantity, 0.25)
Q3 <- quantile(data_bisnis$Quantity, 0.75)
IQR_val <- Q3 - Q1
lower_whisker <- Q1 - 1.5 * IQR_val
upper_whisker <- Q3 + 1.5 * IQR_val

mean_val <- mean(data_bisnis$Quantity)
median_val <- median(data_bisnis$Quantity)
min_val <- min(data_bisnis$Quantity)
max_val <- max(data_bisnis$Quantity)

# Tandai outlier
data_bisnis <- data_bisnis %>%
  mutate(is_outlier = ifelse(Quantity < lower_whisker | Quantity > upper_whisker, "Outlier", "Normal"),
         x_group = ifelse(is_outlier == "Outlier", "Outlier Only", "All Data"))

outliers_count <- sum(data_bisnis$is_outlier == "Outlier")

# =================================
# 3. Create the Plot
# =================================
x_offset <- 2.2
y_range <- max_val - min_val
y_offset <- 0.02 * y_range

p <- ggplot(data_bisnis, aes(x = x_group, y = Quantity)) +
  geom_violin(fill = "skyblue", alpha = 0.6, adjust = 1.5, scale = "width", width = 0.9) +
  geom_boxplot(width = 0.15, outlier.shape = NA, fill = NA, color = "black") +
  geom_jitter(aes(color = is_outlier), width = 0.15, size = 2, alpha = 0.6) +
  geom_point(data = data_bisnis %>% filter(Quantity == max_val & is_outlier == "Normal"),
             aes(x = x_group, y = Quantity), color = "red", size = 5) +
  annotate("text", x = x_offset, y = Q3 + y_offset*2, label = paste0("Q3: ", round(Q3, 2)), color = "darkgreen", size = 4) +
  annotate("text", x = x_offset, y = mean_val + y_offset*4, label = paste0("Mean: ", round(mean_val, 2)), color = "blue", fontface = "bold", size = 4.2) +
  annotate("text", x = x_offset, y = median_val + y_offset*3, label = paste0("Median: ", round(median_val, 2)), color = "purple", size = 4) +
  annotate("text", x = x_offset, y = Q1 + y_offset, label = paste0("Q1: ", round(Q1, 2)), color = "darkgreen", size = 4) +
  annotate("text", x = x_offset, y = max_val, label = paste0("Max: ", round(max_val, 2)), color = "orange", size = 4) +
  annotate("text", x = x_offset, y = min_val, label = paste0("Min: ", round(min_val, 2)), color = "orange", size = 4) +
  annotate("text", x = "All Data", y = max_val + y_offset * 6,
           label = paste0("Outliers: ", outliers_count),
           color = "red", fontface = "italic", size = 4.5, hjust = 0.5) +
  scale_color_manual(values = c("Normal" = "black", "Outlier" = "red")) +
  labs(title = "Violin Plot of Quantity with Outliers", y = "Quantity", x = NULL, color = NULL) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 16, face = "bold"),
    axis.title.x = element_blank(),
    axis.text.x = element_text(size = 12),
    axis.text.y = element_text(size = 12),
    axis.title.y = element_text(size = 14),
    legend.position = "none"
  )

print(p)

1.4 Combo

1.4.1 Grouped Bar Chart

# ==============================
# 1. Load Required Libraries
# ==============================
library(dplyr)
library(ggplot2)

# ==============================
# 2. Load and Prepare Data
# ==============================
# Cek apakah df ada dan valid
if (!exists("df") || !is.data.frame(df) || !"Total_Price" %in% names(df)) {
  # Buat dummy data untuk mencegah knit error
  set.seed(123)
  df <- data.frame(
    Product_Category = rep(c("A", "B", "C"), each = 3),
    Region = rep(c("North", "South", "West"), times = 3),
    Total_Price = runif(9, min = 10000, max = 50000)
  )
}

# Proses data
data_bisnis <- df %>%
  mutate(Total_Price = as.numeric(Total_Price)) %>%
  filter(!is.na(Total_Price))

# ==============================
# 3. Group and Summarize
# ==============================
sales_summary <- data_bisnis %>%
  group_by(Product_Category, Region) %>%
  summarise(Total_Sales = sum(Total_Price, na.rm = TRUE), .groups = "drop")

# ==============================
# 4. Plot Grouped Bar Chart
# ==============================
ggplot(sales_summary, aes(x = Product_Category, y = Total_Sales, fill = Region)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
  labs(
    title = "Total Sales by Product Category and Region",
    x = "Product Category",
    y = "Total Sales (USD)",
    fill = "Region"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(size = 24, face = "bold"),
    axis.title.x = element_text(size = 18),
    axis.title.y = element_text(size = 18),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 14),
    axis.text.y = element_text(size = 14),
    legend.title = element_text(size = 16),
    legend.text = element_text(size = 14)
  )

1.4.2 Ridgeline Plot

# ==============================
# 1. Load Required Libraries
# ==============================
library(dplyr)
library(ggplot2)
library(ggridges)
library(scales)
library(viridis)

# ==============================
# 2. Load or Simulate Data
# ==============================
# Cegah error knit: buat data dummy jika df belum ada atau kolom tidak lengkap
if (!exists("df") || !"Price_per_Unit" %in% names(df) || !"Region" %in% names(df)) {
  set.seed(123)
  df <- data.frame(
    Region = rep(c("North", "South", "East", "West"), each = 100),
    Price_per_Unit = c(
      rnorm(100, mean = 20000, sd = 5000),
      rnorm(100, mean = 25000, sd = 6000),
      rnorm(100, mean = 30000, sd = 7000),
      rnorm(100, mean = 18000, sd = 4000)
    )
  )
}

# ==============================
# 3. Filter Valid Data
# ==============================
data_bisnis <- df %>%
  filter(is.finite(Price_per_Unit))

# ==============================
# 4. Plot Ridgeline (Joyplot)
# ==============================
ggplot(data_bisnis, aes(x = Price_per_Unit, y = Region, fill = Region)) +
  geom_density_ridges(
    alpha = 0.7,
    scale = 1.2,
    size = 1.2,
    color = "black",
    rel_min_height = 0.01  # mirip joypy fade
  ) +
  scale_x_continuous(
    labels = label_number(
      prefix = "Rp", big.mark = ".", decimal.mark = ",", accuracy = 1
    )
  ) +
  scale_fill_viridis_d(option = "D") +
  labs(
    title = "Distribution of Price per Unit by Region",
    x = "Price per Unit",
    y = "Region"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(size = 24, face = "bold"),
    axis.title.x = element_text(size = 18),
    axis.title.y = element_text(size = 18),
    axis.text.x = element_text(size = 14),
    axis.text.y = element_text(size = 14),
    legend.position = "none",
    panel.grid.major = element_line(color = "gray90"),
    panel.grid.minor = element_blank()
  )

1.4.3 Bloxplot by Category

# ==============================
# 1. Load Libraries
# ==============================
library(ggplot2)
library(dplyr)
library(readr)
library(RColorBrewer)

# ==============================
# 2. Prepare Data
# ==============================
data_bisnis <- read_csv("data_dv.csv")

data_bisnis <- data_bisnis %>%
  mutate(Quantity = as.numeric(Quantity)) %>%
  filter(!is.na(Quantity))

# ==============================
# 3. Create Boxplot with Adjusted Font Sizes
# ==============================
ggplot(data_bisnis, aes(x = Product_Category, y = Quantity, fill = Product_Category)) +
  geom_boxplot(
    outlier.color = "red",
    outlier.shape = 16,
    outlier.size = 3
  ) +
  scale_fill_brewer(palette = "Pastel1") +
  labs(
    title = "Boxplot of Quantity by Product Category",
    x = "Product Category",
    y = "Quantity"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 24, face = "bold"),
    axis.title.x = element_text(size = 20),
    axis.title.y = element_text(size = 20),
    axis.text.x = element_text(size = 16, angle = 45, hjust = 1),
    axis.text.y = element_text(size = 16),
    legend.position = "none"
  )

1.4.4 Lollipop Chart

# ==============================
# 1. Load Required Libraries
# ==============================
library(dplyr)
library(ggplot2)
library(scales)

# ==============================
# 2. Load or Simulate Data
# ==============================
if (!exists("df") || !"Total_Price" %in% names(df) || !"Product_Category" %in% names(df) || !"Region" %in% names(df)) {
  set.seed(123)
  df <- data.frame(
    Product_Category = rep(c("A", "B", "C", "D"), each = 4),
    Region = rep(c("North", "South", "East", "West"), times = 4),
    Total_Price = runif(16, min = 50000, max = 200000)
  )
}

# ==============================
# 3. Prepare Data
# ==============================
data_bisnis <- df %>%
  mutate(Total_Price = as.numeric(Total_Price)) %>%
  filter(!is.na(Total_Price))

# ==============================
# 4. Summarize Total Sales
# ==============================
sales_grouped <- data_bisnis %>%
  group_by(Product_Category, Region) %>%
  summarise(Total_Sales = sum(Total_Price), .groups = 'drop')

# Sort Product_Category by total sales
order <- sales_grouped %>%
  group_by(Product_Category) %>%
  summarise(Sum_Total = sum(Total_Sales)) %>%
  arrange(Sum_Total) %>%
  pull(Product_Category)

sales_grouped$Product_Category <- factor(sales_grouped$Product_Category, levels = order)

# ==============================
# 5. Grouped Lollipop Chart
# ==============================
ggplot(sales_grouped, aes(x = Total_Sales, y = Product_Category, color = Region)) +
  geom_segment(aes(x = 0, xend = Total_Sales, y = Product_Category, yend = Product_Category),
               size = 1.8, alpha = 0.7) +
  geom_point(size = 6) +
  labs(
    title = "Grouped Lollipop Chart",
    x = "Total Sales",
    y = "Product Category",
    color = "Region"
  ) +
  scale_x_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  theme_minimal(base_size = 16) +
  theme(
    plot.title = element_text(size = 24, face = "bold"),
    axis.title.x = element_text(size = 20),
    axis.title.y = element_text(size = 20),
    axis.text.x = element_text(size = 16),
    axis.text.y = element_text(size = 16),
    legend.title = element_text(size = 18),
    legend.text = element_text(size = 16),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    panel.grid.major.x = element_line(color = "gray80", linetype = "dashed")
  )

1.4.5 Heatmap

# ==============================
# 1. Load Required Libraries
# ==============================
library(ggplot2)
library(dplyr)
library(reshape2)
library(scales)

# ==============================
# 2. Prepare Data
# ==============================
data_bisnis <- read.csv("data_dv.csv", stringsAsFactors = FALSE)

# Konversi Total_Price ke numerik dan buang NA
data_bisnis <- data_bisnis %>%
  mutate(Total_Price = as.numeric(Total_Price)) %>%
  filter(!is.na(Total_Price), !is.na(Product_Category), !is.na(Region))

# ==============================
# 3. Create Aggregated Matrix
# ==============================
sales_matrix <- data_bisnis %>%
  group_by(Product_Category, Region) %>%
  summarise(Total_Sales = sum(Total_Price, na.rm = TRUE), .groups = "drop") %>%
  dcast(Product_Category ~ Region, value.var = "Total_Sales", fill = 0)

# Set rownames dan ubah ke matrix untuk heatmap plotting
rownames(sales_matrix) <- sales_matrix$Product_Category
sales_matrix <- as.matrix(sales_matrix[, -1])

# ==============================
# 4. Create Heatmap
# ==============================
library(pheatmap)

pheatmap(
  sales_matrix,
  cluster_rows = FALSE,
  cluster_cols = FALSE,
  color = colorRampPalette(colors = c("midnightblue", "mediumorchid", "mistyrose"))(100), # Twilight-style palette
  display_numbers = TRUE,
  number_format = "%.0f",
  fontsize = 14,
  fontsize_number = 10,
  main = "Heatmap of Total Sales by Product Category and Region"
)

1.5 Relationship

1.5.1 Scatter Plot

# ==============================
# 1. Load Required Libraries
# ==============================
library(ggplot2)
library(dplyr)

# ==============================
# 2. Load and Prepare Data
# ==============================
data_bisnis <- read.csv("data_dv.csv", stringsAsFactors = FALSE)

data_bisnis <- data_bisnis %>%
  mutate(
    Quantity = as.numeric(Quantity),
    Total_Price = as.numeric(Total_Price),
    Price_per_Unit = as.numeric(Price_per_Unit)
  ) %>%
  filter(!is.na(Quantity), !is.na(Total_Price), !is.na(Price_per_Unit), !is.na(Region))

# ==============================
# 3. Define Twilight-like Colors
# ==============================
twilight_colors <- c(
  "#e5a9e2", "#a295d5", "#4c9bbd", "#4da6a6", "#95b66f", "#d1b35e"
)

region_names <- sort(unique(data_bisnis$Region))
region_colors <- setNames(twilight_colors[seq_along(region_names)], region_names)

# ==============================
# 4. Create Wide Scatter Plot
# ==============================
ggplot(data_bisnis, aes(x = Quantity, y = Total_Price, color = Region, size = Price_per_Unit)) +
  geom_point(alpha = 0.7) +
  scale_color_manual(values = region_colors) +
  scale_size_continuous(range = c(3, 15)) +
  labs(
    title = "Scatter Plot of Total Price vs Quantity by Region",
    x = "Quantity",
    y = "Total Price",
    color = "Region",
    size = "Price per Unit"
  ) +
  theme_minimal(base_size = 18) +
  theme(
    plot.title = element_text(size = 22, face = "bold", hjust = 0.5),
    axis.title = element_text(size = 16),
    axis.text = element_text(size = 14),
    legend.title = element_text(size = 16),
    legend.text = element_text(size = 14),
    legend.position = "right"
  )

1.5.2 Bubble Chart

# ==============================
# 1. Load Required Libraries
# ==============================
library(ggplot2)
library(dplyr)
library(scico)

# ==============================
# 2. Load and Prepare Data
# ==============================
data_bisnis <- read.csv("data_dv.csv", stringsAsFactors = FALSE)

data_bisnis <- data_bisnis %>%
  mutate(
    Quantity = as.numeric(Quantity),
    Total_Price = as.numeric(Total_Price),
    Price_per_Unit = as.numeric(Price_per_Unit)
  ) %>%
  filter(!is.na(Quantity), !is.na(Total_Price), !is.na(Price_per_Unit), !is.na(Region))

# ==============================
# 3. Generate 'vik' Colors for Regions
# ==============================
unique_regions <- unique(data_bisnis$Region)
vik_colors <- scico(length(unique_regions), palette = "vik")
names(vik_colors) <- unique_regions

# ==============================
# 4. Create Bubble Chart
# ==============================
ggplot(data_bisnis, aes(x = Quantity, y = Total_Price, size = Price_per_Unit, color = Region)) +
  geom_point(alpha = 0.7, stroke = 0.4) +
  scale_color_manual(values = vik_colors) +
  scale_size_continuous(range = c(2, 15)) +
  labs(
    title = "Bubble Chart: Quantity vs Total Price\n(Size = Price per Unit)",
    x = "Quantity",
    y = "Total Price",
    size = "Price per Unit",
    color = "Region"
  ) +
  theme_minimal(base_size = 18) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 22),
    legend.position = "right"
  )

1.5.3 Correlation Matrix

# ==============================
# 1. Load Libraries
# ==============================
library(ggplot2)
library(dplyr)
library(reshape2)
library(scales)

# ==============================
# 2. Load and Prepare Data
# ==============================
data_bisnis <- read.csv("data_dv.csv", stringsAsFactors = FALSE)

# Pilih kolom numerik
numeric_data <- data_bisnis %>% select(where(is.numeric))

# Hitung korelasi Pearson
corr_matrix <- cor(numeric_data, use = "complete.obs")

# Konversi ke long format
corr_long <- melt(corr_matrix, varnames = c("Var1", "Var2"), value.name = "Correlation")

# Tetapkan urutan variabel agar simetris
var_order <- colnames(corr_matrix)
corr_long$Var1 <- factor(corr_long$Var1, levels = var_order)
corr_long$Var2 <- factor(corr_long$Var2, levels = var_order)

# ==============================
# 3. Plot Heatmap Besar
# ==============================
ggplot(corr_long, aes(x = Var1, y = Var2, fill = Correlation)) +
  geom_tile(color = "white", linewidth = 0.5) +
  geom_text(aes(label = sprintf("%.2f", Correlation)), size = 4.5, color = "black") +
  scale_fill_gradient2(
    low = "blue", mid = "white", high = "red", midpoint = 0,
    limits = c(-1, 1), name = "Correlation"
  ) +
  coord_fixed() +
  labs(title = "Correlation Matrix of Numeric Variables") +
  theme_minimal(base_size = 14) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, size = 12),
    axis.text.y = element_text(size = 12),
    axis.title = element_blank(),
    plot.title = element_text(hjust = 0.5, size = 18, face = "bold"),
    panel.grid = element_blank()
  )

1.6 Time Series

1.6.1 Line Chart

# Memuat library yang diperlukan
library(ggplot2)
library(dplyr)
library(lubridate)

# Membaca dataset
data <- read.csv("data_dv.csv")

# Mengonversi Transaction_Date ke format tanggal dan mengekstrak tahun-bulan
data <- data %>%
  mutate(Date = as.Date(Transaction_Date, format = "%Y-%m-%d"),
         YearMonth = floor_date(Date, "month")) %>%
  filter(!is.na(Total_Price) & Total_Price > 0 & !is.na(Date))  # Memastikan data valid

# Mengelompokkan data berdasarkan YearMonth, menghitung total penjualan
data_agg <- data %>%
  group_by(YearMonth) %>%
  summarise(Total_Sales = sum(Total_Price, na.rm = TRUE), .groups = "drop")

# Membuat line chart total penjualan per bulan
ggplot(data_agg, aes(x = YearMonth, y = Total_Sales)) +
  geom_line(size = 1.5, color = "steelblue") +
  geom_point(size = 2, color = "steelblue") +
  labs(
    title = "Total Sales Over Time",
    x = "Date",
    y = "Total Sales (USD)"
  ) +
  theme_minimal(base_size = 15) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 18),
    axis.title = element_text(size = 14),
    axis.text.x = element_text(angle = 45, hjust = 1),
    panel.grid.major = element_line(linetype = "dashed", color = "gray80")
  )

1.6.2 Area Chart

# ==============================
# 1. Load libraries
# ==============================
library(ggplot2)
library(dplyr)
library(lubridate)

# ==============================
# 2. Load and prepare data
# ==============================
df <- read.csv("data_dv.csv")  # pastikan path dan file-nya benar

# Pastikan nama kolom benar
str(df)  # Gunakan ini sekali untuk lihat nama-nama kolom
## 'data.frame':    500 obs. of  25 variables:
##  $ X                   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Transaction_ID      : chr  "7zmPHxF7XfN9" "y4bCY9pKTBWU" "8k0B7XX19Ykf" "l8ahQz5YNOKz" ...
##  $ Transaction_Date    : chr  "2021-07-14" "2020-11-16" "2023-03-22" "2023-01-02" ...
##  $ Customer_ID         : chr  "BAl3Y7yxev" "TYY0h5C190" "nUX640AaXg" "sBZyUSJLEP" ...
##  $ Product_Category    : chr  "Clothing" "Electronics" "Home" "Home" ...
##  $ Product_ID          : chr  "P0370" "P0185" "P0443" "P0035" ...
##  $ Quantity            : int  2 5 3 6 3 1 2 5 4 1 ...
##  $ Unit_Price          : num  15.2 10.2 17.7 28.3 11.9 ...
##  $ Discount            : num  0 0.15 0.05 0.22 0.13 0.07 0.3 0.23 0.27 0.09 ...
##  $ Region              : chr  "North" "West" "West" "North" ...
##  $ Sales_Channel       : chr  "Online" "Offline" "Online" "Offline" ...
##  $ Delivery_Time       : int  5 2 8 8 7 9 5 2 3 9 ...
##  $ Total_Price         : num  30.4 43.4 50.6 132.4 31.1 ...
##  $ Price_per_Unit      : num  15.18 8.69 16.85 22.07 10.36 ...
##  $ Efficiency          : num  0.4 2.5 0.375 0.75 0.429 ...
##  $ Feature_Interaction : num  0 0.75 0.15 1.32 0.39 0.07 0.6 1.15 1.08 0.09 ...
##  $ Cross_Term          : chr  "Clothing_North" "Electronics_West" "Home_West" "Home_North" ...
##  $ ID_Prefix           : chr  "P0" "P0" "P0" "P0" ...
##  $ ID_Length           : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ ID_HasPattern       : chr  "true" "true" "true" "true" ...
##  $ Discount_Level      : int  1 2 1 3 2 1 4 4 4 2 ...
##  $ Sales_Rank          : int  253 157 121 4 246 466 361 303 111 424 ...
##  $ Avg_Quantity_Region : num  2.99 3.12 3.12 2.99 2.99 ...
##  $ Sum_Sales_Region    : num  4865 4170 4170 4865 4865 ...
##  $ Count_Product_Region: int  141 120 120 141 141 141 120 113 113 113 ...
# Ubah nama kolom sesuai dengan yang ada di file
df$Date <- as.Date(df$Transaction_Date)  # ubah jika nama kolom beda
df$Year <- year(df$Date)

# Filter data valid
df_filtered <- df %>%
  filter(!is.na(Unit_Price), Unit_Price > 0, Year >= 2020, Year <= 2024)

# Aggregasi
data_agg <- df_filtered %>%
  group_by(Year, Sales_Channel) %>%
  summarise(Average_Unit_Price = mean(Unit_Price, na.rm = TRUE)) %>%
  ungroup()

# ==============================
# 3. Plot stacked area chart
# ==============================
ggplot(data_agg, aes(x = Year, y = Average_Unit_Price, fill = Sales_Channel)) +
  geom_area(alpha = 0.8, position = 'stack') +
  scale_fill_manual(values = c("Online" = "#0d0887", "Offline" = "#7e03a8")) +
  labs(
    title = "Average Unit Price per Year by Sales Channel",
    x = "Year",
    y = "Average Unit Price",
    fill = "Sales Channel"
  ) +
  theme_minimal(base_size = 15) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    legend.position = "top"
  )