2016-06-28 2 views
0

(Tut mir leid, Stücke von schlechten Formatierung in Frage)Integration von R-Skript mit Python - Fehler beim Laden der Pakete

Ich versuche, eine GUI in Python für meine Sentiment Analysis Programm zu schaffen, die in R. codiert wurde Es sieht wie folgt aus.

#!/usr/bin/python 
from os import * 
from subprocess import * 
from tkinter import * 

class Application(Frame): 
    #A GUI Application 

    def __init__(self,master): 
     #Initialise the frame 
     Frame.__init__(self,master) 
     self.grid() 
     self.create_widgets() 

    def create_widgets(self): 
     #Create the Sentiment Analysis GUI 
     #required to display whatever grid we have prepared? 
     self.label=Label(self,text="Welcome to Sentiment Analysis GUI!") 
     self.label.grid() 

     #Get Tweets 
     self.stream=Button(self,text="Stream the tweets",command=self.runprogram) 
     self.search=Button(self,text="Search the tweets",command=self.runr) 
     self.stream.grid() 
     self.search.grid() 


     #Manually classify the tweets 
     self.label_tweets=Button(self,text="Label the tweets") 
     self.label_tweets.grid() 
     #try and put select how many to label 
     #save these labels along with topic 


     #train button 
     self.train=Button(self,text="Train_the_system") 
     self.train.grid() 

     #"classify the rest" button 
     self.classify=Button(self,text="Classify the rest of tweets") 
     self.classify.grid() 

     #Demographic Analysis 
     self.demographic=Button(self,text="Do the Demographic Analysis") 
     self.demographic.grid() 

    def runprogram(self): 
     #system("python try.py") 
     chmod(r'E:\OneDrive\Interns\project\twitter',0o777) 
     system(r"Rscript E:\OneDrive\Interns\project\twitter\products_vape.R") 

    #this is not required 
    def runr(self): 
     command=Rscript 
     path2script='E:\OneDrive\Interns\project\twitter\products_vape.R' 
     cmd=[command,path2script] 
     #call(cmd,shell=True) 
     x=check_output(cmd,universal_newlines=True,shell=True) 
     #print('abc',x) 

root=Tk() 
root.title("Sentiment Analysis") 
root.geometry("500x200") 

app=Application(root) 

root.mainloop() 

In diesem Code habe ich erstellt Tasten für verschiedene Operationen wie "System-Train", "die Tweets Label" - die alle selbsterklärend sind.

Ich habe versucht, zwei Versionen versuchen, meine rcode in self.stream und self.search auszuführen. Der runr funktioniert überhaupt nicht - "name Rscript is not defined" ist der Fehler, der ausgelöst wird. Während runprogram funktioniert, kann jedoch keine Bibliotheken laden. Die rcode für products_vape.R ist wie folgt:

library(RMySQL) 
library(DBI) 
library(RJSONIO) 
library(streamR) 
library(stringr) 
library(rjson) 
load("C:\\Users\\Invincibles\\Documents\\cred.Rdata") 
tweets<-filterStream(file.name="vape and ecigs.json",language="en",track=c("Vape","Vaping","e-cigarette","e-cig","ecigarette","ecig","e cig","e cigarette"), oauth=cred,verbose = TRUE) 


vapes <- parseTweets("vapes and ecigs.json", simplify = FALSE) 
tweets.filter <- tweets.df[ which(tweets.df$country_code=="IN"), ] 

Der Fehler den Strom in der Tweets Taste auf Klick ist :

nur „Fehler in der Bibliothek (RMySQL) kein Paket‚RMySQL‘genannt wird“ Für den Datensatz läuft dieser Code einwandfrei, wenn ich mit Rscript im Befehlsfenster oder in RStudio laufe.

Ich habe versucht, Bibliothek zu ändern, aber es gibt einen ähnlichen Fehler.

Zu einem separaten, aber damit verbundenen Hinweis, wird es möglich sein, dies durch die Integration jeder Schaltfläche mit R-Dateien zu tun?

Zum Beispiel in würde ich erfordern, die Karten von RMaps mit Heat Maps usw. als Pop-out in "die demografische Analyse" Button auszugeben?

+0

Versuchen Sie, den Code oben in R: '.libPaths (dir \ to \ package) zu platzieren.' – Parfait

+0

Es funktionierte für das Bibliotheksproblem. Jetzt wollte ich eine Möglichkeit geben, das Streaming von Tweets fortzusetzen, während ich simultan auf die gedumpten Tweets zugreifen kann - klassifiziere sie und führe eine demografische Analyse durch. Grundsätzlich möchte ich ein neues Fenster/Instanz von Python/cmd/r gestartet werden, die es mir erlauben würde, auch andere Buttons anzuklicken und auszuführen. Wie gehe ich vor, um diese Aufgabe auszuführen? (Sollte ich dies als separate Frage posten) – user3109578

+0

Ja, posten Sie als separate Frage und illustrieren Sie Ihre Bedürfnisse mit Daten und/oder Screenshots (vor allem da es sich um eine UI handelt). – Parfait

Antwort

0

In verschiedenen Umgebungen werden die Bibliothekspfade beim Aufruf von R-Skripts mit speziellen Paketen aus Python möglicherweise nicht vollständig auf Python erkannt.

zu beheben, versuchen .libPaths() an der Spitze des Code in R platzieren Stellen explizit zu definieren:

.libPaths("dir/to/package") 

library(RMySQL) 
library(DBI) 
library(RJSONIO) 
library(streamR) 
library(stringr) 
library(rjson) 
... 

Alternative gibt es das lib.loc Argument, das standardmäßig NULL ist und verwendet die Bibliothek Bäumen in .libPaths():

library(RMySQL, lib.loc="dir/to/package") 
library(DBI, lib.loc="dir/to/package") 
library(RJSONIO, lib.loc="dir/to/package") 
library(streamR, lib.loc="dir/to/package") 
library(stringr, lib.loc="dir/to/package") 
library(rjson, lib.loc="dir/to/package")