Sabtu, 31 Maret 2018

PARALLEL COMPUTATION


KELOMPOK 6:

Aditia Septiandi                                ( 50414279 )
Ery Febrianto                                    ( 53414654 )
Fila Suci Wursima La Adji               ( 54414229 )
Ivander Svega                                   ( 55414556 )
Muhammad Januardi Santoso          ( 57414381 )
Muhammad Sukri Adiyanto             ( 57414553 )
Prazentio Fathybetara                       ( 58414501 )

A.   Pengantar Thread Programming
Dalam pemrograman komputer, sebuah thread adalah informasi terkait dengan penggunaan sebuah program tunggal yang dapat menangani beberapa pengguna secara bersamaan. Dari program point-of-view, sebuah thread adalah informasi yang dibutuhkan untuk melayani satu pengguna individu atau permintaan layanan tertentu. Jika beberapa pengguna menggunakan program atau permintaan bersamaan dari program lain yang sedang terjadi, thread yang dibuat dan dipelihara untuk masing-masing proses. Thread memungkinkan program untuk mengetahui user sedang masuk didalam program secara bergantian dan akan kembali masuk atas nama pengguna yang berbeda. Salah satu informasi thread disimpan dengan cara menyimpannya di daerah data khusus dan menempatkan alamat dari daerah data dalam register. Sistem operasi selalu menyimpan isi register saat program interrupted dan restores ketika memberikan program kontrol lagi.
Sebagian besar komputer hanya dapat mengeksekusi satu instruksi program pada satu waktu, tetapi karena mereka beroperasi begitu cepat, mereka muncul untuk menjalankan berbagai program dan melayani banyak pengguna secara bersamaan. Sistem operasi komputer memberikan setiap program “giliran” pada prosesnya, maka itu memerlukan untuk menunggu sementara program lain mendapat giliran. Masing-masing program dipandang oleh sistem operasi sebagai suatu tugas dimana sumber daya tertentu diidentifikasi dan terus berlangsung. Sistem operasi mengelola setiap program aplikasi dalam sistem PC (spreadsheet, pengolah kata, browser Web) sebagai tugas terpisah dan memungkinkan melihat dan mengontrol item pada daftar tugas. Jika program memulai permintaan I / O, seperti membaca file atau menulis ke printer, itu menciptakan thread. Data disimpan sebagai bagian dari thread yang memungkinkan program yang akan masuk kembali di tempat yang tepat pada saat operasi I / O selesai. Sementara itu, penggunaan bersamaan dari program diselenggarakan pada thread lainnya. Sebagian besar sistem operasi saat ini menyediakan dukungan untuk kedua multitasking dan multithreading. Mereka juga memungkinkan multithreading dalam proses program agar sistem tersebut disimpan dan  menciptakan proses baru untuk setiap thread.

Static Threading
Teknik ini biasa digunakan untuk komputer dengan chip multiprocessors dan jenis komputer shared-memory lainnya. Teknik ini memungkinkan thread berbagi memori yang tersedia, menggunakan program counter dan mengeksekusi program secara independen. Sistem operasi menempatkan satu thread pada prosesor dan menukarnya dengan thread lain yang hendak menggunakan prosesor itu.
Mekanisme ini terhitung lambat, karenanya disebut dengan static. Selain itu teknik ini tidak mudah diterapkan dan rentan kesalahan. Alasannya, pembagian pekerjaan yang dinamis di antara thread-thread menyebabkan load balancing-nya cukup rumit. Untuk memudahkannya programmer harus menggunakan protocol komunikasi yang kompleks untuk menerapkan scheduler load balancing. Kondisi ini mendorong pemunculan concurrency platforms yang menyediakan layer untuk mengkoordinasi, menjadwalkan, dan mengelola sumberdaya komputasi paralel.
Sebagian platform dibangun sebagai runtime libraries atau sebuah bahasa pemrograman paralel lengkap dengan compiler dan pendukung runtime-nya.

