# Question 1: Data Preparation and Inspection
# (i) Create separate vectors

product<-c("Laptop", "Smartphone", "Tablet", "Headphones", "Smartwatch", "Printer", 
           "Keyboard", "Monitor")
unit_price <- c(185000, 95000, 68000, 12500, 28000, 42000, 8500, 56000)
units_sold <- c(35, 80, 45, 160,90, 38, 210, 52)
unit_cost <- c(150000, 76000, 52000, 6500,19000, 33000, 4200, 43000)
advertising_cost <- c(180000, 220000, 90000, 60000, 85000, 45000, 50000, 75000)
orders <- c(35, 78, 44, 150, 88, 36, 200, 50)
returned_orders <- c(2, 5, 2, 12, 6, 3, 8, 2)

# (ii) Combine vectors into a data frame

        product_data <- data.frame (
        product, 
        unit_price,
        units_sold, 
        unit_cost,
        advertising_cost, 
        orders, 
        returned_orders
        )

# (iii) Inspect the data frame
cat("First five records:\n")
print(head(product_data, 5))
cat("\nNumber of rows and columns:\n")
print(dim(product_data))
cat("Rows: ", nrow(product_data), ", Columns: ", ncol(product_data), "\n", sep = "")
cat("\nVariable names:\n")
print(names(product_data))
cat("\nStructure of the data frame:\n")
str(product_data)

# Question 2: Financial Performance Calculations

# (i) Sales Revenue
product_data$revenue <- product_data$unit_price * product_data$units_sold

# (ii) Cost of Goods sold
product_data$cogs <- product_data$unit_cost * product_data$units_sold

# (iii) Gross Profit
product_data$gross_profit <- product_data$revenue - product_data$cogs

# (iv) Net Contribution
product_data$net_contribution <- product_data$gross_profit - product_data$advertising_cost

# (v) Profit Margin
product_data$profit_margin <- round (product_data$net_contribution / product_data$revenue * 100,2)

# (vi) Return Rate
product_data$return_rate <- round (product_data$returned_orders / product_data$orders * 100,2)

# Display Updated Data frame
cat("\nUpdated data frame:\n")
print(product_data)


# Question 3: Descriptive analysis

# (i) Total Financial Performance
cat("Total revenue:", sum(product_data$revenue), "\n")
cat("Total COGS:", sum(product_data$cogs), "\n")
cat("Total gross profit:", sum(product_data$gross_profit), "\n")
cat("Total net contribution:", sum(product_data$net_contribution), "\n")

# (ii) Mean and Median Net Contribution
cat("Mean net contribution:", mean(product_data$net_contribution), "\n")
cat("Median net contribution:", median(product_data$net_contribution), "\n")

# (iii) Highest and Lowest Net Contribution
cat("Highest net contribution:", max(product_data$net_contribution), "from",  product_data$product[which.max(product_data$net_contribution)], "\n")

cat("Lowest net contribution:", min(product_data$net_contribution), "from",   product_data$product[which.min(product_data$net_contribution)], "\n")

# (iv) Maximum and Minimum Return Rates
cat("Maximum return rate:", max(product_data$return_rate), "\n")
cat("Minimum return rate:", min(product_data$return_rate), "\n")

# (v) Sort Net Contributions in Ascending Order Net contribution Range
cat("Sorted net contributions (ascending):\n")
print(sort(product_data$net_contribution))
cat("Net contribution range:", diff(range(product_data$net_contribution)), "\n")



# Question 4: Conditional Statements and Business Classification

# Create empty vectors
profitability <- character(nrow(product_data))
return_risk <- character(nrow(product_data))

# (i) Product Profitability Classification

for (i in 1:nrow(product_data)) {

  if (product_data$net_contribution[i] >= 750000) {
    profitability [i] <- "High Performer"

  } else if (product_data$net_contribution[i] >= 400000) {
    profitability [i] <- "Moderate Performer"

  } else {
    profitability [i] <- "Low Performer"
  }
}
# (ii) Product Return-Risk Classification

for (i in 1:nrow(product_data)) {

  if (product_data$return_rate[i] > 5) {
    return_risk [i] <- "High Return Risk"

  } else {
    return_risk [i] <- "Acceptable Return Rate"
  }
}

# (iii) Add classifications to the data frame

product_data$profitability <-profitability
product_data$return_risk <-return_risk

# Display classification report

classification_report <-product_data[, c(
  "product",
  "net_contribution",
  "profit_margin",
  "return_rate",
  "profitability",
  "return_risk"
)]

print(classification_report)


# Question 5: Loops and Automated Business Reporting

# (i) Display each product's revenue and net contribution
for (i in 1:nrow(product_data)) {
  cat("Product:", product_data$product[i], "\n")
  cat("Sales Revenue:", product_data$revenue[i], "\n")
  cat("Net Contribution:",
      product_data$net_contribution[i], "\n")
  cat("--------------------------\n")
}







# (ii) Count products in each profitability category
high_count <- 0
moderate_count <- 0
low_count <- 0
for (i in 1:nrow(product_data)) {
  if (product_data$profitability[i] ==
      "High Performer") {
    high_count <- high_count + 1

  } else if (product_data$profitability[i] ==
             "Moderate Performer") {
    moderate_count <- moderate_count + 1
  } else {
    low_count <- low_count + 1
  }
}

cat("High Performers:", high_count, "\n")
cat("Moderate Performers:", moderate_count, "\n")
cat("Low Performers:", low_count, "\n")

# (iii) Identify products requiring management attention
i <- 1
attention_count <- 0
cat("Products Requiring Management Attention:\n")
while (i <= nrow(product_data)) {
  if (product_data$net_contribution[i] < 400000 ||
      product_data$return_rate[i] > 5) {

    cat(product_data$product[i], "\n")

    attention_count <- attention_count + 1
  }

  i <- i + 1
}






# (iv) Display total number requiring attention

cat("Total Products Requiring Management Attention:",
    attention_count, "\n")
# Question 6: User-Defined Functions

# (i) Function to calculate net contribution
calculate_contribution <- function(unit_price, units_sold,                                 unit_cost, advertising_cost) {
  revenue <- unit_price * units_sold
  cogs <- unit_cost * units_sold
  gross_profit <- revenue - cogs
  net_contribution <- gross_profit - advertising_cost
  return(net_contribution)
}

# (ii) Function to classify product profitability
classify_product <- function(net_contribution) {
  if (net_contribution >= 750000) {
    return("High Performer")
  } else if (net_contribution >= 400000) {
    return("Moderate Performer")
  } else {
    return("Low Performer")
  }
}


# (iii) Test both functions using two products
# Test 1: Smartphone

smartphone_contribution <- calculate_contribution(
  95000, 80, 76000, 220000
)

smartphone <- classify_product(
  smartphone_contribution
)

cat("Product: Smartphone\n")
cat("Net Contribution:", smartphone_contribution, "\n")
cat("Category:", smartphone, "\n\n")




# Test 2: Printer

printer_contribution <- calculate_contribution(
  42000, 38, 33000, 45000
)
printer <- classify_product(
  printer_contribution
)

cat("Product: Printer\n")
cat("Net Contribution:", printer_contribution, "\n")
cat("Category:", printer, "\n")

# (i): Bar Chart
barplot(product_data$net_contribution,
  names.arg = product_data$product,
  main = "Net Contribution by Product",
  xlab = "Products",
  ylab = "Net Contribution (LKR)",
  col = "skyblue",
  las = 2,
  cex.names = 0.8
)

#(ii): Histogram
hist(product_data$net_contribution,
  main = "Distribution of Net Contribution",
  xlab = "Net Contribution (LKR)",
  ylab = "Number of Products",
  col = "lightgreen",
  border = "black"
)

# (iii): Scatter Plot
plot(product_data$advertising_cost,
  product_data$net_contribution,
  main = "Advertising Cost vs Net Contribution",
  xlab = "Advertising Cost (LKR)",
  ylab = "Net Contribution (LKR)",
  col = "blue",
  pch = 19
)

# Save Bar Chart
png("bar_chart.png", width = 1200, height = 800)

barplot(product_data$net_contribution,
        names.arg = product_data$product,
        main = "Net Contribution by Product",
        xlab = "Products",
        ylab = "Net Contribution (LKR)",
        col = "skyblue",
        las = 2,
        cex.names = 0.8)

dev.off()


# Save Histogram
png("histogram.png", width = 1200, height = 800)

hist(product_data$net_contribution,
     main = "Distribution of Net Contribution",
     xlab = "Net Contribution (LKR)",
     ylab = "Number of Products",
     col = "lightgreen",
     border = "black")

dev.off()


# Save Scatter Plot
png("scatter_plot.png", width = 1200, height = 800)

plot(product_data$advertising_cost,
     product_data$net_contribution,
     main = "Advertising Cost vs Net Contribution",
     xlab = "Advertising Cost (LKR)",
     ylab = "Net Contribution (LKR)",
     col = "blue",
     pch = 19)

dev.off()

# (iv): CSV Export
write.csv(
  product_data,
  file = "product_performance.csv",
  row.names = FALSE
)
cat("CSV file exported successfully.\n")

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: