Cara Mudah Melakukan Scrape Data pada Grafik Dinamis JavaScript Object Notation (JSON) dengan R

Scrape Data dari Grafik Dinamis Format JSON dengan R

Siapa dari teman-teman yang suka sekali dengan grafik dinamis? Saya kira cukup banyak peminat dari visualisasi data berjenis ini. Pasalnya, selain lebih menarik karena keindahannya, grafik dinamis juga secara langsung dapat mengamati pola dari sebuah data.

Bila sebelumnya kita membahas mengenai Natural Language Processing (NLP) menggunakan beberapa fungsi yang ada di R. Pada kesempatan kali ini, kita akan mencoba memahami sekaligus mempraktikkan bagaimana melakukan scraping grafik yang dinamis.

Biasanya, bahasa yang digunakan dalam visualisasi dinamis yang interaktif sejumlah situs adalah JSON. JSON sendiri merupakan kependekan dari JavaScript Object Notation. Data yang terbungkus atau tercampur dengan bahasa JSON biasanya disebut sebagai data semi-terstruktur (semistructured data).

Dalam bahasa R sendiri, salah satu jenis package yang cukup ampuh digunakan dalam melakukan scrape data berformat JSON ini adalah package jsonlite yang dapat diinstal dengan fungsi install.package("jsonlite") kemudian diaktivasi dengan fungsi library(jsonlite). Pada praktikum kali ini, kita akan mencoba mendapatkan data harga emas dengan satuan harga Indonesia (Rupiah) per oz. Adapun situs yang menyediakan histori data harga emas dengan satuan Indonesia adalah ychartscom dengan tampilan situs berikut:

Situs yang menyediakan data seris harga emas satuan rupiah

Sebelum melakukan scrape, kita perlu menelusuri kode HTML situs tersebut dengan cara inspect element kemudian pilih Network dan refresh situs sehingga muncul sejumlah respon termasuk Headers.

Tampilan inspect element

Setelah mendapatkan responnya, kita tinggal copy dan paste saja URL yang memuat grafik dinamis harga emas. Baru kemudian kita dapat melakukan langkah-langkah berikut untuk kemudian divisualisasikan menggunakan package gganimate.

