Import Data saham dari tanggal 24/9/2020 sampai 24/9/2023

GOOD<-read.csv("GOOD.JK.csv")
UNVR<-read.csv("UNVR.JK.csv")
INDF<-read.csv("INDF.JK.csv")

Cek tipe data

str(GOOD)
## 'data.frame':    729 obs. of  7 variables:
##  $ Date     : chr  "2020-09-24" "2020-09-25" "2020-09-28" "2020-09-29" ...
##  $ Open     : num  247 247 250 250 249 248 248 249 247 246 ...
##  $ High     : num  249 250 250 251 249 249 250 251 250 250 ...
##  $ Low      : num  235 241 245 246 247 246 246 247 246 245 ...
##  $ Close    : num  249 250 250 250 248 248 249 247 246 250 ...
##  $ Adj.Close: num  241 242 242 242 240 ...
##  $ Volume   : int  1636000 2143000 1706500 1626500 967000 1163000 1039500 1053500 1450000 1626000 ...
str(UNVR)
## 'data.frame':    729 obs. of  7 variables:
##  $ Date     : chr  "2020-09-24" "2020-09-25" "2020-09-28" "2020-09-29" ...
##  $ Open     : num  7850 7850 7875 7900 8050 ...
##  $ High     : num  7900 7975 7950 8200 8100 ...
##  $ Low      : num  7775 7775 7875 7900 7950 ...
##  $ Close    : num  7800 7925 7900 7975 8100 ...
##  $ Adj.Close: num  6997 7109 7086 7153 7266 ...
##  $ Volume   : int  7510400 8029400 5378100 7464700 5521300 4384800 3689800 7906400 6818900 7614400 ...
str(INDF)
## 'data.frame':    729 obs. of  7 variables:
##  $ Date     : chr  "9/24/2020" "9/25/2020" "9/28/2020" "9/29/2020" ...
##  $ Open     : int  7400 7125 7150 7050 7050 7100 7200 7150 7175 7225 ...
##  $ High     : int  7425 7200 7200 7175 7150 7175 7225 7200 7325 7375 ...
##  $ Low      : int  7050 7075 7000 7000 7000 7100 7025 7075 7175 7100 ...
##  $ Close    : int  7125 7125 7000 7000 7150 7175 7075 7100 7225 7125 ...
##  $ Adj.Close: num  6319 6319 6208 6208 6341 ...
##  $ Volume   : int  13985400 10590700 8872000 8282300 6032400 2470600 4691800 2731300 7241600 8868400 ...

Karena data Date berupa character jadi kita perlu ubah tipe datanya terlebih dahulu menjati tipe data date

Merubah tipe data var date dan membuat data frame baru

library(lubridate)
## Warning: package 'lubridate' was built under R version 4.2.3
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
DataGOOD<-data.frame(Time=ymd(GOOD$Date),Price=GOOD$Close)
DataUNVR<-data.frame(Time=ymd(UNVR$Date),Price=UNVR$Close)
DataINDF<-data.frame(Time=mdy(INDF$Date),Price=as.numeric(INDF$Close))

Cek tipe data

str(DataGOOD)
## 'data.frame':    729 obs. of  2 variables:
##  $ Time : Date, format: "2020-09-24" "2020-09-25" ...
##  $ Price: num  249 250 250 250 248 248 249 247 246 250 ...
str(DataUNVR)
## 'data.frame':    729 obs. of  2 variables:
##  $ Time : Date, format: "2020-09-24" "2020-09-25" ...
##  $ Price: num  7800 7925 7900 7975 8100 ...
str(DataINDF)
## 'data.frame':    729 obs. of  2 variables:
##  $ Time : Date, format: "2020-09-24" "2020-09-25" ...
##  $ Price: num  7125 7125 7000 7000 7150 ...

Tipe data sudah berubah menjadi tipe data date dan variabel price bertipe data numerik

Membuat plot time series dengan ggplot2

