Schlüsselwort-Kookkurenznetzwerke in JMP?Hallo Community! Hat jemand herausgefunden, wie man in JMP ein Schlüsselwort-Kookkurenz-Netzwerkdiagramm erstellt, das als Skript in der Datentabelle gespeichert werden kann und mit anderen Diagrammen interaktiv ist? Ich kann R aufrufen, um das Diagramm zu erstellen, aber es ist statisch, wenn ich es zurück zu JMP bringe. Ich bin ein normaler JMP-Benutzer und würde gerne eine Lösung finden, die nicht die Worte „nur in JMP Pro verfügbar“ enthält, da eine JMP Pro-Lizenz weit außerhalb meines Budgets liegt. Vielen Dank im Voraus für Ratschläge, die jeder geben kann.Automatisierung und SkripterstellungBetreff: Keyword-Kookkurenznetzwerke in JMP?Hallo Craige, hat wunderbar funktioniert! Danke schön. Ich habe meine Grafik unten angehängt. Da ich alle meine Korpuskurationsschritte als Spalteneigenschaften gespeichert habe (Neucodierungen, Phrasen, Stoppwörter, Stammausnahmen), werden sie automatisch angewendet, wenn das Skript ausgeführt wird. Ich werde mit einigen Parametern experimentieren, um zu sehen, wie sie sich auf das resultierende Diagramm auswirken. Ich habe viele Anwendungen, bei denen diese Art von Grafik hilfreich ist, zumindest während der Datenexplorationsphase, daher werde ich dieses Skript immer wieder verwenden. Nochmals vielen Dank für all Ihre Hilfe!
Casey
Betreff: Keyword-Kookkurenznetzwerke in JMP?Sehr schön!
Stemming might help combine some of the near-duplicatesStemming might help combine some of the near-duplicatesStemming könnte helfen, einige der Beinahe-Duplikate zu kombinieren
Das Problem scheint JMP 15 vs. 16 zu sein; Sie können stattdessen Ihre eigene Beschriftungsspalte erstellen:
// load some documents that might separate into some categories
dt1 = Open( "z:/Fully Screened Subset With Abstracts and LatLongs.jmp" ); // 5000 is too many, subset 36...
originalnames = dt1 << getColumnNames();
te = dt1 << Text Explorer(
Text Columns( :AbstractProofed ), // the entire document is in one cell of the row
Add Stop Words(
{"agreement", "almost", "another", "company", "copyright holder", "electronic", "foundation", "gutenberg", "literary archive", "little",
"person or entity", "project", "public domain", "research", "without", "ebooks", "enough", "though", "rather", "better", "common", "possible",
"weight", "present", "series", "necessary", "placed", "therefore", "towards", "footnote", "something","slowly","around","behind","looking","seemed","nothing",
"probably","called","easily","distributing","paragraph"
}
),
Minimum Characters per Word( 6 ),
Stemming( "no stemming" ), //"Stem for Combining"
Language( "English" )
);
//te << savedocumenttermmatrix( Maximum Number of Terms( 300 ), Minimum Term Frequency( 25 ), Weighting( "TF IDF" ) );//BINARY would use ALL rather than !any, below
te << savedocumenttermmatrix( Maximum Number of Terms( 100 ), Minimum Term Frequency( 25 ), Weighting( "BINARY" ) ); // 0 or 1 if it occurs
te << closewindow;
// remove all-connected columns
allnames = dt1 << getColumnNames();
For( iname = N Items( allnames ), iname > N Items( originalnames ), iname -= 1,
// If( !Any( dt1[0, iname] ),
If( All( dt1[0, iname] ),
dt1 << deletecolumns( iname )
)
);
allnames = dt1 << getColumnNames();
cols = (N Items( originalnames ) + 1) :: N Items( allnames );
//
//dt1 << Hierarchical Cluster( Y( allnames[cols] ),
// Label( Transform Column( "Label", Character, Formula( Left( left(LoC Class,4)||:Subject||:Title, 20 ) ) ) ), // build your own identifier here
// Method( "Ward" ), Standardize Data( 1 ), Dendrogram Scale( "Distance Scale" ),
// Number of Clusters( 4 ), Constellation Plot( 1 ), Show Dendrogram( 0 ),
// SendToReport(Dispatch({"Constellation Plot"},"Clust Hier",FrameBox,{Frame Size( 1056, 716 )}))
//);
dt2 = dt1 << Data Table( "Fully Screened Subset With Abstracts and LatLongs" ) << Transpose(
columns( allnames[cols] ),
Label( :Title),
Label column name( "Title" ),
Output Table( "Transpose of Fully Screened Subset With Abstracts and LatLongs" )
);
dt2<<NEWCOLUMN></NEWCOLUMN>
Da ich eine Beschriftungsspalte hinzugefügt habe, musste ich diese in der Spaltenliste berücksichtigen.
Es gibt keinen wirklichen Unterschied zwischen dieser Anzeige und der normalen Cluster-Dendogramm-Anzeige; Der eingekreiste Knoten in diesem Diagramm ist die Wurzel des Dendogramms und alles andere ist nur in einem kreisförmigen Muster aufgefächert. Das Ist leichter zu lesen. Möglicherweise müssen Sie Ihrem Publikum sagen, dass es die Länge des Verbindungspfads zwischen Wörtern (nicht nur die Nähe) als Maß für die Verbundenheit verwenden soll.
Sie möchten auch mit dem Text-Explorer-Teil herumspielen; Die Stoppwörter, die ich verwendet habe, waren spezifisch für die Textbausteine des Project Gutenberg-Dokuments in jedem Buch, und die Wortlänge von 6 sowie die Wahl des Wortstamms sind möglicherweise nicht optimal für Ihre Dokumente.
Bearbeiten: und kombinieren Sie vielleicht ein paar Wörter: Nord, Süd, West, Ost könnten für Ihren Zweck alle dasselbe bedeuten?
Betreff: Keyword-Kookkurenznetzwerke in JMP?Hallo Craige,
Das ist es! Ich habe das von Ihnen gesendete Skript für meine Datentabelle geändert (siehe beigefügtes Skript und Tabellendatei). Alles hat super funktioniert, nur die Beschriftungsfunktion konnte ich nicht zum Laufen bringen. Ich habe es dreimal angeschaut und ich schwöre, ich kopiere Ihren Code genau. Sehen Sie irgendetwas, das die Funktion beeinträchtigen könnte? Das Handlungsbild, das ich bekomme, ist unten. Wie Sie sehen, werden die Begriffsbezeichnungen nur als Punkte angezeigt. Danke nochmal. Ich schätze es wirklich!

