Forum: PC-Programmierung eine Menge Mittelwerte bilden


von Kolja L. (kolja82)


Lesenswert?

Guten Abend

Als Student bekommt man ja manchmal undankbare Aufgaben.
Meine heutige ist, das anpassen von zwei Messreihen.

Die eine besteht aus Wetterdaten (Temperatur und Einstrahlung),
welche als halbstündliche Mittelwerte zur Verfügung stehen.

Die andere Messreihe sind Temperaturen aus einem Heizungssystem,
welche alle 15 (!) Sekunden aufgenommen worden sind.
Das sind über 300.000 Werte pro Jahr.

Mir liegen die Daten in einer Excel Datei mit 91 (!) Spalten vor,
wobei die ersten beiden Spalten das Datum und die Uhrzeit sind.

Jetzt die alles entscheidende Frage:

Wie kann ich möglichst automatisch diese riesen csv Datei einlesen und 
alle 120 Zeilen den Mittelwert einer jeden Spalte berechnen und wieder 
abspeichern?

Wenn mir da jemand zu einer einfachen Lösung verhelfen kann,
wäre ich sehr erleichtert.

Danke und Gruß

von WS (Gast)


Lesenswert?

Awk

von ths (Gast)


Lesenswert?

Ich verstehe gar nicht, wo das Problemchen sein soll. Wenn nicht mit 
Excel, womit dann?

von Michael (Gast)


Lesenswert?

Probiers einfach mal mit der Funktion "Mittelwert" in Excel

Einfach die gewünschten Bereiche markieren und die Funktion benutzen

von Michael (Gast)


Lesenswert?

Hier die Funktion

=MITTELWERT(B3:C29)
für B3 oder C29 musst du halt deine Spalten  und Zeilen eintragen, 
indenen deine Daten sind

von fft (Gast)


Lesenswert?

VBA ist dein Freund:
1
Sub FaulerStudent
2
3
dim i as integer
4
dim j as integer
5
dim Mittelwert as integer
6
7
for i=1 to EndeDerListe step 1
8
9
 Mittelwert = 0
10
11
 for j=1 to 150 step 1
12
  Mittelwert = Mittelwert + Activesheet.Cells(i*j, SpaltenNr)
13
 next j