GOOD.JK

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(ggpmisc)
## Warning: package 'ggpmisc' was built under R version 4.2.3
## Loading required package: ggpp
## Warning: package 'ggpp' was built under R version 4.2.3
## 
## Attaching package: 'ggpp'
## The following object is masked from 'package:ggplot2':
## 
##     annotate
## Registered S3 method overwritten by 'ggpmisc':
##   method                  from   
##   as.character.polynomial polynom
gg<-ggplot(DataGOOD,aes(x=Time,y=Price))+geom_line(color="blue")+xlab("Date")+
  ggtitle(label="Time Series Plot of GOOD.JK",subtitle="24/9/2020-24/9/2023")+
  scale_x_date(date_labels="%b %Y",date_breaks="1 months")+
  theme_minimal()+
  theme(axis.text.x=element_text(angle=50,hjust=1))+
  geom_vline(xintercept=as.Date("2021-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2022-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2023-01-01"),
             linetype=2,color=2,linewidth=1)+
  stat_peaks(geom="point",span=51,color="steelblue3",size=2)+
  stat_peaks(geom="label",span=51,color="steelblue3",angle=0,
             hjust=-0.1,x.label.fmt = "%d/%m")+
  stat_valleys(geom="point",span=51,color="red",size=2)+
  stat_valleys(geom="label",span=51,color="red",angle=0,
               hjust=-0.1,x.label.fmt = "%d/%m")
gg

Interpretasi

Jika dilihat dari grafik time series untuk saham GOOD.JK di atas, dapat disimpulkan bahwa pergerakan harga saham di tahun 2021 relatif naik dari harga pada tahun 2020. Kemudian selama tahun 2022 harga saham GOOD dapat dibilang sangat fluktuatif namun nilainya masih konstan hingga akhir tahun. Sedangkan di awal tahun 2023 harga saham sempat mengalami penurunan tetapi dapat memulihkan keadaan pada pertengahan tahun. Selama periode 3 tahun dari tanggal 24 September 2020 sampai 24 September 2023, harga terendah terjadi pada tanggal 29 Januari 2021 dan harga tertinggi terjadi pada tanggal 30 Maret 2022. PT. garuda Food membuktikan bahwa harga sahamnya dapat pulih dengan cepat dalam satu tahun setelah adanya pandemic Covid-19 di Indonesia.

UNVR.JK

gu<-ggplot(DataUNVR,aes(x=Time,y=Price))+geom_line(color="blue")+xlab("Date")+
  ggtitle(label="Time Series Plot of UNVR.JK",subtitle="24/9/2020-24/9/2023")+
  scale_x_date(date_labels="%b %Y",date_breaks="1 months")+
  theme_minimal()+
  theme(axis.text.x=element_text(angle=50,hjust=1))+
  geom_vline(xintercept=as.Date("2021-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2022-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2023-01-01"),
             linetype=2,color=2,linewidth=1)+
  stat_peaks(geom="point",span=51,color="steelblue3",size=2)+
  stat_peaks(geom="label",span=51,color="steelblue3",angle=0,
             hjust=-0.1,x.label.fmt = "%d/%m")+
  stat_valleys(geom="point",span=51,color="red",size=2)+
  stat_valleys(geom="label",span=51,color="red",angle=0,
               hjust=-0.1,x.label.fmt = "%d/%m")
gu

Interpretasi

Berdasarkan grafik di atas harga saham UNVR relative turun dari bulan September 2020 sampai menyentuh titik terendah pada tanggal 15 Maret 2022, meskipun sempat melesat naik di tanggal 14 Oktober 2021. Di pertengahan tahun 2022 harga saham UNVR mulai membaik dan mencapai titik tertingginya setelah turun drastis pada tanggal 26 Oktober 2022. Namun dengan perlahan harga saham turun kembali di tahun 2023. Penurunan harga yang sangat signifikan di akhir tahun 2020 adalah akibat adanya pandemic Covid-19 yang menghambat jalannya proses bisnis.

INDF.JK

gi<-ggplot(DataINDF,aes(x=Time,y=Price))+geom_line(color="blue")+xlab("Date")+
  ggtitle(label="Time Series Plot of INDF.JK",subtitle="24/9/2020-24/9/2023")+
  scale_x_date(date_labels="%b %Y",date_breaks="1 months")+
  theme_minimal()+
  theme(axis.text.x=element_text(angle=50,hjust=1))+
  geom_vline(xintercept=as.Date("2021-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2022-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2023-01-01"),
             linetype=2,color=2,linewidth=1)+
  stat_peaks(geom="point",span=51,color="steelblue3",size=2)+
  stat_peaks(geom="label",span=51,color="steelblue3",angle=0,
             hjust=-0.1,x.label.fmt = "%d/%m")+
  stat_valleys(geom="point",span=51,color="red",size=2)+
  stat_valleys(geom="label",span=51,color="red",angle=0,
               hjust=-0.1,x.label.fmt = "%d/%m")
