Forelesningsnotat
Contents
Forelesningsnotat#
Kjøre kode inne i Jupyter#
Sette celletype til “Code”
Shift+Enter
# Kjøre litt kode
a = 3
b = 4
c = a*b
print(c)
12
Noe slikt som dette
a = 3
b = 4
c = a*b
print("%d*%d=%d" % (a, b, c))
3*4=12
Installere pakker inne i Jupyter#
!pip install <pakkenavn>
Legge på
-q
for å ikke spamme output-cellen
# Installere pakker
!pip install pandas
Requirement already satisfied: pandas in /Users/henriasv/.pyenv/versions/3.9.9/envs/streamlit/lib/python3.9/site-packages (1.4.1)
Requirement already satisfied: numpy>=1.20.0 in /Users/henriasv/.pyenv/versions/3.9.9/envs/streamlit/lib/python3.9/site-packages (from pandas) (1.22.3)
Requirement already satisfied: pytz>=2020.1 in /Users/henriasv/.pyenv/versions/3.9.9/envs/streamlit/lib/python3.9/site-packages (from pandas) (2021.3)
Requirement already satisfied: python-dateutil>=2.8.1 in /Users/henriasv/.pyenv/versions/3.9.9/envs/streamlit/lib/python3.9/site-packages (from pandas) (2.8.2)
Requirement already satisfied: six>=1.5 in /Users/henriasv/.pyenv/versions/3.9.9/envs/streamlit/lib/python3.9/site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)
WARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.
You should consider upgrading via the '/Users/henriasv/.pyenv/versions/3.9.9/envs/streamlit/bin/python3.9 -m pip install --upgrade pip' command.
!pip install -q matplotlib numpy pandas
Pakkene over trenger vi for å kunne plotte grafer
Feilmeldingsfellesskap#
Stopp deling av skjerm
Er det noen som har fått en feilmelding / ikke får det til å virke, som vil dele skjerm så vi alle kan se på det?
Nå må vi være snille med hverandre
Lage pandas DataFrame manuelt#
Om du har data i lister eller numpy-arrayer og vil ha dem over i et Pandas DataFrame. Dataframes er en type tabell.
# Lage pandas-dataframe manuelt
import pandas as pd
df = pd.DataFrame({"a": [2, 3, 4], "b" : [1, 2, 3]})
df
a | b | |
---|---|---|
0 | 2 | 1 |
1 | 3 | 2 |
2 | 4 | 3 |
Når vi skal jobbe med data som passer på tabellformat kan livet vårt bli svært mye enklere om vi brukere et bibliotek som heter pandas. Det skal da lite kode til for å lese inn filer og for å gjøre enkle plots. Dessuten passer dataformatet i pandas sammen med flere kjente maskinlæringsbiblioteker som pytorch og scikit-learn. Dermed slipper vi å bruke tid på å manipulere data til å passe inn i spesifikke formater for hvert bibliotek vi skal bruke.
Når man bruker kraftige biblioteker for databehnadling, vil det alltid være mange funksjoner man ikke kan navnet på, eller ikke vet hva gjør. Det er helt greit, og helt vanglig. Det er lov til å si at man “kan pandas” uten å vite hva alle funksjonene gjør, på samme måte som det er lov å si man kan engelsk selv om man ike vet betydningen av floccinaucinihilipilification. Derfor kommer det til å være mange ting jeg ikke vet om pandas, men jeg føler meg ganske komfortabel med å bruke det allikevel.
Det viktigste konseptet i pandas er et DataFrame. Det lager vi på denne måten, og det er en type tabell.
import pandas as pd
df = pd.DataFrame({"a": [2,3,4],
"b": [1,2,3]})
Underveisoppgave#
Legg disse listene inn i et dataframe.
innsats = [2, 4, 3, 7, 4, 1]
talent = [4, 5, 3, 4, 6, 2]
resultat = [24, 73, 25, 204, 93, 4]
Eksempelet fra forrige slide#
import pandas as pd
df = pd.DataFrame({"a": [2,3,4],
"b": [1,2,3]})
# Løsningsforslag. Live-kode
df = pd.DataFrame({"innsats" : innsats,
"talent" : talent,
"resultat" : resultat})
import matplotlib.pyplot as plt
plt.scatter(df["resultat"], df["innsats"])
<matplotlib.collections.PathCollection at 0x12f330d30>
Feilmeldingsfellesskap før løsningsforslag?#
Legg disse listene inn i et DataFrame
innsats = [2, 4, 3, 7, 4, 1]
talent = [4, 5, 3, 4, 6, 2]
resultat = [24, 73, 25, 204, 93, 4]
#Løsning 1
df = pd.DataFrame({"innsats" : [2, 4, 3, 7, 4, 1],
"talent" : [4, 5, 3, 4, 6, 2],
"resultat" : [24, 73, 25, 204, 93, 4]})
# Løsning 2 siden vi allerede har dataene i lister
innsats = [2, 4, 3, 7, 4, 1]
talent = [4, 5, 3, 4, 6, 2]
resultat = [24, 73, 25, 204, 93, 4]
df = pd.DataFrame({"innsats" : innsats,
"talent" : talent,
"resultat" : resultat})
Plotte datasettet#
plt.plot(df["var1"], df["var2"])
# live-kode plotting av innsats, talent, resultat-datasettet
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 8), facecolor="w")
plt.scatter(df["innsats"], df["resultat"])
plt.scatter(df["talent"], df["resultat"])
Laste inn et datasett fra internett#
Det ville være utrolig plundrete om vi hele tiden måtte bygge opp dataframes på denne måten. Det trenger vi heldigvis ikke!
# URL: https://programmering-i-skolen.github.io/programmeringiskolen/_static/datasett/sas_fly.txt
# turl https://tinyurl.com/yyvzg8tt
df = pd.read_table("https://tinyurl.com/yyvzg8tt")
url: https://programmering-i-skolen.github.io/programmeringiskolen/_static/datasett/sas_fly.txt turl: https://tinyurl.com/yyvzg8tt
import pandas as pd
url = "https://tinyurl.com/yyvzg8tt"
data = pd.read_table(url)
data
Plotting videre#
Plotte sas-fly-datasettet#
plt.plot(df[“Rekkevidde”], df[“Drivstofforbruk”], “o”)
Laste inn, se tabellen
importere matplotlib
plotte forskjellige ting mot hverandre: Vingespenn, Marsjfart, Rekkevidde, Drivstofforbruk
scatter mer relevant
# La oss nå ta for oss datasettet vi nettop lastet inn: Det med SAS sine fly.
import pandas as pd
url = "https://programmering-i-skolen.github.io/programmeringiskolen/_static/datasett/sas_fly.txt"
flydata = pd.read_table(url)
print(flydata.keys())
import matplotlib.pyplot as plt
plt.plot(flydata["Rekkevidde"], flydata["Drivstofforbruk"])
plt.scatter(flydata["Rekkevidde"], flydata["Drivstofforbruk"])
Underveisoppgave i feilmeldingsfellesskap. Jeg viser feilmeldingen, studentene foreslår hva vi kan gjøre.
Problement med “Antall”-kolonnen. Til slutt fikse separator. Forklare s+
Underveisoppgave: Solflekker#
Les inn datasettet fra https://programmering-i-skolen.github.io/programmeringiskolen/_static/datasett/solflekkdata.txt / https://tinyurl.com/yckuj2nv til et pandas DataFrame med pd.read_table.
Plott PA (projected area).
Kommentér resultatet.
import pandas as pd
url = "https://programmering-i-skolen.github.io/programmeringiskolen/_static/datasett/solflekkdata.txt"
solflekker = pd.read_table(url, skiprows=1, sep="\s+")
print(solflekker)
import matplotlib.pyplot as plt
plt.plot(solflekker.YYYY[solflekker.PA>=0], solflekker.PA[solflekker.PA>=0])
YYYY MM DD PA CA PSI
0 1874 5 9.0 1882.0 1298.0 -0.0574
1 1874 5 10.0 1830.0 1150.0 -0.0589
2 1874 5 11.0 1276.0 767.0 -0.0429
3 1874 5 12.0 771.0 389.0 -0.0275
4 1874 5 13.0 692.0 350.0 -0.0245
... ... .. ... ... ... ...
49175 2008 12 27.0 0.0 0.0 0.0000
49176 2008 12 28.0 0.0 0.0 0.0000
49177 2008 12 29.0 0.0 0.0 0.0000
49178 2008 12 30.0 0.0 0.0 0.0000
49179 2008 12 31.0 0.0 0.0 0.0000
[49180 rows x 6 columns]
[<matplotlib.lines.Line2D at 0x12f4affd0>]
Prøve og feile med studentene
Ting å tenke på:
Først bare lese inn read_table(url). Da blir det galt.
Så påpeke headeren
Deretter riktig separator
Så går vi til plotting
Plotte PA
Fikse de manglende datapunktene med logisk indeksering. Manglende datapunkter er her satt til -9999.
Løsningen blir
import pandas as pd
url = "https://programmering-i-skolen.github.io/programmeringiskolen/_static/datasett/solflekkdata.txt"
solflekker = pd.read_table(url, skiprows=1, sep="\s+")
print(solflekker)
import matplotlib.pyplot as plt
plt.plot(solflekker.YYYY[solflekker.PA>=0], solflekker.PA[solflekker.PA>=0])
Til neste gang:#
Notat og oppgaver fra nettressursene som trener pandas-ferdigheter.
Kom gjerne med tilbakemelding på vanskelighetsgrad.
Neste gang:#
Statistikk