Datenmengen in datensätze reduzieren

  • #1
I

Ivaylo

Bekanntes Mitglied
Themenersteller
Dabei seit
06.02.2003
Beiträge
58
Reaktionspunkte
0
Ort
BG
Hallo, ich brauche eine Programm die ein Datensatz reduzieren kann.
Ich habe nach eine Versuchsreihe eine menge Daten gesammelt (für meine Studienarbeit), das Problem ist es jedoch das ich das nicht in Excel bearbeiten kann. Ich habe mir gedacht es sollte doch ein kleines Programm geben, das die Daten reduziert. Die Sensoren und die Erfassungsystem liefern ein Datenpunkt jede Sekunde ich brauche es aber nicht so dicht es wehre es mir lieber ein Datenpunkt pro Minute oder sogar pro Stunde (ein Versuch dauert 1-3 Monate das heißt fast 1'000?000 Zeilen). Bitte helfen ihr mir, wenn ihr eine Lösung weist.

Die Daten sehen so aus:
A B C D E F G
0 16:52:28 20,07 5,0043 5,0046 8,7399 8,9111
1 16:52:29 20,07 5,0055 5,0046 8,7399 8,9111
. . . . . . .
. . . . . . .
. . . . . . .
156490 12:20:45 22,07 5,0021 5,0061 0,8914 2,8326

Und so weiter.

Vielen dank!
Mit freundlichen Grüßen Ivaylo.
 
  • #2
Hallo Ivaylo,
in welcher Form bzw. in welchem Format liegen die Daten denn vor? Wenn es Textdateien sind, könnte man sie leicht mit einem AWK-Skript überarbeiten und z. B. nur die Zeilen zur vollen Minute oder zur vollen Stunde herausfiltern.
Viele Grüße - Ulrich
 
  • #3
:D
das sind Textfiles. Vie funktioniert das kannst du es mir bitte näher erklärei oder ein link mit Anleitungen schicken.
Ich hab zuerst an Java gedacht aber leider reichen meine Kenntnisse nicht aus. Es währe super wenn ich die Daten nicht lösche sondern ein mittelwert ausrechne.

Mit freundlichen Grüßen Ivaylo.

Danke!
 
  • #4
Hallo Ivaylo,
GAWK einschl. Dokumentation findest Du hier:
http://gnuwin32.sourceforge.net/packages/gawk.htm
Bilden eines Mittelwertes wäre auch kein Problem. Allerdings könnte man dann auch ein C-Programm schreiben, dann hätte man die Möglichkeit, noch weitere statistische Auswertungen vorzunehmen.
Nur aus Neugier: Was machst Du denn da für Messungen bzw. was ist das Thema Deiner Arbeit?
Viele Grüße - Ulrich
 
  • #5
Es sind Langzeitkrichversuche mit Kunststoffe.

O.K. ich muss meine Java Kenntnisse erfrische und mir selber ein Programm schreiben. ??? Ich meine es währe leichter für mich da habe ich zu minderst Grundkenntnisse.

Danke
 
  • #6
ich muss meine Java Kenntnisse erfrische und mir selber ein Programm schreiben
Warum denn, glaubt Du, es geht nicht mit AWK? Dieses Programm ist genau für solche Aufgabenstellungen gemacht: Feldorientiert aufgebaute Textdateien zu überarbeiten. Ich würde Dir ja anbieten, solch ein Skript zu schreiben - das geht mit wenigen Programmzeilen - aber Deine Studienarbeit sollst Du ja selbständig erledigen.
Viele Grüße - Ulrich
 
  • #7
Ich sage ja nicht das mit dem Programm nicht möglich ist, ich kenne mich nicht aus aber ich versuche es. Meine Studienarbeit ist fast fertig das wollte ich nur noch auf freie Wille dazu schreiben. ;)

Jetzt lese ich bisschen drüber und versuche es dann.

bis bald
 
  • #8
Hallo Ivaylo,
es ist wirklich sehr einfach. Filtern ohne Mittelwerte ist ein Einzeiler:
Code:
substr ($2, 7, 2) == 00 {print}
Filtern mit Mittelwerten:
Code:
BEGIN{
 nr = 0
 sum1 = 0
 sum2 = 0
 sum3 = 0
 }
 {gsub (/,/, .)
  sum1 += $3
  sum2 += $4
  sum3 += $5
  nr++
 }
substr ($2, 7, 2) == 00 {print $1   $2   sum1/nr   sum2/nr   sum3/nr
 sum1 = 0
 sum2 = 0
 sum3 = 0
 nr = 0
 }
Die Anweisungen jeweils in eine Datei z. B. kompr.awk schreiben und ausführen mit
Code:
gawk -f kompr.awk eingabedatei > ausgabedatei
So einfach geht es mit C oder Java nie und nimmer!
Viele Grüße - Ulrich
 
  • #9
Danke, aber es klapt nicht. :-[
Ich habe es gestern versucht mir selber was zu schreiben aber ich komme nicht ganz klar mit der sintaxis dieset sprache.

Es ist richtig, dass die viel kleiner ist als ein Javaprogramm.

mfg Ivaylo
Danke!
 
  • #10
Hallo, :-\
ich habe folgendes mit java geschrieben und es funktioniert nur leider muss der Input-File nur eine Zelle besitzen sonst gehet es nicht.

Code:
import java.io.*;
class MittelWert
{
 public static void main ( String[] args ) throws IOException
 {
  double zahl;
  double summe = 0; // summe initialisieren

  String zeile;
  BufferedReader stdin = new BufferedReader(
    new InputStreamReader( System.in ) );

  double zaehler = 1; // zaehler initialisieren
  while ( zaehler <= 60 )
		{
			summe = 0;
				while ( zaehler <= 60 )
				{
				 //System.out.println(Geben Sie eine Zahl ein:);
				 zeile = stdin.readLine();
				 zahl = Double.parseDouble( zeile );
				 summe = summe + zahl; // zu summe addieren
				 zaehler = zaehler + 1; // zaehler inkrementieren
				}
			System.out.println( + summe / 60 );
			zaehler = 1;
		}
 }
}

dann starte ich das mit:
Code:
c:> java MittelWert < input_1.txt > uotput_1.txt

Ich weiss, dass nicht perfekt ist und auch nicht ganz sauber geschrieben und des wegen wenn jemand das korrigieren kann der verbessern kann ich werde ihm oder ihr sehr dankbar sein. :-\

mfg Ivaylo.
 
  • #11
Hallo Ivaylo,
um alle Felder Deiner Eingabe zu berücksichtigen, musst Du den String in einzelne Tokens zerlegen. Wie das geht, ist hier beschrieben:
http://www.galileocomputing.de/open...htm#Rxxjava_040006256DieKlasseStringTokenizer
AWK erledigt das selbständig, indem es die einzelnen Felder in den Variablen $1, $2, $3, ... ablegt.
Ich habe gesehen, dass man meinen AWK-Code noch effektiver machen kann:
Code:
BEGIN{
 nr = 0
 for (i = 3; i <= 7; i++) sum[i] = 0
 }
 {gsub (/,/, .)
  for (i = 3; i <= 7; i++) sum[i] += $i
  nr++
 }
substr ($2, 7, 2) == 00 {
  print $1   $2   sum[3]/nr   sum[4]/nr   sum[5]/nr   sum[6]/nr   sum[7]/nr
  for (i = 3; i <= 7; i++) sum[i] = 0
  nr = 0
 }
Viele Grüße - Ulrich
 
Thema:

Datenmengen in datensätze reduzieren

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben