Anda di halaman 1dari 16

APLIKASI BAHASA PEMROGRAMAN

R UNTUK ANALISIS DAN VISUALISASI


DATA-DATA CUACA DAN IKLIM
BAB 1

DASAR BAHASA PEMROGRAMAN R

R adalah suatu sistem untuk analisis data yang termasuk kelompok software
statistik open source yang tidak memerlukan lisensi atau gratis, yang dikenal
dengan freeware. Sampai saat ini, pengguna statistika di Indonesia masih belum banyak
yang menggunakan R untuk keperluan analisis data. Sebagian besar pengguna statistika
di Indonesia masih menggunakan paket‐paket statistik komersil, seperti SPSS, MINITAB,
S‐plus, SAS, atau Eviews.
Bahasa R merupakan sebuah bahasa pemrograman yang mampu melakukan
analisis data dengan dukungan packages yang sangat banyak. RStudio dan RGui ini
menggunakan bahasa R yaitu bahasa yang merupakan open source dari bahasa S. Sedikit
membandingkan antara RStudio dan RGui, terdapat beberapa perbedaan yang tidak
terlalu signifikan antara keduanya. RStudio lebih dimudahkan dalam hal melakukan
analisis dan tampilan menarik dibandingkan dengan RGui. Kemudian dalam pengaktifan
package pada RStudio hanya perlu mencentang saja pada kotak yang disediakan. Dalam
masalah penggunaan hardware komputer RStudio lebih membutuhkan spesifikasi atau
penggunaan hardware yang lebih besar dari pada RGui.

Gambar 1. Perbandingan tampilan RStudio dan RGui pada Windows 10

1.1. Download dan Install R dan Rstudio


Aplikasi RStudio memudahkan pengguna dalam mengolah data-data statistik.
Tutorial pada modul ini akan menggunakan aplikasi RStudio. Sebelum memasang
aplikasi tersebut, aplikasi RGui perlu dipasang terlebih dahulu pada masing-masing
komputer pengguna.
Tabel 1. Lokasi halaman web untuk download aplikasi RGui dan RStudio
Sistem
RGui RStudio
operasi
https://cran.r- https://download1.rstudio.org/
Windows project.org/bin/windows/ba desktop/windows/RStudio-
se/R-3.6.1-win.exe 1.2.1335.exe (64 bit)
https://cran.r- https://download1.rstudio.org/desk
Linux project.org/bin/linux/ top/bionic/amd64/rstudio-1.2.1335-
amd64.deb (Ubuntu 18 64 bit)
https://cran.r- https://download1.rstudio.org/desk
Mac
project.org/bin/macosx/ top/macos/RStudio-1.2.1335.dmg

1.2. Tutorial dasar R


Tutorial untuk belajar memahami algoritma R saat ini dapat ditemui secara
online. Halaman web seperti www.datacamp.com terdapat mode interaktif yang
memudahkan pengguna pemula dalam memahami algoritma R pada setiap
perintah-perintah yang diberikan dalam web ini. Selain itu, website yang lain
seperti udemy.com, r-tutorials.com, dan www.edx.org juga menyediakan tutorial R.

Gambar 2. Tampilan halaman www.datacamp.com

1.2.1. R sebagai kalkulator sederhana


R dapat digunakan sebagai kalkulator sederhana, seperti pengurangan
(-), penjumlahan (+), perkalian (*), pembagian (/), eksponensial (^),
pembagian bersisa (%%).
> 2 + 5 #penjumlahan
[1] 7
> 6 * 10 #perkalian
[1] 60
> 6 / 10 #pembagian
[1] 0.6
> 10 ^ 2 #eksponen
[1] 100
> 10 %% 2 #modulo
[1] 0
> 1 + pi/365
[1] 1.008607
> x <- 10 #angka 10 disimpan pada variabel x
> y <- 20 #angka 20 disimpan pada variabel y
> z <- x + y
> x * z / y
[1] 15
Tanda “<-“ artinya equivalen atau bisa diberikan pada simbol “=” yang
menunjukkan bahwa sebuah angka/karakter disimpan pada sebuah variabel.
Tanda “#” menunjukkan komentar.

1.2.2. Mendefinisikan urutan (sequence)


