Verfasst am: 11.06.2016, 14:20
Titel: Verknüpfung Werte mit gleichem Namen aus versch. Tabellen
Hallo zusammen,
ich bin Matlab-Anfänger, der vorher mit Excel gearbeitet hat. Das war mir aber zu launisch. Mein Problem sieht wie folgt aus:
Ich arbeite mit Aktienkursen und habe mehrere Excel-Tabellen mit Werten.
Beispiel:
Aktie A 100 101 102 101
Aktie B 120 100 110 100
Aktie C 200 300 400 500
Diese habe ich zum Einlesen aufgeteilt in ein 500x1Cell mit den Namen und ein 500x6800 Double, das die Tageskurse enthält.
Mit diesen möchte ich anschließend arbeiten, das heißt, ich möchte beispielsweise in einer Tabelle die Aktien nach ihrer Rendite sortieren. Anschließend möchte ich diese Sortierung übernehmen und die Kurse eines anderen Zeitraums hintendranklatschen, um die Rendite von Portfolios nach der vorher gefundenen Sortierung anzuschauen, und das ganze dann zu unterteilen, beispielsweise in die Top10%, Flop 10% etc.
Das Einzige zur Sortierung, was ich gefunden habe, ist eine Tabelle. Wenn ich aber einfach eine Tabelle mit T=(Namen, Kurse) mache, erhalte ich eine Tabelle die so aussieht
'Aktie A' [1x6800 double]
'Aktie B' [1x6800 double]
Erstes Problem: Die Kurse sind anscheinend in der eckigen Klammer gefangen und an eine Sortierung ist erstmal nicht sinnvoll zu denken.
Gibt es eine sinnvollere oder logischere Lösung, auf die ich bisher noch nicht gekommen bin?
Zweites Problem: Wenn ich meine Kurse gefunden habe, wie verknüpfe ich das Ganze um ihm zu sagen "Nimm die Kurse aus der Kurstabelle ab Spalte 300 bis Spalte 350 und ordne sie den Namen zu". Liegt mein Problem bereits in der Anlage meiner Daten? Gibt es eine sinnigere Lösung, auf die ich bisher nicht gekommen bin?
Ich danke schonmal für jeden kleinen Schubser, und falls was nicht klar wurde, versuche ich das gerne noch darzustellen.
HCD
poste bitte deinen Code. Ansonsten ist nicht nachvollziehbar, wie du beispielsweise zu der Darstellung
'Aktie A' [1x6800 double]
'Aktie B' [1x6800 double]
kommst.
Ich würde empfehlen, möglichst von vorneherein mit Tables zu arbeiten (Befehl readtable). Die benötigten Funktionen zur Umorganisation der Daten sollten dann vorhanden sein, z.B.
sortrows
und Indizierung in den Table.
Häufig helfen auch kleine Beispieldatensätze und wenn man anhand dieser zeigt, welche Ergebnisse gewünscht werden.
werde mich mit den Beispielen mal auseinandersetzen, danke!
Meine seltsame Tabelle kommt einfach nur durch den Befehl Kurstabelle=table(Namen,Kurse)
Wobei ja Namen wie gesagt die Namen der Aktien als Cell sind und Kurse in einem 500x6800 Double gespeichert sind.
Werde es mal mit der Tabelle versuchen - kann ich da auch auf Zeilen oder Spalten eingehen, wie ich es in einer Matrix machen könnte?
Danke schonmal. Er stört sich gerade noch an etwas "The VariableNames property must contain one name for each variable in the table.", kriege ich aber hoffentlich gelöst - array2table hatte ich schonmal erfolgreich eingesetzt.
Wenn ich dann mehrere Tabellen habe, wie kriege ich diese miteinander verknüpft?
Ich habe beispielsweise eine Tabelle, die nur die Marktwerte beinhaltet und eine die die Kurse beinhaltet.
Wenn ich nun die Namen der Aktien nach Marktwerten absteigend sortiere, wie kriege ich Matlab dann dazu, hintendran die Kurse von Tag x bis y ebenfalls in dieser Reihenfolge dranzuhängen?
Er stört sich gerade noch an etwas "The VariableNames property must contain one name for each variable in the table.", kriege ich aber hoffentlich gelöst
Wie gesagt: transponieren könnte helfen.
Oder wenn du deinen Code mitsamt Beispieldaten postest, so dass man sieht, wo das Problem liegt.
Zitat:
Wenn ich dann mehrere Tabellen habe, wie kriege ich diese miteinander verknüpft?
join / innerjoin / outerjoin
Zitat:
Wenn ich nun die Namen der Aktien nach Marktwerten absteigend sortiere, wie kriege ich Matlab dann dazu, hintendran die Kurse von Tag x bis y ebenfalls in dieser Reihenfolge dranzuhängen?
Ich würde zunächst alles zusammenfügen und dann sortrows verwenden.
So, das ist der Code zum Einlesen der ExcelTabelle als Tabelle - ergibt das aber Sinn? Wie kann ich jetzt nach einzelnen Zeilen, beispielsweise der Rendite zwischen dem 1.07.2008 und dem 31.12.1998 - "Kurs VarnameYY- Kurs Varname XY/Kurs Varname XY")
Gibt es eine Möglichkeit, die Daten als Variablennamen zu nehmen, sodass ich damit arbeiten kann?
Ich stehe schon sehr auf dem Schlauch gerade. Ergäbe es mehr Sinn nur die Kursdaten als Matrix zu importieren, oder kriege ich die nie wieder mit den Namen verknüpft?:-/
Viele Grüße und Danke!
Zuletzt bearbeitet von HCD am 24.06.2016, 14:50, insgesamt einmal bearbeitet
Danke schonmal, werde es bald ausprobieren.
habe die Daten auch nochmal transponiert da, dann würde er mir mit dem Import-Editor die Aktien als einzelne Vektoren einlesen - ist ein Sortieren da dann auch möglich? Allerdings ist dann nur ganz Links die Datumsleiste - kann ich ihm dann klar machen, dass er zu jeder Aktie Kurs und Datum nimmt und dann damit arbeiten oder muss ich das vorher verbinden, um dann lauter so Datum/Kurs-Pärchen zu haben (falls ja, wie?)? Wäre eine Tabelle dann immer noch das sinnvollste zum Sortieren? Beispielsweise in Form von "Sortiere nach Rendite zwischen dem 1.10.1998 und dem 1.1.1999"?
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.