14
15
 MsgBox("Mittelwert " & CStr(i) & " :" & Cstr(Mittelwert)
16
17
next i
18
19
End Sub

Schnell mal reingetippt, debuggen musst du schon selbst

von Jan H. (j_hansen)


Lesenswert?

Neue Spalte, in der jeweils 120 Zeilen denselben "Schlüssel" bekommen, 
dann eine Pivot-Tabelle draus, fertig.

von Kolja L. (kolja82)


Lesenswert?

Michael schrieb:
> Probiers einfach mal mit der Funktion "Mittelwert" in Excel
>
> Einfach die gewünschten Bereiche markieren und die Funktion benutzen

Ja, das ist der Weg den ich gehen sollte.
Aber es sind, wie gesagt, 300k werte pro Jahr und das über mindestens 
drei Jahre

von c.m. (Gast)


Lesenswert?

perl.

wenn du öfter so zeug machen musst, solltest du dir eine geeignete 
scripsprache reinschaffen.
ansonsten klickst du dir ganz stumpfsinnig nen wolf.

von Moki (Gast)


Lesenswert?

Nutz Excel!

Sei mir nicht böse, aber meiner Vermutung nach studierst du eine 
Ingenieurswissenschaft. Also verhalt dich wie ein Ing:

Mach die Excel Hilfe auf und such nach Mittelwert wie oben geschrieben.

von Kai S. (kai1986)


Lesenswert?

Einfach Formel eingeben und ziehen ($-Zeichen verwenden, um fixe Teile 
nicht mit zu verändern). Deiner Beschreibung nach klingt das, als könnte 
man das mit Excel in 30 Sekunden machen, ohne Referenzdatei kann man es 
leider nicht testen/zeigen.

Gruß Kai

PS: Ich persönlich bin auch Freund von freier Programmierung (z.B. 
Skriptsprache). Ich bin aber doch immer wieder überrascht, wie viel Mühe 
sich Microsoft bei Excel gegeben hat, um Skripte durch native Befehle zu 
vermeiden. Dafür muss der Nutzer dann halt die Spezialbefehle lernen 
statt einer anderen Sprache.

von Kolja L. (kolja82)


Lesenswert?

Moki schrieb:
> Mach die Excel Hilfe auf und such nach Mittelwert wie oben geschrieben.

Wie man einen Mittelwert in Excel bildet ist mir klar.
Das hätte ich vielleicht anfangs deutlich machen sollen.
Bitte entschuldigt.

Ich suche einen Weg, wie ich diese große Datenmenge automatisch 
bearbeiten kann.

VBA kenne ich noch gar nicht, könnte mir aber vorstellen, dass das eine 
gute Lösung abgeben wird.

von Wolfgang (Gast)


Lesenswert?

Kolja L. schrieb:
> Mir liegen die Daten in einer Excel Datei mit 91 (!) Spalten vor,
> wobei die ersten beiden Spalten das Datum und die Uhrzeit sind.

Da hat wohl einer richtig drüber nachgedacht, wie die Daten hinterher 
weiter verarbeitet werden sollen.

Importiere das Zeugs in DIAdem. Das kann mit solchen Datenmengen recht 
zügig umgehen.

von Kai S. (kai1986)


Lesenswert?

Kolja L. schrieb:
> VBA kenne ich noch gar nicht, könnte mir aber vorstellen, dass das eine
> gute Lösung abgeben wird.

Ja, kann mit mit VBA machen. Ist aber keine gute Lösung, da Excel mit 
Makros eine massive Sicherheitslücke ist und extrem ungerne gesehen 
wird.

Ich kann aber nicht nachvollziehen, wo dein Problem mit einfach Formel 
und ziehen (kleines, schwarzes Rechteck des makierten Bereichs mit dem 
kleinen, schwarzen Kreuz der Maus) ist.

Aber ohne Beispieldatei (Notfalls tut es auch ein Ausschnitt aus den 
Originaldaten, wenn du die veröffentlichen darfst) kann ich da leider 
nicht weiterhelfen.

Gruß Kai

von Sebastian S. (amateur)


Lesenswert?

Kann Excel denn überhaupt 300000 Zeilen?

von Kolja L. (kolja82)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Da hat wohl einer richtig drüber nachgedacht, wie die Daten hinterher
> weiter verarbeitet werden sollen.

Das ist auch mein Verdacht.
Ich prophezeie sogar, dass meine Aufgabe, alles auf halbstündige Werte 
zu bringen, nicht die Lösung sein wird.
Wahrscheinlich müssen beide Datensätze auf minütliche Werte angepasst 
werden.

Sebastian S. schrieb:
> Kann Excel denn überhaupt 300000 Zeilen?

Ja, hatte auch schon mal 1.6 Millionen Zeilen.

Kai S. schrieb:
> Deiner Beschreibung nach klingt das, als könnte
> man das mit Excel in 30 Sekunden machen, ohne Referenzdatei kann man es
> leider nicht testen/zeigen.

Die Uhr läuft :-)

von Bernd K. (prof7bit)


Lesenswert?

Kolja L. schrieb:
> VBA kenne ich noch gar nicht, könnte mir aber vorstellen, dass das eine
> gute Lösung abgeben wird.

Nein. VBA ist ein Werkzeug das nur auf einer einzigen Insel 
funktioniert, eine Insel die mit "M" anfängt und mit "ft" aufhört und 
die leider mit nichts anderem auf der Welt kompatibel ist, darin mehr 
Zeit zu verschwenden als zwingend nötig ist um von eben dieser Insel 
runterzukommen ist das Gegenteil von vernünftig.

