Skip to content

Commit

Permalink
Merge pull request #3 from torave/tora
Browse files Browse the repository at this point in the history
Del 1 mappe
  • Loading branch information
torave authored and GitHub Enterprise committed Mar 30, 2025
2 parents 064c2a9 + bdae9fa commit 1043ac5
Show file tree
Hide file tree
Showing 21 changed files with 2,304 additions and 758 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
/venv/
.env
/data/output*/
old_*
old_*
.DS_Store
47 changes: 46 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
# Anvendt mappe

## Installering
- For å starte må man aktivere venv-en. Dette gjøres på følgende måte:
1. Skriv en av disse i terminalen, dette kan variere fra pc og operativsystem:
- `python3 -m venv venv`
- `python -m venv venv`
2. Aktiver vevn, det gjøres på en av følgende måter:
**Mac/linux**: `source venv/bin/activate`
**Windows**: `./venv/Scripts/activate`
3. Installere nødvendige biblioteker, med en av disse:
- `pip3 install -r requirements.txt`
- `pip install -r requirements.txt`

## Oversikt
Her kommer oversikt over strukturen i prosjektet:
- `data` denne mappen inneholder output data
- `docs` denne mappen inneholder dokumentasjon
- `notebooks` denne mappen inneholder notebookene med all funksjonalitet
- `resources` denne mappen inneholder våre kilder
- `src` denne mappen inneholder python filene
- `tests` denne mappen inneholder våre unittester

Det kan leses mer om disse i deres tilhørende `README.md` filer.

### Mappe del 1