gi

Interpretasi

Jika dilihat dari grafik di atas, harga saham INDF lebih fluktuatif dibandingkan dua saham sebelumnya. Di akhir tahun 2020 harga saham INDF turun hingga mencapai harga sekitar 6000 an per lembar saham. Namun, dapat bangkit kembali dan mempertahankan nilainya di tahun 2021. Titik terendah dari harga saham Indofood terjadi di tanggal 7 Maret 2022, tetapi dapat kembali pulih secara signifikan hingga mencapai titik tertinggi tahun 2022 pada tanggal 28 Juni 2022. Titik tertinggi PT. Indofood tercapai di tahun 2023 yakni tepatnya pada tanggal 14 Juli 2023. Kondisi harga saham PT. Indofood sangatlah fluktuatif setiap tahunnya, terbukti dengan selisih harga terendah dan tertinggi di tiap tahunnya sangatlah besar.

Menggabungkan data dengan cara lain

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.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
DataGabung1<-left_join(DataGOOD,DataINDF,by=join_by(Time==Time))
DataGabung1<-left_join(DataGabung1,DataUNVR,by=join_by(Time==Time))

Mengganti nama kolom

colnames(DataGabung1)[colnames(DataGabung1)=="Price.x"] = "GOOD"
colnames(DataGabung1)[colnames(DataGabung1)=="Price.y"] = "INDF"
colnames(DataGabung1)[colnames(DataGabung1)=="Price"] = "UNVR"

Membuat kolom baru disetiap data frame saham dan menggabungkan data

Agar memudahkan dalam pembuatan grafik setelah data digabungkan, ditambahkan dahulu keterangan nama saham di tiap DataSaham.

DataGOOD["Saham"]="GOOD"
DataINDF["Saham"]="INDF"
DataUNVR["Saham"]="UNVR"
DataGabung<-rbind(DataGOOD,DataINDF,DataUNVR)

Membuat multiplot

gm<-ggplot(DataGabung, aes(x=Time,y=Price,color=Saham))+
  geom_line(size=1)+xlab("Date")+
  ggtitle(label="Time Series Plot of GOOD Vs INDF Vs UNVR",
          subtitle="24/9/2020-24/9/2023")+
  scale_x_date(date_labels="%b %Y",date_breaks="3 months")+
  theme(legend.position="right")+theme_minimal()+
  geom_vline(xintercept=as.Date("2021-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2022-01-01"),
             linetype=2,color=2,linewidth=1)+
  geom_vline(xintercept=as.Date("2023-01-01"),
             linetype=2,color=2,linewidth=1)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
gm

Interpretasi

Berdasarkan grafik tersebut dapat disimpulkan bahwa harga saham yang paling stabil adalah Sahan INDF dengan bertahan di range harga 6000-7500. Sedangkan untuk saham GOOD tidak begitu terlihat fluktuasi harganya karena jika dibandingkan 2 saham yang lain harga saham GOOD masih terbilang sangat kecil. Lalu, untuk harga saham UNVR terlihat kalau harganya sangat turun drastis sejak akhir tahun 2020.

Membuat boxplot

ggplot(DataGabung,aes(Saham,Price,fill=Saham))+geom_boxplot()+
  ggtitle("Boxplot of Stock Price GOOD Vs INDF Vs UNVR",
          subtitle="24/9/2020-24/9/2023")+
  theme_classic()+theme(legend.position = "none")+
  stat_summary(fun.y=mean, geom="point", shape=20, 
               size=3, color="yellow")+
  scale_x_discrete("Stock")+coord_flip()
## Warning: The `fun.y` argument of `stat_summary()` is deprecated as of ggplot2 3.3.0.
## ℹ Please use the `fun` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Interpretasi

Dari hasil diagram boxplot di atas harga saham GOOD dan INDF dapat dikatakan stabil dengan rata-rata yang mendekati nilai mediannya. Sedangkan untuk harga saham UNVR sangatlah tidak stabil dengan banyaknya nilai outlier dan rata-rata yang jauh dari nilai mediannya.