2

je voudrais calculer les règles d'association à partir d'un champ de texte à partir d'un ensemble de données tel que celui ci-dessous en utilisant Python:règles d'association en utilisant Python avec les données sous forme de phrase

ID fav_breakfast 
1 I like to eat eggs and bacon for breakfast. 
2 Bacon, bacon, bacon! 
3 I love pancakes, but only if they have extra syrup! 
4 Waffles and bacon. Eggs too! 
5 Eggs, potatoes, and pancakes. No meat for me! 

S'il vous plaît noter que Orange 2.7 n'est pas une option que j'utilise la version actuelle de Python (3.6), donc Orange 3 est un jeu équitable; Cependant, je n'arrive pas à comprendre comment ce module fonctionne avec des données dans ce format.

La première étape, dans mon esprit, serait de convertir ce qui précède dans une matrice clairsemée, comme la (tronquée) celle ci-dessous:

enter image description here

Ensuite, nous voulons supprimer arrêt les mots (ie, I, to, et, for, etc.), les majuscules/minuscules, les chiffres, la ponctuation, les mots tels que pommes de terre, pommes de terre, pommes de terre, etc. (avec lemmatisation). Une fois cette matrice fragmentée en place, l'étape suivante consistera à calculer les règles d'association entre tous les mots/toutes les chaînes de la matrice éparse. Je l'ai fait dans R en utilisant le paquet arules; Cependant, je n'ai pas été en mesure d'identifier un "arules équivalent" pour Python. La solution finale que j'imagine inclurait une liste d'arguments côté gauche et côté droit avec le support, la confiance et l'élévation des règles dans l'ordre décroissant avec les règles de levée les plus élevées en haut et en bas. règles au fond (encore une fois, assez facile à obtenir en R avec arules). En outre, je voudrais avoir la possibilité de spécifier le côté droit de "bacon" qui montre également le soutien, la confiance et la portance des règles dans l'ordre décroissant avec les règles les plus élevées en ce qui concerne "bacon" "au sommet et au plus bas des règles de levage par rapport à" bacon "au fond.

L'utilisation de Orange3-Associate sera probablement la voie à suivre ici; Cependant, je ne trouve pas de bons exemples sur le web. Merci d'avance pour votre aide!

Répondre

0

Est-ce ce que vous aviez en tête? Orange devrait être en mesure de transmettre les résultats d'un module complémentaire et de les utiliser comme entrées dans un autre module.

enter image description here

[EDIT] Je a pu reconstituer le cas dans le code, mais il est beaucoup moins sexy:

import numpy as np 
from orangecontrib.text 
import Corpus, preprocess, vectorization 
from orangecontrib.associate.fpgrowth import * 

data = Corpus.from_file("deerwester") 
p = preprocess.Preprocessor() 
preproc_corpus = p(data) 
v = vectorization.bagofwords.BoWPreprocessTransform(p, "Count", preproc_corpus) 
N = 30 
X = np.random.random((N, 50)) > .9 
itemsets = dict(frequent_itemsets(X, .1)) 
rules = association_rules(itemsets, .6) 
list(rules_stats(rules, itemsets, N)) 
+0

Merci @vijolica, je ne suis pas trop familier avec Orange GUI; Cependant, ce type de sortie ferait l'affaire. Les zones floues que j'ai avec ceci sont 1) Quel est le format de vos données (corpus)? 2) Que faites-vous/Orange dans la phase de pré-traitement? 3) Êtes-vous capable de regarder le (s) programme (s) Python utilisé (s) pour exécuter l'une des 4 étapes de ce processus? En d'autres termes, pouvons-nous prendre les programmes Python utilisés dans l'interface graphique d'Orange et copier/coller dans d'autres IDE Python? Merci encore pour votre aide! –

+1

Ad 1) Le format habituel dans Orange est délimité par des tabulations, mais vous pouvez essentiellement utiliser Excel ou .csv. Ad 2) Le pré-traitement est ici un simple défaut: minuscule, tokenize par mots, omettre la ponctuation, filtrer les mots vides. Important! Le tableau clairsemé requis ici est généré dans Bag of Words qui génère le nombre de mots. Ad 3) Malheureusement pas encore.Orange enveloppe nltk et d'autres fonctions Python, de sorte que vous pouvez, en théorie, regarder le code source d'Orange et essayer d'extraire des fonctions valides. Pas une tâche simple. : O – vijolica

+0

Merci encore de continuer à avancer! J'ai quelques autres questions, mais je vais juste demander un pour l'instant - En essayant d'installer 'orangecontrib.text', j'obtiens l'erreur suivante" PackageNotFoundError: Package manquant dans les canaux actuels win-64: -orangecontrib.text. en utilisant pip, pip3, et conda, mais n'a pas eu de chance dans l'invite de commande Anaconda Pensées? Merci encore de m'avoir aidé à naviguer à travers ces obstacles –