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

CSV-Datensatz nach Intervallen aufspalten

 

Nemo2002
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 22
Anmeldedatum: 26.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2013, 12:41     Titel:
  Antworten mit Zitat      
okay, eine Frage hätt ich noch^^


kann ich in der Spalte "description" die Zeichenkette zählen und so in die Matrix miteinbinden? Dann hätte man das ja auch als eine Zahl oder geht sowas nicht? Z.b. wenn da im Datensatz "Hey" steht, dass dort ne 3 abgespeichert wird und für "Hallo" eine 5....


Wie man longitute mit einfügt hab ich schon selbst herausgefunden, reicht ja wirklich wenn man nur ein weiteres & Argument anfügt in der Definition....langsam läuft es Smile


@Jan: Das mit der Zahl hat sich geklärt...hab nicht beachtet, dass die daher kommt, dass man beim 1.1.0000 anfängt zu zählen. Im Workspace ist dies im Format Double als Vektor

Es wird auch nicht mit nem , angezeigt sondern mit 7.3487e+05
Irgendwie entstand beim rüberkopieren eine normale Zahl
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2013, 12:52     Titel:
  Antworten mit Zitat      
Hallo,

Code:
description = cellfun(@numel, t(:,5));


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nemo2002
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 22
Anmeldedatum: 26.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2013, 13:02     Titel:
  Antworten mit Zitat      
TOP!!!!!

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2013, 14:08     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
die Datei ist sehr schwierig zu lesen, da Komma mal Trennzeichen ist und mal nicht. Die Anführungszeichen helfen zwar, werden aber teilweise leider auch innerhalb der Strings verwendet, was dann wieder alles andere als hilfreich ist. Ich würde generell versuchen, Daten in einem halbwegs vernünftigen Format zu bekommen.

Die Datei ist eine völlig korrekte CSV-Datei, bei der Strings in " gesetzt sind und " in Strings als doppelte "" kodiert sind. Warum jedoch alle Zahlen auch als Strings gespeichert sind??
Was die Sache noch komplizierter macht, ist, dass auch Zeilenumbrüche in Strings enthalten sein dürfen:
Code:
content=['"abc","a"",45",23.4,23' 10 '23,,a']

result = {};
row = 1;
col = 1;
for cell=regexp(content,'("(?:[^"]|"")*"|[^",\n]*)(,|\n|$)','tokens')
    cell = cell{1};
    result{row,col}=cell{1};
    if cell{2}==','
        col = col + 1;
    else
        col = 1;
        row = row + 1;
    end
end
result
Private Nachricht senden Benutzer-Profile anzeigen
 
Nemo2002
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 22
Anmeldedatum: 26.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2013, 14:10     Titel:
  Antworten mit Zitat      
danke Sirius, ich werds auch mal mit deiner Lösung probieren udn vorallem versuchen zu verstehen....ich glaub das verstehn ist der effektviere Teil^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Kahof
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2013, 16:20     Titel: Cell / Cell-Array auslesen
  Antworten mit Zitat      
Hallo Leute,
ich arbeite mit Nemo2002 in einer Gruppe und habe eine Frage zur Umwandlung bzw. zur richtigen Arbeit mit verschiedenen Datentypen.

Hauptteil unserer Gruppenarbeit, wie Nemo2002 erklärt hat, ist die eigentliche Datenanalyse, z.B. Clusterung und statistische/ ökonometrische Auswertung. Wir sind VWLer und uns fehlt eindeutig das nötige Vorwissen in Sachen Programmierung. Das ist voll frustrierend, weil wir zur eigentlichen Datenanalyse garnicht kommen - wir haben immer noch Probleme mit dem richtigen Einlesen und Formatieren der train.csv .
[Code und train.csv sind im Anhang, s.u. .]

