2017-03-23 1 views
1

Je suis intéressé par la science des données et je suis tout à fait nouveau à knime. J'ai une question sur le regroupement des données dans Excel. J'ai un fichier xlsx avec deux colonnes. Dans le fichier xlsx il y a des informations sur 2000 personnes. Ces titres d'information sont dans la colonne A, et les infos sont dans la colonne B. dans les données, lorsque l'information d'une personne est complétée, l'ordre des données de l'autre personne commence. Il y a environ 10 titres uniques dans la colonne A. Les gens ont certains de ces titres, peut-être que certaines personnes ont tout. Ce que je veux faire est de convertir ces données dans des colonnes par des titres uniques dans la colonne A et écrire les données dans la colonne B en rangées. Mais comment?Comment grouper des rangs avec une valeur unique en knime?

image d'abord comment mes données ressemble et image deuxième est ce que je veux faire: That is how my data looks: That is what i want

+0

Dans HiTS, j'avais un nœud pour cela, [Pivot] (https://raw.githubusercontent.com/aborg0/hits/master/com.mind_era.knime.util/html/nodes/Pivot.html), Vérifiez les exemples. Comme vos groupes ont des longueurs différentes, il n'est pas possible de faire la solution de boucle de groupe, de transposition et de boucle de groupe plus facile. Peut-être que Python, R ou autre chose peut aider ici. –

Répondre

1

Vous devez ajouter une colonne à vos données qui identifie un groupe chaque ligne appartient, puis vous pouvez utiliser le noeud Pivot pour le transformer comme vous le souhaitez. Le plus simple est d'utiliser une formule qui renvoie la valeur de la cellule ci-dessus, plus 1 si la cellule de la colonne A est égale à "nom", ce qui donne un nombre qui augmente de 1 pour chaque changement de prénom.

Si vous ne pouvez pas modifier la source Excel, la façon la plus simple de le faire dans KNIME serait avec un fragment Java, R ou Python, comme le suggère Gábor.Toutefois, si vous voulez vraiment faire dans KNIME pur, voici un flux de travail lent et complexe:

KNIME workflow to add group IDs

Les noeuds doivent être configurés comme suit:

  • Excel lecteur retourne une table avec des colonnes Col0 et Col1
  • un à plusieurs comprend Col0 mais exclut Col1 - ce GIV nous es une colonne name contenant 1 chaque fois Col0 est name (également des colonnes pour chacune des autres valeurs possibles, mais nous ne les utiliser)
  • Créer table Structure crée 1 colonne entier nommé Group 0
  • Colonne Appender est configuré pour les touches de ligne non identiques et des longueurs de table, et d'utiliser des clés de ligne de la première table
  • valeurs manquantes remplace les valeurs manquantes numériques avec la valeur fixe 0

À ce stade, la table devrait ressembler à:

KNIME table

intérieur de la boucle récursive,

  • Math Formula remplace la colonne Group 0 avec la formule $Group 0$+$${Iname}$$ - qui prend la valeur précédente Group 0 et ajoute la valeur name à partir de la première ligne de l'itération en cours de la table (via Table Row to Variable 0 Le séparateur de ligne est configuré pour 'Inclure les lignes par numéro' et sort les lignes 2 - fin vers le port supérieur et la ligne 1 vers le port inférieur.

La colonne Group 0 contient maintenant une valeur qui augmente sur chaque nom:

KNIME table 2

Enfin, le noeud pivotant est configuré pour regrouper sur Group 0, pivot sur Col0 et d'agrégat sur Col1 par le First méthode, donnant:

KNIME table 3

que vous pouvez filtrer, réorganiser etc comme vous avez besoin. Il devrait être possible d'omettre le Un à Beaucoup et de configurer simplement Math Formula pour ajouter 1 à chaque fois que la variable pour Col0 équivaut à 'name', mais je ne pouvais pas le faire fonctionner la première fois alors je l'ai laissé tel quel.Notez que cela ne fonctionnera que si name est toujours la première ligne pour chaque personne dans la table, mais je ne vois pas comment vous pourriez interpréter sans ambiguïté les données si ce n'était pas le cas.

Si quelqu'un a une implémentation KNIME plus rapide ou plus concise je serais heureux de le voir!