* CODE TWITTER tweet mining
Trend Topic Hierarchycal
---------------------------------
##############################################################################
### Membaca tweets dari Twitter menggunakan format ATOM
# instalasi paket XML dibutuhkan sekali dan digunakan untuk seluruh sesi (jika program R masih belum terinstall paket XML )
install.packages('XML')
# Meload paket XML yang dibutuhkan untuk menarik data format xml
require(XML)
# Menginisialisasi sebuah variabel penyimpanan untuk tweet Twitter dengan membuat nama data baru yang akan diisi bentuk vector dengan data bentuk Character
mydata.vectors <- br="" character="">
# membuat paginasi untuk mendapatkan lebih banyak tweets (contohnya dengan nilai 400) dan memasukan "#Kota xxx" yang akan dilakukan mining
# membuat koneksi langsung dengan Feed Atom twitter
for (page in c(1:400))
{
# mencari parameter contohnya #Surabaya
twitter_q <- br="" urabaya="" urlencode=""> # Koneksi dengan URL
twitter_url = paste('http://search.twitter.com/search.atom?q=',twitter_q,'&rpp=100&page=', page, sep='')
# memperoleh remote URL dan memecah data
mydata.xml <- astext="F)<br" twitter_url="" xmlparsedoc=""> # ektraksi judul tabel twitter url
mydata.vector <- br="" http:="" mydata.xml="" namespaces="c(" s:entry="" s:title="" s="" tom="" www.w3.org="" xmlvalue="" xpathsapply=""> # mengumpulkan tweets baru dengan tweets sebelumnya dan memasukkannya ke .vectors dengan nama "mydata.vectors"
mydata.vectors <- br="" c="" mydata.vector="" mydata.vectors="">}
# Ada berapa Tweets ?
length(mydata.vectors)->->->->->
#-----------------------------------------------------------------------------------------#
###
### Menggunakan paket Text Mining (tm)
###
# melakukan instalasi paket twitter mining (jika program R di komputer belum terinstall)
install.packages('tm')
# mengambil dan menggunakan library tm (text mining)
require(tm)
# membuat sebuah corpus (kamus kata berupa kumpulan data text digital untuk dilakukan sebagai bantuan proses analisis data)
# corpus yang didapat dari pembentukan dari data vector disimpan dalam bentuk corpus dengan nama "mydata.corpus)
mydata.corpus <- br="" corpus="" ectorsource="" mydata.vectors="">
# merubah seluruh huruf data menjadi huruf kecil
mydata.corpus <- br="" mydata.corpus="" tm_map="" tolower="">
# menghapus tanda baca dalam tweets sebagai proses pembersihan
mydata.corpus <- br="" mydata.corpus="" removepunctuation="" tm_map="">
# menghapus kata-kata umum dan stopwords, dapat dimasukan kata-kata sebagai proses cleaning (seperti kata hubung, kata yang tidak penting)
my_stopwords <- ada="" aku="" atau="" bisa="" br="" c="" dan="" dapat="" dia="" english="" kalau="" kamu="" mana="" saya="" stopwords="" tak="" tetapi="" yang="">mydata.corpus <- br="" my_stopwords="" mydata.corpus="" removewords="" tm_map="">
# membangun sebuah term-document matrix yang disimpan dalam format ".dtm"
mydata.dtm <- br="" mydata.corpus="" termdocumentmatrix="">
# memeriksa document-term matrix
mydata.dtm
# memeriksa kata-kata yang paing populer dengan low frequent yang dapat ditentukan user, semakin kecil. data yang didapat semakin banyak
findFreqTerms(mydata.dtm, lowfreq=10)->->->->->->
#-----------------------------------------------------------------------------------------------#
# menampilkan kata yang berasosiasi terdekat dengan kata trending yang ditampilkan dalam proses mining di atas, sebagai contoh
# kata 'rsbi' sebagai kata trending yang muncul di proses sebelumnya
findAssocs(mydata.dtm, 'rsbi', 0.20)
# menghilangkan kerenggangan (jarak) untuk menghapus kerenggangan untuk simpkifikasi dengan cluster plotremove sparse terms to simplify the cluster plot
# menarik parameter untuk menentukan jumlah kata.
# nilai sparse atau kerenggangan dapat ditentukan. semakin kecil maka kemungkinan banyak data yang terfilter tetapi dilihat dari data tweet yang
# di mining, belum tentu data tweet yang dimining memiliki sparse yang tinggi ataupun rendah
mydata.dtm2 <- mydata.dtm="" removesparseterms="" sparse="0.95)<br">
# mengkonversi dokumen text mengkonversi matrik nilai kerenggangan ke sebuah standard data frame dan disimpan dalam bentuk .df
sby1.df <- as.data.frame="" br="" inspect="" mydata.dtm2="">
# periksa dimensi dari data frame
nrow(sby1.df)
ncol(sby1.df)->->
#-------------------------------------------------------------------------------------------------------#
# pembentukan dendrogram
sby1.df.scale <- br="" sby1.df="" scale="">d <- br="" dist="" distance="" matrix="" method="euclidean" sby1.df.scale="">fit <- br="" d="" hclust="" method="ward">plot(fit) # muncul dendogram?
#jumlah cut disesuaikan dengan jumlah data yang termining, jangan sampai melebihi jumlah tweet yang ter-mining.
groups <- 5="" br="" clusters="" cut="" cutree="" fit="" into="" k="7)" tree=""># gambar dendogram border cluster dengan warna merah
rect.hclust(fit, k=7, border="red")->->->->
#------------------------------------------------------------------------------------------------------#
# membuat matrik data dari data frame contohnya "sby1.df" dan dilakukan pemotongan data untuk kolom 1 sampai 11 dan baris 1 sampai 50 (jika data terlalu banyak)
# dilakukan penyimpanan data dalam bentuk matrik
# membuat adjacent matrik dari matrik sebelumnya dan disimpan dalam nama , contohnya "dotsby1"
sbyM <- br="" nbsp="" sby1.df="">dataM <- as.matrix="" br="" sbym="">dataM[dataM>=1] <- 1="" br="">dotsby1 <- br="" datam="" t="">View(dotsby1)->->->->
#-------------------------------------------------------------------------------------------------------#
#menggunakan library igraph dan RColorBrewer dari Package CRAN
#install package CRAN jika program R belum terdapat library igraph dan RColorBrewer
library(igraph)
library(RColorBrewer)
# set nilai 0 dalam diagonal matrix
diag(dotsby1) = 0
# membuat graph
g = graph.adjacency(dotsby1, weighted=TRUE, mode="undirected",
add.rownames=TRUE)
# membuat layout
glay = layout.fruchterman.reingold(g)
# membuat superimpose sebuah struktur cluster dengan k means clustering
kmg = kmeans(dotsby1, centers=6)
gk = kmg$cluster
# memilih desain plot masing masing dot
gbrew = c("red", brewer.pal(8, "Dark2"))
gpal = rgb2hsv(col2rgb(gbrew))
gcols = rep("", length(gk))
for (k in 1:8) {
gcols[gk == k] = hsv(gpal[1,k], gpal[2,k], gpal[3,k], alpha=0.5)
}
# mempersiapkan frame untuk plot
V(g)$size = 10
V(g)$label = V(g)$name
V(g)$degree = degree(g)
#V(g)$label.cex = 1.5 * log10(V(g)$degree)
V(g)$label.color = hsv(0, 0, 0.2, 0.55)
V(g)$frame.color = NA
V(g)$color = gcols
E(g)$color = hsv(0, 0, 0.7, 0.3)
# membuat plot
plot(g, layout=glay)
title("\n TWEET",
col.main="gray40", cex.main=1.5, family="serif")
#####################################################-----------############################## dilanjutkan####
RESULT :
No comments:
Post a Comment