Skip to content

Del 1 mappe #3

Merged
merged 20 commits into from
Mar 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7a6faf5
minor changes
hannhegg Mar 21, 2025
527c62a
Merge remote-tracking branch 'origin/main'
hannhegg Mar 21, 2025
20710dc
Merge pull request #2 from torave/main
torave Mar 26, 2025
7306c5a
test, one day, test lower/upper case and unix timestamp
hannhegg Mar 26, 2025
0b6144e
notebook add, gets data for a chosen date and place
hannhegg Mar 26, 2025
68063bb
notebook add, current data for chosen city
hannhegg Mar 26, 2025
baf7188
function to fetch current data
hannhegg Mar 26, 2025
7d62686
rename notebook, add markdown
torave Mar 27, 2025
811cc24
rename notebook, handel missing data, visulize weather data, add mark…
torave Mar 27, 2025
8909500
add missingno-dependency, minor change (kelvin-number)
torave Mar 27, 2025
4975f4e
rename notebook, add missigno, plot, comments, markdown to one_week, …
torave Mar 27, 2025
704d63f
rename notebook, check outliers, missing data (data cleaning)
torave Mar 30, 2025
2d9de07
handling nordic (æøå), data cleaning
torave Mar 30, 2025
0fbde5c
handling nordic (æøå), handlel missing values, data cleaning
torave Mar 30, 2025
40d09e6
handel nordic(æøå), handel missing values, data cleaning
torave Mar 30, 2025
6b94d68
minor change, kelvin to celsius
torave Mar 30, 2025
e276f2e
add util.py, with nordic replace and kelvin to celsius function
torave Mar 30, 2025
ba86807
add easy setup for API-key, replace nordic and kelvin to celsius
torave Mar 30, 2025
ed6bd34
rename notebook
torave Mar 30, 2025
bdae9fa
add documentation, markdown, and files to .gitignore
torave Mar 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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