Ini adalah Learning By Building Project untuk materi P4DS. Data yang digunakan untuk analisis ini adalah laporan penjualan dari tech shop dalam durasi 3 bulan (Januari - Maret). Pada data ini terdapat informasi tentang Order ID, Product, Quantity Order, Price, Order Date, dan Purchase Address. Analisis ini akan dipisahkan menjadi 5 bagian:
Mari telusuri hasil dari data 3 bulan ini.
Sebelum melangkah lebih jauh, memiliki tujuan yang jelas adalah suatu keharusan dalam analisis. Ada beberapa pertanyaan bisnis sebagai tujuan utama kita yang harus kita jawab.
Pertama, mari kita baca datanya. Data asli dibagi menjadi 3 bagian, mari kita baca dan buat menjadi satu objek.
# MEMBACA DATA
janu <- read.csv("data_input/Sales_January_2019.csv")
febu <- read.csv("data_input/Sales_February_2019.csv")
mare <- read.csv("data_input/Sales_March_2019.csv")
sales <- rbind(janu,febu,mare)Mari kita amati tipe datanya, dan ubah menjadi tipe yang cocok.
str(sales)## 'data.frame': 36985 obs. of 6 variables:
## $ Order.ID : chr "141234" "141235" "141236" "141237" ...
## $ Product : chr "iPhone" "Lightning Charging Cable" "Wired Headphones" "27in FHD Monitor" ...
## $ Quantity.Ordered: chr "1" "1" "2" "1" ...
## $ Price.Each : chr "700" "14.95" "11.99" "149.99" ...
## $ Order.Date : chr "01/22/19 21:25" "01/28/19 14:15" "01/17/19 13:33" "01/05/19 20:33" ...
## $ Purchase.Address: chr "944 Walnut St, Boston, MA 02215" "185 Maple St, Portland, OR 97035" "538 Adams St, San Francisco, CA 94016" "738 10th St, Los Angeles, CA 90001" ...
#mengkopi data dari data aslinya
sales_clean <- sales
#merubah tipe data
sales_clean$Quantity.Ordered <- as.integer(sales_clean$Quantity.Ordered)## Warning: NAs introduced by coercion
sales_clean$Price.Each <- as.numeric(sales_clean$Price.Each)## Warning: NAs introduced by coercion
sales_clean$Product <- as.factor(sales_clean$Product)
sales_clean$Order.Date <- as.POSIXct(sales_clean$Order.Date, format = "%m/%d/%y %H:%M")Periksa tipe data setelah konversi.
str(sales_clean)## 'data.frame': 36985 obs. of 6 variables:
## $ Order.ID : chr "141234" "141235" "141236" "141237" ...
## $ Product : Factor w/ 21 levels "","20in Monitor",..: 12 15 21 4 21 7 3 19 9 8 ...
## $ Quantity.Ordered: int 1 1 2 1 1 1 1 1 1 1 ...
## $ Price.Each : num 700 14.9 12 150 12 ...
## $ Order.Date : POSIXct, format: "2019-01-22 21:25:00" "2019-01-28 14:15:00" ...
## $ Purchase.Address: chr "944 Walnut St, Boston, MA 02215" "185 Maple St, Portland, OR 97035" "538 Adams St, San Francisco, CA 94016" "738 10th St, Los Angeles, CA 90001" ...
Mari amati data kita, dan periksa apakah ada nilai yang hilang.
colSums(is.na(sales_clean))## Order.ID Product Quantity.Ordered Price.Each
## 0 0 164 164
## Order.Date Purchase.Address
## 164 0
Ada 164 nilai yang hilang di kolom Order.Date. Mari kita lihat lebih dalam.
isna_data <- is.na(sales_clean)Data dengan nilai yang hilang adalah data kosong (tanpa informasi), tidak apa-apa jika kita membuang barisnya.
sales_clean <- na.omit(sales_clean)
anyNA(sales_clean)## [1] FALSE
Sekarang data tidak memiliki baris dengan nilai yang hilang.
Setelah kita mendapatkan data yang bersih, kita dapat memproses data tersebut untuk mendapatkan insight darinya. Kita dapat menggunakan summary() untuk mendapatkan wawasan cepat dari data kita.
summary(sales_clean)## Order.ID Product Quantity.Ordered
## Length:36821 USB-C Charging Cable : 4455 Min. :1.000
## Class :character Lightning Charging Cable: 4216 1st Qu.:1.000
## Mode :character AAA Batteries (4-pack) : 4051 Median :1.000
## AA Batteries (4-pack) : 3990 Mean :1.123
## Wired Headphones : 3702 3rd Qu.:1.000
## Apple Airpods Headphones: 3132 Max. :7.000
## (Other) :13275
## Price.Each Order.Date Purchase.Address
## Min. : 2.99 Min. :2019-01-01 03:07:00.00 Length:36821
## 1st Qu.: 11.95 1st Qu.:2019-01-30 12:38:00.00 Class :character
## Median : 14.95 Median :2019-02-21 12:45:00.00 Mode :character
## Mean : 184.37 Mean :2019-02-19 13:28:53.86
## 3rd Qu.: 150.00 3rd Qu.:2019-03-13 09:14:00.00
## Max. :1700.00 Max. :2019-04-01 03:21:00.00
##
Dari ringkasan ini, kita dapat berasumsi bahwa: 1. Ada 36821 transaksi dari Januari hingga Maret 2. Barang termurah yang dijual di toko teknologi ini adalah $2,99 dan yang termahal adalah $1700 - Kami akan mengamati harga untuk setiap item nanti. 3. Produk kuantitas tertinggi yang dijual adalah Kabel Pengisi Daya USB-C - Mungkin orang cenderung membeli kabel charger, karena merupakan salah satu kabel universal yang dapat mengisi daya setiap perangkat yang kita miliki dan tentunya akan lebih baik jika ada cadangan, atau mungkin harga kabel charger cukup terjangkau di toko ini.
# agregasi data
product_price <- aggregate( x = Price.Each ~ Product, data = sales_clean, FUN = mean)
# membuat salinan data secara decending
product_price_ordered <- order(product_price$Price.Each,decreasing = TRUE)
product_price[product_price_ordered,]Dari tabel agregat tersebut, kita mengetahui bahwa produk yang paling mahal adalah Laptop Macbook Pro, dan barang yang paling murah adalah Baterai AAA (4-pack)
Untuk menjawab pertanyaan ini, kita membutuhkan kolom tambahan untuk total penjualan di setiap transaksi. Kolom total_sales ini bisa kita buat dengan mengalikan Price.Each dan Quantity.Ordered
sales_clean$total_sales <- sales_clean$Price.Each * sales_clean$Quantity.Ordered
head(sales_clean)Sekarang kami memiliki informasi total penjualan untuk setiap transaksi. Mari kita hitung berapa penghasilan toko dalam 3 bulan.
sum(sales_clean$total_sales)## [1] 6827880
Jika kita mengasumsikan mata uang yang digunakan dalam data adalah USD, maka dalam 3 bulan toko teknologi tersebut telah memperoleh penjualan kumulatif sebesar $6.827.880.
Untuk menjawab pertanyaan ini, kita harus membuat kolom ekstra yang berisi informasi tentang Hari dan Bulan. Untungnya kami memiliki informasi waktu untuk setiap transaksi. Mari ekstrak informasi dari kolom Order.Date. Untuk membantu proses kami, kami akan menggunakan paket lubridate.
library(lubridate)##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
sales_clean$monthname <- month(sales_clean$Order.Date, label = TRUE, abbr = F)
sales_clean$dayname <- wday(sales_clean$Order.Date, label = T)
head(sales_clean)Sekarang kita bisa membuat tabel agregasi untuk total penjualan setiap bulan atau setiap hari.
monthly_sales <-
aggregate(x = total_sales~monthname, data = sales_clean, FUN = sum)
monthly_salesAgar lebih mudah, mari gunakan visualisasi sederhana untuk membandingkan penjualan di setiap bulan.
barplot(height=monthly_sales$total_sales, names=monthly_sales$monthname,xlab = " TOTAL PENJUALAN PERBULAN", border="#69b3a2", col= c("green", "yellow", "red"))
Dari tabel dan grafik diketahui bahwa: - Penjualan dari Januari hingga
Maret meningkat - Total penjualan tertinggi adalah pada bulan Maret
dailysales <- data.frame(xtabs(formula = ~dayname, data = sales_clean))
dailysales# pENJUALAN HARIAN BERDASARKAN FREKUENSI
daily_ordered <- order(dailysales$Freq, decreasing = T)
dailysales <- dailysales[daily_ordered,]
dailysalesbarplot(dailysales$Freq, names=dailysales$dayname, xlab = " TOTAL TRANSAKSI PER HARI", col=c("red", "orange", "yellow", "green", "blue", "pink", "purple"))
Dari data tersebut kita mengetahui bahwa: - Orang cenderung berbelanja
di akhir pekan (Sabtu dan Minggu)
Pertama, kita harus mengekstrak informasi wilayah dari kolom Purchase.Addres, dan menetapkan wilayah kolom baru di dalamnya.
library(stringr)
sales_clean$region <- word(sales_clean$Purchase.Address, 2, sep = fixed(","))
sales_clean$region <- trimws(sales_clean$region, which = c("left"))
sales_clean$region <- as.factor(sales_clean$region)
head(sales_clean)Sekarang kita bisa membuat tabel agregasi berdasarkan kota masing-masing.
region_transaction <- data.frame(xtabs(formula = ~region, data = sales_clean))
region_transaction_ordered <- order(region_transaction$Freq, decreasing=TRUE)
region_transaction <- region_transaction[region_transaction_ordered,]
region_transactionbarplot(region_transaction$Freq, names=region_transaction$region, xlab = " TOTAL TRANSAKSI PER KOTA", col=c("red", "orange", "yellow", "green", "blue", "pink", "purple"), horiz = F)
Dari data tersebut diketahui bahwa: - Total transaksi kota San Francisco
adalah yang tertinggi, tercatat lebih dari 8000 transaksi dalam 3
bulan.
Kami memulai analisis kami dengan pertanyaan, sekarang mari kita jawab
Itu akan menjadi ringkasan dari laporan analisis kami. Penelitian lebih lanjut dengan data yang lebih lengkap dan metode analisis yang tepat sangat mungkin dilakukan.