Advertisement
Guest User

Untitled

a guest
Nov 17th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.49 KB | None | 0 0
  1. ######################################################################
  2. # CT60A0202 Ohjelmoinnin ja data-analytiikan perusteet
  3. # Tekijä: Hugo Hutri
  4. # Opiskelijanumero: 0523331
  5. # Päivämäärä: 13.11.2018
  6. # Yhteistyö ja lähteet, nimi ja yhteistyön muoto: -
  7. # HUOM! KAIKKI KURSSIN TEHTÄVÄT OVAT HENKILÖKOHTAISIA!
  8. ######################################################################
  9.  
  10. import datetime
  11. import sys
  12.  
  13. def valikko():
  14. print("""Anna haluamasi toiminnon numero seuraavasta valikosta:
  15. 1) Lue sähköntuotantotiedot
  16. 2) Analysoi päivätuotanto
  17. 3) Tallenna päivätuotanto
  18. 4) Analysoi kuukausituotanto
  19. 5) Analysoi tuntituotanto
  20. 6) Tallenna kuukausituotanto
  21. 7) Tallenna tuntituotanto
  22. 0) Lopeta""")
  23. valinta = int(input("Valintasi: "))
  24. return(valinta)
  25.  
  26. def lue_tiedot(tiedot):
  27. tiedoston_nimi = input("Anna luettavan tiedoston nimi: ")
  28. analysoitava_vuosi = input("Anna analysoitava vuosi: ")
  29. try:
  30. tiedosto = open(tiedoston_nimi, "r")
  31. except OSError:
  32. print("Tiedoston '" + tiedoston_nimi + "' lukeminen epäonnistui, ei löydy, lopetetaan.")
  33. sys.exit(0)
  34.  
  35. #Luetaan rivi riviltä
  36. luetut = 0
  37. for rivi in tiedosto:
  38. luetut += 1
  39. if rivi[:4] != analysoitava_vuosi:
  40. #Jos vuosi tai rivin sisältö ei ole oikea niin luetaan uusi rivi
  41. continue
  42. rivi.strip()
  43. rivi_lista = rivi.split(";")
  44.  
  45. paivaus = datetime.datetime.strptime(rivi_lista[0],"%Y-%m-%d %H:%M:%S")
  46. sahko_summa = float(rivi_lista[1])+float(rivi_lista[2])+float(rivi_lista[3])\
  47. +float(rivi_lista[4])+float(rivi_lista[5])+float(rivi_lista[6])+float(rivi_lista[7])
  48. if sahko_summa < 0:
  49. sahko_summa = 0
  50. #Tallennetaan tiedot listaan
  51. tiedot.append([paivaus, sahko_summa])
  52.  
  53. print("Tiedosto '"+tiedoston_nimi+"' luettu,",luetut,"riviä,",len(tiedot),"otettu analysoitavaksi.")
  54. try:
  55. pvm1 = datetime.datetime.strftime(tiedot[0][0],"%d.%m.%Y %H:%M")
  56. pvm2 = datetime.datetime.strftime(paivaus,"%d.%m.%Y %H:%M")
  57. print("Analysoidaan", pvm1, "ja", pvm2, "välistä dataa.")
  58. tiedosto.close()
  59. return(tiedot,analysoitava_vuosi)
  60. except IndexError: #Jos lista oli tyhjä
  61. pass
  62.  
  63. def analysoi_paiva(tiedot,paivatuotanto):
  64. paivatuotanto.clear()
  65. mittaus = 0
  66. kumulatiivinen = 0
  67. #Käydään data läpi
  68. while mittaus < len(tiedot)-1:
  69. summa = float(tiedot[mittaus][1])
  70. while mittaus < len(tiedot)-1:
  71. #Tarkistetaan onko päivä sama kuin seuraavan mittauksen päivä
  72. paiva = datetime.datetime.strftime(tiedot[mittaus][0],"%Y-%m-%d")
  73. paiva2 = datetime.datetime.strftime(tiedot[mittaus+1][0],"%Y-%m-%d")
  74. if paiva == paiva2:
  75. summa += tiedot[mittaus+1][1]
  76. mittaus += 1
  77. else:
  78. break
  79. #Jos seuraavan mittauksen päivä oli eri niin tallennetaan tiedot listaan
  80. kumulatiivinen += summa
  81. paivatuotanto.append([tiedot[mittaus][0],summa,kumulatiivinen])
  82. mittaus += 1
  83. print("Päivätuotanto analysoitu.")
  84. return(paivatuotanto)
  85.  
  86. def analysoi_kuukausi(tiedot,kuukausituotanto):
  87. kuukausituotanto.clear()
  88. vuoden_sahko = 0
  89. for i in range(len(tiedot)): #Lasketaan koko vuoden tuotanto
  90. vuoden_sahko += tiedot[i][1]
  91. mittaus = 0
  92. #Käydään data läpi
  93. while mittaus < len(tiedot)-1:
  94. summa = float(tiedot[mittaus][1])
  95. while mittaus < len(tiedot)-1:
  96. #Tarkistetaan onko kuukausi sama kuin seuraavan mittauksen kuukausi
  97. kuukausi = datetime.datetime.strftime(tiedot[mittaus][0],"%Y-%m")
  98. kuukausi2 = datetime.datetime.strftime(tiedot[mittaus+1][0],"%Y-%m")
  99. if kuukausi == kuukausi2:
  100. summa += tiedot[mittaus+1][1]
  101. mittaus += 1
  102. else:
  103. break
  104. #Jos seuraavan mittauksen kuukausi oli eri niin tallennetaan tiedot listaan.
  105. kuukausituotanto.append([tiedot[mittaus][0],summa,(summa/vuoden_sahko)])
  106. mittaus += 1
  107. print("Kuukausituotanto analysoitu.")
  108. return(kuukausituotanto,vuoden_sahko)
  109.  
  110. def analysoi_tunti(tiedot,tuntituotanto):
  111. for i in range(len(tiedot)):
  112. tunti = int(datetime.datetime.strftime(tiedot[i][0],"%H"))
  113. kuukausi = int(datetime.datetime.strftime(tiedot[i][0],"%m"))
  114. #Tallennetaan matriisiin
  115. tuntituotanto[kuukausi-1][tunti] += tiedot[i][1]
  116.  
  117. #Tallennetaan summatut tuntituotannot viimeiselle sarakkeelle
  118. for i in range(12):
  119. for j in range(24):
  120. tuntituotanto[12][j] += tuntituotanto[i][j]
  121.  
  122. print("Tuntituotanto analysoitu.")
  123. vuoden_sahko = 0
  124. #Lasketaan koko vuoden tuotanto
  125. for i in range(len(tiedot)):
  126. vuoden_sahko += tiedot[i][1]
  127. return(tuntituotanto,vuoden_sahko)
  128.  
  129. def tallenna_tunti(tuotanto,vuosi,vuoden_sahko):
  130. try:
  131. tiedosto = open(("tulosTunti"+vuosi+".csv"), "w")
  132. except OSError:
  133. print("Tiedostoa ei voitu avata")
  134.  
  135. tiedosto.write("Tuntipohjainen sähköntuotanto:"+"\n")
  136. 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")
  137.  
  138. #Käydään matriisin 12 saraketta läpi
  139. for i in range(12):
  140. tiedosto.write(" "+str(i+1).zfill(2)+"/"+vuosi) #DD/YYYY
  141. #Käydään 24 riviä läpi ja tallennetaan
  142. for k in range(24):
  143. tiedosto.write(";"+str(int(tuotanto[i][k])))
  144. tiedosto.write("\n")
  145.  
  146. tiedosto.write("Yhteensä")
  147. #Haetaan matriisin viimeiseltä sarakkeelta yhteenlasketut summat
  148. for k in range(24):
  149. tiedosto.write(";"+str(int(tuotanto[12][k])))
  150. tiedosto.write("\n"+"\n"+"\n"+"Yksittäisen tunnin osuus vuosittaisesta sähköntuotannosta:"+"\n")
  151. 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")
  152. tiedosto.write("%-osuus")
  153.  
  154. #Jaetaan yhteenlasketut summat viimeiseltä sarakkeelta vuoden sähkömäärällä
  155. for i in range(24):
  156. prosentti = int((tuotanto[12][i]/vuoden_sahko)*100)
  157. tiedosto.write(";"+str(prosentti)+"%")
  158. tiedosto.write("\n"+"\n"+"\n")
  159. print("Tuntituotanto tallennettu tiedostoon '"+"tulosTunti"+vuosi+".csv"+"'.")
  160. tiedosto.close()
  161.  
  162.  
  163. def tallenna_paiva(tuotanto):
  164. try:
  165. vuosi = datetime.datetime.strftime(tuotanto[0][0],"%Y")
  166. tiedosto = open(("tulosPaiva"+vuosi+".csv"), "w")
  167. except OSError:
  168. print("Tiedostoa ei voitu avata")
  169. except IndexError:
  170. print("Ei analysoitua tietoa")
  171. tiedosto.write("Päivittäinen sähköntuotanto:" + "\n")
  172. tiedosto.write(";"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+"\n")
  173.  
  174. for i in range(len(tuotanto)):
  175. paivamaara = datetime.datetime.strftime(tuotanto[i][0],"%d.%m.%Y")
  176. tiedosto.write(paivamaara + ";" + str(int(tuotanto[i][1]))+"\n")
  177.  
  178. tiedosto.write("\n"+"\n"+"Kumulatiivinen päivittäinen sähköntuotanto:"+"\n")
  179. tiedosto.write(";"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+"\n")
  180. for i in range(len(tuotanto)):
  181. paivamaara = datetime.datetime.strftime(tuotanto[i][0],"%d.%m.%Y")
  182. tiedosto.write(paivamaara + ";" + str(int(tuotanto[i][2]))+"\n")
  183.  
  184. tiedosto.write("\n"+"\n")
  185. paivamaara = datetime.datetime.strftime(tuotanto[0][0],"%Y")
  186. print("Päivätuotanto tallennettu tiedostoon '"+"tulosPaiva"+paivamaara+".csv"+"'.")
  187. tiedosto.close()
  188.  
  189.  
  190. def tallenna_kuukausi(tuotanto,vuosi):
  191. try:
  192. tiedosto = open(("tulosKuukausi"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+".csv"), "w")
  193. except OSError:
  194. print("Tiedostoa ei voitu avata")
  195. except IndexError:
  196. print("Ei analysoitua tietoa")
  197. tiedosto.write("Kuukausittainen sähköntuotanto:" + "\n")
  198. tiedosto.write(";"+datetime.datetime.strftime(tuotanto[0][0],"%Y")+";%-osuus"+"\n")
  199.  
  200. try:
  201. for i in range(len(tuotanto)):
  202. tiedosto.write(" "+datetime.datetime.strftime(tuotanto[i][0],"%m/%Y")+";")
  203. tiedosto.write(str(int(tuotanto[i][1]))+";"+str(int(100*tuotanto[i][2]))+"%\n")
  204.  
  205. tiedosto.write("Yhteensä;"+str(int(vuosi))+"\n"+"\n"+"\n")
  206. paivamaara = datetime.datetime.strftime(tuotanto[0][0],"%Y")
  207. print("Kuukausituotanto tallennettu tiedostoon '"+"tulosKuukausi"+paivamaara+".csv"+"'.")
  208. tiedosto.close()
  209. except IndexError:
  210. print("Tiedosto oli tyhjä")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement