Data=read.table(file.choose(),header=T)
data
## function (..., list = character(), package = NULL, lib.loc = NULL, 
##     verbose = getOption("verbose"), envir = .GlobalEnv, overwrite = TRUE) 
## {
##     fileExt <- function(x) {
##         db <- grepl("\\.[^.]+\\.(gz|bz2|xz)$", x)
##         ans <- sub(".*\\.", "", x)
##         ans[db] <- sub(".*\\.([^.]+\\.)(gz|bz2|xz)$", "\\1\\2", 
##             x[db])
##         ans
##     }
##     my_read_table <- function(...) {
##         lcc <- Sys.getlocale("LC_COLLATE")
##         on.exit(Sys.setlocale("LC_COLLATE", lcc))
##         Sys.setlocale("LC_COLLATE", "C")
##         read.table(...)
##     }
##     stopifnot(is.character(list))
##     names <- c(as.character(substitute(list(...))[-1L]), list)
##     if (!is.null(package)) {
##         if (!is.character(package)) 
##             stop("'package' must be a character vector or NULL")
##     }
##     paths <- find.package(package, lib.loc, verbose = verbose)
##     if (is.null(lib.loc)) 
##         paths <- c(path.package(package, TRUE), if (!length(package)) getwd(), 
##             paths)
##     paths <- unique(normalizePath(paths[file.exists(paths)]))
##     paths <- paths[dir.exists(file.path(paths, "data"))]
##     dataExts <- tools:::.make_file_exts("data")
##     if (length(names) == 0L) {
##         db <- matrix(character(), nrow = 0L, ncol = 4L)
##         for (path in paths) {
##             entries <- NULL
##             packageName <- if (file_test("-f", file.path(path, 
##                 "DESCRIPTION"))) 
##                 basename(path)
##             else "."
##             if (file_test("-f", INDEX <- file.path(path, "Meta", 
##                 "data.rds"))) {
##                 entries <- readRDS(INDEX)
##             }
##             else {
##                 dataDir <- file.path(path, "data")
##                 entries <- tools::list_files_with_type(dataDir, 
##                   "data")
##                 if (length(entries)) {
##                   entries <- unique(tools::file_path_sans_ext(basename(entries)))
##                   entries <- cbind(entries, "")
##                 }
##             }
##             if (NROW(entries)) {
##                 if (is.matrix(entries) && ncol(entries) == 2L) 
##                   db <- rbind(db, cbind(packageName, dirname(path), 
##                     entries))
##                 else warning(gettextf("data index for package %s is invalid and will be ignored", 
##                   sQuote(packageName)), domain = NA, call. = FALSE)
##             }
##         }
##         colnames(db) <- c("Package", "LibPath", "Item", "Title")
##         footer <- if (missing(package)) 
##             paste0("Use ", sQuote(paste("data(package =", ".packages(all.available = TRUE))")), 
##                 "\n", "to list the data sets in all *available* packages.")
##         else NULL
##         y <- list(title = "Data sets", header = NULL, results = db, 
##             footer = footer)
##         class(y) <- "packageIQR"
##         return(y)
##     }
##     paths <- file.path(paths, "data")
##     for (name in names) {
##         found <- FALSE
##         for (p in paths) {
##             tmp_env <- if (overwrite) 
##                 envir
##             else new.env()
##             if (file_test("-f", file.path(p, "Rdata.rds"))) {
##                 rds <- readRDS(file.path(p, "Rdata.rds"))
##                 if (name %in% names(rds)) {
##                   found <- TRUE
##                   if (verbose) 
##                     message(sprintf("name=%s:\t found in Rdata.rds", 
##                       name), domain = NA)
##                   objs <- rds[[name]]
##                   lazyLoad(file.path(p, "Rdata"), envir = tmp_env, 
##                     filter = function(x) x %in% objs)
##                   break
##                 }
##                 else if (verbose) 
##                   message(sprintf("name=%s:\t NOT found in names() of Rdata.rds, i.e.,\n\t%s\n", 
##                     name, paste(names(rds), collapse = ",")), 
##                     domain = NA)
##             }
##             files <- list.files(p, full.names = TRUE)
##             files <- files[grep(name, files, fixed = TRUE)]
##             if (length(files) > 1L) {
##                 o <- match(fileExt(files), dataExts, nomatch = 100L)
##                 paths0 <- dirname(files)
##                 paths0 <- factor(paths0, levels = unique(paths0))
##                 files <- files[order(paths0, o)]
##             }
##             if (length(files)) {
##                 for (file in files) {
##                   if (verbose) 
##                     message("name=", name, ":\t file= ...", .Platform$file.sep, 
##                       basename(file), "::\t", appendLF = FALSE, 
##                       domain = NA)
##                   ext <- fileExt(file)
##                   if (basename(file) != paste0(name, ".", ext)) 
##                     found <- FALSE
##                   else {
##                     found <- TRUE
##                     switch(ext, R = , r = {
##                       library("utils")
##                       sys.source(file, chdir = TRUE, envir = tmp_env)
##                     }, RData = , rdata = , rda = load(file, envir = tmp_env), 
##                       TXT = , txt = , tab = , tab.gz = , tab.bz2 = , 
##                       tab.xz = , txt.gz = , txt.bz2 = , txt.xz = assign(name, 
##                         my_read_table(file, header = TRUE, as.is = FALSE), 
##                         envir = tmp_env), CSV = , csv = , csv.gz = , 
##                       csv.bz2 = , csv.xz = assign(name, my_read_table(file, 
##                         header = TRUE, sep = ";", as.is = FALSE), 
##                         envir = tmp_env), found <- FALSE)
##                   }
##                   if (found) 
##                     break
##                 }
##                 if (verbose) 
##                   message(if (!found) 
##                     "*NOT* ", "found", domain = NA)
##             }
##             if (found) 
##                 break
##         }
##         if (!found) {
##             warning(gettextf("data set %s not found", sQuote(name)), 
##                 domain = NA)
##         }
##         else if (!overwrite) {
##             for (o in ls(envir = tmp_env, all.names = TRUE)) {
##                 if (exists(o, envir = envir, inherits = FALSE)) 
##                   warning(gettextf("an object named %s already exists and will not be overwritten", 
##                     sQuote(o)))
##                 else assign(o, get(o, envir = tmp_env, inherits = FALSE), 
##                   envir = envir)
##             }
##             rm(tmp_env)
##         }
##     }
##     invisible(names)
## }
## <bytecode: 0x0000016d30c09038>
## <environment: namespace:utils>
length(Data$IPM)
## [1] 38
mean(Data$IPM)
## [1] 72.38842
median(Data$IPM)
## [1] 73.18
range(Data$IPM) 
## [1] 53.42 83.08
max(Data$IPM)-min(Data$IPM) 
## [1] 29.66
max(Data$IPM) 
## [1] 83.08
min(Data$IPM)
## [1] 53.42
var(Data$IPM) 
## [1] 26.52484
sd(Data$IPM) 
## [1] 5.150227
quantile(Data$IPM)
##     0%    25%    50%    75%   100% 
## 53.420 71.080 73.180 74.345 83.080
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
ggplot(Data,aes(x=IPM))+geom_histogram(
  binwidth=5,
  boundary=60,
  fill="pink",
  color="black"
  )+
  scale_x_continuous(
    breaks=seq(60,85,by=5),
    limits=c(60,85)
  )+
  labs(
    title="IPM di Indonesia", 
    x="IPM",
    y="Freq"
  )+
  theme_classic()+
  theme(
    axis.text.x=element_text(angle=0,hjust=0.5),
    plot.title=element_text(
      hjust=2,
      face="bold"
    )
  )
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_bin()`).

ggplot(Data, aes(x = "", y = IPM)) +
  geom_boxplot(fill = "red") +
  labs(title = "Box Plot IPM Indonesia 2024", x = "", y = "IPM") + 
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'tibble' was built under R version 4.5.3
## Warning: package 'tidyr' was built under R version 4.5.3
## Warning: package 'readr' was built under R version 4.5.3
## Warning: package 'purrr' was built under R version 4.5.3
## Warning: package 'stringr' was built under R version 4.5.2
## Warning: package 'forcats' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ lubridate 1.9.5     ✔ tibble    3.3.1
## ✔ purrr     1.2.2     ✔ tidyr     1.3.2
## ✔ readr     2.2.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
Data_Kalimantan <- Data %>%
 filter(str_starts(Provinsi, "KALIMANTAN"))
Data_Kalimantan
##             Provinsi   IPM
## 1   KALIMANTAN_BARAT 70.13
## 2  KALIMANTAN_TENGAH 72.73
## 3 KALIMANTAN_SELATAN 73.03
## 4   KALIMANTAN_TIMUR 78.83
## 5   KALIMANTAN_UTARA 73.02
ggplot(Data_Kalimantan, aes(x = Provinsi, y = IPM, fill = Provinsi)) +
 geom_col() +
 labs(
 title = "IPM Pulau Kalimantan Tahun 2024",
 x = "Provinsi",
 y = "IPM"
 ) +
 theme_minimal() +
 theme(
 axis.text.x = element_text(angle = 45, hjust = 1),
 plot.title = element_text(hjust = 0.5, face = "bold"),
 legend.position = "none"
 )

library(dplyr)
library(tidyverse)
library(ggplot2)
Data_Kalimantan <- Data %>%
 filter(str_starts(Provinsi, "KALIMANTAN"))
Data_Kalimantan
##             Provinsi   IPM
## 1   KALIMANTAN_BARAT 70.13
## 2  KALIMANTAN_TENGAH 72.73
## 3 KALIMANTAN_SELATAN 73.03
## 4   KALIMANTAN_TIMUR 78.83
## 5   KALIMANTAN_UTARA 73.02
ggplot(Data_Kalimantan, aes(x = Provinsi, y = IPM, fill = Provinsi)) +
 geom_col() +
 labs(
 title = "IPM Pulau Kalimantan Tahun 2024",
 x = "Provinsi",
 y = "IPM"
 ) +
 theme_minimal() +
 theme(
 axis.text.x = element_text(angle = 45, hjust = 1),
 plot.title = element_text(hjust = 0.5, face = "bold"),
 legend.position = "none"
 )

# Load library
library(ggplot2)
# Baca data
data = read.table(file.choose(), header = T, sep = "\t")
data
##         Nama_Produk  Kategori Penjualan
## 1             Beras   Sembako        35
## 2     Minyak_Goreng   Sembako        75
## 3        Gula_Pasir   Sembako        60
## 4        Mie_Instan   Makanan       150
## 5           Biskuit   Makanan        85
## 6          Susu_UHT   Makanan        70
## 7         The_Celup   Makanan        55
## 8       Sabun_Mandi Perawatan        90
## 9             Sampo Perawatan        65
## 10       Pasta_Gigi Perawatan        70
## 11 Sabun_Cuci_ Muka Perawatan        45
# Buat barplot dengan ggplot2
ggplot(data, aes(x = Nama_Produk, y = Penjualan, fill = Kategori)) +
  geom_bar(stat = "identity") +
  labs(
    title = "Jumlah Penjualan Produk Toko MUTIA",
    x = "Produk",
    y = "Jumlah Penjualan"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold")
  )