Betreff: Keyword-Kookkurenznetzwerke in JMP?Das ist es auch nicht wirklich, aber vielleicht näher dran. Ich habe diese eingefärbt, indem ich einen Wurzelknoten im Zweig ausgewählt und dann die ausgewählten Zeilen in der Datentabelle eingefärbt habe. Es bedurfte einiger manueller Auswahl der Stoppwörter, um ein hübsches Bild zu ergeben.
TransposedTransposedTransponiert
// load some documents that might separate into some categories
dt1 = Open( "f:/gutenberg/books5000.jmp" ); // 5000 is too many, subset 36...
dt1 << selectwhere(
Starts With( Loc Class, "D501" ) | Starts With( Loc Class, "TX:" ) | Starts With( Loc Class, "Q" ) | Starts With( Loc Class, "P" )
);
dt2 = dt1 << subset( selected rows( 1 ) );
Close( dt1, nosave );
originalnames = dt2 << getColumnNames();
te = dt2 << Text Explorer(
Text Columns( :text ), // the entire document is in one cell of the row
Add Stop Words(
{"agreement", "almost", "another", "company", "copyright holder", "electronic", "foundation", "gutenberg", "literary archive", "little",
"person or entity", "project", "public domain", "research", "without", "ebooks", "enough", "though", "rather", "better", "common", "possible",
"weight", "present", "series", "necessary", "placed", "therefore", "towards", "footnote", "something","slowly","around","behind","looking","seemed","nothing",
"probably","called","easily","distributing","paragraph"
}
),
Minimum Characters per Word( 6 ),
Stemming( "no stemming" ), //"Stem for Combining"
Language( "English" )
);
//te << savedocumenttermmatrix( Maximum Number of Terms( 300 ), Minimum Term Frequency( 25 ), Weighting( "TF IDF" ) );//BINARY would use ALL rather than !any, below
te << savedocumenttermmatrix( Maximum Number of Terms( 100 ), Minimum Term Frequency( 25 ), Weighting( "BINARY" ) ); // 0 or 1 if it occurs
te << closewindow;
// remove all-connected columns
allnames = dt2 << getColumnNames();
For( iname = N Items( allnames ), iname > N Items( originalnames ), iname -= 1,
// If( !Any( dt2[0, iname] ),
If( All( dt2[0, iname] ),
dt2 << deletecolumns( iname )
)
);
allnames = dt2 << getColumnNames();
cols = (N Items( originalnames ) + 1) :: N Items( allnames );
//
//dt2 << Hierarchical Cluster( Y( allnames[cols] ),
// Label( Transform Column( "Label", Character, Formula( Left( left(LoC Class,4)||:Subject||:Title, 20 ) ) ) ), // build your own identifier here
// Method( "Ward" ), Standardize Data( 1 ), Dendrogram Scale( "Distance Scale" ),
// Number of Clusters( 4 ), Constellation Plot( 1 ), Show Dendrogram( 0 ),
// SendToReport(Dispatch({"Constellation Plot"},"Clust Hier",FrameBox,{Frame Size( 1056, 716 )}))
//);
dt3 = dt2 << Data Table( "Subset of books5000" ) << Transpose(
columns( allnames[cols] ),
Label( :Title ),
Label column name( "Title" ),
Output Table( "Transpose of Subset of books5000" )
);
dt3 << Hierarchical Cluster(
Y( (dt3 << getColumnNames)[2 :: N Cols( dt3 )] ),
Label( Transform Column( "Transform[Title]", Nominal, Formula( Left( :Title, Length( :Title ) - 7 ) ) ) ),
Method( "Ward" ),
Standardize Data( 1 ),
Show Dendrogram( 0 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 13 ),
Constellation Plot( 1 ),
SendToReport( Dispatch( {"Constellation Plot"}, "Clust Hier", FrameBox, {Frame Size( 948, 827 )} ) )
);Betreff: Keyword-Kookkurenznetzwerke in JMP?Ich bin seit 1994 Anhänger von JMP und weiß daher um die vielen Stärken von JMP und um die Art und Weise, wie unterschiedliche Probleme auf unterschiedlichen Wegen gelöst werden können (das ist nur eines der Dinge, die ich daran liebe). Ich beginne immer mit JMP. Meine berufliche Community wird von R-Benutzern dominiert. Sie können alle Arten von Analysen durchführen, aber die Fähigkeit von R, interaktive Datenvisualisierungen zu erstellen (mein Ding), reicht nicht einmal in die gleiche Liga wie die von JMP. Also bleibe ich bei JMP. Mit der Weiterentwicklung statistischer Methoden ist jedoch ein größerer Teil neuerer Analysen nur über R oder JMP Pro möglich, jedoch nicht mit einer Standard-JMP-Lizenz (z. B. verschiedene Textanalyseplattformen, grundlegende Modellauswahlverfahren, die in meinem Fachgebiet Standard sind). ). Dadurch wird es für mich schwieriger, ganzheitliche Analysen von Anfang bis Ende in JMP durchzuführen. Da JMP Pro und Standard-JMP immer weiter auseinanderdriften, befrage ich die Community nach möglichen Lösungen für meine Probleme, die ich mit einer Standard-JMP-Lizenz umsetzen kann.Craiges Beitrag war ein großartiges Beispiel dafür, wie die Community mir dabei geholfen hat, eine Möglichkeit zu finden, Dokumente mithilfe eines DTM in Standard-JMP zu gruppieren. In meinem letzten Beitrag habe ich gefragt, ob es eine ähnliche Lösung gibt, mit der Begriffe mithilfe eines DTM in Standard-JMP gruppiert werden können.
In diesem speziellen Fall versuche ich, eine Netzwerkgrafik zum gleichzeitigen Vorkommen von Schlüsselwörtern in eine vorhandene interaktive Visualisierung zu integrieren, die ich in Standard-JMP erstellt habe.Ich glaube nicht, dass ich versuche, das Rad neu zu erfinden. Ich glaube, ich stoße entweder auf eine Funktionsbarriere der Standard-JMP-Lizenz (vielleicht) oder auf einen Mangel an Wissen/Kreativität meinerseits, wie ich das hinbekomme (wahrscheinlicher).Ich kann mir JMP Pro nicht leisten. Das ist meine Realität und ich glaube nicht, dass sich daran so schnell etwas ändern wird. Sowohl die von Ihnen erwähnten Latent Class Analysis- als auch Latent Semantic Analysis-Plattformen sind nur in JMP Pro verfügbar. Wenn ich Fragen zu den Funktionen der Standard-JMP-Lizenz stelle und Antworten bekomme, dass ich etwas nur in JMP Pro tun kann, hilft mir das nicht wirklich. Ich freue mich, wenn meine Fragen zur Lösung von Problemen für JMP Pro-Benutzer beitragen, aber ich stehe immer noch vor dem ursprünglichen Rätsel, etwas in Standard-JMP zu tun, das mehr Kreativität und Wissen erfordert (zwei erstaunliche Eigenschaften der JMP-Benutzergemeinschaft) als Ich besitze es alleine.
Ich bin dankbar für JMP, für die Mitarbeiter des technischen Supports von JMP (die großartig sind) und für diese Benutzergemeinschaft. Bis mein Budget viel größer ist als je zuvor, werde ich hier wahrscheinlich weiterhin Fragen zu kreativen Möglichkeiten stellen, Dinge mit einer Standard-JMP-Lizenz zu erledigen (was manchmal an die Grenzen gehen kann). Ich stimme Mark zu, dass man zuerst JMP lernen muss (was mir seit über 25 Jahren Spaß macht). Dennoch fällt es mir manchmal schwer zu verstehen, wie ich meine wachsenden Analyse- und Visualisierungsanforderungen mit einer Standard-JMP-Lizenz erfüllen kann. Ich hoffe immer noch, dass es eine legitime Möglichkeit gibt, mit einem Standard-JMP ein Netzwerkdiagramm für das gemeinsame Vorkommen von Schlüsselwörtern zu erstellen, um Begriffe zu gruppieren, das über volle Interaktivität verfügt und als JMP-Tabellenskript gespeichert werden kann. Ich weiß nicht, wie ich das machen soll. Aufgrund meines normalen Prozesses, bei dem ich die JMP-Dokumentation lese, JMP-Community-Beiträge durchsuche und einfach selbst experimentiere, konnte ich nicht herausfinden, wie das geht. Wenn es ohne eine JMP Pro-Lizenz einfach nicht geht, lasse ich es treiben und lasse diesen Diagrammtyp aus meiner Visualisierung weg.
Entschuldigung für die lange Antwort. Wenn jemand von JMP sich mit Strategien befassen möchte, wie man mit Standard-JMP auskommt, wenn man sich JMP Pro nicht leisten kann, würde ich mich über einen Rat freuen (scheint ein gutes Blog-Thema zu sein). Vielleicht ist es kein Thema für dieses Diskussionsforum. Ich entschuldige mich, wenn das nicht der Fall ist. Wenn jemand Vorschläge dazu hat, können Sie mich gerne offline unter caseylott@ymail.com kontaktieren.
Betreff: Keyword-Kookkurenznetzwerke in JMP?Ich füge nur hinzu @Craige_Hales ' helfen, dass Sie die Latent-Class-Analyse zum Gruppieren von Zeilen (Dokumenten) und die Latent-Semantic-Analyse zum Gruppieren von Spalten (Begriffen) verwenden können. Diese Plattformen sind unter Analysieren > Multivariate Methoden verfügbar. (Sie sind auch in den Text-Explorer in JMP Pro integriert und darauf spezialisiert.) Siehe JMP-Dokumentation...
Die Idee ist, dass JMP über viele leistungsstarke Plattformen verfügt, die zusammenarbeiten. Meine Analogie ist ein Grafikrechner. Es gibt viele Tasten und oft braucht es mehr als eine Taste, um die Arbeit zu erledigen. Das heißt, es gibt keinen einzigen Knopf, der „alles erledigt“, aber Sie können dorthin gelangen. Als ersten Ansatz müssen Sie JMP erlernen, anstatt zu versuchen, eine benutzerdefinierte Anwendung neu zu erstellen. Warum das Rad neu erfinden?
Betreff: Keyword-Kookkurenznetzwerke in JMP?Hallo Craige,
Mir ist gerade aufgefallen, dass das von Ihnen gesendete Skript Werte in einem DTM verwendet, um Dokumentencluster auf der Grundlage ähnlicher Begriffsverwendungen in Dokumenten zu erstellen. In diesem Fall stellt jeder Knoten ein Dokument dar und jeder Link basiert auf einem Distanzwert aus der Clusteranalyse. Ich versuche etwas etwas anderes zu machen.
Ich möchte ein Konstellationsdiagramm wie dieses erstellen, in dem jeder Knoten einen BEGRIFF im DTM darstellt und jeder Link auf einer Art Statistik basiert, die das gleichzeitige Vorkommen von Schlüsselwörtern beschreibt. Das liegt weit außerhalb meines Fachwissens. Ich liebe die Idee einer solchen Darstellung, bin mir aber nicht sicher, ob es angemessen wäre, den DTM irgendwie neu zu formatieren, damit eine Clusteranalyse durchgeführt werden könnte, bei der Begriffe als Knoten enden (oder wie ich das machen würde). Damit würde ich mein Ziel erreichen, in JMP eine Grafik zu haben, die auf Begriffsverwandtschaft basiert und die ich als globalen Filter in einer interaktiven Datenvisualisierung verwenden kann. Würde diese Art von End-Around jedoch zu einer Grafik führen, die nicht auf Best Practices der Textanalyse basiert? Für diejenigen unter Ihnen, die sich auf diesem Gebiet auskennen: Wäre die Verwendung der Clusteranalyse zur Veranschaulichung des gleichzeitigen Vorkommens von Schlüsselwörtern ungeeignet? Wenn ja, hat irgendjemand etwas entwickelt, das Schlüsselwort-Kookkurrenzanalysen (unter Verwendung geeigneter statistischer Methoden für diese Art von Analyse) in JMP durchführen kann?Ich bin daran interessiert, Feedback von der Community dazu zu hören. Es tut mir leid, dass mein ursprünglicher Beitrag nicht klarer war. Craige, ich werde auf jeden Fall das Skript verwenden, das Sie in Ihrer ersten Antwort gesendet haben, wenn ich Dokumente gruppieren muss! Danke schön.
Betreff: Keyword-Kookkurenznetzwerke in JMP?Die Verwendung jeweils einer Zeile ist möglicherweise nicht die richtige Antwort. Das müssen keine gemeinsamen Wörter mit Nachbarn im Diagramm sein. Es sei denn, zwei räumliche Nachbarn teilen sich einige Wörter.
Betreff: Keyword-Kookkurenznetzwerke in JMP?Ich bin mir nicht sicher; Ich denke, für jede Zeile möchten Sie die drei oder vier wichtigsten Wörter (Spaltennamen) für diese Zeile haben, und diese könnten diejenigen mit dem größten Wert sein. Sieht das richtig aus, wenn man sich einige Zeilen ansieht? Wenn ja, wäre die Erstellung dieser Beschriftungsspalte kein großer Vorverarbeitungsschritt.
Betreff: Keyword-Kookkurenznetzwerke in JMP?Hallo Craige,
Das ist brilliant! Ich bin kein JSL-Experte, aber ich habe es mit meinen Daten zum Laufen gebracht. Das Einzige, was ich nicht herausfinden kann, ist, einen Etikettenbezeichner zu erstellen, der die Spaltennamen für Begriffe in der Dokumentbegriffsmatrix verwendet. Die Begriffsmatrix meines Dokuments hat 252 Spalten. Jeder Spaltenname wird automatisch mit den Begriffen Stammwert und dem Suffix TF IDF2 formatiert. Beispielsweise heißt eine Spalte „distribut· TF IDF 2“, eine andere heißt „mountain· TF IDF 2“. Ich möchte, dass die Bezeichnungen der Konstellationspunkte aus dem Stammbegriff bestehen, ohne das Suffix (z. B. „distribut·“ oder „mountain“). Gibt es eine einfache Möglichkeit, die Werte aus den Spaltennamen der Dokumenttermmatrix als Punktbeschriftungen zu verwenden?
Vielen Dank für die Bereitstellung dieses Skripts.
Casey
Betreff: Keyword-Kookkurenznetzwerke in JMP?Sie können vielleicht etwas Ähnliches bekommen, etwa so. Und es ist mit dem Tisch verbunden. Und nicht Pro.
Constellation Plot from ClusteringConstellation Plot from ClusteringKonstellationsdiagramm aus Clustering
// load some documents that might separate into some categories
dt1 = Open( "f:/gutenberg/books5000.jmp" ); // 5000 is too many, subset 36...
dt1 << selectwhere( Starts With( Loc Class, "D501" ) | Starts With( Loc Class, "TX:" ) | Starts With( Loc Class, "Q" ) | Starts With( Loc Class, "P" ) );
dt2 = dt1 << subset( selected rows( 1 ) );
Close( dt1, nosave );
originalnames = dt2 << getColumnNames();
te = dt2 << Text Explorer(
Text Columns( :text ), // the entire document is in one cell of the row
Add Stop Words(
{"agreement", "almost", "another", "company", "copyright holder", "electronic", "foundation", "gutenberg", "literary archive", "little",
"person or entity", "project", "public domain", "research", "without"}
),
Minimum Characters per Word( 6 ),
Stemming( "Stem for Combining" ),
Language( "English" )
);
te << savedocumenttermmatrix( Maximum Number of Terms( 300 ), Minimum Term Frequency( 25 ), Weighting( "TF IDF" ) );//BINARY would use ALL rather than !any, below
te << closewindow;
// remove all-connected columns
allnames = dt2 << getColumnNames();
For( iname = N Items( allnames ), iname > N Items( originalnames ), iname -= 1,
If( !Any( dt2[0, iname] ),
dt2 << deletecolumns( iname )
)
);
allnames = dt2 << getColumnNames();
cols = (N Items( originalnames ) + 1) :: N Items( allnames );
dt2 << Hierarchical Cluster( Y( allnames[cols] ),
Label( Transform Column( "Label", Character, Formula( Left( left(LoC Class,4)||:Subject||:Title, 20 ) ) ) ), // build your own identifier here
Method( "Ward" ), Standardize Data( 1 ), Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ), Constellation Plot( 1 ), Show Dendrogram( 0 ),
SendToReport(Dispatch({"Constellation Plot"},"Clust Hier",FrameBox,{Frame Size( 1056, 716 )}))
);