Herzlich Willkommen

Live processing contents

Wednesday, January 23, 2013

Twitter Mining dengan R - rattle

* 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