Ziel ist es herauszufinden (z.B. per Regression), wie die drei Zielvariablen "num_votes" (Spalte 6), "num_comments" (Sp. 7) und "num_views" (Sp.Cool von anderen Variablen z.B. "Source" (Sp.9) beeinflusst werden. Dabei stehen z.B. in Sp. 9 bei "Source" strings drin und insgesamt sind die als Typ "cell" in t gespeichert. Der Datentyp "cell" kann anscheinend nur in "nominal" oder "double" umgewandelt werden.


Meine Fragen sind:
(i) Wie kann ich z.B. jedem Eintrag in "Source" einen eindeutigen Zahlenwert zuweisen um somit in die eigentliche Datenanalyse überzugehen?
-"@numel" geht nicht, weil verschiedene Einträge dennoch die gleiche Anzahl an characters haben können ->keine Eindeutigkeit
-erst in "nominal" und danach in "double" umwandeln ist auch nicht eindeutig - hier haben verschiedene strings ab und an dennoch den gleichen double-wert

(ii)Wie kann ich ein cell-Array (hier in Variable t gespeichert) vernünftig in ein datasetarray umwandeln? Oder wie kann ich überhaupt mit dem Datentyp "cell" vernünftig umgehen?
->siehe code: "ds= cell2dataset..." funzt nicht, weil in t keine Variablennamen in der 1.Zeile gespeichert sind. Kann ich "readvarnames" und "readobsnames" auf !false! setzen oder soll ist cell2dataset ganz und gar ungünstig?

Ich danke euch für alle helfenden und anregenden Kommentare!
Grüße



Code:


close all;

fid = fopen('train.csv');
s = textscan(fid, '%s', 'delimiter', '', 'headerlines', 1);
s = s{1}(1:10000);
close(fid);

%% Format the data for readability and workflow for data analysis

s = cellfun(@(s) [s, ','], s, 'UniformOutput', false);
t = regexp(s, '"([^"]*)",', 'tokens');
t = vertcat(t{:});
t = cellfun(@(t) t, t); % t is of type "cell"

%% Define column vectors and whole formated data matrice

%ds = cell2dataset(t(:,2:end)); % doesn't work!

id = str2double(t(:,1)); % in the following--> vectors of: id, latitude, longitude, ...
latitude = str2double(t(:,2));
longitude = str2double(t(:,3));
summary = nominal(t(:,4));
summary = double(summary);
description = nominal(t(:,5));
description = double(description);
num_votes = str2double(t(:,6));
num_comments = str2double(t(:,7));
num_views = str2double(t(:,Cool);
source = nominal(t(:,9));
source = double(source);
created_time = datenum(t(:,10),'yyyy-mm-dd HH:MM:SS');
tag_type = nominal(t(:,11));
tag_type = double(tag_type);

data_mat = [id,latitude,longitude,summary, description, num_votes, num_comments,num_views, source, created_time, tag_type];
% take columnvectors and create matrice "data_mat"

%clear t
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Kahof
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2013, 16:38     Titel:
  Antworten mit Zitat      


train.xls
 Beschreibung:
Hier ist die train.xls (ursprüngliche .csv) aber nur mit 100, statt 233000+ zeilen

Download
 Dateiname:  train.xls
 Dateigröße:  24.54 KB
 Heruntergeladen:  570 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2013, 17:58     Titel:
  Antworten mit Zitat      
Hallo,

bitte keine Mehrfachposts und die Code-Umgebung verwenden.

zu i)
Zitat:
-erst in "nominal" und danach in "double" umwandeln ist auch nicht eindeutig - hier haben verschiedene strings ab und an dennoch den gleichen double-wert

Dafür bitte ein konkretes Beispiel.

zu ii)
Dann schreib doch die Variablennamen drüber - entweder aus der Datei auslesen oder händisch.

Code:
headers = {'Var1', 'Var2',...}
t = [headers; t]


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Kahof
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2013, 20:42     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deinen Tipp! ich werde bei den nächsten Posts darauf achten.
Übrigens hat dein Tipp mit den headers sofort funktioniert - Yeah! Very Happy Habe jetzt n dataset.
Zu (i) hier eine kurze Erläuterung:

% ***category*** ***nr of elements in column***
% android --> 7
% city_initiated -->14
% iphone --> 6
% Map Widget -->10
% Mobile Site -->11
% NA --> 2
% New Map Widget -->14
% remote_api_created -->18
% web --> 3

So wollte ich "Source" kategorisieren, aber dann ist mir aufgefallen, dass "city_initiated" und "New Map Widget" beide 14 characters haben. Aber, da ich ja jetzt die 1000x11 cell-matrix in per "cell2dataset" in ein dataset umgewandelt habe, würde ich jetzt einfach mal probieren strings und kategorien von strings direkt miteinander zu vergleichen. Was denkst du?

Grüße,
Karl
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2013, 22:04     Titel:
  Antworten mit Zitat      
Hallo,

dass verschiedene Mitteilungen trotzdem die gleiche Zeichenlänge haben können, ist naheliegend. Ich hatte mich auf die Bildung von nominal arrays bezogen und da sollten unterschiedliche Strings auch unterschiedliche kodiert werden. Dafür, dass das nicht der Fall ist, würde ich gerne ein Beispiel sehen.

Zitat:
würde ich jetzt einfach mal probieren strings und kategorien von strings direkt miteinander zu vergleichen

Probieren schadet nie. Mir ist allerdings nicht klar, was du da mit was vergleichen willst. Insofern kann ich da nicht viel dazu sagen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Kahof
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2013, 17:39     Titel:
  Antworten mit Zitat      
Hallo Harald,
es hat jetzt alles geklappt. Ich kann variablen in "nominal" und "double" umwandeln und die werte sind eindeutig. Anstatt den Datensatz nur teilweise einzulesen, habe ich jetzt die gesamte 223000x11 matrix eingelesen. Ist zwar tierisch rechen- und zeitintensiv, aber einige wichtige Daten, die ich unbedingt brauche, kamen, von der Datenverteilung her, erst in den letzten 1.000 bis 10.000 einträgen.
Danke nochmal für deine Hilfe!!! Die weitere Datenanalyse mache ich jetzt mit Hilfe des dataset arrays und den operationen der dataset class. Falls ich Fragen habe, melde ich mich nochmal Wink CU
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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 - 2024 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.