Dynamic Multithreading
Teknik ini merupakan pengembangan dari teknik sebelumnya yang bertujuan untuk kemudahan karena dengannya programmer tidak harus pusing dengan protokol komunikasi, load balancing, dan kerumitan lain yang ada pada static threading. Concurrency platform ini menyediakan scheduler yang melakukan load balacing secara otomatis. Walaupun platformnya masih dalam pengembangan namun secara umum mendukung dua fitur : nested parallelism dan parallel loops. Nested parallelism memungkinkan sebuah subroutine di-spawned (ditelurkan dalam jumlah banyak seperti telur katak) sehingga program utama tetap berjalan sementara subroutine menghitung hasilnya. Sedangkan parallel loops seperti halnya fungsi for namun memungkinkan iterasi loop dilakukan secara bersamaan.

Pengantar Message Passing, OpenMP
Massage Passing merupkan suatu teknik bagaimana mengatur suatu alur komunikasi messaging terhadap proses pada system. Message passing dalam ilmu komputer adalah suatu bentuk komunikasi yang digunakan dalam komputasi paralel , pemrograman-berorientasi objek , dan komunikasi interprocess . Dalam model ini, proses atau benda dapat mengirim dan menerima pesan yang terdiri dari nol atau lebih byte, struktur data yang kompleks, atau bahkan segmen kode ke proses lainnya dan dapat melakukan sinkronisasi. Objek didistribusikan dan metode sistem remote doa seperti ONC RPC , CORBA , Java RMI , DCOM , SOAP , . NET Remoting , CTO , QNX Neutrino RTOS , OpenBinder , D-Bus , Unison RTOS dan serupa pesan lewat sistem.Paradigma Message passing yaitu :
1.         Banyak contoh dari paradigma sekuensial dipertimbangkan bersama-sama.
2.         Programmer membayangkan beberapa prosesor, masing-masing dengan memori, dan menulis sebuah program untuk berjalan pada setiap prosesor.
3.         Proses berkomunikasi dengan mengirimkan pesan satu sama lain

OpenMP merupakan API yang mendukung multi-platform berbagi memori multiprocessing pemrograman C , C + + , dan Fortran , pada kebanyakan arsitektur prosesor dan system operasi , termasuk Solaris , AIX , HP-UX , GNU / Linux , Mac OS X , dan Windows platform. Ini terdiri dari satu set perintah kompiler, rutinitas library, dan variable lingkungan yang mempengaruhi perilaku run-time. OpenMP dikelola oleh nirlaba teknologi konsorsium OpenMP Arsitektur Review Board (ARB atau OpenMP), bersama-sama didefinisikan oleh sekelompok perangkat keras komputer utama dan vendor perangkat lunak, termasuk AMD , IBM , Intel , Cray , HP , Fujitsu , Nvidia , NEC , Microsoft , Texas Instruments , Oracle Corporation , dan banyak lagi.

