bioR: http://www.bior.hu molekuláris biológia, ökológia és még sok minden más ... Sat, 13 Feb 2016 15:43:00 +0000 hu-HU hourly 1 https://wordpress.org/?v=4.5.31 R és python http://www.bior.hu/2015/08/08/r-es-python/ http://www.bior.hu/2015/08/08/r-es-python/#comments Sat, 08 Aug 2015 07:08:52 +0000 http://www.bior.hu/?p=227 R és python bővebben... ]]> 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

# rPython csomag betöltése
library(rPython)

# a tweet-ek behívása
tweet<-as.character(readLines("tweet_data.txt")) # a tweet-ek tisztítása: #,@ jelek törlése a szövegekből. tweet<-gsub("#","",tweet) tweet<-gsub("@","",tweet) tweet<-gsub("\"","",tweet) tweet<-gsub("\n","",tweet) # a változó átalakítása, hogy a python scriptbe tudjuk ágyazni # idézőjeleket teszünk a tweet-ek elejére és végére tweet<-paste("\"",tweet,"\"",sep="") # vessző hozzáfűzése minden tweet végéhez az idézőjel után, # kivéve az utolsó sornál tweet[1:(length(tweet)-1)]<-paste(tweet[1:(length(tweet)-1)],",",sep="") # python fájl kiírása egy fájlba # a számított értékeket először a "bs" változóba tároljuk, majd # a "mylist" listába gyűjtjük össze az összeset és ezt adjuk át az R-nek fajl<-"tweet_vaderSentiment.py" cat("from vaderSentiment.vaderSentiment import sentiment as vaderSentiment\n", file =fajl) cat("sentences = [\n",file=fajl,append=T) cat(paste(" ",tweet,sep="\n"),file=fajl,append=T) cat(" \n",file=fajl,append=T) cat(" ]\n",file=fajl,append=T) cat("mylist=[]\n",file=fajl,append=T) cat("for sentence in sentences:\n",file=fajl,append=T) cat(" bs=vaderSentiment(sentence)\n",file=fajl,append=T) cat(" mylist.append(bs)\n",file=fajl,append=T) # python kód betöltése és futtatása python.load("tweet_vaderSentiment.py") # az eredmények átemelése R-be res.tweet<-python.get("mylist") # az adatok adattáblába rendezése res.tweet<-as.data.frame(do.call(rbind,res.tweet)) # az összesített eredmények egyszerű ábrázolása plot(res.tweet$compound,main="Results of Vader Sentiment analysis",xlab="",ylab="compound values") abline(h=0.05,col="red") abline(h=-0.05,col="red") text(50,-0.7,"negative") text(50,0.8,"positive") 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! 🙂

]]>
http://www.bior.hu/2015/08/08/r-es-python/feed/ 1
ShinyR bevezetés http://www.bior.hu/2015/07/01/shinyr-bevezetes/ http://www.bior.hu/2015/07/01/shinyr-bevezetes/#comments Wed, 01 Jul 2015 18:59:35 +0000 http://www.bior.hu/?p=121 ShinyR bevezetés bővebben... ]]> A Shiny egy az R-hez kifejlesztett keretrendszer, amellyel egyszerűen keszíthetünk dinamikus weboldalakat. További, és részletes leírás az Shiny R oldalán.

Kezdjünk egy egyszerű példával 🙂
Bővebb részletesebb leírás hamarosan 🙂

Minimum két fájl szükséges a Shiny használatához:

ui.R – user-interface: ez fogja a böngészőben megjeleníteni, amit szeretnénk
server.R – server-interface: ez végzi a szerver oldali számításokat, ami dinamikusan változik és az ui.R megjeleníti az eredményt.

A fentebbi példához tartozó R scriptek.

##### server.R #####

# shiny és a csomagok betöltése
# datasets (ehhez a példához innen veszük az adatokat)
library(shiny)
library(datasets)

