Nachdem ich schon einige Tipps hier im Forum aufgeschnappt habe, habe ich diesmal eine größere Frage wozu ich mich entschlossen habe mich hier anzumelden. Folgendes habe ich vor:
Ich möchte eine Liste aus einer csv-Datei einlesen. Diese hat je drei Einträge (Datum im Unix-Zeitformat, Preis, Handelsvolumen) und dann einen Zeilenumbruch. Bei der Liste handelt es sich um historische Kurse von Kryptowährungen wie Bitcoin. Die Liste besteht selber aus etwas mehr als 10 Mio Zeilen.
Ich möchte jetzt immer nur das 0. und 1. Element (Datum und Preis) einer Reihe einlesen und in einer neuen Liste abspeichern.
Danach soll das Programm über n Einträge eines Tages (n ist immer unterschiedlich) den Mittelwert bilden.
Ein Tag dabei ist die Differenz zwischen dem 0. Datums Eintrag bis 86400 Sekunden (also ein Tag) vergangen sind.
Ergebniss soll sein das ich von Tag 1 den Mittelwert, dann von Tag 2 den Mittelwert usw. erhalte..idealerweise einschränkbar nach Jahren.
Anbei zeige ich euch den Code den ich jetzt schon habe. So ganz funktionieren tut das noch nicht...
..bin ich mit dem Code auf dem richtigen Weg oder sollte ich das vll ganz anders auffahren?
Code: Alles auswählen
import csv
import datetime
import time
#from decimal import *
ausgabealles = []
datumliste = []
preisliste = []
preisaddition = []
mittelwertliste = []
summe = 0
anzahltage = 0
eintraegeprotag = 0
startzeit = time.time()
with open('bitfinexUSD.csv','r') as eingabe:
rohdaten = csv.reader(eingabe)
for row in rohdaten:
datum = int(row[0])
preis = row[1]
volumen = row[2]
datumliste.append(datum)
preisliste.append(preis)
datum2 = datetime.datetime.fromtimestamp(int(datum)).strftime(
'%Y-%m-%d %H:%M:%S') # umwandlung in menschliches format
ausgabe = datum2 + ',' + preis[:10] + '\n'
print(ausgabe)
ausgabealles.append(ausgabe)
endzeit = time.time()
dauer = endzeit - startzeit
print("Die Verarbeitung hat", dauer[:10] / 60, "Minuten gedauert")
with open('ausgabedatei.csv', 'w+', newline='\n') as ausgabedatei:
writer = csv.writer(ausgabedatei)
writer.writerow(ausgabealles)
for elem in datumliste:
if datum - datumliste[0] <= 86400:
eintraegeprotag = len(datumliste)
print("gehst du hier rein?? ja tu ich!!")
else:
print("Ein Tag ist vergangen")
eintraegeprotag = 0
preisliste = 0
datumsliste = 0
#continue
#Berechnung des Mittelwertes
for elem in preisliste[0:]:
summe += float(elem)
mittelwert = float(summe) / eintraegeprotag
print(eintraegeprotag, " Elemente /", "Mittelwert: ", mittelwert)
mittelwertliste.append(mittelwert)
anzahltage += 1
summe = 0
with open('mittelwerte.csv', 'w+', newline='\n') as mittelwertedatei:
writer = csv.writer(mittelwertedatei)
writer.writerow(mittelwertliste, anzahltage)
# Alle Zeiten UTC+0 !!!
# 1388448000 31.12.2013
# 1372636800 1.7.2013
# 1470009600 1.8.2016
# 1472601600 31.8.2016
# 1483228800 1.1.2017
# 1512000000 30.11.2017