Pengantar Programming CUDA
GPU (Graphical Processing Unit) pada awalnya adalah sebuah prosesor yang berfungsi khusus untuk melakukan rendering pada kartu grafik saja, tetapi seiring dengan semakin meningkatnya kebutuhan rendering, terutama untuk mendekati waktu proses yang realtime /sebagaimana kenyataan sesungguhnya, maka meningkat pula kemampuan prosesor grafik tersebut. akselerasi peningkatan teknologi GPU ini lebih cepat daripada peningkatan teknologi prosesor sesungguhnya (CPU), dan pada akhirnya GPU menjadi General Purpose, yang artinya tidak lagi hanya untuk melakukan rendering saja melainkan bisa untuk proses komputasi secara umum.penggunaan Multi GPU dapat mempercepat waktu proses dalam mengeksekusi program karena arsitekturnya yang natively parallel. Selain itu Peningkatan performa yang terjadi tidak hanya berdasarkan kecepatan hardware GPU saja, tetapi faktor yang lebih penting adalah cara membuat kode program yang benarbenar bisa efektif berjalan pada Multi GPU.\
CUDA merupakan teknologi anyar dari produsen kartu grafis Nvidia, dan mungkin belum banyak digunakan orang secara umum. Kartu grafis lebih banyak digunakan untuk menjalankan aplikasi game, namun dengan teknologi CUDA ini kartu grafis dapat digunakan lebih optimal ketika menjalankan sebuah software aplikasi. Fungsi kartu grafis Nvidia digunakan untuk membantu Processor (CPU) dalam melakukan kalkulasi dalam proses data.
CUDA merupakan singkatan dari Compute Unified Device Architecture, didefinisikan sebagai sebuah arsitektur komputer parallel, dikembangkan oleh Nvidia. Teknologi ini dapat digunakan untuk menjalankan proses pengolahan gambar, video, rendering 3D, dan lain sebagainya.
Singkatnya, CUDA dapat memberikan proses dengan pendekatan bahasa C, sehingga programmer atau pengembang software dapat lebih cepat menyelesaikan perhitungan yang komplek. Bukan hanya aplikasi seperti teknologi ilmu pengetahuan yang spesifik. CUDA sekarang bisa dimanfaatkan untuk aplikasi multimedia. Misalnya meng-edit film dan melakukan filter gambar. Sebagai contoh dengan aplikasi multimedia, sudah mengunakan teknologi CUDA. Software TMPGenc 4.0 misalnya membuat aplikasi editing dengan mengambil sebagian proces dari GPU dan CPU. VGA yang dapat memanfaatkan CUDA hanya versi 8000 atau lebih tinggi.
Keuntungan dengan CUDA sebenarnya tidak luput dari teknologi aplikasi yang ada. CUDA akan mempercepat proses aplikasi tertentu, tetapi tidak semua aplikasi yang ada akan lebih cepat walaupun sudah mengunakan fitur CUDA. Hal ini tergantung seberapa cepat procesor yang digunakan, dan seberapa kuat sebuah GPU yang dipakai. Dan bagian terpenting adalah aplikasi apa yang memang memanfaatkan penuh kemampuan GPU dengan teknologi CUDA. Kedepan seperti pengembang software Adobe akan ikut memanfaatkan fitur CUDA pada aplikasi mereka.Jawaban akhir adalah, untuk memanfaatkan CUDA kembali melihat aplikasi software yang ada. Apakah software yang ada memang mampu memanfaatkan CUDA dengan proses melalui GPU secara penuh. Hal tersebut akan berguna untuk mempercepat selesainya proses pada sebuah aplikasi. Dengan kecepatan proses GPU, aplikasi akan jauh lebih cepat. Khususnya teknologi ilmu pengetahuan dengan ramalan cuaca, simulator pertambangan atau perhitungan yang rumit dibidang keuangan. Sedangkan aplikasi umum sepertinya masih harus menunggu.


B.   Pengantar Message Passing, OpenMP
Pemrosesan Paralel adalah komputasi dua atau lebih tugas pada waktu bersamaan dengan tujuan untuk mempersingkat waktu penyelesaian tugas-tugas tersebut dengan cara mengoptimalkan resource pada sistem komputer yang ada. Pemrosesan paralel dapat mempersingkat waktu ekseskusi suatu program dengan cara membagi suatu program menjadi bagian-bagian yang lebih kecil yang dapat dikerjakan pada masing-masing prosesor secara bersamaan. Suatu program yang yang dieksekusi oleh n prosesor diharapkan dapat mempersingkat waktu eksekusi n kali lebih cepat. Salah satu komputer yang menggunakan metode pemrosesan paralel adalah SMP (Single Multi Processor). Sebuah sistem paralel setidaknya terdiri dari Message Passing Interface (MPI) dan sebuah pengatur beban kerja (job scheduler).
Pada bagian komputasi parallel ini akan dibahas tentang Message Passing dan OpenMP.
Pembahasan Jurnal:
Algoritma genetika sekuensial untuk menyelesaikan Container Loading Problem bekerja hanya dengan menggunakan satu  processor  saja meskipun dijalankan pada system multicore. Tujuan dari penelitian ini adalah untuk mengoptimalkan kinerja system multicore. Untuk mengoptimalkan kinerja system multicore diperlukan adanya paralelisasi algoritma genetika untuk menyelesaikan Container Loading Problem.
Dalam penelitian ini paralelisasi yang digunakan adalah paralelisasi shared memory menggunakan OpenMP. Paralelisasi dalam OpenMP dilakukan melalui penyisipan pragma OMP paralel. Dari algoritma genetika serial Container Loading Problem akan diparalelisasi menggunakan OpenMP menjadi algoritma genetika parallel Container Loading Problem. Selanjutnya akan dilakukan pengujian waktu eksekusi algoritma dan perhitungan  speedup.
Hasil dari penelitian ini berupa hasil pengujian kinerja algoritma parallel yang menunjukkan bahwa waktu komputasialgoritma paralel lebih kecil dari algoritma sekuensial sebelum diparalelisasi menggunakan OpenMP. Waktukomputasi yang lebih kecil ini menyatakan efisiensi kinerja algoritma paralel yang lebih baik dari algoritmasekuensial. Peningkatan efisiensi ini juga dapat diidentifikasi dari Speedup  paralelisasi yang semakin besar. Kesimpulan diperoleh dari penelitian ini adalah bahwa paralelisasi terhadap algoritma genetika untuk menyelesaikan Container Loading Problem akan meningkatkan efisiensi waktu komputasi melalui pemanfaatan sistem  multicore.
Message Passing
Massage Passing merupkan suatu teknik bagaimana mengatur suatu alur komunikasi messaging terhadap proses pada system. Message passing dalam ilmu komputer adalah suatu bentuk komunikasi yang digunakan dalam komputasi paralel, pemrograman-berorientasi objek, dan komunikasi interprocess. Dalam model ini, proses atau benda dapat mengirim dan menerima pesan yang terdiri dari nol atau lebih byte, struktur data yang kompleks, atau bahkan segmen kode ke proses lainnya dan dapat melakukan sinkronisasi. Paradigma Message passing yaitu :
1.         Banyak contoh dari paradigma sekuensial dipertimbangkan bersama-sama.
2.         Programmer membayangkan beberapa prosesor, masing-masing dengan memori, dan menulis sebuah program untuk berjalan pada setiap prosesor.
3.         Proses berkomunikasi dengan mengirimkan pesan satu sama lain.


