Egyéb kategória bejegyzései

R és python

Egy rövid project (twitter sentiment analysis with vaderSentiment method) keretein belül az rPython csomagot használtuk és az ezzel kapcsolatos tapasztalatot szeretnénk most megosztani.

A project során tweet-ket gyűjtöttünk és egy adattáblába szerveztük őket. Ezután a python nyelven megírt VaderSentiment módszerrel elemeztük a tweeteket. A módszer lényege, hogy egy adott szöveget a benne lévő szavak, hangulatjelek és egyéb más rövidítések (pl.: LOL stb.) alapján számít ki 4 értéket (negatív, neutrális, pozitív és összesített).

Egy példa, a kapcsos zárójelben a számított értékek:

“VADER is smart, handsome, and funny.”
{‘neg’: 0.0, ‘neu’: 0.254, ‘pos’: 0.746, ‘compound’: 0.8316}

Értékelés:

A mondatban nem volt negatív töltésű rész. Körülbelül a szöveg ~25%-a semleges, míg a maradék ~75% pozitív kincsengésű volt. Összességében a normalizált “compound” érték 0.83 volt (-1 és 1 között lehet). Ha > 0.05, akkor pozitív, ha < -0.05, akkor negatív töltöttségű a szöveg. Ha ez az érték -0.05 és 0.05 között van, akkor semlegesnek tekinthető. Bővebb leírás itt.

50 darab tweet a #ecology tag-re keresve….adat

01
# rPython csomag betöltése
02
library(rPython)
03
 
04
# a tweet-ek behívása
05
tweet<-as.character(readLines("tweet_data.txt"))
06
 
07
# a tweet-ek tisztítása: #,@ jelek törlése a szövegekből.
08
tweet<-gsub("#","",tweet)
09
tweet<-gsub("@","",tweet)
10
tweet<-gsub("\"","",tweet)
11
tweet<-gsub("\n","",tweet)
12
 
13
# a változó átalakítása, hogy a python scriptbe tudjuk ágyazni
14
# idézőjeleket teszünk a tweet-ek elejére és végére
15
tweet<-paste("\"",tweet,"\"",sep="")
16
# vessző hozzáfűzése minden tweet végéhez az idézőjel után, 
17
# kivéve az utolsó sornál
18
tweet[1:(length(tweet)-1)]<-paste(tweet[1:(length(tweet)-1)],",",sep="")
19
 
20
# python fájl kiírása egy fájlba
21
# a számított értékeket először a "bs" változóba tároljuk, majd
22
# a "mylist" listába gyűjtjük össze az összeset és ezt adjuk át az R-nek
23
fajl<-"tweet_vaderSentiment.py"
24
cat("from vaderSentiment.vaderSentiment import sentiment as vaderSentiment\n", file =fajl)
25
cat("sentences = [\n",file=fajl,append=T)
26
cat(paste(" ",tweet,sep="\n"),file=fajl,append=T)
27
cat(" \n",file=fajl,append=T)
28
cat(" ]\n",file=fajl,append=T)
29
cat("mylist=[]\n",file=fajl,append=T)
30
cat("for sentence in sentences:\n",file=fajl,append=T)
31
cat(" bs=vaderSentiment(sentence)\n",file=fajl,append=T)
32
cat(" mylist.append(bs)\n",file=fajl,append=T)
33
 
34
# python kód betöltése és futtatása
35
python.load("tweet_vaderSentiment.py")
36
# az eredmények átemelése R-be
37
res.tweet<-python.get("mylist")
38
# az adatok adattáblába rendezése
39
res.tweet<-as.data.frame(do.call(rbind,res.tweet))
40
 
41
# az összesített eredmények egyszerű ábrázolása
42
plot(res.tweet$compound,main="Results of Vader Sentiment analysis",xlab="",ylab="compound values")
43
abline(h=0.05,col="red")
44
abline(h=-0.05,col="red")
45
text(50,-0.7,"negative")
46
text(50,0.8,"positive")
47
text(2,0.08,"neutral")

res_tweet

Az R és a python együttes használatával egy olyan eszköztárat kapunk, amivel gyakorlatilag bármilyen problémát meg lehet oldani! 🙂