Skip to content

Commit

Permalink
reread notebooks, "nan" to 'NaN', explain regression (linear and poly…
Browse files Browse the repository at this point in the history
…nomial)
  • Loading branch information
toravest committed May 26, 2025
1 parent 2af0ec4 commit f68982c
Show file tree
Hide file tree
Showing 12 changed files with 494 additions and 177 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ Vi har stort sett brukt matplotlib i alle notebook-ene. Vi har også brukt Seabo


##### Demonstrer hvordan manglende data håndteres i visualiseringene. Lag en graf som viser hvordan manglende verdier påvirker datatrender, og diskuter hvordan dette kan påvirke tolkningen av dataene.
Visualiseringen finner man i notebook-ene. Vi har identifisert manglende data og fylt NaN med 0 der det er nødvendig og gitt en ny visualisering der dette er fylt inn. Manglende verdier kan påvirke datatrender og tolkning blant annet ved at dersom dataen interpoleres automatisk kan man tolke trender som ikke finnes. Eller så kan manglende verdier føre til at viktige mønstre blir skjult. Det kan også hende at dette da fører til at en analytiker har en modell eller beslutning basert på trender som ikke har virkelig data.
Visualiseringen finner man i notebook-ene. Vi har identifisert manglende data og fylt 'NaN' med 0 der det er nødvendig og gitt en ny visualisering der dette er fylt inn. Manglende verdier kan påvirke datatrender og tolkning blant annet ved at dersom dataen interpoleres automatisk kan man tolke trender som ikke finnes. Eller så kan manglende verdier føre til at viktige mønstre blir skjult. Det kan også hende at dette da fører til at en analytiker har en modell eller beslutning basert på trender som ikke har virkelig data.


