WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Einlesen von EMG-Daten einzelner Spalten aus csv-Datei

 

kraudi13
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2013, 14:49     Titel: Einlesen von EMG-Daten einzelner Spalten aus csv-Datei
  Antworten mit Zitat      
Hallo liebe matlab-Gemeinde,

ich bin absoluter Neuling auf dem Gebiet und werte gerade eine Studie mit Elektromyografischen Daten aus.

Die Daten liegen im csv-Format vor und ich muss mir diese jetzt aus dem Rohformat in eine geeignete Form bringen.

Die ersten 172 Zeilen sind Müll, den ich gern eliminieren würde.
Dann kommt eine Zeile header und dann beginnen die Daten.

Wenn diese Daten dann alle importiert wären, würde ich gern nur die Spalten mit dem header 'Latissimus_Dorsi_rechts_[5]: EMG' und 'Latissimus_Dorsi_links_[7]: EMG' auswählen.

So weit mein erstes Problem, was ich gern erst einmal mit eurer Hilfe in den Griff bekommen würde.

Beste Grüße
Kraudi
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 18.04.2013, 15:24     Titel:
  Antworten mit Zitat      
Hallo

Schau dir TEXTSCAN an, hier kannst über Option 'HeaderLines', die Zeilen überspringen.
Schauen dir dazu die Beispiele in der Doku, und auch hier in Forum kannst dazu unzählige Threads zur Texte-Einlesen-Routinen finden.

Sonst muss du sagen, wo genau deine Schwierigkeiten liegen. Poste bitte dann auch so ein CSV-File hier.
Bis jetzt ist deine Frage viel zu allgemein formuliert und kann so nicht beantwortet werden
Private Nachricht senden Benutzer-Profile anzeigen
 
kraudi13
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2013, 16:07     Titel:
  Antworten mit Zitat      
Ich habe jetzt die csv-datei angehängt.

Via "Import Data" hab ich die Datei importiert.
In dem Importdialog kommt kann man oben rechts ja "Number of text header lines:" definieren. Dort habe ich jetzt die ersten 173 Zeilen eingetragen.

Nun bekomme ich Workspace drei Dateien angezeigt.

collheaders
data
textdata


In 173. Zeile ist dann aber meine jeweilige Kommagetrennte Spaltenbezeichnung, die ich in collheaders auch so angezeigt bekomme.
In textdata befinden sich dann nochmal die Zeilen 1 bis 173.


1. mit welchem Befehl bekomme ich Zeile 1 bis 172 eliminiert?

Für mich sind nur die Daten in Spalte 26 und 34 (plus die jeweilige Samplezeit) relevant. Diese Spalten würde ich gern von allen anderen Daten trennen.

2. mit welchem Befehl kann ich Spalte 26 und 27 sowie 34 und 35 als neue Matrix erzeugen?


Beste Grüße

csv_sample_emg.rar
 Beschreibung:

Download
 Dateiname:  csv_sample_emg.rar
 Dateigröße:  2.24 KB
 Heruntergeladen:  493 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 18.04.2013, 17:03     Titel:
  Antworten mit Zitat      
Hallo
zu 1) mit TEXTSCAN kannst die Zeilen überspringen, Option Headerlines, siehe die Doku dazu

zu 2) hier würde ich erstmal den Rest einlesen und dann die Spalten auswählen:
Code:

fid=fopen('csv_sample_emg.csv');

% 172 Zeile überspringen
HEAD = textscan(fid, '%s', 0, 'delimiter',',', 'Headerlines', 172);
%% Header einlesen und nach Kommas auftrennen
HEAD = fgetl(fid);
HEAD = regexp(HEAD,',','split');

% Daten einlesen
DATA = textscan(fid, sprintf('%%%c ',ones(1,length(HEAD))*102),'delimiter',',','MultipleDelimsAsOne', 1);
fclose(fid)