#### Vår visjon av oppgaven
Expand Down Expand Up @@ -32,6 +55,10 @@ Ettersom ingen av de fra MET funket etter vårt ønske, søkte vi videre på net
- [OpenWeatherMap API](https://openweathermap.org/)
- Denne inneholder forecast data, men det er også mulig å hente historiske data.
- Med en student profil, får vi gratis tilgang på masse data. Dermed vil vi kunne requeste historiske data fra API-en.
- Det finnes også flere ulike API-er, som vil hjelpe oss å oppnå vår visjon. Blant annet:
- [Current Data](https://openweathermap.org/current): for å hente ut data fra ønsket sted på nåværende tidspunkt.
- [History API](https://openweathermap.org/history): for å hente data fra ønsket sted og tidsperiode (inntil 7 dager).
- [Statistic Historical Data](https://openweathermap.org/api/statistics-api): for å hente statistisk historisk data som kan brukes til regresjon. Den tar utganspunkt i all historisk data og oppsummerer det for hver dag i løpet av et år.

##### Henting av data
For å hente data fra OpenWeatherMap API-en har vi skrevet en funskjon som tar inn stedsnavn, startdato og sluttdato, den legger da ønskede verdier inn i url-en og requester for ønsket sted og tidsperiode, sammen med API-key som er lagret i en env-fil og importert.
Expand All @@ -47,7 +74,25 @@ Funksjonen returnerer en print setning når dataen er skrevet, og legger ved fil


##### Hente data fra fil
For å hente data fra json-fil, bruker vi pandas sin innebygde funksjon _read_json_, for deretter å lagra dataene i en pandas dataframe.

#### Oppgave 3 - Databehandling
Vi har hele tiden fokusert på å forstå dataen vi har, derfor har vi lagret den i en json fil for å lettere kunne lese ut hvilke verdier vi har, og hvilke vi kanskje ikke trenger. De kolonnene vi mener vi ikke trenger har vi da fjernet. Så har vi sjekket etter feil og mangler i dataen, både med 'NaN' verdier, manglende kolonner eller ekstremverdier.

##### Metoder for å identifisere og håndtere manglende data
Metoder vi har brukt  er for eksempel pd.json_normalize, df.drop_duplicates og df.drop(columns = «name»). Ved json.normalize har vi fått konvertert dataene våre til en tabell, DataFrame, fordi det er lettere å manipulere. Df.drop_duplicates bruker vi for å enkelt håndtere duplikatene i datasettet. Vi har også kolonner som inneholder informasjon som ikke er relevant til det vi ønsker å finne og da bruker vi df.drop(column= «name») og setter inn kolonnenavnet i parentes bak, eksempel: df = df.drop(columns = «base») eller df = df.drop(columns = «visability»). Denne metoden er nyttig for å rydde opp i datasettet og håndtere fjerning av kolonner som ikke er relevant, og dermed blir det mer oversiktlig og ryddig å jobbe med.

Vi har også brukt missingno.matrix for å visualisere hvilke kolonner som mangler data, før vi har brukt enten fillna(0) for å endre 'NaN' verider til 0, eller fillna('obj.ffill()) for å bruke forrige lagret data.

#### Oppgave 3 - Databehandling
##### List comprehensions
I den ene koden til statistic_data_notebook er et eksempel på hvor vi har brukt list comprehension for å manipulere data. Vi bruker den til å manipulere temperaturene til celsius og lagre det resultatet i en ny kolonne, temp.mean_celsius. Vi har gjort dette fordi den metoden er mer effektiv å bruke enn for eksempel en direkte for-løkke. 

Dette er også brukt i statistic_data_notebook for å lage en kolonne bestående av måned og dag.

##### Pandas SQL vs tradisjonell Pandas
Pandas-syntaks kan være noe kompleks og da kan man for eksempel med sqldf, bruke SQL-spørringer på Pandas DataFrames. Dette kan gi en enkel måte å filtrere, transformere og gruppere data på, på en mindre kompleks måte. SQL-spørringer kan også være enklere å lese og vedlikeholde enn Pandas-operasjoner, når man jobber med komplekse datasett. Man kan også bruke effektive og enklere SQL-kommandoer som for eksempel JOIN og GROUP BY. 

##### Uregelmessigheter i dataene
Uregelmessigheter vi kan forvente å møte på er blant annet manglende verdier. For å håndtere disse kan vi bruke metoder som for eksempel fillna(), som fyller manglende verdier med en standardverdi. Eller så kan vi bruke dropna(), som fjerner radene med manglende verdi. Vi kan også møte på ufullstendige datoer eller datoer i ukjent format. Da kan vi bruke pd.to_datetime() for å sikre at datoene blir riktig konvertert til datetime format. 

Vi kan også møte ekstremverdier, som vi kan fjerne ved å sjekke om de er "uteliggere" ved å ligge mer enn tre standardavvik i fra gjennomsnittet. Da kan vi bruke verdien før med fillna('obj.ffill()') eller bruke interpolate linear metoden for å få den mest "smoothe" overgangen mellom manglende verdier. Da den "gjetter" seg frem til manglende verdier.
16 changes: 7 additions & 9 deletions data/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
# Data-description

### Possible API
- **API from openweathermap**
[API_OPEN_WEATHER_MAP](https://openweathermap.org/)
Her vil det opprettes ulike mapper som et resultat av dataene som lagres gjennom kjøringen av de ulike notebookene.

- **API from meterologisk institutt**
[API_FROST](https://frost.met.no/index.html)

### Possible dataset
- **Natural Disasters:**
[DATASET_1](https://www.kaggle.com/datasets/brsdincer/all-natural-disasters-19002021-eosdis)
Funksjonen er bygd slik at den først sjekker om det eksisterer en mappe, før den eventuelt lager. Alle mapper som starter med output (altså output data) er lagt til i `.gitignore`. Dette for å ikke laste opp masse unødvendig til github, men også for at brukere ikke 'deler' data. Mine kjøringer vil være mine, og dine vil kun vises hos deg.

Dette er eksempel på noen av mappene:
- `output_current_data` lagrer dataen for ønsket sted, kjørt fra `notebook_current_data.ipynb`
- `output_fig` lagrer grafer, kjørt fra `notebook_statistic_data.ipynb`
- `output_record` lagrer rekord data fra ønsket sted, kjørt fra `notebook_statistic_data.ipynb`
- `output_statistikk` lagrer dataen for ønsket sted, kjørt fra`notebook_statistic_data.ipynb`
15 changes: 14 additions & 1 deletion notebooks/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
# Notebook - description
# Notebook - description

Her finnes informasjon om de ulike notebookene og deres innhold.

- [Current data](notebook_current_data.ipynb)
Denne notebooken er for å hente, skrive og vise nåværende data for ønsket lokasjon.
- [One day data](notebook_one_day_data.ipynb)
Denne notebooken henter data fra ønsket dag og sted, skriver til fil. Visualiserer manglende verdier, retter opp manglende verdier, og visualisere og lagrer data fra plot.
- [One week data](notebook_one_week_data.ipynb)
Denne notebooken henter data fra ønsket periode (inntil 7-dager) og sted, skriver til fil. Visualiserer manglende verdier, retter opp manglende verdier, og visualisere og lagrer data fra plot.
- [Statistic year data](notebook_statistic_data.ipynb)
Denne notebooken henter data fra en API som samler alle historiske data for ønsket sted, å regner ut statistiske verdier for alle dagene i året. Vi fjerner uønskede kolonner, utelukker ekstremverdier og visualiserer data gjennom plotter.
- [Test notebook](test_notebook.ipynb)
Dette er bare en test notebook, for å se om venv funker og det å importere funksjoner fra packager.
Loading

0 comments on commit 1043ac5

Please sign in to comment.