# ING1001 Obligatorisk oppgave 3, del 2, Python-programmering ## Problemstilling De fleste norske husholdninger og bedrifter har nå fått innstallert automatiske strøm-målere ([AMS](https://www.enova.no/privat/smarte-strommalere-ams/)). Disse måler strømforbruket kontinuerlig og rapporterer dette hver time til en sentral database, elhub. Dette danner grunnlag for avregning av både strømforbruk og nettleie. Alle strøm-abonnenter kan logge inn på elhub og hente ut sine egne data, og har dermed grunnlag for å kunne analysere sitt eget forbruksmønster. Nettselskapene, som eier og drifter strømnettet, må bygge ut strømnettet slik at det har tilstrekkelig kapasitet. Forbruket kan variere mye gjennom døgnet, og det betyr at det på noen tidspunkt er overkapasitet. Hvis forbrukerne kunne tilpasse forbruket og jevne det ut kan man senke nivået på utbygd kapasitet. Det betyr lavere investeringer og kanskje lavere nettleie. Et mulig framtidsscenario er å ha forskjellige nettleie-satser til ulike tider på døgnet. For å tilpasse seg dette må forbukerne kjenne sitt eget strømforbruk, og ha teknisk utstyr som kan styre strømforbruket. ## Data Data om strømforbuk kan lastes ned som CSV-fil fra elhub. Det er en fil pr. måned. Hver linje inneholder tidspunkt og forbruket den siste timen. Her er det tre eksempelfiler som skal brukes i besvarelsen. Du velger en av disse. _(Oppdatert 27.01.2022 med filer fra 2021. Merk at disse nye filene har komma som skilletegn mellom hver datakolonne. Datafeltet for forbruk (tallverdiene), er omkranset av anførselstegn, og har komma som desimaltegn. I Python-koden må kommaet gjøres om til punktum før konvertering til float.)_ - [AMS-data, alternativ 1](elforbruk_202101.csv) - [AMS-data, alternativ 2](elforbruk_202104.csv) - [AMS-data, alternativ 3](elforbruk_202107.csv) ## Oppgave Dette er en individuell oppgave, men det anbefales å samarbeide med medstudenter underveis for bl.a. å diskutere alternative løsninger. Din oppgave er å skrive et Python-program som analyserer forbruket for en måned. Python-programmet må gjøre visse operasjoner: - åpne datafila - lese igjennom fila linje for linje - lagre data om tidspunkt og forbruk i passende datastrukturer - lese igjennom datastrukturene for å finne eller beregne ønskede data - skrive ut resultatene til en rapportfil > Lagt til 27.01.2022: > På grunn av endring i filformatet er det nå mer komplisert å lese inn forbruksverdiene. Vi presenterer derfor et forslag/utgangspunkt til programkode for å lese inn disse her: ```python fra = [] til = [] forbruk = [] with open("elforbruk_202101.csv") as f: # leser overskriftsrad og skriver ut uten å gjøre noe mer med den # strip tar bort linjeskift-tegn fra slutten av linja print("Første linje i fila:", f.readline().strip()) for line in f: split_line = line.strip().split(",") # tar bort linjeskift-tegn, og splitter ved komma forbruk_heltallsdel = split_line[2][1:] # tar bort anførselstegn fra begynnelsen av forbruksfelt if len(split_line) == 3: # Hvis forbrukstall mangler desimaldel, dvs. er oppgitt som heltall forbruk_desimaldel = "0" else: forbruk_desimaldel = split_line[3][:-1] # tar bort anførselstegn fra slutten av forbruksfelt forbruk_str = forbruk_heltallsdel + "." + forbruk_desimaldel fra.append(split_line[0]) til.append(split_line[1]) forbruk.append(float(forbruk_str)) # Skriver ut variablene line og split_line for siste linje i fila print("Siste linje i fila: ", line) print() print("Resultatet av split-funksjonen:", split_line) print() # skriver ut de 5 siste elementene i listene print(fra[-5:]) print(til[-5:]) print(forbruk[-5:]) ``` ## Resultat Ønskede opplysninger i rapportfila: minimum: - antall dager i måneden - gjennomsnittlig forbruk pr. time - tidspunkt for det høyeste forbruket avansert (frivilig): - døgnet deles inn i fire perioder etter fritt valg - forbruket analyseres innen hver av disse periodene, slik som ovenfor ## Innlevering Dette skal leveres: - python-fil med endelse .py som inneholder programkoden - datafilen som du har brukt, og som programmet gjør analyser på Dette leveres som fil-innlevering i Blackboard. ## Krav til gjennomføring For at arbeidskravet skal anses som godkjent kreves: - programkoden skal kunne kjøres uten feilmeldinger - programkoden skal være strukturert i henhold til god programmeringsskikk - programkoden skal være dokumentert - kjøring av programkode skal gi svar på oppgitte problemstillinger - studenten skal på forespørsel og uten nærmere forberedelse kunne forklare sin egen programkode - Endelig godkjenning av del 1 og 2 skal foregå i et Zoom-møte med studentassistent --- *NTNU 22.10.2020 Sverre Stikbakke* *28.01.2022 - oppdatert med datafiler fra 2021*

¯\_(ツ)_/¯