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

Aus Excel bestimmte Spalten einlesen, Regression vorbereiten

 

DasFragezeichen
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2015, 02:07     Titel: Aus Excel bestimmte Spalten einlesen, Regression vorbereiten
  Antworten mit Zitat      
Guten Abend,

seit kurzer Zeit bewege auch ich mich durch das "Matlab-Universum". Demgemäß freue ich mich über jeden kleinen Schritt, der mir gelingt. Nun habe ich jedoch eine Aufgabe erhalten, welche - so denke ich - mein bisheriges Können bei weitem übersteigt.


Folgender Sachverhalt:
Mir liegt in Kürze eine sehr umfangreiche Excel-Tabelle (mehrere 1.000 Spalten/Zeilen) vor, in welcher nur gewisse Spalten für weitergehende Berechnungen erforderlich sind. Sämtliche Spalten sind bspw. in Zeile fünf mit einer Überschrift versehen. Dabei ist nur ein Teil der besagten Überschrift jeweils relevant.

Meine erste Frage ist nun, wie ich die Überschriften in der Zeile (hier bspw. fünf) prüfen kann, ob etwa neben anderen alpha-numerischen Angaben ein bestimmter Begriff (oder mehrere) auftauchen? Ist dies der Fall soll die entsprechende Spalte in Matlab eingelesen werden.
Möglicherweise gibt es für diesen Prozess sogar eine "elegantere" Darstellung, als die aus Excel herausgefilterten (und in Matlab integrierten) Spalten alle einzeln im "Workspace" abzulegen. Als absoluter Anfänger bin ich dahingehend natürlich überfragt und freue mich selbstverständlich, wenn mein Vorhaben überhaupt (auf relativ humane Art und Weise) möglich ist.

Meine zweite Frage betrifft die Vorbereitung (und Durchführung) einer Regression.
Angenommen ich habe das vorherige Verfahren zwei Mal (für zwei verschiedene Begrifflichkeiten) angewendet..., wie kann ich anschließend die umfangreichen Angaben zu zwei jeweils unterschiedlichen Variablen (nennen wir sie "x" und "y") so zusammenfassen, dass ich eine Regression durchführen kann? Die Regression als solche sollte ich mit meinem bisherigen Wissen realisieren können (allerdings kann ich auch dies noch nicht 100%ig garantieren).

Leider habe ich - gemäß meiner obigen Fragen - nicht viel, was ich an Quellcode anbieten könnte. Somit bedanke ich mich schon einmal herzlich bei allen, die sich meiner erbarmen und mich durch das "Matlab-Dickicht" geleiten! Smile

Viele Grüße
DasFragezeichen
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.12.2015, 10:29     Titel: Re: Aus Excel bestimmte Spalten einlesen, Regression vorbere
  Antworten mit Zitat      
Hallo DasFragezeichen,

Im Allgemeinen ist es besser, immer nur eine Frage pro Thread zu stellen.

Kannst Du die Excel-Tabelle bereits per xlsread einlesen?
Danach sollte das Auswerten der Überschriften leicht möglich sein.

Zitat:
Meine erste Frage ist nun, wie ich die Überschriften in der Zeile (hier bspw. fünf) prüfen kann, ob etwa neben anderen alpha-numerischen Angaben ein bestimmter Begriff (oder mehrere) auftauchen?

Das funktioniert mit den Befehlen regexp , strncmp(i) , isprop . Eine genauere Antwort ist möglich, wenn Du exakt beschreibst, nach welchenKriterien Du suchst.

Zitat:
Ist dies der Fall soll die entsprechende Spalte in Matlab eingelesen werden.

Da die Tabelle ja recht handlich ist (eine Million Elemente ist für einen Menschen viel, für Matlab aber kein Problem), kannst Du einfach die gesamte Tabelle einlesen und dann die gewünschten Werte extrahieren.

Zitat:
Möglicherweise gibt es für diesen Prozess sogar eine "elegantere" Darstellung, als die aus Excel herausgefilterten (und in Matlab integrierten) Spalten alle einzeln im "Workspace" abzulegen.

Tausende Variablen dynamisch zu erzeugen wäre jedenfallse eine sehr schlechte Idee. Um fest zu stellen, was "eleganter" ist, muss man zunächst klären, welches Problem wie gelöst werden soll.

Zitat:
Meine zweite Frage betrifft die Vorbereitung (und Durchführung) einer Regression.
Angenommen ich habe das vorherige Verfahren zwei Mal (für zwei verschiedene Begrifflichkeiten) angewendet...,

Und da steige ich bereits aus: Welches "Verfahren" und was sind "Begrifflichketien"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DasFragezeichen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2015, 14:26     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für Deine schnelle und hilfreiche Antwort!

Das Einlesen einer Excel-Tabelle gelingt mir bereits. Diese würde ich entweder über die von Dir besagte Funktion „xlsread“ oder durch einen Rechtsklick auf die entsprechende Datei und dann mittels „Import Data…“ realisieren:
Code:
%% Einlesen der Excel-Datei.
Xlsread('beispieldatensatz.xlsx') % Tabellenblatt und Umfang habe ich hier eingespart, da der gesamte Inhalt einzulesen ist.
 


Zur besseren Illustration habe ich eine Beispieltabelle beigefügt. In dieser soll die fünfte Zeile jeweils nach dem (zur besseren Darstellung) rot markierten Inhalt „gesamte Kosten“ durchsucht werden. Wurden besagte Wörter in der entsprechenden Zeile gefunden, soll die gesamte Spalte in Matlab eingelesen werden.

