<jupyter_start><jupyter_text>Keeling-kurvan1958 började forskaren <NAME> mäta koldioxidhalten från en mätstation på vulkanen <NAME>a på Hawaii.I denna övning använder vi programmering för att undersöka hur koldioxidhalten ändrats de senaste åren. Vi använder programspråket Python. 1. Kör lite kodVi börjar med att kontrollera att du kan köra kod.-----**Uppdrag 1a:** Du behöver vara uppkopplad för att kunna köra kod.  * Klicka på `Anslut` eller `Connect`uppe till höger.  * Efter en stund ska det står `RAM` och `DISK`.Problem?För att kunna klicka på Anslut behöver du vara inloggad på ett Google-konto. Om du är inloggad så finns det en färgad cirkel uppe till höger i fönstret. Annars står det "Logga in" där. Om du fortfarande har problem, kontrollera vilken browser du kör. Det kan vara problem om du kör Edge. Byt i så fall till Chrome eller Firefox. Safari brukar också fungera. -----**Uppdrag 1b:** Prova nu att köra "kodrutan" nedan genom att hålla musen över koden och klicka på den lilla pilen till vänster i kodrutan.Det kan komma upp en varning som du behöver godkänna.<jupyter_code>for _ in range(3):
  print("Aloha!")<jupyter_output><empty_output><jupyter_text>Vad skrivs ut?Svar"Aloha!" skrivs ut tre gånger. Aloha betyder "hej" på Hawaiianska.-----**Uppdrag 1c:** Prova att ändra från 3 till 5 i koden. Kör koden igen. Vad händer?-----  2. Var ligger Mauna Loa?Nu skall vi se var mätstationen ligger. I kodrutan nedan finns kod för att visa en karta.-----**Uppdrag 2a:** Kör koden nedan. Får du upp kartan?<jupyter_code># Importera modul för kartor
import folium

# Skapa karta över rätt område
m = folium.Map(location=[19.5362, -155.5763], zoom_start=7)

# Lägg till en markör på kartan
folium.Marker(location=[19.5362, -155.5763],
              popup='Mauna Loa Observatory',
              icon=folium.Icon(color='darkred', icon='cloud')).add_to(m)

# Visa kartan
m<jupyter_output><empty_output><jupyter_text>-----**Uppdrag 2b:** Var ligger Mauna Loa  i förhållande till olika världsdelar?SvarMauna Loa ligger på ön Hawaii som är den största ön i ö-riket Hawaii. Om du zoomar ut ser du att Hawaii-öarna ligger mitt ute i Stilla Havet, med Asien och Australien på västra sidan och Amerika på östra.----- **Uppdrag 2c:** Ändra i koden ovan för att göra Mauna Loas pin i en annan färg än `darkred` och med en annan ikon än ett moln (`cloud`). Andra färger du kan prova är `blue` eller `green`. Andra ikoner du kan prova är `star` eller `flag`.----- **Uppdrag 2d:** Vad kan vara för- och nackdelar med att mäta koldioxidhalten på Mauna Loa? Fundera och diskutera gärna med en kompis innan du tittar på svaret.SvarEftersom Mauna Loa ligger mitt i Stilla Havet blir mätningarna inte påverkade av saker runt omkring. Det finns inga stora skogar i närheten som tar upp koldioxid. Det finns inte heller några stora industrier eller mycket bilar som släpper ut koldioxid. Mätstationen är högt uppe på ett berg och man undviker därmed lokala effekter som kan finnas i dalar.Mätningarna kan sägas visa ett medelvärde för hela Stilla Havet. Mätvärdena kan antas vara representativt för hela jorden.En sak som dock kan påverka lokalt är om det råkar bli ett vulkanutbrott i närheten vilket händer då och då på Hawaii. De mätvärdena får då sorteras bort.----- 3. MätvärdenaMätvärdena från Mauna Loa finns fritt tillgängliga i en fil på internet. Vi ska nu hämta filen så att vi sedan kan analysera mätvärdena.-----**Uppdrag 3a:** Kör koden nedan. Följande görs:  * Filen hämtas till programmet.  * Raderna med metadata och rubrikerna för kolumnerna rensas bort. Vi vill bara ha kvar mätvärdena när vi ska programmera.  * De första 5 raderna med mätvärden skrivs ut.<jupyter_code># Hämta filen från internet
import requests
response = requests.get("https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/monthly/monthly_in_situ_co2_mlo.csv")
raw_text = response.text
raw_lines = raw_text.splitlines()
# Filens data finns nu i variabeln "raw_lines" - en lista av textrader

# Ta bort raderna med metadata (rader som startar med citationstecken)
raw_lines_data = [line for line in raw_lines if not line.startswith('"')]

# Ta bort de 3 första raderna som innehåller rubriker.
data = raw_lines_data[3:]
# Raderna med mätvärden finns nu i variabeln "data"

