Pertumbuhan supermarket di kota-kota terpadat semakin meningkat dan persaingan pasar juga tinggi. Dataset tersebut merupakan salah satu history penjualan perusahaan supermarket yang tercatat di 3 cabang berbeda selama 3 bulan data.
Terima kasih kepada semua yang meluangkan waktu dan energi untuk melakukan Kernel dengan dataset dan reviewer ini.
Dataset berasal dari : https://www.kaggle.com/datasets/aungpyaeap/supermarket-sales
Tujuan utama dari kursus ini adalah untuk memberikan pengenalan yang komprehensif untuk ilmu pemrograman statistik dan alat-alat yang diperlukan untuk berhasil dengan pekerjaan ilmu data.
Data Preparation atau bisa disebut juga dengan data preprocessing adalah suatu proses/langkah yang dilakukan untuk membuat data mentah menjadi data yang berkualitas.
Mengapa data perlu di-preprocessing?
Karena dalam data mentah masih terdapat data yang : Incomplete, Noisy, Inconcistent.
Sehingga “Jika data masukan tidak berkualitas, maka hasil data mining juga tidak akan berkualitas.” dan “Keputusan yang berkualitas pasti berasal/berdasarkan data yang berkualitas.”
Langkah-Langkah dalam data preparation :
Dalam data cleaning yang akan kita lakukan antara lain mengisi missing value, mengidentifikasi outlier, menangani data noise, mengoreksi data yang tidak konsisten, dan menyelesaikan masalah redudansi data akibat integrasi data.
Data integration adalah suatu langkah untuk menggabungkan data dari beberapa sumber. Data integration hanya dilakukan jika data berasal dari tempat yang berbeda-beda (sumber data tidak hanya dari 1 tempat). Langkah yang dilakukan antara lain mengintegrasikan skema, mengidentifikasi masalah entitas, dan mendeteksi sekaligus menyelesaikan konflik pada nilai data.
Data transformation yaitu mengubah suatu data supaya diperoleh data yang lebih berkualitas. Yang akan dilakukan antara lain menghilangkan noise dari data (smoothing), meng-agregasi data, generalisasi data, normalisasi data, dan pembentukan atribut/fitur.
Data Reduction yaitu langkah untuk mereduksi dimensi, atribut ataupun jumlah data. Yang akan dilakukan antara lain agregasi data cube, reduksi dimensi, diskretisasi, dan kompresi data.
Pertama-tama pastikan data yang ingin Anda gunakan, juga ada di direktori Anda saat ini, dan gunakan read.csv() untuk membaca file csv ke global enviroment Anda.
Namun, untuk menjaga agar proyek tetap teratur, saya sarankan Anda menyimpan skrip, file yang berfungsi, dan data dependennya di direktori yang sama.
supermaket_sales <- read.csv("supermarket_sales - Sheet1.csv")Melihat Tabel Data dari 6 baris paling atas dengan code ‘head()’ atau melihat 6 baris paling bawah dengan code ‘tail()’
Melihat 6 baris paling atas:
head(supermaket_sales)Melihat 6 baris paling bawah:
tail(supermaket_sales)Penjelasan Variable / Kolom:(terdapat 17 kolom)
1 Invoice ID = Computer generated sales slip invoice identification number.
2 Branch = Branch of supercenter (3 branches are available identified by A, B and C).
3 City = Location of supercenters.
4 Customer.type = Type of customers, recorded by Members for customers using member card and Normal for without member card.
5 Gender = Gender type of customer.
6 Product.line = General item categorization groups.
7 Unit.price = Price of each product in $.
8 Quantity = Number of products purchased by customer.
9 Tax.5. = 5% tax fee for customer buying.
10 Total = Total price including tax.
11 Date = Date of purchase.
12 Time = Purchase time.
13 Payment = Payment used by customer for purchase.
14 cogs = Cost of goods sold.
15 gross.margin.percentage = Gross margin percentage.
16 gross.income = Gross income.
17 Rating = Customer stratification rating on their overall shopping experience (On a scale of 1 to 10).
Fungsi dim() untuk mengetahui dimensi dari
dataframe.
dim(supermaket_sales)#> [1] 1000 17
Terdapat 1000 baris dan 17 kolom pada dataframe tersebut.
Panggil str() pada dataset ‘supermarket_sales’.
str(supermaket_sales)#> 'data.frame': 1000 obs. of 17 variables:
#> $ Invoice.ID : chr "750-67-8428" "226-31-3081" "631-41-3108" "123-19-1176" ...
#> $ Branch : chr "A" "C" "A" "A" ...
#> $ City : chr "Yangon" "Naypyitaw" "Yangon" "Yangon" ...
#> $ Customer.type : chr "Member" "Normal" "Normal" "Member" ...
#> $ Gender : chr "Female" "Female" "Male" "Male" ...
#> $ Product.line : chr "Health and beauty" "Electronic accessories" "Home and lifestyle" "Health and beauty" ...
#> $ Unit.price : num 74.7 15.3 46.3 58.2 86.3 ...
#> $ Quantity : int 7 5 7 8 7 7 6 10 2 3 ...
#> $ Tax.5. : num 26.14 3.82 16.22 23.29 30.21 ...
#> $ Total : num 549 80.2 340.5 489 634.4 ...
#> $ Date : chr "1/5/2019" "3/8/2019" "3/3/2019" "1/27/2019" ...
#> $ Time : chr "13:08" "10:29" "13:23" "20:33" ...
#> $ Payment : chr "Ewallet" "Cash" "Credit card" "Ewallet" ...
#> $ cogs : num 522.8 76.4 324.3 465.8 604.2 ...
#> $ gross.margin.percentage: num 4.76 4.76 4.76 4.76 4.76 ...
#> $ gross.income : num 26.14 3.82 16.22 23.29 30.21 ...
#> $ Rating : num 9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...
Penjelasan tipe data pada setiap kolom:
‘chr’ merupakan tipe data yang berisi huruf / character.
‘num’ merupakan tipe data numeric yang berisi angka yang dapat berupa angka kontinu (ada koma/pecahan), maupun diskrit (bilangan bulat tanpa koma).
‘int’ merupakan tipe data integer yang berisi angka yang berupa angka diskrit (bilangan bulat tanpa koma). Untuk memaksa numeric menjadi integer, dapat gunakan L dibelakang angka.
Dari Tipe data diatas ada beberapa yang tidak sesuai, sehingga harus diubah tipe datanya seperti:
Coding untuk melihat tipe data factor dapat melakukan seperti ini: (salah satu contoh)
length(supermaket_sales$Payment)#> [1] 1000
length(unique(supermaket_sales$Payment))#> [1] 3
Dimana artinya terdapat 1000 data ‘Payment’, namun unique nya cuma ada 3 levels saja.
supermaket_sales$Branch <- as.factor(supermaket_sales$Branch)
supermaket_sales$City <- as.factor(supermaket_sales$City)
supermaket_sales$Customer.type <- as.factor(supermaket_sales$Customer.type)
supermaket_sales$Gender <- as.factor(supermaket_sales$Gender)
supermaket_sales$Product.line <- as.factor(supermaket_sales$Product.line)
supermaket_sales$Payment <- as.factor(supermaket_sales$Payment)
supermaket_sales$Date <- as.Date(supermaket_sales$Date, "%m/%d/%Y")
str(supermaket_sales)#> 'data.frame': 1000 obs. of 17 variables:
#> $ Invoice.ID : chr "750-67-8428" "226-31-3081" "631-41-3108" "123-19-1176" ...
#> $ Branch : Factor w/ 3 levels "A","B","C": 1 3 1 1 1 3 1 3 1 2 ...
#> $ City : Factor w/ 3 levels "Mandalay","Naypyitaw",..: 3 2 3 3 3 2 3 2 3 1 ...
#> $ Customer.type : Factor w/ 2 levels "Member","Normal": 1 2 2 1 2 2 1 2 1 1 ...
#> $ Gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 2 1 1 1 1 ...
#> $ Product.line : Factor w/ 6 levels "Electronic accessories",..: 4 1 5 4 6 1 1 5 4 3 ...
#> $ Unit.price : num 74.7 15.3 46.3 58.2 86.3 ...
#> $ Quantity : int 7 5 7 8 7 7 6 10 2 3 ...
#> $ Tax.5. : num 26.14 3.82 16.22 23.29 30.21 ...
#> $ Total : num 549 80.2 340.5 489 634.4 ...
#> $ Date : Date, format: "2019-01-05" "2019-03-08" ...
#> $ Time : chr "13:08" "10:29" "13:23" "20:33" ...
#> $ Payment : Factor w/ 3 levels "Cash","Credit card",..: 3 1 2 3 3 3 3 3 2 2 ...
#> $ cogs : num 522.8 76.4 324.3 465.8 604.2 ...
#> $ gross.margin.percentage: num 4.76 4.76 4.76 4.76 4.76 ...
#> $ gross.income : num 26.14 3.82 16.22 23.29 30.21 ...
#> $ Rating : num 9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...
Fungsi anyNA() digunakan untuk mengetahui apakah pada
data terdapat missing value.
anyNA(supermaket_sales)#> [1] FALSE
Fungsi is.na() digunakan untuk mengecek missing value
pada setiap nilai. Fungsi colSums() digunakan untuk
menjumlahkan nilai pada setiap kolom.
colSums(is.na(supermaket_sales))#> Invoice.ID Branch City
#> 0 0 0
#> Customer.type Gender Product.line
#> 0 0 0
#> Unit.price Quantity Tax.5.
#> 0 0 0
#> Total Date Time
#> 0 0 0
#> Payment cogs gross.margin.percentage
#> 0 0 0
#> gross.income Rating
#> 0 0
Ketika tipe data kolom sudah tepat, dan data no missing value. Maka summary lebih informatif, dan data siap untuk diproses lebih lanjut dan dianalisa.
Fungsi summary() untuk mengetahui ringkasan/rangkuman
statistik dari dataframe.
summary(supermaket_sales)#> Invoice.ID Branch City Customer.type Gender
#> Length:1000 A:340 Mandalay :332 Member:501 Female:501
#> Class :character B:332 Naypyitaw:328 Normal:499 Male :499
#> Mode :character C:328 Yangon :340
#>
#>
#>
#> Product.line Unit.price Quantity Tax.5.
#> Electronic accessories:170 Min. :10.08 Min. : 1.00 Min. : 0.5085
#> Fashion accessories :178 1st Qu.:32.88 1st Qu.: 3.00 1st Qu.: 5.9249
#> Food and beverages :174 Median :55.23 Median : 5.00 Median :12.0880
#> Health and beauty :152 Mean :55.67 Mean : 5.51 Mean :15.3794
#> Home and lifestyle :160 3rd Qu.:77.94 3rd Qu.: 8.00 3rd Qu.:22.4453
#> Sports and travel :166 Max. :99.96 Max. :10.00 Max. :49.6500
#> Total Date Time Payment
#> Min. : 10.68 Min. :2019-01-01 Length:1000 Cash :344
#> 1st Qu.: 124.42 1st Qu.:2019-01-24 Class :character Credit card:311
#> Median : 253.85 Median :2019-02-13 Mode :character Ewallet :345
#> Mean : 322.97 Mean :2019-02-14
#> 3rd Qu.: 471.35 3rd Qu.:2019-03-08
#> Max. :1042.65 Max. :2019-03-30
#> cogs gross.margin.percentage gross.income Rating
#> Min. : 10.17 Min. :4.762 Min. : 0.5085 Min. : 4.000
#> 1st Qu.:118.50 1st Qu.:4.762 1st Qu.: 5.9249 1st Qu.: 5.500
#> Median :241.76 Median :4.762 Median :12.0880 Median : 7.000
#> Mean :307.59 Mean :4.762 Mean :15.3794 Mean : 6.973
#> 3rd Qu.:448.90 3rd Qu.:4.762 3rd Qu.:22.4453 3rd Qu.: 8.500
#> Max. :993.00 Max. :4.762 Max. :49.6500 Max. :10.000
Kesimpulan:
Penjualan terbanyak terjadi di cabang A > B > C.
Penjualan terbanyak terjadi di kota Yangon > Mandalay > Naypyitaw.
Customer.type yang Member lebih banyak daripada Normal.
Pembeli terbanyak bergender Female.
Product yang paling laku adalah Fashion accessories, dan yang kurang laku adalah Home and lifestyle.
Rata-rata harga product adalah $55.67
Rata-rata quantity product yang terjual 5.51 atau dibulatkan 6
Pembayarannya banyak menggunakan Ewallet.
Penilaian / rating terhadap supermarket tersebut memiliki rata-rata 6.973, sehingga perlu ditingkatkan lagi pelayanannya.
Melakukan Conditional Subsetting adalah teknik untuk mengambil
sebagian data yang diperlukan untuk proses analisis. Gunakan kurung siku
[] setelah nama object Untuk melakukan subsetting.
Berikut ilustrasinya:
supermaket_sales, ambil baris yang memiliki
Total lebih dari $200 lalu ambil kolom
Product.line beserta nilai Totalnya.supermaket_sales[supermaket_sales$Total > 200,
c("Product.line","Total")]Payment
menggunakan Credit card dan Ewallet?trans_1 <- supermaket_sales[supermaket_sales$Payment %in% c("Credit card", "Ewallet"),
c("Invoice.ID","Payment")]
trans_1nrow(trans_1)#> [1] 656
Jawaban: Terdapat 656 transaksi.
Gender perempuan yang membeli
Product.line Fashion accessories?persen_fa <- supermaket_sales[supermaket_sales$Product.line == "Fashion accessories", ]
round(prop.table(table(persen_fa$Gender))*100,2)#>
#> Female Male
#> 53.93 46.07
Jawaban: Female dengan persentase 53.93%.
Total yang dihasilkan dari masing-masing
Product.line dari setiap Customer.type.xtabs(formula = Total ~ Product.line + Customer.type,
data = supermaket_sales)#> Customer.type
#> Product.line Member Normal
#> Electronic accessories 24498.49 29839.04
#> Fashion accessories 26323.96 27981.93
#> Food and beverages 31357.62 24787.22
#> Health and beauty 25831.04 23362.70
#> Home and lifestyle 27978.03 25883.89
#> Sports and travel 28234.30 26888.53
Jawaban: Cutomer.type: Member dengan Product.line: Food and beverages, berjumlah 31357.62
supermaket_sales adalah data transaksi dari tahun
2019-01-01 sampai 2019-03-30. Anda diminta untuk menghitung jumlah Total
yang diperoleh pada setiap Product.line, namun hanya untuk order yang
terjadi pada bulan 02 tahun 2019 saja (Hint:
Date di antara tanggal “2019-02-01” dan “2019-02-28”)# conditional subsetting
supermaket_sales_feb <- supermaket_sales[supermaket_sales$Date >= "2019-02-01" & supermaket_sales$Date <= "2019-02-28",]
supermaket_sales_febPaymentdi setiap
kotannya Citypembayaran <- table(supermaket_sales$Payment, supermaket_sales$City)
pembayaran#>
#> Mandalay Naypyitaw Yangon
#> Cash 110 124 110
#> Credit card 109 98 104
#> Ewallet 113 106 126
Jawaban: Di kota Mandalay: Ewallet, kota Naypyitaw: Cash, dan kota Yangon: Ewallet
Ratingdi setiap cabang
Branchrating_bran <- aggregate(x = Rating ~ Branch,
data = supermaket_sales,
FUN = mean)
rating_branc <- order(rating_bran$Rating, decreasing = T)
rating_branch <- rating_bran[rating_branc, ]
rating_branchBeberapa bentuk grafik untuk melihat data yang ada, seperti:
Citygraphics::pie(xtabs(formula = ~City,
data = supermaket_sales))Product.linegraphics::pie(xtabs(formula = ~Product.line,
data = supermaket_sales))Gender dari setiap
Customer.type.plot(xtabs(Total ~ Gender + Customer.type,
supermaket_sales))Dataset terdiri dari history penjualan supermarket yang tercatat di 3 cabang berbeda selama 3 bulan, dapat digunakan untuk membantu pemilik / pengelola analisa.
Analisa yang digunakan seperti: Bagaimana penjualan yang terjadi, apa saja yang terjual, bagaimana rating supermarketnya, dan sebagainya.
Beberapa informasi dasar yang dapat diambil dari pengolahan data diatas, salah satunya adalah:
Terdapat 3 supermarket yaitu A, B, C
Tersebar di 3 lokasi yaitu Mandalay, Naypyitaw, Yangon.
Terdiri dari 2 tipe pembeli yaitu Member dan Normal.
Jenis pembayaran yang bisa digunakan yaitu Cash, Credit card, dan Ewallet.
Dan beberapa informasi menarik lainnya yang lebih mendetail, seperti:
Data terdiri dari 1000 transaksi(Invoice) selama 3 bulan.
Jenis Product yang paling laku adalah Fashion accessories, dengan persentasi pembelinya adalah female sebesar 53.93%. Sedangkan untuk jenis yang kurang diminati adalah Health and beauty.
Untuk rata-rata harga per barangnya adalah 55.23, dan harga barang termahalnya adalah 99.96 sedangkan harga yang termurahnya adalah 10.08.
Untuk rata-rata barang yang terjual adalah 5.51 pcs, dan paling banyak adalah 10pcs.
Total pendapatan dari 3 bulan dan 3 supermarket tersebut adalah 1042.65.
Untuk urutan penilaian dari masing masing branch adalah C dengan 7.07, A dengan 7.03, dan B dengan 6.82
Rekomendasi: Sebagai seorang data Analysist dapat memberikan insight sederhana kepada pengelola supermarket tersebut, dengan meningkatkan kinerja supermarket di setiap branch nya. Karena dirasa penilaian tersebut masih bisa untuk ditingkatkan lagi. Bisa dilakukannya kerjasama dengan pihak lainnya agar penjualan dan penilaian nya meningkat. Mungkin dengan melakukan promosi / discount / advertising dan lain sebagainya.