Terdapat beberapa metode dalam pengiriman pesan yaitu :
·         Synchronous Message Passing
Pengirim menunggu untuk mengirim pesan sampai penerima siap untuk menerima pesan. Oleh karena itu tidak ada buffering. Selain itu Pengirim tidak bisa mengirim pesan untuk dirinya sendiri.
·         Ansynchronous Message Passing
Pengirim akan mengirim pesan kapanpun dia mau. Pengirim tidak peduli ketika penerima belum siap untuk menerima pesan. Oleh karena itu diperlukan buffering untuk menampung pesan sementara sampai penerima siap menerima pesan. Selain itu pengirim dapat pesan untuk dirinya sendiri.

OpenMP (Open Multiprocessing)
OpenMP adalah Application Programing Interface (API) yang mendukung pemrograman multiprosesing shared memory dalam bahasa C/C++ dan fortran pada berbagai arsitektur dan sistem operasi diantaranya: Solaris, AIX, HP-UX,GNU/Linux, Mac OS X, dan Windows.


OpenMP adalah model portabel dan skalabel yang memberikan interface sederhana dan fleksibel bagi programer shared memory dalam membangun aplikasi paralel. Program multithread dapat ditulis dalam berbagai cara. Beberapa diantaranya memungkinkan untuk melakukan interaksi yang kompleks antar thread. OpenMP mencoba untuk memberikan kemudahan pemrograman serta membantu dalam menghindari kesalahan program, melalui pendekatan terstruktur. Pendekatan ini dikenal sebagai model pemrograman fork-join.
OpenMP bekerja berdasarkan model shared memory, maka secara default data dibagi diantara thread-thread dan dapat terlihat dari setiap thread. Terkadang program akan membutuhkan variabel dengan nilai thread spesifik. Jika setiap thread memiliki variabel duplikat akan sangat berpotensi memiliki nilai yang berbeda-beda pada setiap variabel duplikat tersebut.
Sinkronisasi (pengkoordinasian) aksi dari thread adalah sesuatu yang sangat penting untuk menjamin data yang harus dibagi dan untuk mencegah terjadinya data race condition. Secara default OpenMP telah menyediakan mekanisme untuk menunggu thread dalam suatu tim thread sehingga semua thread menyelesaikan tugasnya dalam region, kemudian dapat melanjutkan ke proses selanjutnya. Mekanisme ini dikenal sebagai barrier.

