Überlagerungsdiagramme<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Beim Stapeln von Spalten ist ein Problem aufgetreten. Die Daten, die ich mir ansehe, können Hunderte von Datenspalten umfassen. Oft stapele ich Spalten, damit ich für diese eine Spalte ein Verteilungsdiagramm verwenden kann. Aber manchmal gerät meine Datentabelle in die Millionen von Datenzeilen und fängt an abzustürzen, wenn ich Spalten stapele. Ich habe mich gefragt, ob es eine Möglichkeit gibt, mehrere Verteilungsdiagramme übereinander zu legen, um ein einziges Diagramm zu erstellen, ohne alle Spalten übereinander stapeln zu müssen. L Wie eine Menge Spalten grafisch darstellen und alle diese Diagramme in einem überlagern?
Vielen Dank für jede Hilfe!
Betreff: Overlay-DiagrammeInnerhalb der Hardware-Einschränkungen Ihres Computers ist JMP im Allgemeinen in solchen Dingen gut. Ich gehe davon aus, dass es (aus irgendeinem Grund) nicht möglich ist, die Daten in einer einzelnen Spalte zu importieren.
Sie können mit dem folgenden Code experimentieren. Auf meinem Rechner dauert das acht Sekunden, aber mehr als die Hälfte dieser Zeit wird für die Erstellung der Ausgangstabelle und die Auswertung der darin enthaltenen Formeln aufgewendet. Die Einstellung nr = 1.000.0000 ergibt eine Laufzeit von etwa einer Minute.
NamesDefaultToHere(1);
// Number of columns and rows
nc = 130;
nr = 100000;
// Make a test table, dt1, to work with
dt1 = NewTable("Test", NewColumn("Column 1", Numeric, Continuous, Formula(RandomNormal())),AddRows(nr));
For(i=2, i<=nc, i++, dt1 << NewColumn("Column "||Char(i), Numeric, Continuous, Formula(RandomNormal())));
// Get the data from the table into a matrix
m = dt1 << getAsMatrix;
// Close dt1 to recover some memory
Close(dt1, NoSave);
// Reshape into a column vector
m = Shape(m, NRow(m)*NCol(m), 1);
// Make a new table
dt2 = NewTable("Test in a Single Column", NewColumn("All", Numeric, Continuous, Values(m)));
// Recover memory
m = [];
Betreff: Overlay-DiagrammeVielen Dank für alle Ihre Vorschläge!
Leider ist es nicht wirklich das, was ich suche. Es scheint, dass JMP einfach nicht tun kann, was ich will. Weil ich nicht alle Spalten zusammenstapeln möchte, sondern das Verteilungsdiagramm aller Daten möchte.
DropAllOtherColumns ist eine nützliche Funktion, die ich nicht kannte. Ich muss damit herumspielen, um zu sehen, ob das Stapeln meiner Spalten und das Hinzufügen dieser Funktionen die Effizienz verbessert.
Außerdem, Peter, ist es mir egal, welcher Wert welcher Ebene in der Verteilung entspricht, deshalb möchte ich etwas Ähnliches wie Stapeln, aber ohne den speicherfressenden Aspekt. Aber dieses Verteilungsdiagramm sieht meinen Vorstellungen sehr ähnlich, leider habe ich keine JMP-Version 12. Ich habe auch 130 Variablen. Haha
Danke schön!
Betreff: Overlay-DiagrammeIch glaube nicht, dass eine solche Überlagerung in der Vertriebsplattform möglich ist. Nach meiner Erfahrung geht das Stapeln ziemlich schnell. Der folgende Beispielcode läuft in wenigen Sekunden auf meinem Laptop. Wenn die Datenmenge auf 10^8 erhöht wird, verlangsamt sich die Geschwindigkeit, aber der Flaschenhals ist hier die Verteilungsplattform und nicht die Stapelung.
Noch eine Anmerkung: Ein Histogramm aus Millionen von Daten unterscheidet sich kaum von einer kleineren, zufälligen Teilmenge der Daten. Wenn also die Leistung ein Problem darstellt, können Sie versuchen, den Datensatz vor der Visualisierung zu verkleinern (oder Sie benötigen möglicherweise einfach mehr RAM).
dt = New Table("big");
nr = 100000;
nc = 100;
dt << add rows(nr);
For(i = 1, i <= nc, i++,
dt << New Column("col" || Char(i), set each value(Random Normal()))
);
dt_stacked = dt << Stack(
columns(dt << get column names),
Source Label Column("Label"),
Stacked Data Column("Data"),
Drop All Other Columns(1)
);
dt_stacked << Distribution(Continuous Distribution(Column(:Data), Outlier Box Plot(0)));
Betreff: Overlay-DiagrammeDie Faustregel, die ich über JMP gehört habe, lautet, dass doppelt so viel Speicher verfügbar sein muss wie die Größe Ihres Datensatzes.Vielleicht wird also mehr Speicher benötigt?
Betreff: Overlay-DiagrammeDies sollte Ihre Daten stapeln, ohne zu viel zu duplizieren.Die Beschriftungsspalte wird gelöscht, da es Ihnen egal ist, aus welcher Originalspalte die Werte stammen.DropAllOtherColumns Vielleicht ist es das Teil, das Sie suchen.
newdt = Data Table( "Big Class" ) << Stack(
columns( :height, :weight, :age ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Drop All Other Columns( 1 ),
Output Table( "hw" )
);
newdt << deletecolumns( "label" );
newdt << Distribution( Continuous Distribution( Column( :Data ) ) );

Betreff: Overlay-Diagrammesophiaw: In JMP Version 12 können Sie die Visualisierung unten (BigClass) Height by Sex (Overlay) erstellen.

Ich denke, das ist die Visualisierung, nach der Sie suchen? Aber leider müssen Sie die Overlay-Variable stapeln, und Sie sagen, dass dies aus Sicht der Datentabellenverwaltung problematisch sei. Wie viel RAM besitzen Sie? Vielleicht hilft das Hinzufügen von mehr RAM gegen den Absturz? Abgesehen davon frage ich mich bei so vielen Ebenen der Overlay-Variablen, wie Sie vorschlagen, nur, wie optisch und ästhetisch ansprechend Ihr Diagramm sein wird? Ganz zu schweigen davon, wirklich erkennen zu können, welche Ebene welche ist. Die Histogramm-Overlay-Visualisierung ist wirklich am effektivsten, wenn nur eine relativ kleine Anzahl von Ebenen für die Overlay-Variable vorhanden ist.
Betreff: Overlay-DiagrammeDas ist hilfreich, aber nicht ganz das, was ich suche. Ich möchte, dass es im Wesentlichen genauso aussieht wie das Verteilungsdiagramm (wo Sie eine Spalte auswählen und grafisch darstellen), außer dass ich in der Lage sein möchte, mehrere Spalten auszuwählen und eine Verteilung zu erstellen. Ich möchte nur ein Diagramm mit den Werten unten und der Datenmenge auf der Y-Achse. Im Moment muss ich alle Spalten, die ich grafisch darstellen möchte, stapeln und dann diese neue Spalte grafisch darstellen (was genau das ist, was ich möchte). Das einzige Problem besteht darin, dass ich ungefähr 130 Spalten grafisch darstellen möchte und es unzumutbar ist, sie zu stapeln, insbesondere wenn meine Datentabelle normalerweise aus Hunderttausenden von Zeilen besteht und das Stapeln von zwei Spalten die Anzahl der Zeilen verdoppelt; Das Stapeln von 130 würde JMP zum Absturz bringen oder enorm viel Zeit in Anspruch nehmen. Der Diagrammersteller sagt mir im Wesentlichen nichts, da es in diesem Fall keine x-Achse gibt, sodass ich nicht weiß, wie viel jeder Balken darstellt oder so.
Gibt es eine Möglichkeit, die Verteilungsdiagramme zu überlagern, um ein Diagramm aller Spalten zu erstellen, anstatt jede Spalte aufzutrennen?
Danke!
Betreff: Overlay-DiagrammeSehen Sie, ob Graph Builder das tut, was Sie wollen.Wählen Sie alle Spalten aus und legen Sie sie auf der Y-Achse ab.Sie sehen eine Punktwolke.Hier ist die große Klasse anhand von Alter, Größe und Gewicht:

dann Rechtsklick->Hinzufügen->Histogramm:

Klicken Sie dann mit der rechten Maustaste auf -> Punkte -> Entfernen und klicken Sie auf FERTIG

Klicken Sie auf die Titel und drücken Sie die Entf-Taste (oder fügen Sie einen besseren Titel hinzu).

Dann können Sie das Skript mit dem roten Dreieck kopieren:
Graph Builder(
Size( 534, 418 ),
Show Control Panel( 0 ),
Variables( Y( :age ), Y( :height, Position( 1 ) ), Y( :weight, Position( 1 ) ) ),
Elements( Histogram( Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Students" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Wrap( 2 )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "" )} ),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg(
Hist Seg( "Histogram (age)" ),
Histogram Color( -4222943 )
), DispatchSeg(
Hist Seg( "Histogram (height)" ),
Histogram Color( -13977687 )
), DispatchSeg(
Hist Seg( "Histogram (weight)" ),
Histogram Color( -3780931 )
)}
)
)
)