##### Skriv en kort evaluering av de utviklede visualiseringene. Diskuter hvilke visualiseringer som var mest effektive for å formidle informasjon, og hvorfor. Reflekter over tilbakemeldinger fra medstudenter eller veileder.
Expand Down
14 changes: 7 additions & 7 deletions notebooks/notebook_compare_one_day_data.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -227,11 +227,11 @@
"metadata": {},
"source": [
"### Viser temperaturen\n",
"Vi bruker pandas SQL for å hente ut temperaturen for begge stedene, og lagrer de i en tabell. Ved hjelp av 'pivot' , en innebygd funksjon for å rotere tabeller, setter vi den opp for bedre lesbarhet, ved å sette begge byene ved siden av hverandre og 'dt' som index. Dette gjør det lettere å sammenligne temperaturen for begge stedene til samme tid.\n",
"Vi bruker pandas SQL for å hente ut temperaturen for begge stedene, og lagrer de i en tabell. Ved hjelp av 'pivot', en innebygd funksjon for å rotere tabeller, setter vi den opp for bedre lesbarhet, ved å sette begge byene ved siden av hverandre og 'dt' som index. Dette gjør det lettere å sammenligne temperaturen for begge stedene til samme tid.\n",
"\n",
"Ved hjelp av en pandas SQL setning kan vi hente og lagre gjennomsnitt, maksimalt og minste målte temperatur for begge stedene. Senere kan vi bare skrive en SELECT setning til denne variabelen, for å eksepelhvis hente ut gjennomsnitts data for sted 1.\n",
"\n",
"Det å regne ut median og standardavvik er ikke innebygd i SQL, i motsetning til gjennomsnitt, maks og min. Derfor regner vi ut disse verdiene manuelt. Vi henter temperatur data fra, grupperer dataen basert på city_name, og bruker den innebygde pandas funksjonen `median()` og `std()`, for hendholdsvis median og standardavvik. Siden verdiene grupperes på city_name, blir det indeksen med medianverdi som verdi. Derfor bruker vi `.reset_index()` for å nullstille og gjøre city_name til en kolonne, som bruker til å koble de to tabellene samen, med funksjonen `merge()`."
"Det å regne ut median og standardavvik er ikke innebygd i SQL, i motsetning til gjennomsnitt, maks og min. Derfor regner vi ut disse verdiene manuelt. Vi henter temperatur data fra temp_data, grupperer dataen basert på city_name, og bruker de innebygde pandas og numpy funksjonene `median()` og `std()`, for hendholdsvis median og standardavvik. Siden verdiene grupperes på city_name, blir det indeksen med median/standardavvik som verdi. Derfor bruker vi `.reset_index()` for å nullstille og gjøre city_name til en kolonne, som bruker til å koble de to tabellene samen, med funksjonen `merge()`."
]
},
{
Expand Down Expand Up @@ -340,7 +340,7 @@
"source": [
"### Endre manglende verdier\n",
"\n",
"Om vi har manglende verdieer kan det tyde på to ting, 1. feil i målingen eller 2. det er ingenting å måle. Nr. 2 ser vi spesielt på kolonnene 'rain.1h' og 'snow.1h', om det ikke er snødd/regnet vil verdien bli lagret for 'NaN'. 'NaN' er ikke mulig å plotte, så vi ønsker å lagre verdien som 0 isteden. Vi importerer derfor funksjonen `fill_column_0` som tar inn datafram og kolonner vi ønsker at 'NaN' verdien skal byttes ut med 0. \n",
"Om vi har manglende verdier kan det tyde på to ting, 1. feil i målingen eller 2. det er ingenting å måle. Nr. 2 ser vi spesielt på kolonnene 'rain.1h' og 'snow.1h', om det ikke er snødd/regnet vil verdien bli lagret for 'NaN'. 'NaN' er ikke mulig å plotte, så vi ønsker å lagre verdien som 0 isteden. Vi importerer derfor funksjonen `fill_column_0` som tar inn dataframe og kolonner vi ønsker at 'NaN' verdien skal byttes ut med 0. \n",
"\n",
"Om det er kolonner hvor alle verdiene er 'NaN' fjerner vi hele kolonnen, dette fordi verdien 0 ikke vil gi oss mer informasjon uansett.\n",
"\n",
Expand All @@ -364,7 +364,7 @@
"\n",
"columns_to_0 = ['rain.1h', 'snow.1h']\n",
"\n",
"# Fill NaN values with 0, if there are any, for both rain/snow column\n",
"# Fill 'NaN' values with 0, if there are any, for both rain/snow column\n",
"both_cities_df = fill_column_0(both_cities_df, columns_to_0)\n",
"\n",
"# Drops the whole column, if it only has 'NaN' value.\n",
Expand Down Expand Up @@ -403,7 +403,7 @@
"### Visualisere data i en graf\n",
"Ved hjelp av Matplotlib har vi visualiert ønsket data, og ved hjelp av subplot, en modul i matplotlib, kan vi plotte flere verdier i samme graf, og få \"to y-akse\" på samme x-akse. \n",
"\n",
"Temperatur for begge stedene finner vi i den øverste grafen, hvor vi også har lagt inn gjennomsnittstemperaturen. Her har vi bare skrevet nye SELECT setninger som henter ut gjennomsnitt for begge steder fra 'stat_temp_per_city'.\n",
"Temperatur for begge stedene finner vi i den øverste grafen, hvor vi også har lagt inn gjennomsnittstemperaturen og medianen. Her har vi bare skrevet nye SELECT setninger som henter ut gjennomsnitt og median for begge steder fra 'stat_temp_per_city'.\n",
"\n",
"I grafen under ser vi oversikt over nedbør for begge stedene sammenlignet 'side om side'. Vi skiller også mellom snø og regn, og dersom det skulle snø og regne i samme time, vil de bare 'stables' oppå hverandre.\n",
"\n",
Expand Down Expand Up @@ -529,7 +529,7 @@
"\n",
"For å lese av grafen, finner man en variabel vertikalt og en horisontal variabel. Der de møtes i diagrammet er korrelasjons koeffisienten mellom disse.\n",
"\n",
"Her har vi laget en korrelasjonsmatrsie for hver av stedene, slik at man kan sammeligne om et sted har sterkere eller svakere sammenhenger mellom de ulike variablene.\n",
"Her har vi laget en korrelasjonsmatrise for hver av stedene, slik at man kan sammeligne om et sted har sterkere eller svakere sammenhenger mellom de ulike variablene.\n",
"\n",
"Grafen lagres i mappen `../data/figures/output_fig_compare_one_day`"
]
Expand All @@ -556,7 +556,7 @@
"columns_needed = ['main.temp', 'main.pressure', 'main.humidity', 'wind.speed', 'wind.gust', 'clouds.all', 'rain.1h', 'snow.1h']\n",
"\n",
"# Two horisontally plots (1 row, 2 columns), width and height of the figure\n",
"fig, axes = plt.subplots(1, 2, figsize=(14, 6)) # Adjust figsize as needed\n",
"fig, axes = plt.subplots(1, 2, figsize=(15, 8)) # Adjust figsize as needed\n",
"\n",
"# Loops through both cities, the enumerate make sure we get both the city and the index of the city\n",
"for i, city in enumerate(cities):\n",
Expand Down
27 changes: 15 additions & 12 deletions notebooks/notebook_compare_one_week_data.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"source": [
"# Notebook - Compare one week data\n",
"\n",
"Denne notebooken henter data fra to ønskede steder i Norge, etter ønsket tidspreiode (intill 7-dager) og sammenligner dataen ved hjelp av visualisering i matplotlib av temperatur og nedbør."
"Denne notebooken henter data fra to ønskede steder i Norge, etter ønsket tidspreiode (inntil 7-dager) og sammenligner dataen ved hjelp av visualisering i matplotlib av temperatur og nedbør."
]
},
{
Expand Down Expand Up @@ -69,9 +69,10 @@
"id": "0b9d1a95",
"metadata": {},
"source": [
"### Velg første sted til sammenligning\n",
"### Velg første sted til sammenligningen\n",
"For å kunne sammenligne data fra to steder, trenger vi først to steder å sammenligne. Stedene er foreløpig begrenset til Norge.\n",
"\n",
"Skriv inn et av stedene du ønsker å sammenligne, foreløpig begrenset til Norge."
"Her kunne vi brukt en løkke, spesielt en while løkke for å sjekke at stedet fungerer, og for å kjøre begge stedene på samme celle. Men vi har valgt å kjøre en og en for lettere å oppfatte feil ved sted, og at dersom sted 1 blir feil, må du ikke velge sted 2 på nytt."
]
},
{
Expand Down Expand Up @@ -106,7 +107,9 @@
"metadata": {},
"source": [
"### Velg andre sted til sammenligningen\n",
"Velg det andre stedet som skal brukes i sammenligningen, fortsatt begrenset til Norge."
"Velg det andre stedet som skal brukes i sammenligningen, fortsatt begrenset til Norge.\n",
"\n",
"Det er vanskelig å sammenligne det samme stedet. Derfor har vi lagt inn en while-løkke som sjekker om sted 2 er likt sted 1, og kjører frem til de er forskjellige."
]
},
{
Expand Down Expand Up @@ -149,7 +152,7 @@
"\n",
"Vi samler dataen for begge stedene og skriver de til en json fil.\n",
"\n",
"Skriv inn navn for til filen du vil lagre med dataen.\n",
"Skriv inn navn for filen du vil lagre med dataen.\n",
"\n",
"Eks. filnavn: test\n",
"\n",
Expand Down Expand Up @@ -246,11 +249,11 @@
"metadata": {},
"source": [
"### Viser temperaturen\n",
"Vi bruker pandas SQL for å hente ut temperaturen for begge stedene, og lagrer de i en tabell. Ved hjelp av 'pivot' , en innebygd funksjon for å rotere tabeller, setter vi den opp for bedre lesbarhet, ved å sette begge byene ved siden av hverandre og 'dt' som index. Dette gjør det lettere å sammenligne temperaturen for begge stedene til samme tid.\n",
"Vi bruker pandas SQL for å hente ut temperaturen for begge stedene, og lagrer de i en tabell. Ved hjelp av 'pivot', en innebygd funksjon for å rotere tabeller, setter vi den opp for bedre lesbarhet, ved å sette begge byene ved siden av hverandre og 'dt' som index. Dette gjør det lettere å sammenligne temperaturen for begge stedene til samme tid.\n",
"\n",
"Ved hjelp av en pandas SQL setning kan vi hente og lagre gjennomsnitt, maksimalt og minste målte temperatur for begge stedene. Senere kan vi bare skrive en SELECT setning til denne variabelen, for å eksepelhvis hente ut gjennomsnitts data for sted 1.\n",
"\n",
"Det å regne ut median og standardavvik er ikke innebygd i SQL, i motsetning til gjennomsnitt, maks og min. Derfor regner vi ut disse verdiene manuelt. Vi henter temperatur data fra, grupperer dataen basert på city_name, og bruker den innebygde pandas funksjonen `median()` og `std()`, for hendholdsvis median og standardavvik. Siden verdiene grupperes på city_name, blir det indeksen med medianverdi som verdi. Derfor bruker vi `.reset_index()` for å nullstille og gjøre city_name til en kolonne, som bruker til å koble de to tabellene samen, med funksjonen `merge()`."
"Det å regne ut median og standardavvik er ikke innebygd i SQL, i motsetning til gjennomsnitt, maks og min. Derfor regner vi ut disse verdiene manuelt. Vi henter temperatur data fra temp_data, grupperer dataen basert på city_name, og bruker de innebygde pandas og numpy funksjonene `median()` og `std()`, for hendholdsvis median og standardavvik. Siden verdiene grupperes på city_name, blir det indeksen med median/standardavvik som verdi. Derfor bruker vi `.reset_index()` for å nullstille og gjøre city_name til en kolonne, som bruker til å koble de to tabellene samen, med funksjonen `merge()`."
]
},
{
Expand Down Expand Up @@ -365,7 +368,7 @@
"source": [
"### Endre manglende verdier\n",
"\n",
"Om vi har manglende verdieer kan det tyde på to ting, 1. feil i målingen eller 2. det er ingenting å måle. Nr. 2 ser vi spesielt på kolonnene 'rain.1h' og 'snow.1h', om det ikke er snødd/regnet vil verdien bli lagret for 'NaN'. 'NaN' er ikke mulig å plotte, så vi ønsker å lagre verdien som 0 isteden. Vi importerer derfor funksjonen `fill_column_0` som tar inn datafram og kolonner vi ønsker at 'NaN' verdien skal byttes ut med 0. \n",
"Om vi har manglende verdier kan det tyde på to ting, 1. feil i målingen eller 2. det er ingenting å måle. Nr. 2 ser vi spesielt på kolonnene 'rain.1h' og 'snow.1h', om det ikke er snødd/regnet vil verdien bli lagret for 'NaN'. 'NaN' er ikke mulig å plotte, så vi ønsker å lagre verdien som 0 isteden. Vi importerer derfor funksjonen `fill_column_0` som tar inn dataframe og kolonner vi ønsker at 'NaN' verdien skal byttes ut med 0. \n",
"\n",
"Om det er kolonner hvor alle verdiene er 'NaN' fjerner vi hele kolonnen, dette fordi verdien 0 ikke vil gi oss mer informasjon uansett.\n",
"\n",
Expand All @@ -390,7 +393,7 @@
"\n",
"columns_to_0 = ['rain.1h', 'snow.1h']\n",
"\n",
"# Fill NaN values with 0, if there are any, for both rain/snow column\n",
"# Fill 'NaN' values with 0, if there are any, for both rain/snow column\n",
"both_cities_df = fill_column_0(both_cities_df, columns_to_0)\n",
"\n",
"# Drops the whole column, if it only has 'NaN' value.\n",
Expand Down Expand Up @@ -432,7 +435,7 @@
"### Visualisere data i en graf\n",
"Ved hjelp av Matplotlib har vi visualiert ønsket data, og ved hjelp av subplot, en modul i matplotlib, kan vi plotte flere verdier i samme graf, og få \"to y-akse\" på samme x-akse. \n",
"\n",
"Temperatur for begge stedene finner vi i den øverste grafen, hvor vi også har lagt inn gjennomsnittstemperaturen. Her har vi bare skrevet nye SELECT setninger som henter ut gjennomsnitt for begge steder fra 'stat_temp_per_city'.\n",
"Temperatur for begge stedene finner vi i den øverste grafen, hvor vi også har lagt inn gjennomsnittstemperaturen og medianen. Her har vi bare skrevet nye SELECT setninger som henter ut gjennomsnitt og median for begge steder fra 'stat_temp_per_city'.\n",
"\n",
"I grafen under ser vi oversikt over nedbør for begge stedene sammenlignet 'side om side'. Vi skiller også mellom snø og regn, og dersom det skulle snø og regne i samme time, vil de bare 'stables' oppå hverandre.\n",
"\n",
Expand Down Expand Up @@ -560,7 +563,7 @@
"\n",
"For å lese av grafen, finner man en variabel vertikalt og en horisontal variabel. Der de møtes i diagrammet er korrelasjons koeffisienten mellom disse.\n",
"\n",
"Her har vi laget en korrelasjonsmatrsie for hver av stedene, slik at man kan sammeligne om et sted har sterkere eller svakere sammenhenger mellom de ulike variablene.\n",
"Her har vi laget en korrelasjonsmatrise for hver av stedene, slik at man kan sammeligne om et sted har sterkere eller svakere sammenhenger mellom de ulike variablene.\n",
"\n",
"Grafen lagres i mappen `../data/figures/output_fig_compare_one_week`"
]
Expand Down Expand Up @@ -588,7 +591,7 @@
"columns_needed = ['main.temp', 'main.pressure', 'main.humidity', 'wind.speed', 'wind.gust', 'clouds.all', 'rain.1h', 'snow.1h']\n",
"\n",
"# Two horisontally plots (1 row, 2 columns), width and height of the figure\n",
"fig, axes = plt.subplots(1, 2, figsize=(14, 6)) # Adjust figsize as needed\n",
"fig, axes = plt.subplots(1, 2, figsize=(15, 8)) # Adjust figsize as needed\n",
"\n",
"# Loops through both cities, the enumerate make sure we get both the city and the index of the city\n",
"for i, city in enumerate(cities):\n",
Expand Down
Loading

0 comments on commit f68982c

Please sign in to comment.