2010-12-02 5 views
14

Ich mochte Python vorher, weil Python reich eingebaute Typen wie Sätze, Dicts, Listen, Tupel hat. Diese Strukturen helfen, kurze Skripts zum Verarbeiten von Daten zu schreiben.R als allgemeine Programmiersprache

Auf der anderen Seite ist R wie Matlab und hat Skalar, Vektor, Datenrahmen, Array und Liste als Datentypen. Aber es fehlen Sets, Dicts, Tupel usw. Ich weiß, dass der Listentyp mächtig ist, viele Operationen könnten als Listenverarbeitung gedacht werden. Aber die Idee, R als allgemeine Sprache zu verwenden, ist noch vage.

(Das folgende ist nur ein Beispiel. Nicht bedeuten, dass ich auf Textverarbeitung/Bergbau konzentrieren.)

Zum Beispiel, ich brauche für eine Reihe von Nachrichtenartikeln zählt TF-IDF zu tun (etwa 200.000 Artikel in einem Ordner und seinen Unterordnern).

Nachdem ich die Dateien gelesen habe, muss ich Word-to-ID-Mapping und andere Zählaufgaben tun. Diese Aufgaben umfassen die Manipulation von Zeichenfolgen und benötigen Container wie Set oder Map.

Ich weiß, dass ich eine andere Sprache verwenden kann, um diese Verarbeitung zu machen und die Daten in R zu laden. Aber vielleicht (für kleine Dinge) ist die Vorverarbeitung in einem einzigen R-Skript besser.

Also ist meine Frage ist R genügend Fähigkeit in dieser Art von reichen Datenstrukturen in der Sprachebene? Oder wenn nicht, bieten alle Pakete eine gute Erweiterung für R-Sprache?

+1

Es ist keine direkte Antwort auf Ihre Frage, aber sind Ihnen Dinge wie rpy2 bekannt? Es ermöglicht Ihnen, Python-Objekte in R-Objekte umzuwandeln und R-Funktionen für sie zu verwenden. So können Sie Python-Verarbeitung machen, und dann R-Verarbeitung im selben Skript, wenn auch mit einer etwas längeren Syntax. –

+0

@Thomas Nicht ganz eine Lösung. Meine Sorge ist, dass ich auf R bleiben und so wenig externe Dinge wie möglich verwenden möchte. Vor allem, wenn ich meinen Code herausgebe, wäre es besser, wenn der Endbenutzer nur R installieren muss. –

+0

Sets sind im Paket 'sets' verfügbar. Da Vektoren benannte Elemente haben, verhalten sie sich für die meisten Zwecke sehr ähnlich wie Dicts. (Ein data.frame mit ID- und Wertspalten funktioniert auch als Diktat.) –

Antwort

21

Ich denke, dass sich die Datenvorverarbeitbarkeit von R verbessert hat - dh alles, was aus der Extraktion von Daten aus der Quelle und unmittelbar vor den Analyse-Schritten resultiert wesentlich in den letzten drei Jahren (die Länge der Zeit, die ich R verwendet habe). Ich benutze Python täglich und habe in den letzten sieben Jahren oder so - seine Textverarbeitung Fähigkeiten sind hervorragend - und noch würde ich nicht zögern für einen Moment, um R für die Art von Aufgabe, die Sie erwähnen, zu verwenden.

Ein paar Vorbehalte obwohl.Erstens würde ich schlägt vor, suche sehr eng an ein paar der externen Pakete für den Satz von Aufgaben in Ihrem Q - insbesondere Hash (Python-like Schlüssel-Wert-Datenstruktur) und stringr (besteht hauptsächlich aus Umhüllungen über die weniger benutzerfreundlich Zeichenfolge Manipulationsfunktionen in der Basisbibliothek)

Sowohl stringr und hash auf CRAN verfügbar sind.

> library(hash) 
> dx = hash(k1=453, k2=67, k3=913) 
> dx$k1 
    [1] 453 
> dx = hash(keys=letters[1:5], values=1:5) 
> dx 
    <hash> containing 5 key-value pair(s). 
    a : 1 
    b : 2 
    c : 3 
    d : 4 
    e : 5 

> dx[a] 
    <hash> containing 1 key-value pair(s). 
    a : 1 

> library(stringr) 
> astring = 'onetwothree456seveneight' 
> ptn = '[0-9]{3,}' 
> a = str_extract_all(astring, ptn) 
> a 
    [[1]] 
    [2] "456" 

Es scheint auch, dass es eine große Teilmenge von R Benutzer ist für die Textverarbeitung und Textanalyse umfassen einen wesentlichen Teil ihres Tag-zu-Tag der Arbeit - wie Natural Language Processing Task View von CRAN belegt (eine von etwa 20 solche informellen domänenorientierten Paketsammlungen). In dieser Task-Ansicht befindet sich das Paket tm, ein Paket für Funktionen zum Text-Mining. Eingeschlossen in tm sind optimierte Funktionen für die Verarbeitung von Aufgaben wie die in Ihrer Frage erwähnt

Darüber hinaus hat R eine exzellente Auswahl an Paketen für auf recht große Datensätze interaktiv arbeiten (zB> 1 GB) oft ohne die Notwendigkeit, eine Parallelverarbeitungsinfrastruktur aufzubauen (die aber einen Cluster ausnutzen kann, wenn er verfügbar ist). Die beeindruckendsten von diesen sind meiner Meinung nach die Pakete unter der Rubrik "The Bigmemory Project" (CRAN) von Michael Kane und John Emerson in Yale; Dieses Projekt umfasst Bigmemory, Biganalytics, Synchronicity, BigTabulate und Bigalgebra. Zusammenfassend umfassen die Techniken hinter diesen Paketen: (i) Zuordnen der Daten zu gemeinsam genutztem Speicher, was die Koordination des gemeinsamen Zugriffs durch separate gleichzeitige Prozesse zu einer einzelnen Kopie der Daten ermöglicht; (ii) Datei-backed Datenstrukturen (die ich glaube, aber ich bin nicht sicher, ist gleichbedeutend mit einer Memory-Mapped-Dateistruktur, und die Arbeit ermöglicht sehr schnellen Zugriff von der Festplatte mit Zeigern wodurch die RAM-Grenze für verfügbare Dateigröße zu vermeiden) .

Noch ein paar Funktionen und Datenstrukturen in der R-Standardbibliothek machen es einfacher, interaktiv mit Daten zu arbeiten, die sich normalen RAM-Grenzen nähern. Zum Beispiel .rdata, ein gebürtiger Binärformat, ist ungefähr so ​​einfach wie möglich (die Befehle sind speichern und Last) zu verwenden, und es hat eine ausgezeichnete Kompression:

> library(ElemStatLearn) 
> data(spam) 
> format(object.size(spam), big.mark=',') 
    [1] "2,344,384" # a 2.34 MB data file 
> save(spam, file='test.RData') 

Diese Datei, ‚test. RData 'ist nur 176 KB, größer als 10-fach Komprimierung.

+0

+1 - gute Antwort! Ich habe dort einiges gelernt. – Chase

+0

+1 danke, dass wir auf die 'hash' und' tm' Pakete hingewiesen haben –

3

Dies ist einfach nicht wahr, dass R fehlt Sätze, dicts, Listen und Tupel; Sie sind nur als einige andere Strukturen implementiert. Natürlich kann die Leistung ein Problem sein, aber normalerweise ist es nicht schlimmer als das von Python und Sie können normalerweise ein Paket finden, das die Lösung als effizienten C-Code codiert hat.

Ich weiß nicht viel über Text Mining, aber tm Paket kann enthalten, was Sie wollen.

2

Sie sollten sich die ansehen.

Thema Rubriken:

Phonetik und Sprachverarbeitung:
Lexical Datenbanken:
Keyword Extraction and General String-Manipulation:
Natural Language Processing:
String Kerneln:
Text Mining:

Verwandte Themen