Verfasst am: 06.11.2023, 11:17
Titel: Riesige Datenmengen von TXT einlesen und Plotten
Hallo zusammen,
ich möchte wirklich riesige Datenmengen (25 Spalte x 3,7 mio Zeilen) aus einer TXT Datei ( ca. 250 mb) einlesen und daraus ein Liniendiagramm erstellen.
Ich habe in anderen Beiträgen gelesen, dass das Grundsätzlich möglich sein sollte, auch wenn es lange dauert. Ich lasse auf meinen PC ( AMD Ryzen 6X3,6 GHz, 32gb Ram) jetz seit ca 24h rechnen aber es tut sich nichts. (Matlab R2023b). Wenn ich die Datei drastisch verkleinere funktioniert es.
Ich packe euch noch eine kleine TXT Datei in den Anhang dazu. Falls jemand die Große zum testen haben möchte, müssten ich die nochmal irgendwie seperat hochladen, das Forum scheint so große Uploads nicht zu unterstützen.
Meine Frage:
Ist Matlab in der Lage diese Millionen an Datenpunkten in ein Diagramm zu Plotten?
falls ja, warum funktioniert es bei mir nicht?
Code:
% Das ist mein Programm. % Datei importieren
filePath = 'C:\Users\lars-\Desktop\Projekte\Kühlschrank\Auswertung Datenlogger\04.11.txt';
fileID = fopen(filePath, 'r');
% Initialisiere Variablen
data = [];
lineNumber = 0;
% Lese die Datei Zeile für Zeile while ~feof(fileID) line = fgetl(fileID);
lineNumber = lineNumber + 1;
% Überprüfe, ob die Zeile unerwünschte Daten enthält if ~contains(line, 'Neustart') % Zeile enthält keine unerwünschten Daten, verarbeite sie weiter
numericValues = str2double(strsplit(line, ','));
die Daten sollten dann 25*3.7e6*8 Bytes, also rund 740 MB umfassen. Für einen modernen Rechner sollte das kein Problem sein.
Ich würde versuchen, die Daten mit einer Funktion wie
readmatrix
zu importieren. Das sollte deutlich effizienter sein als das zeilenweise Einlesen mit fgetl. Die Spalten können auch als ganze mit dem gewünschten Wert multipliziert werden statt jede einzeln. Zeilen mit NaN oder ##Neustart## (wie Zeile 4069 im Beispiel) können mit
rmmissing
entfernt werden.
Die Visualisierung kann bei derart vielen Werten problematisch werden. Die Anzahl der Datenpunkte überschreitet ohnehin die Auslösung jedes denkbaren Bildschirms. Insofern könnte ich mir vorstellen, dass man beispielsweise immer 1000 Werte mittelt oder, um nichts zu verlieren, jeweils Minimum und Maximum über 1000 Werte plottet.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
"Ich würde versuchen, die Daten mit einer Funktion wie readmatrix zu importieren. Das sollte deutlich effizienter sein als das zeilenweise Einlesen mit fgetl. Die Spalten können auch als ganze mit dem gewünschten Wert multipliziert werden statt jede einzeln. Zeilen mit NaN oder ##Neustart## (wie Zeile 4069 im Beispiel) können mit rmmissing entfernt werden. "
Den Part werde ich gleich mal ausprobieren, ich halte euch auf dem laufenden ob es dadurch schneller wird.
"Die Visualisierung kann bei derart vielen Werten problematisch werden. Die Anzahl der Datenpunkte überschreitet ohnehin die Auslösung jedes denkbaren Bildschirms. Insofern könnte ich mir vorstellen, dass man beispielsweise immer 1000 Werte mittelt oder, um nichts zu verlieren, jeweils Minimum und Maximum über 1000 Werte plottet. "
Hier hoffe ich es übers Zoomen relativ übersichtlich zu halten. Die Daten bestehen aus Messwerten und aus Zustandsgrößen (Heizung an oder aus 1 oder 0), wenn ich die Zustandsgrößen mittel oder ähnliches, sind sie leider nicht mehr für mich zu gebrauchen.
Hier hoffe ich es übers Zoomen relativ übersichtlich zu halten.
Wenn du ohnehin in bestimmte Bereiche zoomen willst, dann würde ich von vorneherein nur diese plotten.
Zitat:
wenn ich die Zustandsgrößen mittel oder ähnliches, sind sie leider nicht mehr für mich zu gebrauchen.
Mitteln ist problematisch, aber was spricht gegen min. und max? Dann siehst du, ob in dem komprimierten Zeitraum die Heizung durchgehend an oder aus war oder ob hin- und hergeschaltet wurde.
Randbemerkung: ich würde entweder mehr Farben wählen (über RGB Code) oder verschiedene Linienarten oder Marker, um die Linien besser unterscheidbar zu machen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.