C.   Pengantar Pemrograman CUDA GPU
GPU ( Graphical Processing Unit ) awalnya adalah sebuah prosesor yang berfungsi khusus untuk melakukan rendering pada kartu grafik saja, tetapi seiring dengan semakin meningkatnya kebutuhan rendering, terutama untuk mendekati waktu proses yang realtime, maka meningkat pula kemampuan prosesor grafik tersebut. akselerasi peningkatan teknologi GPU ini lebih cepat daripada peningkatan teknologi prosesor sesungguhnya ( CPU ), dan pada akhirnya GPU menjadi General Purpose, yang artinya tidak lagi hanya untuk melakukan rendering saja melainkan bisa untuk proses komputasi secara umum.
Penggunaan Multi GPU dapat mempercepat waktu proses dalam mengeksekusi program karena arsitekturnya yang natively parallel. Selain itu Peningkatan performa yang terjadi tidak hanya berdasarkan kecepatan hardware GPU saja, tetapi faktor yang lebih penting adalah cara membuat kode program yang benarbenar bisa efektif berjalan pada Multi GPU.
CUDA merupakan teknologi anyar dari produsen kartu grafis Nvidia, dan mungkin belum banyak digunakan orang secara umum. Kartu grafis lebih banyak digunakan untuk menjalankan aplikasi game, namun dengan teknologi CUDA ini kartu grafis dapat digunakan lebih optimal ketika menjalankan sebuah software aplikasi. Fungsi kartu grafis Nvidia digunakan untuk membantu Processor (CPU) dalam melakukan kalkulasi dalam proses data.
CUDA merupakan singkatan dari Compute Unified Device Architecture, didefinisikan sebagai sebuah arsitektur komputer parallel, dikembangkan oleh Nvidia. Teknologi ini dapat digunakan untuk menjalankan proses pengolahan gambar, video, rendering 3D, dan lain sebagainya. VGA – VGA dari Nvidia yang sudah menggunakan teknologi CUDA antara lain : Nvidia GeForce GTX 280, GTX 260,9800 GX2, 9800 GTX+,9800 GTX,9800 GT,9600 GSO, 9600 GT,9500 GT,9400 GT,9400 mGPU,9300 mGPU,8800 Ultra,8800 GTX,8800 GTS,8800 GT,8800 GS,8600 GTS,8600 GT,8500 GT,8400 GS, 8300 mGPU, 8200 mGPU, 8100 mGPU, dan seri sejenis untuk kelas mobile ( VGA notebook ).
Singkatnya, CUDA dapat memberikan proses dengan pendekatan bahasa C, sehingga programmer atau pengembang software dapat lebih cepat menyelesaikan perhitungan yang komplek. Bukan hanya aplikasi seperti teknologi ilmu pengetahuan yang spesifik. CUDA sekarang bisa dimanfaatkan untuk aplikasi multimedia. Misalnya meng-edit film dan melakukan filter gambar. Sebagai contoh dengan aplikasi multimedia, sudah mengunakan teknologi CUDA. Software TMPGenc 4.0 misalnya membuat aplikasi editing dengan mengambil sebagian proces dari GPU dan CPU. VGA yang dapat memanfaatkan CUDA hanya versi 8000 atau lebih tinggi.

Selasa, 20 Maret 2018

SENTIMENT ANALYSIS


TUGAS DEEP LEARNING
ANGGOTA  KELOMPOK

- EGA DWI PRASETYA
- MUHAMMAD SUKRI ADIYANT0
- MUHAMMAD JANUARDI SANTOSO
- NUUR MADANI ABUL HAKIM
Pada postingan kali ini akan dibahas mengenai SENTIMENT ANALYSIS dan cara implementasi nya.

APA ITU SENTIMENT ANALYSIS ?
Opinion Mining / Sentiment Analysis (sebagian besar researcher menganggap dua istilah ini sama/interchangeable) merupakan sebuah cabang penelitian di domain Text Mining yang mulai booming pada awal tahun 2002-an. Riset-nya mulai marak semenjak paper dari B.Pang dan L.Lee [1] keluar. Secara umum, Sentiment analysis ini dibagi menjadi 2 kategori besar :
1   Coarse-grained sentiment analysis
2   Fined-grained sentiment analysis
Coarse-grained sentiment analysis - kita mencoba melakukan proses analysis pada level Dokumen. Singkatnya adalah kita mencoba mengklasifikasikan orientasi sebuah dokumen secara keseluruhan. Orientasi ini ada 3 jenih : Positif, Netral, Negatif. Akan tetapi, ada juga yang menjadikan nilai orientasi ini bersifat kontinu / tidak diskrit.

