# Import library yang dibutuhkan
library(readr)
## Warning: package 'readr' was built under R version 4.2.3
library(dplyr)
##
## 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(ggplot2)
Langkah awal adalah mengimpor library yang diperlukan untuk analisis data. Library readr digunakan untuk membaca file CSV, dplyr digunakan untuk manipulasi data, dan ggplot2 digunakan untuk visualisasi data.
# Lokasi file CSV
file_path <- "C:/Users/ASUS/Downloads/data harga saham.csv"
Kemudian mendefinisikan lokasi file CSV yang akan diolah.
# Periksa apakah file sudah ada di sistem
if (file.exists(file_path)) {
print("File sudah ada di sistem.")
} else {
print("File tidak ditemukan.")
}
## [1] "File sudah ada di sistem."
Berikutnya, memeriksa apakah file CSV sudah ada di sistem.
# Baca file CSV dan simpan dalam bentuk data frame
data <- read_csv(file_path, col_types = cols(Date = col_datetime(format = "%m/%d/%Y"), AMT = col_double(), GE = col_double(), XOM = col_double(), WMT = col_double()))
Membaca file CSV dan menyimpannya dalam bentuk data frame. Fungsi col_types digunakan untuk menentukan tipe data untuk setiap kolom dalam file CSV.
# Tampilkan sepuluh baris pertama, struktur, ringkasan, dan dimensi dari data frame
head(data, 21)
## # A tibble: 21 × 5
## Date AMT GE XOM WMT
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2021-10-01 00:00:00 267. 106. 60.1 137.
## 2 2021-10-04 00:00:00 265. 105. 60.9 136.
## 3 2021-10-05 00:00:00 265. 105. 60.8 137.
## 4 2021-10-06 00:00:00 268. 104. 59.7 138.
## 5 2021-10-07 00:00:00 266. 106. 59.9 139.
## 6 2021-10-08 00:00:00 262. 105. 61.4 140.
## 7 2021-10-11 00:00:00 262. 104. 60.7 140.
## 8 2021-10-12 00:00:00 265. 103. 60.4 139.
## 9 2021-10-13 00:00:00 264. 102. 60.3 138.
## 10 2021-10-14 00:00:00 268. 103. 61.2 140.
## # … with 11 more rows
str(data)
## spc_tbl_ [21 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Date: POSIXct[1:21], format: "2021-10-01" "2021-10-04" ...
## $ AMT : num [1:21] 267 265 265 268 266 ...
## $ GE : num [1:21] 106 105 105 104 106 ...
## $ XOM : num [1:21] 60.1 60.9 60.8 59.7 59.9 ...
## $ WMT : num [1:21] 137 136 137 138 139 ...
## - attr(*, "spec")=
## .. cols(
## .. Date = col_datetime(format = "%m/%d/%Y"),
## .. AMT = col_double(),
## .. GE = col_double(),
## .. XOM = col_double(),
## .. WMT = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
summary(data)
## Date AMT GE
## Min. :2021-10-01 00:00:00.00 Min. :261.6 Min. :102.4
## 1st Qu.:2021-10-08 00:00:00.00 1st Qu.:265.2 1st Qu.:104.0
## Median :2021-10-15 00:00:00.00 Median :268.0 Median :104.7
## Mean :2021-10-15 18:17:08.56 Mean :272.6 Mean :104.5
## 3rd Qu.:2021-10-22 00:00:00.00 3rd Qu.:282.0 3rd Qu.:105.3
## Max. :2021-10-29 00:00:00.00 Max. :286.9 Max. :107.4
## XOM WMT
## Min. :59.69 Min. :135.7
## 1st Qu.:60.74 1st Qu.:139.2
## Median :61.73 Median :140.6
## Mean :61.78 Mean :142.6
## 3rd Qu.:63.00 3rd Qu.:147.5
## Max. :64.97 Max. :150.1
dim(data)
## [1] 21 5
Menampilkan sepuluh baris pertama, struktur, ringkasan, dan dimensi dari data frame, pada langkah ini menampilkan informasi dasar data yang dimasukkan.
# Hitung return harian dari setiap saham
data <- data %>% mutate(Return_AMT = (AMT - lag(AMT)) / lag(AMT),
Return_GE = (GE - lag(GE)) / lag(GE),
Return_XOM = (XOM - lag(XOM)) / lag(XOM),
Return_WMT = (WMT - lag(WMT)) / lag(WMT))
Kemudian menghitung return harian untuk setiap saham menggunakan formula yang diberikan yakni𝑟𝑡 = 𝑃𝑡 − 𝑃𝑡−1/𝑃𝑡−1. Di sini, lag(AMT) mengacu pada 𝑃𝑡−1 dan AMT mengacu pada 𝑃𝑡 dalam formula. Hal ini berlaku juga pada setiap saham (AMT, GE, XOM, dan WMT).
# Buat data frame baru yang berisi return harian
return_data <- data %>% select(Date, Return_AMT, Return_GE, Return_XOM, Return_WMT)
Membuat data frame baru yang hanya berisi kolom tanggal dan return harian untuk setiap
# Tampilkan sepuluh baris pertama, struktur, ringkasan, dan dimensi dari data frame baru
head(return_data, 21)
## # A tibble: 21 × 5
## Date Return_AMT Return_GE Return_XOM Return_WMT
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2021-10-01 00:00:00 NA NA NA NA
## 2 2021-10-04 00:00:00 -0.00518 -0.00869 0.0130 -0.00963
## 3 2021-10-05 00:00:00 -0.00256 0 -0.00162 0.00656
## 4 2021-10-06 00:00:00 0.0129 -0.00543 -0.0183 0.00732
## 5 2021-10-07 00:00:00 -0.00690 0.0113 0.00281 0.0118
## 6 2021-10-08 00:00:00 -0.0151 -0.00749 0.0251 0.00302
## 7 2021-10-11 00:00:00 -0.00183 -0.00611 -0.00997 -0.000931
## 8 2021-10-12 00:00:00 0.0113 -0.0131 -0.00520 -0.00107
## 9 2021-10-13 00:00:00 -0.00140 -0.00350 -0.00278 -0.00725
## 10 2021-10-14 00:00:00 0.0140 0.00371 0.0152 0.0108
## # … with 11 more rows
str(return_data)
## tibble [21 × 5] (S3: tbl_df/tbl/data.frame)
## $ Date : POSIXct[1:21], format: "2021-10-01" "2021-10-04" ...
## $ Return_AMT: num [1:21] NA -0.00518 -0.00256 0.01289 -0.0069 ...
## $ Return_GE : num [1:21] NA -0.00869 0 -0.00543 0.01131 ...
## $ Return_XOM: num [1:21] NA 0.01297 -0.00162 -0.01834 0.00281 ...
## $ Return_WMT: num [1:21] NA -0.00963 0.00656 0.00732 0.01177 ...
summary(return_data)
## Date Return_AMT Return_GE
## Min. :2021-10-01 00:00:00.00 Min. :-0.015144 Min. :-0.033414
## 1st Qu.:2021-10-08 00:00:00.00 1st Qu.:-0.004998 1st Qu.:-0.006456
## Median :2021-10-15 00:00:00.00 Median : 0.001262 Median :-0.001389
## Mean :2021-10-15 18:17:08.56 Mean : 0.002853 Mean :-0.000359
## 3rd Qu.:2021-10-22 00:00:00.00 3rd Qu.: 0.011334 3rd Qu.: 0.011486
## Max. :2021-10-29 00:00:00.00 Max. : 0.019388 Max. : 0.020323
## NA's :1 NA's :1
## Return_XOM Return_WMT
## Min. :-0.025972 Min. :-0.0096316
## 1st Qu.:-0.003381 1st Qu.:-0.0009669
## Median : 0.002809 Median : 0.0063851
## Mean : 0.002919 Mean : 0.0043612
## 3rd Qu.: 0.013481 3rd Qu.: 0.0093958
## Max. : 0.025058 Max. : 0.0212451
## NA's :1 NA's :1
dim(return_data)
## [1] 21 5
Menampilkan informasi dasar tentang data frame yang baru.
# Tuliskan data frame ke sebuah CSV file
write_csv(return_data, "D:/return_data.csv")
Kemudian menuliskan data frame ke sebuah file CSV baru.
# Periksa apakah CSV file sudah ada di sistem
if (file.exists("return_data.csv")) {
print("File return_data.csv sudah ada di sistem.")
} else {
print("File return_data.csv tidak ditemukan.")
}
## [1] "File return_data.csv tidak ditemukan."
Memeriksa apakah file CSV baru sudah ada di sistem.
return_data <- na.omit(return_data)
return_data[is.na(return_data)] <- 0 # Mengganti NA dengan 0
# Buat gabungan lines plot dari return harian
ggplot(return_data, aes(Date)) +
geom_line(aes(y = Return_AMT, colour = "AMT")) +
geom_line(aes(y = Return_GE, colour = "GE")) +
geom_line(aes(y = Return_XOM, colour = "XOM")) +
geom_line(aes(y = Return_WMT, colour = "WMT")) +
labs(colour = "Legend") +
theme_minimal()
Membuat lines plot dari return harian untuk setiap saham pada data.
```r
# Buat gabungan boxplots dari return harian
ggplot(return_data) +
geom_boxplot(aes(x = "AMT", y = Return_AMT), fill = "pink") +
geom_boxplot(aes(x = "GE", y = Return_GE), fill = "green") +
geom_boxplot(aes(x = "XOM", y = Return_XOM), fill = "blue") +
geom_boxplot(aes(x = "WMT", y = Return_WMT), fill = "grey") +
coord_flip() +
theme_minimal()