Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ######################################################################
- # CT60A0202 Ohjelmoinnin ja data-analytiikan perusteet
- # Tekijä: Hugo Hutri
- # Opiskelijanumero: 0523331
- # Päivämäärä: 13.11.2018
- # Yhteistyö ja lähteet, nimi ja yhteistyön muoto: -
- # HUOM! KAIKKI KURSSIN TEHTÄVÄT OVAT HENKILÖKOHTAISIA!
- ######################################################################
- import datetime
- import sys
- def valikko():
- print("""Anna haluamasi toiminnon numero seuraavasta valikosta:
- 1) Lue sähköntuotantotiedot
- 2) Analysoi päivätuotanto
- 3) Tallenna päivätuotanto
- 4) Analysoi kuukausituotanto
- 5) Analysoi tuntituotanto
- 6) Tallenna kuukausituotanto
- 7) Tallenna tuntituotanto
- 0) Lopeta""")
- valinta = int(input("Valintasi: "))
- return(valinta)
- def lue_tiedot(tiedot):
- tiedoston_nimi = input("Anna luettavan tiedoston nimi: ")
- analysoitava_vuosi = input("Anna analysoitava vuosi: ")
- try:
- tiedosto = open(tiedoston_nimi, "r")
- except OSError:
- print("Tiedoston '" + tiedoston_nimi + "' lukeminen epäonnistui, ei löydy, lopetetaan.")
- sys.exit(0)
- #Luetaan rivi riviltä
- luetut = 0
- for rivi in tiedosto:
- luetut += 1
- if rivi[:4] != analysoitava_vuosi:
- #Jos vuosi tai rivin sisältö ei ole oikea niin luetaan uusi rivi
- continue
- rivi.strip()
- rivi_lista = rivi.split(";")
- paivaus = datetime.datetime.strptime(rivi_lista[0],"%Y-%m-%d %H:%M:%S")
- sahko_summa = float(rivi_lista[1])+float(rivi_lista[2])+float(rivi_lista[3])\
- +float(rivi_lista[4])+float(rivi_lista[5])+float(rivi_lista[6])+float(rivi_lista[7])
- if sahko_summa < 0:
- sahko_summa = 0
- #Tallennetaan tiedot listaan
- tiedot.append([paivaus, sahko_summa])
- print("Tiedosto '"+tiedoston_nimi+"' luettu,",luetut,"riviä,",len(tiedot),"otettu analysoitavaksi.")
- try:
- pvm1 = datetime.datetime.strftime(tiedot[0][0],"%d.%m.%Y %H:%M")
- pvm2 = datetime.datetime.strftime(paivaus,"%d.%m.%Y %H:%M")
- print("Analysoidaan", pvm1, "ja", pvm2, "välistä dataa.")
- tiedosto.close()
- return(tiedot,analysoitava_vuosi)
- except IndexError: #Jos lista oli tyhjä
- pass
- def analysoi_paiva(tiedot,paivatuotanto):
- paivatuotanto.clear()
- mittaus = 0
- kumulatiivinen = 0
- #Käydään data läpi
- while mittaus < len(tiedot)-1:
- summa = float(tiedot[mittaus][1])
- while mittaus < len(tiedot)-1:
- #Tarkistetaan onko päivä sama kuin seuraavan mittauksen päivä
- paiva = datetime.datetime.strftime(tiedot[mittaus][0],"%Y-%m-%d")
- paiva2 = datetime.datetime.strftime(tiedot[mittaus+1][0],"%Y-%m-%d")
- if paiva == paiva2:
- summa += tiedot[mittaus+1][1]
- mittaus += 1
- else:
- break
- #Jos seuraavan mittauksen päivä oli eri niin tallennetaan tiedot listaan
- kumulatiivinen += summa
- paivatuotanto.append([tiedot[mittaus][0],summa,kumulatiivinen])
- mittaus += 1
- print("Päivätuotanto analysoitu.")
- return(paivatuotanto)
- def analysoi_kuukausi(tiedot,kuukausituotanto):
- kuukausituotanto.clear()
- vuoden_sahko = 0
- for i in range(len(tiedot)): #Lasketaan koko vuoden tuotanto
- vuoden_sahko += tiedot[i][1]
- mittaus = 0
- #Käydään data läpi
- while mittaus < len(tiedot)-1:
- summa = float(tiedot[mittaus][1])
- while mittaus < len(tiedot)-1:
- #Tarkistetaan onko kuukausi sama kuin seuraavan mittauksen kuukausi
- kuukausi = datetime.datetime.strftime(tiedot[mittaus][0],"%Y-%m")
- kuukausi2 = datetime.datetime.strftime(tiedot[mittaus+1][0],"%Y-%m")
- if kuukausi == kuukausi2:
- summa += tiedot[mittaus+1][1]
- mittaus += 1
- else:
- break
- #Jos seuraavan mittauksen kuukausi oli eri niin tallennetaan tiedot listaan.
- kuukausituotanto.append([tiedot[mittaus][0],summa,(summa/vuoden_sahko)])
- mittaus += 1
- print("Kuukausituotanto analysoitu.")
- return(kuukausituotanto,vuoden_sahko)
- def analysoi_tunti(tiedot,tuntituotanto):
- for i in range(len(tiedot)):
- tunti = int(datetime.datetime.strftime(tiedot[i][0],"%H"))
- kuukausi = int(datetime.datetime.strftime(tiedot[i][0],"%m"))
- #Tallennetaan matriisiin
- tuntituotanto[kuukausi-1][tunti] += tiedot[i][1]
- #Tallennetaan summatut tuntituotannot viimeiselle sarakkeelle
- for i in range(12):
- for j in range(24):
- tuntituotanto[12][j] += tuntituotanto[i][j]
- print("Tuntituotanto analysoitu.")
- vuoden_sahko = 0
- #Lasketaan koko vuoden tuotanto
- for i in range(len(tiedot)):
- vuoden_sahko += tiedot[i][1]
- return(tuntituotanto,vuoden_sahko)
- def tallenna_tunti(tuotanto,vuosi,vuoden_sahko):
- try:
- tiedosto = open(("tulosTunti"+vuosi+".csv"), "w")
- except OSError:
- print("Tiedostoa ei voitu avata")
- tiedosto.write("Tuntipohjainen sähköntuotanto:"+"\n")
- tiedosto.write(";0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23"+"\n")
- #Käydään matriisin 12 saraketta läpi
- for i in range(12):
- tiedosto.write(" "+str(i+1).zfill(2)+"/"+vuosi) #DD/YYYY
- #Käydään 24 riviä läpi ja tallennetaan
- for k in range(24):
- tiedosto.write(";"+str(int(tuotanto[i][k])))
- tiedosto.write("\n")
- tiedosto.write("Yhteensä")
- #Haetaan matriisin viimeiseltä sarakkeelta yhteenlasketut summat
- for k in range(24):
- tiedosto.write(";"+str(int(tuotanto[12][k])))
- tiedosto.write("\n"+"\n"+"\n"+"Yksittäisen tunnin osuus vuosittaisesta sähköntuotannosta:"+"\n")
- tiedosto.write(";0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23"+"\n")
- tiedosto.write("%-osuus")
- #Jaetaan yhteenlasketut summat viimeiseltä sarakkeelta vuoden sähkömäärällä
- for i in range(24):
- prosentti = int((tuotanto[12][i]/vuoden_sahko)*100)
- tiedosto.write(";"+str(prosentti)+"%")
- tiedosto.write("\n"+"\n"+"\n")
- print("Tuntituotanto tallennettu tiedostoon '"+"tulosTunti"+vuosi+".csv"+"'.")
- tiedosto.close()
- def tallenna_paiva(tuotanto):
- try:
- vuosi = datetime.datetime.strftime(tuotanto[0][0],"%Y")
- tiedosto = open(("tulosPaiva"+vuosi+".csv"), "w")
- except OSError:
- print("Tiedostoa ei voitu avata")
- except IndexError:
- print("Ei analysoitua tietoa")
- tiedosto.write("Päivittäinen sähköntuotanto:" + "\n")
- tiedosto.write(";"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+"\n")
- for i in range(len(tuotanto)):
- paivamaara = datetime.datetime.strftime(tuotanto[i][0],"%d.%m.%Y")
- tiedosto.write(paivamaara + ";" + str(int(tuotanto[i][1]))+"\n")
- tiedosto.write("\n"+"\n"+"Kumulatiivinen päivittäinen sähköntuotanto:"+"\n")
- tiedosto.write(";"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+"\n")
- for i in range(len(tuotanto)):
- paivamaara = datetime.datetime.strftime(tuotanto[i][0],"%d.%m.%Y")
- tiedosto.write(paivamaara + ";" + str(int(tuotanto[i][2]))+"\n")
- tiedosto.write("\n"+"\n")
- paivamaara = datetime.datetime.strftime(tuotanto[0][0],"%Y")
- print("Päivätuotanto tallennettu tiedostoon '"+"tulosPaiva"+paivamaara+".csv"+"'.")
- tiedosto.close()
- def tallenna_kuukausi(tuotanto,vuosi):
- try:
- tiedosto = open(("tulosKuukausi"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+".csv"), "w")
- except OSError:
- print("Tiedostoa ei voitu avata")
- except IndexError:
- print("Ei analysoitua tietoa")
- tiedosto.write("Kuukausittainen sähköntuotanto:" + "\n")
- tiedosto.write(";"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+";%-osuus"+"\n")
- try:
- for i in range(len(tuotanto)):
- tiedosto.write(" "+datetime.datetime.strftime(tuotanto[i][0],"%m/%Y")+";")
- tiedosto.write(str(int(tuotanto[i][1]))+";"+str(int(100*tuotanto[i][2]))+"%\n")
- tiedosto.write("Yhteensä;"+str(int(vuosi))+"\n"+"\n"+"\n")
- paivamaara = datetime.datetime.strftime(tuotanto[0][0],"%Y")
- print("Kuukausituotanto tallennettu tiedostoon '"+"tulosKuukausi"+paivamaara+".csv"+"'.")
- tiedosto.close()
- except IndexError:
- print("Tiedosto oli tyhjä")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement