Question

Je travaille sur un projet où j'ai beaucoup d'analystes créer des modèles statistiques dans l'affaire R. Ils me fournissent habituellement les objets du modèle (fichiers .rdata) et je les automatiser l'exécution de différents ensembles de données.

Mon problème est:

  • Puis-je utiliser une base de données et enregistrer ces fichiers .rdata là? Tous les conseils sur cette opération? (Je stocke actuellement les fichiers .rdata sur le disque et utiliser une base de données pour les informations de localisation du magasin)

  • Je reçois beaucoup de scripts R d'autres analystes qui ont fait une pré-traitement des données avant de créer les modèles. Quelqu'un at-il une expérience en utilisant PMML pour faire de ce processus répétable sans intervention manuelle? magasins PMML les étapes de pré-traitement, les étapes de modélisation comme balises, et répéterait la même chose sur un nouveau jeu de données.

Merci pour les suggestions et les commentaires.

-Harsh

Était-ce utile?

La solution

Oui, cela est possible en utilisant par exemple MySQL lié à R avec le paquet RMySQL et DBI, ou par l'intermédiaire du paquet de RODBC ou RJDBC. Je ne suis pas sûr à 100% si tous les blobs de soutien, mais le pire des scénarios, vous pouvez utiliser la représentation ascii et les mettre dans un champ de texte.

L'astuce utilise la fonction serialize()

> x <- rnorm(100)
> y <- 5*x+4+rnorm(100,0,0.3)
> tt <- lm(y~x)
> obj <- serialize(tt,NULL,ascii=T)

Maintenant, vous pouvez stocker ou récupérer obj dans une base de données. Il est en fait pas plus d'un vecteur de codes ascii (ou binaires). ascii = F vous donne une représentation binaire. Après avoir récupéré, vous utilisez:

> unserialize(obj)
Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
      4.033        4.992  

Edit: en ce qui concerne la PMML, il y a un paquet de pmml sur CRAN. Peut-être que l'on vous obtient quelque part?

Autres conseils

R peut sérialiser et désérialiser any objet, qui est la façon dont mon digest package crée soi-disant « digests de hachage » en exécutant une fonction de hachage sur l'objet sérialisé.

Donc, une fois que vous avez l'objet sérialisé (qui peut être sérialisé à character), le stocker. Toute base de données relationnelle soutiendra ce, tout comme les magasins clés NoSQL / valeur -. Et pour les deux back-end vous pouvez même utiliser le « digest hachage » comme une clé, ou une autre méta-informations

D'autres alternatives sont par exemple RProtoBuf qui peut également sérialiser et désérialiser très efficace (mais vous devez écrire les fichiers .proto premier).

Notez qu'un fichier .rdata peut contenir de nombreux objets R, vous devez décider comment faire face à cela. Si vous attachez le fichier .rdata vous pouvez obtenir les objets qu'il contient avec ls () avec un argument pos:

> attach("three.RData")
> ls(pos=2)
[1] "x" "y" "z"

vous pouvez passer en boucle les, faites-les () par le nom de la position, et sérialisation à une liste (p est mon index de liste)

> s=list()
> p=1
>  for(obn in obnames){
+ s[[p]] = serialize(get(obn,pos=2),NULL,ascii=TRUE)
+ p=p+1
+ }

Maintenant, vous aurez à faire gicler les éléments de s à votre DB, probablement dans une table de nom (une sorte de char) et la valeur (les données sérialisées, un blob ou varchar je suppose).

Comme d'autres l'ont dit, oui, vous pouvez enregistrer les sorties de modèles sous forme de texte dans votre base de données. Je ne suis pas convaincu que ce WLL être très utile pour vous cependant.

Si vous voulez être en mesure de recréer ces modèles à une date ultérieure, vous devez stocker l'ensemble des données d'entrée et le code qui a créé les modèles, plutôt que la sortie.

Bien sûr, vous pouvez stocker la sortie du modèle ainsi, dans ce cas, vous devez penser à son format dans la base de données. Si vous voulez être en mesure de trouver notamment les résultats du modèle et le filtre ou les commander, il sera beaucoup plus facile si vous les ajoutez à la base de données avec une certaine structure (et certaines métadonnées).

Par exemple, vous pourriez vouloir récupérer tous les modèles où il y avait une réponse significative entre les sexes. Dans ce cas, vous devez ajouter cette information comme un champ distinct dans la base de données plutôt que d'avoir à rechercher à travers les morceaux de ascii. Ajout d'autres informations comme le créateur de modèle et la date de création vous aidera également à plus tard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top