#Aktivasi package jsonlite
library(jsonlite)
#Scrape Grafik Dinamis Java Script Object Notation (JSON)
ems <- fromJSON("https://ycharts.com/charts/fund_data.json?annotations=&annualizedReturns=false&calcs=&chartType=interactive&chartView=&correlations=&dateSelection=range&displayDateRange=false&displayTicker=false&endDate=&format=real&legendOnChart=false&note=&partner=basic_2000&quoteLegend=false&recessions=false&scaleType=linear&securities=id:I:GPIRNK,include:true,,&securityGroup=&securitylistName=&securitylistSecurityId=&source=false&splitType=single&startDate=&title=&units=false&useCustomColors=false&useEstimates=false&zoom=max&redesign=true&chartCreator=&maxPoints=752")
#Melihat sekilas data dalam list hasil scrape
ems$chart_data[[1]]$raw_data
## [[1]]
##                [,1]     [,2]
##   [1,] 1.517443e+12 18010305
##   [2,] 1.518048e+12 17901301
##   [3,] 1.518653e+12 18337193
##   [4,] 1.519258e+12 18175147
##   [5,] 1.519862e+12 17975024
##   [6,] 1.520467e+12 18209985
##   [7,] 1.521072e+12 18130834
##   [8,] 1.521677e+12 18279134
##   [9,] 1.522282e+12 18226103
##  [10,] 1.522886e+12 18277781
##  [11,] 1.523491e+12 18467034
##  [12,] 1.524096e+12 18586403
##  [13,] 1.524701e+12 18341221
##  [14,] 1.525306e+12 18328507
##  [15,] 1.525910e+12 18567383
##  [16,] 1.526515e+12 18120054
##  [17,] 1.527120e+12 18444053
##  [18,] 1.527725e+12 18137836
##  [19,] 1.528330e+12 17994803
##  [20,] 1.528934e+12 18149262
##  [21,] 1.529539e+12 17856512
##  [22,] 1.530144e+12 18009802
##  [23,] 1.530749e+12 18060368
##  [24,] 1.531354e+12 17916041
##  [25,] 1.531958e+12 17624033
##  [26,] 1.532563e+12 17760495
##  [27,] 1.533168e+12 17593638
##  [28,] 1.533773e+12 17498781
##  [29,] 1.534378e+12 17245643
##  [30,] 1.534464e+12 17216423
##  [31,] 1.535069e+12 17536723
##  [32,] 1.535674e+12 17712088
##  [33,] 1.536278e+12 17767697
##  [34,] 1.536883e+12 17794869
##  [35,] 1.537488e+12 17761737
##  [36,] 1.538093e+12 17691806
##  [37,] 1.538698e+12 18273681
##  [38,] 1.539302e+12 18546299
##  [39,] 1.539907e+12 18647970
##  [40,] 1.540512e+12 18774876
##  [41,] 1.541117e+12 18422973
##  [42,] 1.541722e+12 17781534
##  [43,] 1.542326e+12 17861096
##  [44,] 1.542931e+12 17791870
##  [45,] 1.543536e+12 17414006
##  [46,] 1.544141e+12 17990548
##  [47,] 1.544746e+12 18017578
##  [48,] 1.545350e+12 18312372
##  [49,] 1.545955e+12 18622240
##  [50,] 1.546560e+12 18264172
##  [51,] 1.547165e+12 18102013
##  [52,] 1.547770e+12 18203534
##  [53,] 1.548374e+12 18224580
##  [54,] 1.548979e+12 18382677
##  [55,] 1.549584e+12 18365823
##  [56,] 1.550189e+12 18619306
##  [57,] 1.550794e+12 18682453
##  [58,] 1.551398e+12 18518174
##  [59,] 1.552003e+12 18559734
##  [60,] 1.552608e+12 18586607
##  [61,] 1.553213e+12 18574562
##  [62,] 1.553818e+12 18446495
##  [63,] 1.554422e+12 18199356
##  [64,] 1.555027e+12 18239920
##  [65,] 1.555632e+12 17914017
##  [66,] 1.556237e+12 18219587
##  [67,] 1.556842e+12 18228924
##  [68,] 1.557446e+12 18437705
##  [69,] 1.558051e+12 18507557
##  [70,] 1.558656e+12 18458381
##  [71,] 1.559261e+12 18490735
##  [72,] 1.559866e+12 19134426
##  [73,] 1.560470e+12 19360034
##  [74,] 1.561075e+12 19776657
##  [75,] 1.561680e+12 19905648
##  [76,] 1.562285e+12 19555662
##  [77,] 1.562890e+12 19716251
##  [78,] 1.563494e+12 20062219
##  [79,] 1.564099e+12 19892701
##  [80,] 1.564704e+12 20444015
##  [81,] 1.565309e+12 21252362
##  [82,] 1.565914e+12 21569584
##  [83,] 1.566518e+12 21372755
##  [84,] 1.567123e+12 21680353
##  [85,] 1.567728e+12 21476551
##  [86,] 1.568333e+12 20990790
##  [87,] 1.568938e+12 21109203
##  [88,] 1.569542e+12 21104432
##  [89,] 1.570147e+12 21190484
##  [90,] 1.570752e+12 20907784
##  [91,] 1.571357e+12 21079775
##  [92,] 1.571962e+12 21245054
##  [93,] 1.572566e+12 21176005
##  [94,] 1.573171e+12 20518597
##  [95,] 1.573776e+12 20643682
##  [96,] 1.574381e+12 20626778
##  [97,] 1.574986e+12 20595414
##  [98,] 1.575590e+12 20489836
##  [99,] 1.576195e+12 20510399
## [100,] 1.576800e+12 20672723
## [101,] 1.577405e+12 21085425
## [102,] 1.578010e+12 21566344
## [103,] 1.578614e+12 21381418
## [104,] 1.579219e+12 21241768
## [105,] 1.579824e+12 21231462
## [106,] 1.580429e+12 21632250
## [107,] 1.581034e+12 21505987
## [108,] 1.581638e+12 21625644
## [109,] 1.582243e+12 22620025
## [110,] 1.582848e+12 23097324
## [111,] 1.583453e+12 23958338
## [112,] 1.584058e+12 23082557
## [113,] 1.584662e+12 23798318
## [114,] 1.585267e+12 26103223
## [115,] 1.585872e+12 26495169
## [116,] 1.586477e+12 26688721
## [117,] 1.587082e+12 26116047
## [118,] 1.587686e+12 26424859
## [119,] 1.588291e+12 25082969
## [120,] 1.588896e+12 25458508
## [121,] 1.589501e+12 25787303
## [122,] 1.590106e+12 25500521
## [123,] 1.590710e+12 25256306
## [124,] 1.591315e+12 23374703
## [125,] 1.591920e+12 24555028
## [126,] 1.592525e+12 24459975
## [127,] 1.593130e+12 24850873
## [128,] 1.593734e+12 25769100
## [129,] 1.594339e+12 26045781
## [130,] 1.594944e+12 26559010
## [131,] 1.595549e+12 27789682
## [132,] 1.596154e+12 28687539
## [133,] 1.596672e+12 30149381
## [134,] 1.597277e+12 28726294
## [135,] 1.597882e+12 28465931
## [136,] 1.598486e+12 28203642
## [137,] 1.599091e+12 28670148
## [138,] 1.599696e+12 29208644
## [139,] 1.600301e+12 28714588
## [140,] 1.600906e+12 27721458
## [141,] 1.601510e+12 28216170
## [142,] 1.602115e+12 27764389
## [143,] 1.602720e+12 27792010
## [144,] 1.603325e+12 27867926
## [145,] 1.603930e+12 27353138
## [146,] 1.604534e+12 27874910
## [147,] 1.605139e+12 26566626
## [148,] 1.605744e+12 26304721
## [149,] 1.606349e+12 25484339
## [150,] 1.606954e+12 25909430
## [151,] 1.607558e+12 26014558
## [152,] 1.608163e+12 26669029
## [153,] 1.608768e+12 26625000
## [154,] 1.609373e+12 26520781
## [155,] 1.609978e+12 26708592
## [156,] 1.610582e+12 25885796
## [157,] 1.611187e+12 26069401
## [158,] 1.611792e+12 26081558
## [159,] 1.612397e+12 25038317
## [160,] 1.613002e+12 25710799
## [161,] 1.613606e+12 24868427
## [162,] 1.614211e+12 25061920
## [163,] 1.614816e+12 24423108
## [164,] 1.615421e+12 24837821
## [165,] 1.616026e+12 24870218
## [166,] 1.616630e+12 25060553
## [167,] 1.617235e+12 25070877
## [168,] 1.617840e+12 25516193
## [169,] 1.618445e+12 25672691
## [170,] 1.619050e+12 25958130
## [171,] 1.619654e+12 25470291
## [172,] 1.620259e+12 25962494
## [173,] 1.620864e+12 25865006
## [174,] 1.621469e+12 27000563
## [175,] 1.622074e+12 27024091
## [176,] 1.622678e+12 26663668
## [177,] 1.623283e+12 26908540
## [178,] 1.623888e+12 25533238
## [179,] 1.624493e+12 25773235
## [180,] 1.625098e+12 25836204
## [181,] 1.625702e+12 26256842
## [182,] 1.626307e+12 26412459
## [183,] 1.626912e+12 26060534
## [184,] 1.627517e+12 26492838
## [185,] 1.628122e+12 25827257
## [186,] 1.628726e+12 25131979
## [187,] 1.629331e+12 25665976
## [188,] 1.629936e+12 25758307
## [189,] 1.630541e+12 25869621
## [190,] 1.631146e+12 25487033
## [191,] 1.631750e+12 24912657
## [192,] 1.632355e+12 24924375
## [193,] 1.632960e+12 24943826
## [194,] 1.633565e+12 25050896
## [195,] 1.634170e+12 25393147
## [196,] 1.634774e+12 25128165
## [197,] 1.635379e+12 25560104
## [198,] 1.635984e+12 25752299
## [199,] 1.636589e+12 26498297
## [200,] 1.637194e+12 26466489
## [201,] 1.637798e+12 25512429
## [202,] 1.638403e+12 25376288
## [203,] 1.639008e+12 25492192
## [204,] 1.639613e+12 25754827
## [205,] 1.640218e+12 25721392
## [206,] 1.640822e+12 25764966
## [207,] 1.641427e+12 25753221
## [208,] 1.642032e+12 26017354
## [209,] 1.642637e+12 26457707
## [210,] 1.643242e+12 25991906
## [211,] 1.643846e+12 25774544
## [212,] 1.644451e+12 26323509
## [213,] 1.645056e+12 27109470
## [214,] 1.645661e+12 27848836
## [215,] 1.646266e+12 27752473
## [216,] 1.646870e+12 28511449
## [217,] 1.647475e+12 27884868
## [218,] 1.648080e+12 28198654
## [219,] 1.648685e+12 27894128
## [220,] 1.649290e+12 27747330
## [221,] 1.649894e+12 28160858
## [222,] 1.650499e+12 27880432
## [223,] 1.651104e+12 27377585
## [224,] 1.651709e+12 27432674
## [225,] 1.652314e+12 26815420
## [226,] 1.652918e+12 27166730
## [227,] 1.653523e+12 27046366
## [228,] 1.654128e+12 26718763
## [229,] 1.654733e+12 26865630
## [230,] 1.655338e+12 26971926
## [231,] 1.655942e+12 27329190
## [232,] 1.656547e+12 27068758
## [233,] 1.657152e+12 26212258
## [234,] 1.657757e+12 25497744
## [235,] 1.658362e+12 25631917
## [236,] 1.658966e+12 26184139
## [237,] 1.659571e+12 26627633
## [238,] 1.660176e+12 26532767
## [239,] 1.660781e+12 26187521
## [240,] 1.661386e+12 25991996
## [241,] 1.661990e+12 25215421
## [242,] 1.662595e+12 25465043
## [243,] 1.663200e+12 25163369
## [244,] 1.663805e+12 25107009
## [245,] 1.664410e+12 25256386
## [246,] 1.665014e+12 26034412
## [247,] 1.665619e+12 25317290
## [248,] 1.666224e+12 25465710
## [249,] 1.666829e+12 25838158
## [250,] 1.667434e+12 25565674
## [251,] 1.668038e+12 27370766
## [252,] 1.668643e+12 27544074
## [253,] 1.669248e+12 27499217
## [254,] 1.669853e+12 28061520
## [255,] 1.670458e+12 27963037
## [256,] 1.671062e+12 27854593
## [257,] 1.671667e+12 28059407
## [258,] 1.672272e+12 28398791
## [259,] 1.672877e+12 28624155
## [260,] 1.673482e+12 28873611
## [261,] 1.674086e+12 28978536
## [262,] 1.674691e+12 28885296
## [263,] 1.674778e+12 28816905
#Mengubah list menjadi dataframe
dataems <- data.frame(ems$chart_data[[1]]$raw_data)
head(dataems)
##             X1       X2
## 1 1.517443e+12 18010305
## 2 1.518048e+12 17901301
## 3 1.518653e+12 18337193
## 4 1.519258e+12 18175147
## 5 1.519862e+12 17975024
## 6 1.520467e+12 18209985
#Mengubah nama variabel X1 dan X2 menjadi tgl dan hrg
names(dataems) <- c("tgl","hrg")
head(dataems)
##            tgl      hrg
## 1 1.517443e+12 18010305
## 2 1.518048e+12 17901301
## 3 1.518653e+12 18337193
## 4 1.519258e+12 18175147
## 5 1.519862e+12 17975024
## 6 1.520467e+12 18209985
#Konversi variabel tgl hasil scrape JSON menjadi datetime
dataems$tgl <- (dataems$tgl/1000)
dataems$tgl <- as.POSIXct(dataems$tgl, origin = "1970-01-01", tz = "UTC")
head(dataems)
##          tgl      hrg
## 1 2018-02-01 18010305
## 2 2018-02-08 17901301
## 3 2018-02-15 18337193
## 4 2018-02-22 18175147
## 5 2018-03-01 17975024
## 6 2018-03-08 18209985
#Visualisasi data interaktif
Penggunaan gganimate dapat teman-teman pelajari di sini
## 
Rendering [===============================================================] at 8.5 fps ~ eta:  0s 

Grafik animasi hasil scrape data dinamis format JSON

Berdasarkan grafik di atas, terlihat harga emas mulai melonjak sejak 2018. Sejak itu, perekonomian dunia mulai kurang stabil, terlebih dengan kehadiran Pandemi Covid-19 yang mulai berdampak pada perekonomian Indonesia di akhir Maret 2020. Ketidakpastian ekonomi global singgah ke banyak negara dan situasi ini mendorong peningkatan terhadap komoditas emas. Dalam situasi krisis atau ketidakpastian ekonomi global sebagaimana yang telah terjadi beberapa tahun lampau, emas merupakan penyelamat aset atau harta kekayaan karena mampu melindungi aset atau harta dari dampak inflasi. Permintaan yang meningkat inilah yang kemudian memantik harga emas semakin mahal.

Demikian sedikit sharing kita kali ini, semoga sedikit ini dapat bermanfaat bagi para pembaca setia blog ini. Selamat memahami dan mempraktikan!

Add Comments


EmoticonEmoticon