Tentang Dataset
Dataset penjualan Adidas adalah kumpulan data yang mencakup informasi tentang penjualan produk Adidas. Jenis kumpulan data ini dapat mencakup perincian seperti jumlah unit yang terjual, total pendapatan penjualan, lokasi penjualan, jenis produk yang dijual, dan informasi terkait lainnya.
Data penjualan Adidas dapat berguna untuk berbagai tujuan, seperti menganalisis tren penjualan, mengidentifikasi produk atau kampanye pemasaran yang berhasil, dan mengembangkan strategi untuk penjualan di masa mendatang. Ini juga dapat digunakan untuk membandingkan penjualan Adidas dengan pesaing, atau untuk menganalisis keefektifan saluran pemasaran atau penjualan yang berbeda.
Ada berbagai sumber yang berpotensi menyediakan kumpulan data penjualan Adidas, termasuk Adidas itu sendiri, firma riset pasar, lembaga pemerintah, atau organisasi lain yang melacak data penjualan. Poin data spesifik yang disertakan dalam kumpulan data penjualan Adidas dapat bervariasi tergantung pada sumber dan tujuan penggunaannya.
library(readxl)
library(ggplot2)
library(scales)
library(rgdal)
library(leaflet)
library(geojsonio)
library(lubridate)
library(glue)
library(dplyr)
library(tidyr)Load Data
Load USA geojson
states <- geojsonio::geojson_read("https://rstudio.github.io/leaflet/json/us-states.geojson",
what = "sp")Load Data Adidas Sales 2020 - 2021
data <- read_excel('Adidas US Sales Datasets.xlsx',
skip = 2)Tentang Data
Struktur Data
head(data, 2)#> # A tibble: 2 × 13
#> Retai…¹ Retai…² `Invoice Date` Region State City Product Price…³ Units…⁴
#> <chr> <dbl> <dttm> <chr> <chr> <chr> <chr> <dbl> <dbl>
#> 1 Foot L… 1185732 2020-01-01 00:00:00 North… New … New … Men's … 50 1200
#> 2 Foot L… 1185732 2020-01-02 00:00:00 North… New … New … Men's … 50 1000
#> # … with 4 more variables: `Total Sales` <dbl>, `Operating Profit` <dbl>,
#> # `Operating Margin` <dbl>, `Sales Method` <chr>, and abbreviated variable
#> # names ¹Retailer, ²`Retailer ID`, ³`Price per Unit`, ⁴`Units Sold`
str(data)#> tibble [9,648 × 13] (S3: tbl_df/tbl/data.frame)
#> $ Retailer : chr [1:9648] "Foot Locker" "Foot Locker" "Foot Locker" "Foot Locker" ...
#> $ Retailer ID : num [1:9648] 1185732 1185732 1185732 1185732 1185732 ...
#> $ Invoice Date : POSIXct[1:9648], format: "2020-01-01" "2020-01-02" ...
#> $ Region : chr [1:9648] "Northeast" "Northeast" "Northeast" "Northeast" ...
#> $ State : chr [1:9648] "New York" "New York" "New York" "New York" ...
#> $ City : chr [1:9648] "New York" "New York" "New York" "New York" ...
#> $ Product : chr [1:9648] "Men's Street Footwear" "Men's Athletic Footwear" "Women's Street Footwear" "Women's Athletic Footwear" ...
#> $ Price per Unit : num [1:9648] 50 50 40 45 60 50 50 50 40 45 ...
#> $ Units Sold : num [1:9648] 1200 1000 1000 850 900 1000 1250 900 950 825 ...
#> $ Total Sales : num [1:9648] 600000 500000 400000 382500 540000 ...
#> $ Operating Profit: num [1:9648] 300000 150000 140000 133875 162000 ...
#> $ Operating Margin: num [1:9648] 0.5 0.3 0.35 0.35 0.3 0.25 0.5 0.3 0.35 0.35 ...
#> $ Sales Method : chr [1:9648] "In-store" "In-store" "In-store" "In-store" ...
insight : the dataframe mempunyai 9648 baris dan 15 kolom
Deskripsi Kolom :
Retailer: Nama RetailerRetailer ID: ID RetailerInvoice Date: Tanggal Invoice / Transaksi / TagihanRegion: Wilayah (di USA)State: Negara Bagian (di USA)City: Kota (di USA)Product: Nama / Kategori ProdukPrice Per Unit: Harga Per UnitUnits Sold: Unit Terjual / Transaksi (invoice)Total Sales: Total Pendapatan / Transaksi (invoice)Operating Profit: Profit OperationalOperating Margin: Margin OperationalSales Method: Metode PenjualanDensity: polygon dalam peta
Missing Data
anyNA(data)#> [1] FALSE
Insight : Tidak ada missing data dalam dataframe yang kita baca
sum(duplicated(data))#> [1] 0
Insight : Tidak ada duplicate data terdeteksi
Data Processing
Mengganti tipe data :
Retailer: ganti ke factorInvoice Date: ganti ke date/datetimeRegion: ganti ke date/datetimeState: ganti ke factorCity: ganti ke factorProduct: ganti ke factorSales Method: ganti ke factor
Feature Engineering :
- buat fitur year_invoice
- buat fitur month_invoice
- buat fitur day_invoice
# Feature Engineering
data$Retailer <- factor(data$Retailer)
data$`Sales Method` <- factor(data$`Sales Method`)
data$Region <- factor(data$Region)
data$State <- factor(data$State)
data$City <- factor(data$City)
data$Product <- factor(data$Product)
data$year_invoice <- year(data$`Invoice Date`)
data$month_invoice <- month(data$`Invoice Date`)
data$day_invoice <- day(data$`Invoice Date`)Exploratory Data Analysis
Tipe Retailer
Berapa banyak tipe Retailer / Pengecer yang ada dalam data ini ?
glue("Banyaknya Pengecer / Retailer : {length(unique(data$Retailer))}")#> Banyaknya Pengecer / Retailer : 6
Tipe Method Sales
Berapa banyak tipe Method Sales / Metode penjualan dalam data ini
glue("Banyaknya Metode Penjualan : {length(unique(data$`Sales Method`))}")#> Banyaknya Metode Penjualan : 3
Tipe Product
Berapa banyak tipe Product / Produk dalam data ini
glue("Banyaknya produk tipe : {length(unique(data$Product))}")#> Banyaknya produk tipe : 6
Karakteristik Total Sales dan Unit Sold
par(mfrow=c(3,1))
boxplot(data$`Total Sales`,
xlab = "Total Sales In USD",
ylab = "",
main = "Total Sales Distribution Data", horizontal = T)
boxplot(data$`Units Sold`,
xlab = "Units Sold",
ylab = "",
main = "Units Sold Distribution Data", horizontal = T)
boxplot(x = data$`Price per Unit`,
xlab = "Price Per Unit",
ylab = "",
main = "Price Per Unit Distribution Data",
horizontal = T)summary(data$`Units Sold`)#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.0 106.0 176.0 256.9 350.0 1275.0
summary(data$`Total Sales`)#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0 4254 9576 93273 150000 825000
summary(data$`Price per Unit`)#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 7.00 35.00 45.00 45.22 55.00 110.00
Insight : ….
Total Sales :
- Nilai total pendapatan banyak terjadi diantara rentang nilai, 4254 USD - 150000 USD
- terdapat banyak outlier dengan total pendapatan yang besar, ada kecenderungan bahwa penjualan naik turun dan musiman
Total Unit Sold :
- Nilai total unit yang terjual banyak terjadi diatara rentang nilai, 106 Unit - 256 Unit
- terdapat outlier pada unit terjual, ada kecenderungan yang berbanding lurus dengan kesimpulan total pendapatan sesuai dengan insight diatas
Total Price Per Unit :
- Nilai Harga per unit banyak terjadi di antara rentang nilai, 35 USD - 55 USD, bisa dikatakan ini adalah rentang buying power konsumen ketika membeli produk adidas
Data Relation
Hubungan Unit Sold dan Total Sales pada produk “Men’s Athletic Footwear”
plot(x = data[data$Product == "Men's Athletic Footwear",]$`Total Sales`,
y = data[data$Product == "Men's Athletic Footwear", ]$`Units Sold`,
ylab = "Unit Sold",
xlab = "Total Sales",
main = "Unit Sold VS Total Sales")cor(x = data[data$Product == "Men's Athletic Footwear",]$`Total Sales`,
y = data[data$Product == "Men's Athletic Footwear", ]$`Units Sold`)#> [1] 0.9243835
insight :
- Unit Sold dan Total Sales
mempunyai relasi yang pada produk
Men's Athletic Footwear - bisa dikatakan semakin banyak unit yang terjual dapat meningkatkan total pendapatan
Ranking Product by Total Sales
rank_sales <- aggregate(x = `Total Sales` ~ Product, data = data, FUN = sum)
rank_sales <- rank_sales[order(rank_sales$`Total Sales`, decreasing = F), ]
par(mar=c(8,12,1,1))
barplot(rank_sales$`Total Sales`, names.arg = rank_sales$Product, las=2, horiz = T)
Insight : ….
- Men’s Street Footwear punya total pendapatan yang lebih besar dari produk yang lain
- Women’s Athletic Footwear punya total pendapatan sales yang lebih sedikit dibanding produk yang lain
Ranking Product by Units Sold
rank_unit_sold <- aggregate(x = `Units Sold` ~ Product, data = data, FUN = sum)
rank_unit_sold <- rank_unit_sold[order(rank_unit_sold$`Units Sold`, decreasing = F), ]
par(mar=c(8,12,1,1))
barplot(rank_unit_sold$`Units Sold`, names.arg = rank_unit_sold$Product, las=2, horiz = T)Insight : ….
- Men’s Street Footwear mempunyai nilai unit terjual yang lebih besar dari produk yang lain
- Men’s Apparel mempunyai nilai uni terjual yang lebih kecil dari produk yang lain
rank_sales_retailer <- aggregate(x = `Total Sales` ~ Retailer, data = data, FUN = sum)
rank_sales_retailer <- rank_sales_retailer[order(rank_sales_retailer$`Total Sales`, decreasing = F), ]
par(mar=c(8,12,1,1))
barplot(rank_sales_retailer$`Total Sales`, names.arg = rank_sales_retailer$Retailer, las=2, horiz = T)Insight : ….
- West Gear mempunyai total pendapatan yang lebih besar dari pada Retailer yang lain
- Walmart mempunyai total pendatapan yang lebih kecil dari pada Retailer yang lain
rank_sales_method <- aggregate(x = `Total Sales` ~ `Sales Method`, data = data, FUN = sum)
rank_sales_method <- rank_sales_method[order(rank_sales_method$`Total Sales`, decreasing = F), ]
par(mar=c(8,12,1,1))
barplot(rank_sales_method$`Total Sales`, names.arg = rank_sales_method$`Sales Method`, las=2, horiz = T)Insight : ….
- In-store mempuyai total pendapatan yang lebih besar dari metode penjualan yang lain
- Online mempunyai total pendapatan yang lebih sedikit dari metode penjualan yang lain
sales_perfomance <- aggregate(x = Product ~ month_invoice, data = data[data$year_invoice == 2021, ], FUN = length)
plot(x = sales_perfomance$month_invoice,
y = sales_perfomance$Product,
xlab = "Month",
ylab = "Frequency",
ylim = range(650, 800),
main ="Sales Performance 2021",
type = 'b')insight : ….
- Performa penjualan pada tahun 2021, cenderung naik turun
Explanatory + Business Question
Manakah Retailer yang paling baik dari Segi Total Pendapatan ?
total_sales <- sum(data$`Total Sales`)
market_share <- data %>%
group_by(Retailer) %>%
summarise(percent = round(sum(`Total Sales`)/total_sales * 100),
total_sales = sum(`Total Sales`)) %>%
mutate(label = glue("{Retailer} ({percent}%)"))
pie(market_share$percent ,
labels = market_share$label,
col = c("#30CEFD", "#00C0EF","#0099C6", "#00749F", "#005079", "#002F55"), main = "Market Share Retailer By Total Sales in 2020 - 2021")market_share[order(market_share$percent, decreasing = T), ]#> # A tibble: 6 × 4
#> Retailer percent total_sales label
#> <fct> <dbl> <dbl> <glue>
#> 1 West Gear 27 242964333 West Gear (27%)
#> 2 Foot Locker 24 220094720 Foot Locker (24%)
#> 3 Sports Direct 20 182470997 Sports Direct (20%)
#> 4 Kohl's 11 102114753 Kohl's (11%)
#> 5 Amazon 9 77698912 Amazon (9%)
#> 6 Walmart 8 74558410 Walmart (8%)
Answer :
- West Gear menduduki posisi 1 dengan market share sebesar 27% dengan nilai pendapata / sales sebesar 242.964.333 USD
Manakah Produk dan Metode Penjualan yang paling baik dari Segi Total Pendapatan ?
sales_rank_by_product <- data %>% group_by(Product, `Sales Method`) %>%
summarise(total_product_sales = sum(`Total Sales`)) %>%
arrange(-total_product_sales) %>%
mutate(urutan = rank(x = total_product_sales, ties.method = "first"))
product_ranking_sales_plot <- ggplot(data = sales_rank_by_product, aes(x = total_product_sales,
y = reorder(Product, total_product_sales))) + # menambahkan tooltip dari glue
geom_col(aes(fill = `Sales Method`, group=urutan, ), position = 'dodge') +
scale_fill_manual(values =c("#00C0EF", "#0099C6","#00749F")) +
scale_x_continuous(labels = label_number(big.mark = ".", suffix = " M USD", scale = 1e-6)) +
labs(title = "",
x = "Total Sales",
y = "Product") +
theme_minimal()
product_ranking_sales_plot
Answer :
- Men’s Street Footwear menjadi Produk terbaik berdasarkan total pendapatan, dengan metode penjualan in store terbanyak
- Women’s Athletic Footwear menjadi Produk terburuk berdasarkan total pendapatan
- Metode Penjualan In-store cenderung lebih baik dari metode penjualan lainnya secara total sales, pada tiap produk, sebaliknya dengan metode Online
Apakah Total Pendapatan naik per tahun ?
data_per_year <- data %>%
group_by(year_invoice, Product) %>%
summarise(total_sales_line = sum(`Total Sales`), total_sold_unit = sum(`Units Sold`)) %>%
ungroup() %>%
arrange(-total_sales_line)
line_plot_per_year <- ggplot(data = data_per_year,
mapping = aes(x = year_invoice,
y = total_sales_line, color = Product)) +
geom_line() +
geom_point() +
scale_y_continuous(labels = label_number(big.mark = ".", suffix = " USD")) +
scale_x_continuous(breaks = seq(min(data$year_invoice), max(data$year_invoice), 1)) +
theme_minimal() +labs(title = "Performa Total Pendapatan dari Tahun ke Tahun",
x = "Year",
y = "Total Sales")
line_plot_per_yearAnswer :
- total pendapatan naik secara signifikan pada tahun 2021 dibandingkan tahun lalu (2020)
- kenaikan total pendapat naik di semua produk
Bagaimana Performan Penjualan pada tahun 2021 ?
data_line_year <- data %>%
filter(year_invoice == 2021) %>%
group_by(month_invoice, Product) %>%
summarise(total_sales_line = sum(`Total Sales`), total_sold_unit = sum(`Units Sold`)) %>%
ungroup() %>%
arrange(-total_sales_line)
plot3 <- ggplot(data = data_line_year,
mapping = aes(x = month_invoice,
y = total_sales_line, color = Product)) +
geom_line() +
geom_point() +
scale_y_continuous(labels = label_number(big.mark = ".", suffix = " USD")) +
scale_x_continuous(breaks = seq(1, 12, 1), labels = c("Jan",
"Feb",
"March",
"April",
"May",
"June",
"July",
"Aug",
"Sept",
"Oct",
"Nov",
"Des"
))+
theme_minimal() +labs(title = "Performa Total Sales Tahun 2021",
x = "Bulan",
y = "Total Sales")
plot3Answer :
- total pendapatan per bulan pada tiap produk fluktuatif
Bagaimana Karakteristik berdasarkan Harga per unit
box_plot <- ggplot(data, aes(y=Product, x=`Price per Unit`, fill=Product)) +
geom_boxplot() +
theme_minimal() +labs(title = "Karakteristik Produk Berdasarkan Price Per Unit",
x = "Price Per Unit",
y = "Product")
box_plotAnswer :
- Secara keseluruhan dapat dilihat banyak transaksasi dengan price per unit di rentang 40 - 50
- Women’s Apparel dan Men’s Apparel mempunyai karakteristik nilai price per unit yang tinggai diantara yang lain
Bagaimana Karakteristik Total Pendapatan per kota
merge dataframe reference by State (Adidas Sales Dataframe + USA Geojson Dataframe)
data_map1 <- data %>% group_by(State) %>% summarise(total_sales_state = sum(`Total Sales`))
data_baru <- merge(y = data_map1, x= states, by.y = 'State', by.x = 'name')
m <- leaflet(data_baru) %>%
setView(-96, 37.8, 4) %>%
addProviderTiles("MapBox", options = providerTileOptions(
id = "mapbox.light",
accessToken = Sys.getenv('MAPBOX_ACCESS_TOKEN')))
bins <- c(10000,5000000,10000000,15000000,20000000,Inf)
pal <- colorBin(c("#30CEFD", "#00C0EF","#0099C6", "#00749F", "#005079", "#002F55", "#002F55"), domain = data_baru$total_sales_state, bins = bins)
labels <- sprintf(
"<strong>%s</strong><br/>%s</sup>",
data_baru$name, glue("{comma(data_baru$total_sales_state)} USD")
) %>% lapply(htmltools::HTML)
m %>% addPolygons(
fillColor = ~pal(data_baru$total_sales_state),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.5,
highlightOptions = highlightOptions(
weight = 2,
color = "#666",
dashArray = "",
fillOpacity = 0.1,
bringToFront = TRUE),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")) %>% addLegend(pal = pal, values = ~total_sales_state, opacity = 0.7, title = NULL,
position = "bottomright")Answer :
- total pendapatan paling banyak berada pada kota kota besar dengan nilai total pendapatan lebih dari 20.000.000 USD
Ringkasan & Kesimpulan
- Penjualan dari tahun 2020 ke 2021 meningkat signifikan di setiap product
- Market share terbesar dipegang oleh West Gear dengan 27% dari Semua transaksi yang terjadi dari tahun 2020 - 2021
- Men’s Street Footwear menjadi product dengan total pendapatan yang paling besar diantara yang lain dari tahun 2020 - 2021
- Women’s Athletic Footwear punya total pendapatan sales yang lebih sedikit dibanding produk yang lain
- Metode Penjualan In-Store menjadi paling diminati oleh customer, sedangkan Online menjadi yang terkecil
- Penjualan per bulan cenderung fluktuatif pada tahun 2021, di semua product
- terdapat korelasi yang kuat antara Total pendapatan dengan unit terjual
- Nilai total pendapatan banyak terjadi diantara rentang nilai, 4254 USD - 150000 USD
- Nilai total unit yang terjual banyak terjadi diatara rentang nilai, 106 Unit - 256 Unit
- Nilai Harga per unit banyak terjadi di antara rentang nilai, 35 USD - 55 USD, bisa dikatakan ini adalah rentang buying power konsumen ketika membeli produk adidas
- secara geografis penjualan dengan total pendapatan besar hanya terjadi di kota kota besar