Untuk menentukan sebuah urutan pada suatu variabel (mis. nomor
atau tanggal), fungsi seq (…) dapat digunakan untuk mencetak nomor dan
tanggal. Secara default, argumen fungsi sequence adalah seq (from = 1, to = 1,
by = ((to – from)/(length.out – 1), length.out = NULL). Luaran dari fungsi ini
adalah dalam bentuk vektor. Perintah c ( ) dapat digunakan untuk membuat
vektor
> seq(1, 10, by = 3)
[1] 1 4 7 10
> seq(0, 10, length.out = 5)
[1] 0.0 2.5 5.0 7.5 10.0
> a = as.Date("2019/1/1")
> b = as.Date("2019/12/31")
> seq(from = a, to = b, by="month")
[1] "2019-01-01" "2019-02-01" "2019-03-01" "2019-04-
01" "2019-05-01" "2019-06-01" "2019-07-01" "2019-08-
01" "2019-09-01"
[10] "2019-10-01" "2019-11-01" "2019-12-01"
>
> CH = c(0,20,10,11,3)
> CH
[1] 0 20 10 11 3

1.2.3. Mendefinisikan fungsi


Perintah fungsi dapat didefinisikan sebagai berikut.
name <- function(var1, var2, ...) expression of the
function.
Sebagai contoh.
> fungsi_tambah <- function(a, b) a + b
> fungsi_tambah(a = 2, b = 10)
[1] 12

1.2.4. Vektor, matriks, dan data frame


Seperti contoh pada 1.2.2, luaran dari fungsi sequence merupakan
bentuk vektor. Vektor pada dasarnya berisi beberapa elemen dimulai dari
indeks atau urutan ke-1 sampai tak hingga. Jika ingin mengetahui elemen
suatu vektor pada urutan tertentu, maka dapat dilakukan dengan
mencantumkan indeks pada suatu variabel, diikuti dengan tanda kurung siku
“[ ]”. Beberapa elemen di dalam suatu vektor juga dapat dicetak dengan
mencantumkan tanda “:” di dalam kurung siku. Satu atau lebih elemen bisa
ditambah atau dikurangi pada variabel berbentuk vektor. Operasi
matematika dapat digunakan pada variabel berbentuk vektor. Perhatikan
contoh di bawah ini.
> CH[1]
[1] 0
> CH[1:3]
[1] 0 20 10
> CH[-1:-3]
[1] 11 3
> CH[6] <- 101
> CH
[1] 0 20 10 11 3 101
> CH[7:10] <- c(200,34,1,4)
> CH
[1] 0 20 10 11 3 101 200 34 1 4
> CH*2 #Setiap elemen dalam variabel CH dikalikan 2
[1] 0 40 20 22 6 202 400 68 2 8
Matriks berisi data-data yang memiliki baris dan kolom, seperti
layaknya pada aplikasi excel. Untuk membuat suatu matriks, dapat
digunakan fungsi matrix ( ). Secara default, fungsi matriks adalah matrix
(data = NA, nrow = 1, ncol = 1, byrow = FALSE). Seperti pada vektor, bentuk
matriks juga dapat melakukan perhitungan matematika. Biasanya, bentuk ini
sering digunakan dalam perhitungan, baik statistik maupun matematik.
Perhatikan contoh berikut.
> matrix(data = c(20,25,23.1,24), nrow = 2, ncol = 2)
[,1] [,2]
[1,] 20 23.1
[2,] 25 24.0
> matrix(data = c(20,25,23.1,24), nrow = 2, ncol = 2,
byrow = TRUE)
[,1] [,2]
[1,] 20.0 25
[2,] 23.1 24
> my_mat1 <- matrix(c(2,3,1,10), nrow = 2, ncol = 2)
> my_mat2 <- matrix(c(12,3,4,1), nrow = 2, ncol = 2)
> my_mat1*my_mat2 #perkalian setiap elemen
[,1] [,2]
[1,] 24 4
[2,] 9 10
> my_mat1%*%my_mat2 #perkalian matriks
[,1] [,2]
[1,] 27 9
[2,] 66 22
> t(my_mat1) #fungsi transpose
[,1] [,2]
[1,] 2 3
[2,] 1 10
> det(my_mat1%*%my_mat2) #fungsi determinan
[1] 0
> eigen(my_mat1)
eigen() decomposition
$values
[1] 10.358899 1.641101

$vectors
[,1] [,2]
[1,] -0.1187860 -0.9412172
[2,] -0.9929199 0.3378019

Kolom dan baris suatu matriks dapat diberikan nama dengan fungsi
colnames( ) dan rownames( ). Untuk mencetak satu atau beberapa elemen di
dalam matriks, caranya hampir sama dengan mencetak elemen di dalam
vektor, hanya saja perlu diketahui baris dan kolom ke berapa yang akan
dicetak. Perhatikan contoh berikut.
> rownames(my_mat1) <- c("ROW1","ROW2")
> colnames(my_mat1) <- c("COL_1",'COL_2')
> my_mat1
COL_1 COL_2
ROW1 2 1
ROW2 3 10
> my_mat1[2,] #my_mat1[indeks_baris, indeks_kolom]
COL_1 COL_2
3 10
> my_mat1[,2]
ROW1 ROW2
1 10
Data frame sama dengan matriks, yaitu memiliki baris dan kolom.
Karakteristik dari data frame, yaitu nama kolom tidak boleh kosong, bentuk
data numerik, faktor, atau karakter dapat disimpan di dalam data frame, dan
setiap kolom harus memiliki jumlah baris yang sama (mis. jumlah baris pada
kolom ke-n dan ke-n+1 harus sama). Keunggulan dari data frame salah
satunya dapat mengetahui ukuran pemusatan data secara statistik.
Perhatikan contoh berikut.
> my_df1 = data.frame(kolom_1 = c(2,3,4,5,6), kolom_2
= c(3,4,10,200,3))
> my_df1
kolom_1 kolom_2
1 2 3
2 3 4
3 4 10
4 5 200
5 6 3
> summary(my_df1)
kolom_1 kolom_2
Min. :2 Min. : 3
1st Qu.:3 1st Qu.: 3
Median :4 Median : 4
Mean :4 Mean : 44
3rd Qu.:5 3rd Qu.: 10
Max. :6 Max. :200
Elemen dalam data frame dapat dicetak sama seperti bentuk matriks atau
variabel yang diikuti dengan tanda “$” kemudian nama kolom. Selain itu,
beberapa elemen lain juga dapat ditambahkan pada variabel data frame.
> my_df1$kolom_1
[1] 2 3 4 5 6
> my_df1$kolom_baru <- c("a","b","c","d",'e')
> my_df1
kolom_1 kolom_2 kolom_baru
1 2 3 a
2 3 4 b
3 4 10 c
4 5 200 d
5 6 3 e
> #ATAU
> my_df1[,"kolom_baru"] <- c("a","b","c","d",'e')
> my_df1
kolom_1 kolom_2 kolom_baru
1 2 3 a
2 3 4 b
3 4 10 c
4 5 200 d
5 6 3 e

1.2.5. Membuat grafik


R dapat digunakan sebagai visualisasi data berupa grafik garis, scatter,
batang, pie, boxplot, bahkan peta. Visualisasi dari data-data cuaca maupun
iklim tidak hanya berupa grafik 2 dimensi, tetapi grafik 3 dimensi juga perlu
ditampilkan, seperti plotting ketinggian lokasi.
Beberapa data cuaca dan iklim hasil luaran model atau data grid secara
umum memiliki format NetCDF (Network Common Data Form). NetCDF
adalah seperangkat library perangkat lunak yang mendukung pembuatan,
akses, dan berbagi data ilmiah berorientasi array (Unidata 2019). NetCDF
banyak digunakan untuk bertukar atau mendistribusikan data-data iklim.
Beberapa komponen di dalam NetCDF, yaitu dimensi nama, dimensi ukuran,
variabel, dan atribut global.
Berikut ini adalah contoh scatter plot pada parameter suhu permukaan
berdasarkan luaran model WRF terhadap observasi per 5 menit. Fungsi dari
read.table( ) adalah untuk membaca hasil copy dari data excel dengan
menggunakan fasilitas clipboard.
> suhu_perm_obs = read.table(‘clipboard’, col.names =
“Suhu Permukaan (obs)”)
> suhu_perm_wrf = read.table(‘clipboard’, col.names =
“Suhu Permukaan (WRF)”)
> plot(y = suhu_perm_obs$Suhu.Permukaan..obs., x =
suhu_perm_wrf$Suhu.Permukaan..WRF., ylab =
expression("Obs"*" ("^0*"C"*")"), xlab =
expression("WRF"*" ("^0*"C"*")"))

Gambar 3. Scatter plot suhu permukaan observasi terhadap luaran model


WRF
> boxplot(suhu_perm_obs$Suhu.Permukaan..obs.,
suhu_perm_wrf$Suhu.Permukaan..WRF.,
names=c("Obs","WRF"), ylab=expression("Suhu
Permukaan"*" ("^0*"C"*")"))

Gambar 4. Sebaran suhu permukaan berdasarkan hasil observasi dan luaran


model WRF
> hist(suhu_perm_obs$Suhu.Permukaan..obs., main = "",
xlab=expression("Suhu Permukaan"*" ("^0*"C"*")"), col
= 'red')

Gambar 5. Histogram suhu permukaan observasi

1.2.6. Statistik sederhana


Sebagai aplikasi layaknya Minitab, SPSS, atau SAS, R dapat melakukan
perhitungan statistik, seperti rata-rata, nilai tengah, modus, persentil,
bahkan model regresi.
> median(suhu_perm_wrf$Suhu.Permukaan..WRF.)
[1] 18.41677
> mean(suhu_perm_wrf$Suhu.Permukaan..WRF.)
[1] 21.84127
> quantile(suhu_perm_obs$Suhu.Permukaan..obs.)
0% 25% 50% 75% 100%
15.0 17.1 18.4 31.2 46.2
> reg.suhu.perm = lm(suhu_perm_obs$Suhu.Permukaan..obs. ~
suhu_perm_wrf$Suhu.Permukaan..WRF.)
> summary(reg.suhu.perm)

Call:
lm(formula = suhu_perm_obs$Suhu.Permukaan..obs. ~
suhu_perm_wrf$Suhu.Permukaan..WRF.)

Residuals:
Min 1Q Median 3Q Max
-8.3065 -1.1650 0.1951 1.3716 11.5425

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.07724 0.55799 -1.931 0.0545 .
suhu_perm_wrf$Suhu.Permukaan..WRF. 1.12969 0.02427 46.547 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.957 on 286 degrees of freedom


Multiple R-squared: 0.8834, Adjusted R-squared: 0.883
F-statistic: 2167 on 1 and 286 DF, p-value: < 2.2e-16
BAB 2

PENGOLAHAN DATA NETCDF

Data-data cuaca dan iklim berformat Network Common Data Form (NetCDF) saat
ini lebih banyak digunakan, terutama pada luaran model-model iklim. NetCDF
merupakan satu set software dalam bentuk kumpulan library dengan kemampuan self-
describing sebagai mesin format data independen untuk keperluan akses dan sharing
data-data Aplikasi visualisasi dan pengolah data NetCDF yang umum digunakan dalam
bidang meteorologi dan klimatologi, yaitu The Grid Analysis and Display System (GrADS)
oleh The Center for Ocean-Land-Atmosphere Studies (COLA), NCAR Command Language
(NCL) oleh National Center of Atmospheric Research (NCAR), dan Matlab. Contoh
aplikasi lain untuk menampilkan data NetCDF secara sederhana, yaitu Panoply
(http://www.giss.nasa.gov/tools/panoply)

Gambar 6. Ilustrasi data dengan format NetCDF (Sumber: https://geoserver.geo-


solutions.it/edu/en/_images/md1.png
File NetCDF memiliki empat komponen, yaitu dimensi nama (latitude, longitude,
level, waktu), dimensi ukuran dari dimensi nama, variabel, dan global atribut. Dimensi
ukuran dari dimensi nama berisi jumlah grid dari koordinat horizontal (latitude dan
longitude), jumlah ketinggian, dan panjang waktu. Variabel berisi data-data di dalam file
yang berdimensi (mis. variabel 2t berdimensi longitude, latitude, height, dan time).
Atribut global berisi informasi tentang isi di dalam file. Untuk melihat descriptor file
NetCDF, ketikkan perintah pada terminal linux sebagai berikut.

ncdump -h <nama_file.nc>
Gambar 7. Contoh luaran descriptor file NetCDF menggunakan terminal Ubuntu pada
Windows 10

Package pada R yang akan digunakan pada modul ini adalah ncdf4 (Pierce 2019).
Package lain seperti RNetCDF (Michna dan Woods 2017) juga dapat digunakan dalam
pengolahan data NetCDF, hanya saja berbeda pada fungsi perintahnya.

2.1 Menampilkan descriptor file


File NetCDF terlebih dahulu dibuka di R dengan perintah
nc_open(“nama_file.nc”). Kemudian, descriptor file NetCDF ditampilkan dengan
mencetak variabel. Berikut ini adalah tampilan descriptor file pada data
kelembaban spesifik rata-rata bulanan global dengan resolusi spasial 2.5 0 (~ 250
km) oleh NCEP.
> specific_humidity = nc_open("E:/data_nc/shum.mon.mean.nc")
> specific_humidity
File E:/data_nc/shum.mon.mean.nc (NC_FORMAT_NETCDF4_CLASSIC):

1 variables (excluding dimension variables):


float shum[lon,lat,level,time]
long_name: Monthly Mean of Specific Humidity
units: grams/kg
precision: 3
least_significant_digit: 0
var_desc: Specific Humidity
level_desc: Multiple levels
statistic: Mean
parent_stat: Other
missing_value: -9.96920996838687e+36
valid_range: -0.0999999865889549
valid_range: 100.430000305176
dataset: NCEP Reanalysis Derived Products
actual_range: 0
actual_range: 41.4387054443359

4 dimensions:
level Size:8
units: millibar
long_name: Level
positive: down
GRIB_id: 100
GRIB_name: hPa
actual_range: 1000
actual_range: 300
axis: Z
lat Size:73
units: degrees_north
actual_range: 90
actual_range: -90
long_name: Latitude
standard_name: latitude
axis: Y
lon Size:144
units: degrees_east
long_name: Longitude
actual_range: 0
actual_range: 357.5
standard_name: longitude
axis: X
time Size:859 *** is unlimited ***
long_name: Time
delta_t: 0000-01-00 00:00:00
avg_period: 0000-01-00 00:00:00
prev_avg_period: 0000-00-01 00:00:00
standard_name: time
axis: T
units: hours since 1800-01-01 00:00:0.0
actual_range: 1297320
actual_range: 1924056

9 global attributes:
description: Data is from NMC initialized reanalysis
(4x/day). It consists of most variables interpolated to
pressure surfaces from model (sigma) surfaces.
platform: Model
Conventions: COARDS
NCO: 20121012
history: Mon Jul 5 22:28:55 1999: ncrcat
shum.mon.mean.nc
/Datasets/ncep.reanalysis.derived/pressure/shum.mon.mean.nc
/dm/dmwork/nmc.rean.ingest/combinedMMs/shum.mon.mean.nc
/home/hoop/crdc/cpreanjuke2farm/cpreanjuke2farm Tue Oct 17
20:07:08 1995 from shum.85.nc
created 95/02/06 by Hoop (netCDF2.3)
Converted to chunked, deflated non-packed NetCDF4 2014/09
title: monthly mean shum from the NCEP Reanalysis
References:
http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis.
derived.html
dataset_title: NCEP-NCAR Reanalysis 1
_NCProperties: version=2,netcdf=4.6.2,hdf5=1.8.20
Dari descriptor file dikatakan bahwa data reanalisis kelembaban spesifik global
memiliki 4 dimensi, yaitu longitude, latitude, level (ketinggian), dan waktu.

2.2 Mengetahui nilai dari variabel dimensi lokasi dan waktu


Fungsi ncvar_get( ) adalah untuk menampilkan nilai dari variabel atau
dimensi dari file NetCDF. Fungsi head( ) yang digunakan untuk mencetak dimensi
time berguna untuk mencetak enam elemen pertama (default).
> level = ncvar_get(specific_humidity,"level")
> lon = ncvar_get(specific_humidity,"lon")
> lat = ncvar_get(specific_humidity,"lat")
> level
[1] 1000 925 850 700 600 500 400 300
> lon
[1] 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0 27.5 30.0
32.5 35.0 37.5 40.0 42.5 45.0 47.5 50.0
[22] 52.5 55.0 57.5 60.0 62.5 65.0 67.5 70.0 72.5 75.0 77.5 80.0 82.5
85.0 87.5 90.0 92.5 95.0 97.5 100.0 102.5
[43] 105.0 107.5 110.0 112.5 115.0 117.5 120.0 122.5 125.0 127.5 130.0 132.5 135.0
137.5 140.0 142.5 145.0 147.5 150.0 152.5 155.0
[64] 157.5 160.0 162.5 165.0 167.5 170.0 172.5 175.0 177.5 180.0 182.5 185.0 187.5
190.0 192.5 195.0 197.5 200.0 202.5 205.0 207.5
[85] 210.0 212.5 215.0 217.5 220.0 222.5 225.0 227.5 230.0 232.5 235.0 237.5 240.0
242.5 245.0 247.5 250.0 252.5 255.0 257.5 260.0
[106] 262.5 265.0 267.5 270.0 272.5 275.0 277.5 280.0 282.5 285.0 287.5 290.0 292.5
295.0 297.5 300.0 302.5 305.0 307.5 310.0 312.5
[127] 315.0 317.5 320.0 322.5 325.0 327.5 330.0 332.5 335.0 337.5 340.0 342.5 345.0
347.5 350.0 352.5 355.0 357.5
> lat
[1] 90.0 87.5 85.0 82.5 80.0 77.5 75.0 72.5 70.0 67.5 65.0 62.5 60.0
57.5 55.0 52.5 50.0 47.5 45.0 42.5 40.0 37.5
[23] 35.0 32.5 30.0 27.5 25.0 22.5 20.0 17.5 15.0 12.5 10.0 7.5 5.0
2.5 0.0 -2.5 -5.0 -7.5 -10.0 -12.5 -15.0 -17.5
[45] -20.0 -22.5 -25.0 -27.5 -30.0 -32.5 -35.0 -37.5 -40.0 -42.5 -45.0 -47.5 -50.0
-52.5 -55.0 -57.5 -60.0 -62.5 -65.0 -67.5 -70.0 -72.5
[67] -75.0 -77.5 -80.0 -82.5 -85.0 -87.5 -90.0
> head(time)
[1] 1297320 1298064 1298760 1299504 1300224 1300968
Untuk mengetahui nilai dari variabel setiap lokasi dan waktu, indeks atau
urutan dari dimensi lat, lon, level, atau time dimasukkan ke variabel (shum).
Misalkan kita ingin mengetahui kelembaban spesifik (g/kg) permukaan (asumsi:
1000mb) suatu titik pada bulan Januari 1948 di Kabupaten Mojokerto (-7.50;
112.5), maka indeks yang dimasukkan pada variabel adalah sebagai berikut.
> shum = ncvar_get(specific_humidity,"shum")
> shum[46, 40, 1, 1] #shum[lon, lat, level, time]
[1] 16.36
Dimensi time yang dicetak memiliki bentuk numerik, bukan bentuk waktu
pada umumnya. Koversi waktu numerik menjadi bentuk umum dapat
menggunakan package ncdf.tools (Buttlar 2015).
> library(ncdf.tools)
> month.format = convertDateNcdf2R(time, units = 'hours')
> month.format = as.character(month.format)
> head(month.format)
[1] "1948-01-01" "1948-02-01" "1948-03-01" "1948-04-01" "1948-05-01"
"1948-06-01"
Selain cara di atas, konversi waktu berbentuk numerik menjadi format waktu
pada umumnya dapat menggunakan perintah sebagai berikut pada terminal Linux.

ncdump -v time -t <nama_file.nc>


2.3 Visualisasi secara spasial
Sama halnya dengan aplikasi seperti GrADS atau NCL, bahasa pemrograman R
dapat digunakan untuk plotting secara spasial. Beberapa package yang digunakan
dalam modul ini adalah lattice (Deepayan 2008), latticeExtra (Sarkar dan Andrew
2016), sp (Pebesma dan Bivand 2005), dan raster (Hijmans 2019). Sebagai contoh
pada modul ini, kelembaban spesifik (var. shum) permukaan ditampilkan dalam
bentuk raster di wilayah Indonesia pada bulan Desember 2017.
library(lattice);library(latticeExtra);library(sp);library(raster)

lon.indo = which(lon >= 95 & lon <=141)


lat.indo = which(lat >= -11 & lat <= 6 )

grid.indo = expand.grid(lon = lon[lon.indo], lat = lat[lat.indo])


des2017 = which(month.format == "2017-12-01")

shum.indo = shum[lon.indo, lat.indo, 1, des2017]


interval.shum = seq(15,25,0.1)

#download garis pantai indonesia


indonesia = getData(name = "GADM", country = "IDN", level = 0)

#plotting
levelplot(shum.indo ~ lon*lat, data = grid.indo, at = interval.shum,
cuts = length(interval.shum), pretty = TRUE,
col.regions = colorRampPalette(c("red","yellow","blue"))) +
layer(sp.polygons(indonesia))

Gambar 8. Sebaran spasial kelembaban spesifik di Indonesia bulan Desember


2017 (Sumber data: NCEP reanalysis)

Selain dalam bentuk raster, variabel di atas bisa juga ditampilkan dalam
bentuk kontur. Package tambahan yang diperlukan adalah maps (Becker et al.
2018).
library(maps)

warna <- colorRampPalette(c(“red”,”yellow”,”blue”))

#Plotting kontur
filled.contour(x = seq(95, 140, len=length(lon.indo)), y = seq(-12.5,
7.5, len =length(lat.indo)), z = indo.koor, levels =
seq(16,24,0.1), color.palette = warna, plot.axes
={axis(1); axis(2);map('world2','indonesia', add = TRUE);
grid()})

Gambar 9. Sebaran spasial dalam bentuk kontur pada variabel kelembaban


spesifik (g/kg) di Indonesia bulan Desember 2017 (Sumber data: NCEP
reanalysis)

2.4 Memplotkan data klimatologi


Iklim adalah keadaan cuaca rata-rata dalam waktu satu tahun yang
penyelidikannya dilakukan dalam waktu yang lama (minimal 30 tahun) dan meliputi
wilayah yang luas. Karakteristik suatu wilayah dapat dilihat berdasarkan iklimnya. Kali
ini, kita akan mengolah data suhu permukaan laut (SST) secara klimatologis untuk
mengetahui kejadian ENSO dengan mengetahui anomali SST di Samudera Pasifik.
library(ncdf4); library(ncdf.tools); library(lattice)

sst <- nc_open("C:/sst.nc")


land_sea <- nc_open("C:/land-sea mask.nc")

#Open Variable from sst


var.sst <- ncvar_get(sst,"sst")
var.lon <- ncvar_get(sst,"X")
var.lat <- ncvar_get(sst,"Y")
var.time <- seq(as.Date("1981-11-01"),as.Date("2019-08-01"), by="month") #No
need to convert from file

#Open variable from land sea mask


var.lsm <- ncvar_get(land_sea,"mask")

#Modification from land sea mask to sst (LAND = 0, SEA = 1)


mod.sst <- var.sst
for (waktu in 1:454){
for (latitude in 1:length(var.lat)){
for (longitude in 1:length(var.lon)){
if (var.lsm[longitude,latitude] == 0){
mod.sst[longitude,latitude,waktu] <- NA
}
}
}
}

#Climatology each month (ex.January and July)


jan.clim = seq(3, length(var.time), 12)
jul.clim = seq(9, length(var.time), 12)

jan.mat.clim = matrix(ncol = length(var.lat), nrow = length(var.lon))


#Membuat matriks kosong
jul.mat.clim = matrix(ncol = length(var.lat), nrow = length(var.lon))
for (latitude in 1:length(var.lat)){
for (longitude in 1:length(var.lon)){
jan.mat.clim[longitude,latitude] <- mean(mod.sst[longitude, latitude,
jan.clim], na.rm = TRUE)
jul.mat.clim[longitude,latitude] <- mean(mod.sst[longitude, latitude,
jul.clim], na.rm = TRUE)
}
}

#plotting for January and July Climatology (1982 - 2019)


grid.glo = expand.grid(lon = var.lon, lat = var.lat)
levelplot(jan.mat.clim ~ lon*lat, data = grid.glo, pretty = TRUE, at = seq(-
2,36,0.1), cuts = length(seq(-2,36,0.1)),
col.regions = colorRampPalette(c("blue","purple","cyan","green",
"yellow","red")))
levelplot(jul.mat.clim ~ lon*lat, data = grid.glo, pretty = TRUE, at = seq(-
2,36,0.1), cuts = length(seq(-2,36,0.1)),
col.regions = colorRampPalette(c("blue","purple","cyan","green",
"yellow","red")))

#SST Anomaly (ex: January 1997 and July 2015)


anom.jul.2015 = mod.sst[,,which(var.time == "2015-07-01")] - jul.mat.clim
anom.jan.1997 = mod.sst[,,which(var.time == "1997-01-01")] - jan.mat.clim

levelplot(anom.jan.1997 ~ lon*lat, data = grid.glo, pretty = TRUE, at = seq(-


4,4,0.05), cuts = length(seq(-4,4,0.05)),
col.regions = colorRampPalette(c("blue","purple","cyan","green",
"yellow","red")))
levelplot(anom.jul.2015 ~ lon*lat, data = grid.glo, pretty = TRUE, at = seq(-
4,4,0.05), cuts = length(seq(-4,4,0.05)),
col.regions = colorRampPalette(c("blue","purple","cyan","green",
"yellow","red")))

Anda mungkin juga menyukai