DATA=[DATA{:}]
% Spalte 26-27 und 34-35 ausgeben
fprintf('%s\t', HEAD{[26,27,34,35]})
fprintf('\n')
fprintf('%42d\t%f\t%35d\t%f\n', DATA(:,[26,27,34,35])')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
kraudi13
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2013, 19:12     Titel:
  Antworten mit Zitat      
Super! Vielen Dank! Das klappt schon mal. Genau so hatte ich mir das vorgestellt

Nur gibt es noch einen kleinen Fehler.

Dadurch, dass ich die csv eingekürzt habe, hat man das nicht gesehen.
Ab einer bestimmten Zeile sind in einigen Spalten keine Daten mehr vorhanden. Matlab verschiebt dabei alle verbleibenden mit Werten ausgefüllten Spalten nach vorn, sodass nach Spalte 12 dann im Rest nur noch "NaN" steht.

Das gleiche Problem existiert, wenn ich über den Dialog File->Import Data gehe und dort den Seperator auf Comma setze. Wähle ich aber als Seperator Other und trage manuell das "," ein, so bleiben die Spalten unverändert und werden nicht nach vorn gezogen.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 19.04.2013, 11:27     Titel:
  Antworten mit Zitat      
Hallo

liegt wohl an der Option MultipleDelimsAsOne. Ohne diese Option sollte die Einleseroutine richtig funktionieren
Code:

fid=fopen('csv_sample_emg.csv');

% 172 Zeile überspringen
HEAD = textscan(fid, '%s', 0, 'delimiter',',', 'Headerlines', 172);
%% Header einlesen und nach Kommas auftrennen
HEAD = fgetl(fid);
HEAD = regexp(HEAD,',','split');

% Daten einlesen
DATA = textscan(fid, sprintf('%%%c ',ones(1,length(HEAD))*102),'delimiter',',');
fclose(fid)


DATA=[DATA{:}]
% Spalte 26-27 und 34-35 ausgeben
fprintf('%s\t', HEAD{[26,27,34,35]})
fprintf('\n')
fprintf('%42d\t%f\t%35d\t%f\n', DATA(:,[26,27,34,35])')
Private Nachricht senden Benutzer-Profile anzeigen
 
kraudi13
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2013, 15:21     Titel:
  Antworten mit Zitat      
klasse! ich dank dir vielmals!
werde sicherlich das ein oder andere mal auf die hilfe hier im forum zurückgreifen müssen.

beste grüße

tino
Private Nachricht senden Benutzer-Profile anzeigen
 
Milka

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 11:13     Titel: Einlesen von Messdaten aus CSV-Datei
  Antworten mit Zitat      
Hallo zusammen,
ich bin ein Anfänger in Matlab und habe nach mehreren Suchen dieses Forum gefunden.
Das Beispiel von denny hat mir gut geholfen. Mir sind trotzdem noch einige Sachen unklar wie z.B
Code:
DATA = textscan(fid, sprintf('%%%c',ones(1,length(HEAD))*102),'delimiter',';');


Was sollten %%%c und *102 sein und was tun sie genau? Jedes Mal, wo ich sie lösche, bekomme ich eine Fehlermeldung.

Ich habe das Beispiel von denny abgeschrieben und zu meinem Bedarf angepasst.
Code:
fid=fopen('Messdaten_Beispiel.csv');
% erste Zeile überspringen
HEAD = textscan(fid, '%s', 0, 'delimiter',';', 'Headerlines', 1);
%% Header einlesen und nach Semi-Kommas auftrennen
HEAD = fgetl(fid);
HEAD = regexp(HEAD,';','split');
% Daten einlesen
DATA = textscan(fid, sprintf('%%%c',ones(1,length(HEAD))*102),'delimiter',';');
fclose(fid)
DATA=[DATA{:}]
% Spalten 1-2 und 6-7 ausgeben
fprintf('%s\t', HEAD{[1,6,2,7]})
fprintf('\n')
fprintf('%f\t%f\t%f\t%f\n', DATA(:,[1,6,2,7])')
plot(DATA(:,[1]), DATA(:,[6]))


Es funktioniert sehr gut aber ich würde gern etwas anderes haben und zwar:
- was kann ich tun, damit die erste Zeile eingelesen wird und die zweite nicht?
- Meine nötigen Messdaten fangen ab der Zeile 12 an und gehen bis zur Zeile 169. Wie könnte ich nur den Bereich auswählen?

Danke im Voraus für Eure Hilfe.

Milka
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.07.2015, 11:27     Titel:
  Antworten mit Zitat      
Hallo Milka
bitte hänge keine neuen fragen an alte posts an. der beantwortet status wird sonst sinnfrei. eröffne bitte eine neue frage.
falls du auf ein anderes thema verweisen willst kannst du einen link dazu einfügen.
Zitat:
Jedes Mal, wo ich sie lösche, bekomme ich eine Fehlermeldung.

wenn fehlermeldungen auftreten solltest du sie auch posten. das sind keine zufällig generierten texte sondern enthalten wertvolle informationen die man nicht erraten kann.
Zitat:
Was sollten %%%c und *102 sein und was tun sie genau?

das steht doch in der doc. und *102 bedeutet mal 102..... das ist multiplikation.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.