# a "shinyServer" definiálása, amihez meg kell adni az in-, és output elemeket
# output elemként egy barplot-ot fogunk megadni
shinyServer(function(input, output) {

# elkészítjük az ábrát, barplot-ot
# majd a renderPlot funkcióval átadjuk az output-nak
output$phonePlot <- renderPlot({ # Barplot készítése barplot(WorldPhones[,input$region]*1000, main=input$region, ylab="Telefonok száma", xlab="Év") }) })

##### ui.r #####

library(shiny)
library(datasets)

# Létrehozzuk az UI-it (User Interface).
shinyUI(
fluidPage(
# itt megadjuk az oldal címét
titlePanel("Telefonok megoszlása"),
# Oldalbár készítése
sidebarLayout(
# ebben az esetben az odalbárba 1 input elemet adunk meg
sidebarPanel(
selectInput("region", "Régió:",
# itt adjuk meg, hogy mik közül lehessen választani
choices=colnames(WorldPhones)),
helpText("Data from AT&T (1961) The World's Telephones.")
),

# elkészítjük a "mainPanel"-re az ábrát
mainPanel(
plotOutput("phonePlot")
)
)
)
)

]]>
http://www.bior.hu/2015/07/01/shinyr-bevezetes/feed/ 1
Adatok importálása http://www.bior.hu/2015/07/01/adatok-importalasa/ http://www.bior.hu/2015/07/01/adatok-importalasa/#comments Wed, 01 Jul 2015 12:02:25 +0000 http://www.bior.hu/?p=27 Adatainkat sokféleképpen importálhatjuk, ezek közül mutatunk néhányat példát.

# ha csv (comma separeted values) formátumba vannak az adatok
# a header=TRUE csak akkor szükséges, ha fejléc is van
df<-read.csv("sample.csv", header=TRUE) # ha egy sima txt-ben vannak az adatok és tabulator a szeparatorunk ("\t") df<−read.table("sample.txt",header=TRUE,sep="\t") # ha xlsx-ben tároljuk az adatokat, akkor egy lehetséges megoldás, hogy # először behívjuk az XLConnect csomagot # betöltjük az xlsx fájlt, majd végül az adott munkalapot library(XLConnect) wb<-loadWorkbook("sample.xlsx", create = FALSE) df<-readWorksheet(wb, sheet = "Sheet1") # ha json (JavaScript Object Notation) formátumba vannak rendezve az adatok: library(rjson) df<-fromJSON(file="sample.json") # ha mysql adatbázisban vannak az adataink # akkor a RMySQL lehet a segítségünkre library(RMySQL) mydb<-dbConnect(MySQL(),user="root",password="pass",dbname="sampleDB",host="localhost") df<-dbReadTable(mydb, "adattabla_neve")

Felhasznált adatok:
sample.csv
sample.txt
sample.xlsx
sample.json

Természetesen ezek mellett még számos más lehetőség is van 🙂

]]>
http://www.bior.hu/2015/07/01/adatok-importalasa/feed/ 1
Parallel http://www.bior.hu/2015/06/06/parallel/ http://www.bior.hu/2015/06/06/parallel/#comments Sat, 06 Jun 2015 17:27:05 +0000 http://www.bior.hu/?p=40 Parallel bővebben... ]]> Nagyon sok érdekes és hasznos csomag található meg a CRAN-on, ezek közül szeretnénk bemutatni párat. Először a parallel csomagot, amivel egyszerre több szálon futtathatunk elemzéseket. Ehhez az mclapply() függvényre lesz szükségünk:

parancs: mclapply(adat,function(x) végrehajtandó feladat)

1. adat = ez lesz az, amin lefut a “végrehajtandó feladat

2. a function(x) utáni rész mondja meg, hogy mi lesz a “végrehajtandó feladat

3. végrehajtandó feladat


library(parallel)

# példa (1):
system.time(mclapply(1:2, function(x) Sys.sleep(5)))
# user system elapsed
# 0.008 0.015 5.016

# példa (2):
adat<-1:2 alvas<-function(x){Sys.sleep(5)} system.time(mclapply(adat,function(x) alvas(x))) # user system elapsed # 0.014 0.011 5.013

A példa (2)-ben egy saját függvényt készítettünk, majd hívtunk meg. Saját függvénnyel gyakorlatilag bármit többszálúsíthatunk. 🙂

Ilyen egyszerű 🙂 Legalábbis Linuxos rendszer alatt 🙁

A Windows-os rendszer másképpen kezeli a többmagos rendszereket, ezért módosítani kell az mclapply()-t. Ezt az alábbi link segítségével tehetjük meg:

Módosított mclapply()

Egyszerűen behívjuk az R-be a linken megadottakat és máris működni fog Windows alatt is 😀

]]>
http://www.bior.hu/2015/06/06/parallel/feed/ 1