Fined-grained sentiment analysis - kategori kedua ini yang sedang Naik Daunsekarang. Maksudnya adalah para researcher sebagian besar fokus pada jenis ini. Obyek yang ingin diklasifikasi bukan berada pada level dokumen melainkan sebuah kalimat pada suatu dokumen.
contoh :
    Saya tidak suka programming. (negatif)
    Hotel yang baru saja dikunjungi sangat indah sekali. (positif)
BAHASA R
Bahasa R (disingkat dengan R saja) adalah suatu fasilitas perangkat lunak terpadu untuk manipulasi data, simulasi, kalkulasi dan peragaan graphik. R memiliki kemampuan menganalisis data dengan sangat efektif dan dilengkapi dengan operator pengolahan array dan matriks. Tidak kalah menariknya R memiliki kemampuan penampilan grafik yang sangat sophisticated demikian pula peragaan untuk datanya.
Bahasa R merupakan versi sumber terbuka (open-source) dari bahasa pemrograman S (Azola dan Harrel, 2006). Versi komersial yang berbasis bahasa S adalah S plus. Bahasa R memiliki kemampuan yang tidak kalah dangan paket-paket program pengolahan data komersial bahkan dalam beberapa hal kemampuannya lebih baik. Perbandingan R khususnya terhadap SAS dibahas secara rinci oleh Azola dan Harrel (2006). Bahasa R mendapat sambutan yang baik dari kalangan statistikawan di seluruh dunia, sayangnya di Indonesia belum banyak dikenal. Tulisan ini dibuat untuk mengenalkan bahasa R khsusunya kalangan akademisi di Indonesia, dan untuk mendukung gerakan IGOS (Indonesia Go Open Source).

CONTOH PROGRAM SENTIMENT ANALYSIS DENGAN MENGGUNAKAN BAHASA R
Disini akan dibuat sebuah program sentiment analysis yang akan membaca tweets yang ada di twitter dimana kita bisa menganalisa isi dari tweets yang di fetch dari linimasa twitter.

Hal - hal yang kita persiapkan adalah sebagai berikut :

1. R studio
2. apps untuk api twitter dengan program kita
3. sebuah akun twitter
4. koneksi internet

LANGKAH PERTAMA ADALAH PASTIKAN ANDA MEMILIKI KONEKSI INTERNET YANG BAIK karna kita membutuhkan koneksi yang stabil guna mengambil tweets dari internet

LANGKAH KEDUA

Buat akun twitter jika belum memiliki akun twitter, jika sudah bisa lanjut ke langkah selanjutnya

LANGKAH KETIGA

Buat sebuah apps twitter dengan cara masuk ke https://apps.twitter.com dan login dengan akun twitter anda dan buat sebuah app, pertama login dengan akun twitter anda




buat aplikasi baru



Jika sudah dibuat masuk ke settings di akun twitter anda dan berikan akses untuk aplikasi anda


 Jika sudah buka bagian settings pada halaman apps https://apps.twitter.com

Ingat settingan diatas atau jangan tutup halaman tersebut karna token - token yang ada diatas akan kita butuhkan untuk melakukan sentimen analisis.


Oke buka R STUDIO


R studio merupakan salah satu aplikasi yang bisa kita gunakan untuk meng-compile dan meng-run program R

Tuliskan (copas) program dibawah


#********************************************************************************#
#UNTUK MENGDOWNLOAD PACKAGES YANG DIBUTUHKAN
#CUKUP RUN SEKALI
#********************************************************************************#
install.packages("twitteR") 
install.packages("ROAuth")
install.packages("tm")
install.packages("ggplot2")
install.packages("wordcloud")
install.packages("sentimentr")
install.packages("plyr")
install.packages("RTextTools")
install.packages("devtools")
require(devtools)
install.packages("e1071")
install_github("sentiment140","okugami79")
install_url("https://cran.r-project.org/src/contrib/Archive/Rstem/Rstem_0.4-1.tar.gz")
install_url("http://cran.r-project.org/src/contrib/Archive/sentiment/sentiment_0.2.tar.gz")