Schaff als erstes die Daten raus aus Excel.

Dann verarbeite die Daten mit irgend einer Scriptsprache, vorzugsweise 
(im Interesse der Investitionssicherheit für Deine investierte Zeit) 
suchst Du Dir eine Sprache aus die auf der ganzen Welt (und nicht nur 
auf der oben genannten Insel) funktioniert und auch für mehr als nur 
eine Anwendung von Nutzen ist. Ich persönlich würde für den Anfang 
Python empfehlen. Oben hat einer Perl empfohlen, das ist auch OK, ist 
halt Geschmackssache, als Allzwecksprachen sind beide gut geeignet (und 
noch etliche mehr).

: Bearbeitet durch User
von Max M. (jens2001)


Lesenswert?

Bernd K. schrieb:
> eine Insel die mit "M" anfängt und mit "ft"

"M......ft" ist keine Insel sondern ein Kontinent. Auch wenn die L...x 
Eingeborenen das anders sehen.

von Kai S. (kai1986)


Angehängte Dateien:

Lesenswert?

Kolja L. schrieb:
> Die Uhr läuft :-)

Bitte schön.

Zugegeben, hat einen Moment länger gedauert, da ich nicht realisiert 
habe, das du die Daten der Mittelwerte ohne Leerzeilen haben möchtest. 
Daher der extra Schritt über die indirekte Adressierung.

Gruß Kai

von Kolja L. (kolja82)


Lesenswert?

Danke, bin gespannt.
Muss nur gerade mit der Familie vor dem Fernseher verweilen

von Marc E. (mahwe)


Lesenswert?

exel geht es ist aber bei der Datenmenge nervig.
Wenn du Student bist dann hast du doch Matlab.
Schreib dir damit nen Tool, dass geht auf Dauer schneller als mit exel, 
das kommt bei 300000 Messwerten langsam an die Grenze.
Wenn du Hilfe brauchst schreib ne Mail dann bekommst du Beispiel.

von Frank (Gast)


Lesenswert?

Marc E. schrieb:
> exel geht es ist aber bei der Datenmenge nervig. Wenn du Student bist
> dann hast du doch Matlab.

Und ansonsten funktioniert auch Octave wunderbar.
Wäre auch meine erste Wahl und nutze ich auch geschäftlich viel für CSV 
Import + Berechnungen + Visualisierung/Export. Da dürfen es auch gerne 
Mal größere Datenmengen sein.

Ansonsten hat man so etwas auch schnell in C# o.Ä. geschrieben.

von Jan H. (j_hansen)


Angehängte Dateien:

Lesenswert?

Noch einmal: warum machst du nicht einfach eine Pivot? Einmal einrichten 
5 Minuten, und wenn du später das Intervall ändern musst ist das in 30 
Sekunden geschehen.

von Bla (Gast)


Lesenswert?

Frank schrieb:
> Und ansonsten funktioniert auch Octave wunderbar.
> Wäre auch meine erste Wahl

Dito, mit mean(csvread($dateiname)) ist es in < 10 Sekunden getan.


Ok, vielleicht noch den Datenbereich einmalig anpassen... Aber octave 
hat das berechnet bevor Excel überhaupt offen ist!

von Kolja L. (kolja82)


Lesenswert?

Jan H. schrieb:
> Noch einmal: warum machst du nicht einfach eine Pivot?

Weil ich noch nicht ganz verstanden habe, wie du das meinst.

von Possetitjel (Gast)


Lesenswert?

Kolja L. schrieb:
> Wie kann ich möglichst automatisch diese riesen csv Datei
> einlesen und alle 120 Zeilen den Mittelwert einer jeden
> Spalte berechnen und wieder abspeichern?

Du laesst den GLEITENDEN MITTELWERT ueber 120 Zeilen
berechnen und verwendest nur jede 120. Zeile.



Bitte sehr; keine Ursache. :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.