# Skriv ut de 5 första raderna
for i in range(5):
  print(data[i])<jupyter_output><empty_output><jupyter_text>Får du ut de första 5 raderna? Ser du att vissa värden är negativa? Detta motsvarar saknade eller ogiltiga mätningar.Mer information om mätvärdenaKolumnerna innehåller följande:      1. år    2. månad    3. något konstigt    4. datum i decimalform    5. de riktiga mätvärdena    6. trendlinje för 5    7. mätvärden, justerade    8. trendlinje för 7    9. mätvärden där saknade mätvärden har estimerats    10. trendlinje för 9  Problem?Om du inte får ut informationen så kanske filen har flyttats, eller dess format har ändrats. Prova i så fall att använda en version av filen vi sparat ner i december 2020. Du gör detta genom att ändra url:en i koden ovan till  https://raw.githubusercontent.com/lunduniversity/schoolprog-satellite/master/exercises/co2/monthly_in_situ_co2_mlo.csv-----**Uppdrag 3b:** Ändra i koden så att de första 10 raderna skrivs ut. ----- 4. Plotta Keeling-kurvanVi vill nu plotta mätvärdena så att vi får en kurva.Vi kommer att använda värdena i fjärde kolumnen (tidpunkten) och värdena i nionde kolumnen (mätvärden). Det är egentligen värdena i den femte kolumnen som är de riktiga uppmätta värdena. Men vissa värden kan saknas, t.ex. om mätutrustningen var sönder eller om mätningen störts av t.ex. av ett vulkanutbrott. Sådana värden visas som `-99.99`. I nionde kolumnen har saknade värden ersatts med uppskattade värden, som räknats fram med hjälp av de närmast föregående och efterföljande värdena.Koldioxidhalten mäts i "ppm" vilket betyder "parts per million".-----**Uppdrag 4a:** Plotta Keeling-kurvan genom att köra koden nedan.<jupyter_code># Plocka ut år-värden och co2-mätvärden från varje rad
years = []
co2 = []
for line in data:
  splitted = line.split(",")
  y = float(splitted[3]) # fjärde kolumnen, år
  c = float(splitted[8]) # nionde kolumnen, co2
  if c > 0:  # Lägg till värdena om co2-värdet är ett giltigt värde
    years.append(y)
    co2.append(c)

# Plotta mätvärdena med år på x-axeln och co2 på y-axeln
import matplotlib.pyplot as plt
plt.plot(years, co2)
plt.grid()<jupyter_output><empty_output><jupyter_text>-----**Uppdrag 4b:** Cirka hur många ppm koldioxid var det när man började mäta? Cirka hur många ppm är det nu? Läs av i kurvan.SvarI slutet av 50-talet var koldioxidhalten strax under 320 ppm.Runt 2015 passerades 400 ppm och kurvan fortsätter bara uppåt. Det är alltså en enormt kraftig ökning av koldioxidhalten i atmosfären. -----Vi skall titta närmre på den senaste tidens mätningar.-----**Uppdrag 4c:** Kör koden nedan som visar de 75 senaste mätningarna.<jupyter_code>plt.plot(years[-75:], co2[-75:])
plt.grid()<jupyter_output><empty_output><jupyter_text>Hur varierar mätvärdena över ett år? Vad tror du det beror på?SvarVäxter tar upp koldioxid genom fotosyntes. Det växer som mest när norra halvklotet har sommar och tidig höst (största delen av jordens landyta ligger på norra halvklotet). Därför går koldioxidhalten ner under denna period.------Halten av koldioxid verkar öka hela tiden. Frågan är om det märks någon avmattning på sista tiden? Koden nedan visar även värdena i den tionde kolumnen. Detta är *trend-värden*, dvs medelvärden på mätningarna.-----**Uppgift 4d:** Kör koden nedan som visar trendkurvan.<jupyter_code># Plocka ut år-värden och co2-mätvärden från varje rad
trend = []
for line in data:
  splitted = line.split(",")
  c = float(splitted[8]) # nionde kolumnen, co2
  t = float(splitted[9]) # tionde kolumnen, trend
  if c > 0:  # Lägg till värdet bara om co2-värdet är ett riktigt värde
    trend.append(t)
plt.plot(years, co2)
plt.plot(years, trend)
plt.grid()<jupyter_output><empty_output><jupyter_text>**Uppgift 4e:** Kör koden nedan för att se noggrannare på de senaste 75 värdena.<jupyter_code>plt.plot(years[-75:], co2[-75:])
plt.plot(years[-75:], trend[-75:])
plt.grid()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08098204470502016, 'fraction_numerical': 0.0163674117503359, 'mean_word_length': 4.386842105263158, 'pattern_counts': {'":': 0, '<': 31, '<?xml version=': 0, '>': 33, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '293152', 'license': 'CC-BY-4.0', 'n_tokens_mistral': 3216, 'n_tokens_neox': 3058, 'n_words': 1107, 'path': 'exercises/co2/keeling_inspiration_short.ipynb', 'repo_name': 'lunduniversity/schoolprog-satellite', 'size': '8198'}