#********************************************************************************#
#Dibawah digunakan untuk memanggil library yang sudah didownload diatas
#********************************************************************************#
library(e1071)
library(twitteR)
library(ROAuth)
library(tm)
library(ggplot2)
library(wordcloud)
library(sentimentr)
library(plyr)
library(RTextTools)
library(sentiment)
library(Rstem)

#********************************************************************************#

setup_twitter_oauth("SVFEMAegGNipPya1JoTAPCa5D","mzegtlNSW8wcSCmUDE0hUXethYa5MAono4Ev2fwdqlPM9QQH4F","973513486792720385-6itI9TdbWfMp0XND3aQsnHitWxwMVpP","4E5vaX3Ymf5m3tneSG9ent5sqKUL3QEHCT88uRGafaHis")
# disini akan di kumpulkan 100 tweets yang mengandung kata "islam" dengan menentukan bahasa #inggris
some_tweets = searchTwitter("islam", n=100, lang="en")

# disini diambil hanya text nya saja sisanya dibuang seperti gambar, video, dll

some_txt = sapply(some_tweets, function(x) x$getText())

# akan dibuang kata - kata retweet

some_txt = gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", some_txt)

# dibuang mention - mention

some_txt = gsub("@\\w+", "", some_txt)

# dibuang tanda baca

some_txt = gsub("[[:punct:]]", "", some_txt)

# dibuang angka

some_txt = gsub("[[:digit:]]", "", some_txt)

# dibuang link - link

some_txt = gsub("http\\w+", "", some_txt)

# dibuang spasi yang tidak berguna

some_txt = gsub("[ \t]{2,}", "", some_txt)

some_txt = gsub("^\\s+|\\s+$", "", some_txt)

# fungsi error

try.error = function(x)
 
{
 
  # create missing value
 
  y = NA
 
  # tryCatch error
 
  try_error = tryCatch(tolower(x), error=function(e) e)
 
  # if not an error
 
  if (!inherits(try_error, "error"))
   
    y = tolower(x)
 
  # result
 
  return(y)
 
}

# lower case using try.error with sapply

some_txt = sapply(some_txt, try.error)

# remove NAs in some_txt

some_txt = some_txt[!is.na(some_txt)]

names(some_txt) = NULL

# classify emotion
#library(sentiment)
class_emo = classify_emotion(some_txt, algorithm="bayes", prior=1.0)

# get emotion best fit

emotion = class_emo[,7]

# substitute NA’s by "unknown"

emotion[is.na(emotion)] = "unknown"

# classify polarity

class_pol = classify_polarity(some_txt, algorithm="bayes")

# get polarity best fit

polarity = class_pol[,4]

# data frame with results

sent_df = data.frame(text=some_txt, emotion=emotion,
                    
                     polarity=polarity, stringsAsFactors=FALSE)

# sort data frame

sent_df = within(sent_df,
                
                 emotion <- factor(emotion, levels=names(sort(table(emotion), decreasing=TRUE))))

# plot distribution of emotions
ggplot(sent_df, aes(x=emotion)) +
  geom_bar(aes(y=..count.., fill=emotion)) +
  scale_fill_brewer(palette="Dark2") +
  labs(x="emotion categories", y="number of tweets")

######
ggplot(sent_df, aes(x=polarity)) +
 
  geom_bar(aes(y=..count.., fill=polarity)) +
 
  scale_fill_brewer(palette="RdGy") +
 
  labs(x="polarity categories", y="number of tweets")

######

emos = levels(factor(sent_df$emotion))

nemo = length(emos)

emo.docs = rep("", nemo)

for (i in 1:nemo)
 
{
 
  tmp = some_txt[emotion == emos[i]]
 
  emo.docs[i] = paste(tmp, collapse=" ")
 
}



####
# remove stopwords

emo.docs = removeWords(emo.docs, stopwords("english"))

# create corpus

corpus = Corpus(VectorSource(emo.docs))

tdm = TermDocumentMatrix(corpus)

tdm = as.matrix(tdm)

colnames(tdm) = emos

# comparison word cloud

comparison.cloud(tdm, colors = brewer.pal(nemo, "Dark2"),
                 
                 scale = c(3,.5), random.order = FALSE, title.size = 1.5)



OUTPUT
Adapun hasil dari program diatas adalah 





Grafik - grafik diatas merupakan contoh dari hasil mining tweets yang berisi kata ISLAM