Zitat:
Tausende Variablen dynamisch zu erzeugen wäre jedenfallse eine sehr schlechte Idee. Um fest zu stellen, was "eleganter" ist, muss man zunächst klären, welches Problem wie gelöst werden soll.

Da hast Du Recht – der „Horror“ der Unübersichtlichkeit wäre quasi nur verschoben worden.
Ich hab mir gedacht, dass die Werte der Reihe nach in einer Variable (z.B. „x“) zusammengefasst werden.

Zitat:
Und da steige ich bereits aus: Welches "Verfahren" und was sind "Begrifflichketien"?

Mit dem „Verfahren“ meinte ich, dass ich das Einlesen der entsprechenden Spalten für einen weiteren „Begriff“ (z. B. “Umsatz“) analog zu oben wiederholen wollte. Diese neuen Spalteninhalte sollen dann ebenfalls in einer Variable (z. B. „y“) der Reihe nach zusammengefasst werden. Das Vorgehen benötige ich wohl für meine Regression – die jedoch zunächst einmal zu vernachlässigen ist.

Zitat:
Da die Tabelle ja recht handlich ist (eine Million Elemente ist für einen Menschen viel, für Matlab aber kein Problem), kannst Du einfach die gesamte Tabelle einlesen und dann die gewünschten Werte extrahieren.

Diese Aussage gibt mir Hoffnung! Smile

Viele Grüße
DasFragezeichen

P.S. Gemäß Deines Wunsches werde ich einen weiteren Thread für meine Frage bzgl. der Regression erstellen.

beispieldatensatz.xls
 Beschreibung:

Download
 Dateiname:  beispieldatensatz.xls
 Dateigröße:  31 KB
 Heruntergeladen:  559 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DasFragezeichen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2015, 22:30     Titel:
  Antworten mit Zitat      
Ich antworte wirklich ungerne auf meine eigenen Text, doch hat jemand eine neuerliche Antwort auf meine Frage(n)? Ich benötige dieses Wissen für meine bevorstehende Datenanalyse wirklich dringend. Sad

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.12.2015, 11:48     Titel:
  Antworten mit Zitat      
Hallo DasFragezeichen,

Code:
[num, txt, raw] = xlsread(FileName);
Header = txt(5, :);
match = ~cellfun('isempty', strfind(header, 'gesamte Kosten'));
value = num(6:end, match);

Hilft das weiter?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DasFragezeichen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2015, 12:49     Titel:
  Antworten mit Zitat      
Hallo Jan,

Dein Code hilft mir schon SEHR VIEL weiter! Vielen Dank! Smile

Allerdings besteht noch ein kleines Problem (vermutlich in der letzten Zeile Deiner Funktion):

Code:
value = num(6:end, match);


Nach dieser werden interessanter Weise nicht die Ziffern der Spalten mit dem String "gesamte Kosten" eingelesen (diese werden in "match" offensichtlich korrekt erkannt), sondern die Spalte die jeweils nach der "gesamte Kosten"-Spalte folgt. Zudem werden erst die Werte ab der sechsten Zeile aus der "num"-Tabelle ausgelesen.

Für den einzulesenden Bereich aus der "num"-Tabelle habe ich daher folgende (hoffentlich korrekte) kleine Anpassung durchgeführt:
Code:
value = num(1:end, match);


Für das erste Problem weiß ich jedoch leider keine Lösung. Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
DasFragezeichen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2016, 20:20     Titel:
  Antworten mit Zitat      
Hallo und ein frohes neues Jahr! Smile

Mittlerweile habe ich mich mit der kleinen Problematik (Spalten wurden versetzt eingelesen) noch einmal genauer auseinandergesetzt. Demnach bin ich zu dem Schluss gelangt, dass die Datumsangaben (und ihre Formatierung aus Excel) ursächlich für die Verschiebung meines Ergebnisses sind/waren.

Matlab hat offensichtlich die einzelnen Zellen der Datumsspalte als String behandelt und sie somit aus der numerischen Tabelle entfernt. Entsprechend sind sämtliche numerische Zellen jeweils um eine Einheit nach links verschoben worden.

Diesen Fehler scheine ich nach etwas Bastelarbeit (und einiges an Recherchieren) in den Griff bekommen zu haben. Für einen Anfänger ist dies gar nicht so trivial. Smile

Mein Ergebnis möchte ich euch natürlich nicht vorenthalten. Vielleicht hat irgendwann einmal eine ähnliche Frage und kann mit meiner kleinen Darstellung sein Problem lösen (oder zumindest eingrenzen):


Code:

% Einlesen der Excel-Datei
[num, txt, raw] = xlsread('beispieldatensatz.xlsx');

% Überschriften herausfiltern
header = txt(5, :);

% Prüfen der Überschriften auf String "gesamte Kosten"
match = ~cellfun('isempty', strfind(header, 'gesamte Kosten'));

% Definition des Datumformats
dateformat = 'dd.mm.yyyy';

% Konvertieren des jeweiligen Datumformats in numerisches Format
datum = datenum(raw(6:end,1),dateformat);

% Zurückspeichern der konvertieren Daten in numerische Matrix
num = [datum, num];

% Ausgabe der gewünschten Ergebnisse
value = num(1:end, match)


Viele Grüße
DasFragezeichen
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.