Användning av listor

I detta inlägg kommer jag visa lite olika sätt som vi kan använda listor för att analysera ett resultat av någon undersökning. Jag kommer använda en tärning och slå ett antal slag och sedan analysera resultatet på några olika sätt.

List

Först kommer ett exempel där listtypen List används.

from random import randint      # Importerar funktionalitet för slump

antal = 100                     # Antal slag som skall slås
slag = []                       # Lista som lagrar alla slag
sex = [0]*6                     # Skapar en lista med index 0-5
sju = [0]*7                     # Skapar en lista med index 0-6

for i in range(antal):          # Loopa antal ggr
    d = randint(1,6)       # Slå ett tärningsslag
    slag.append(d)              # Lagra tärningsslaget i listan
    sju[d] += 1                 # Öka värde i index med 1
    sex[d-1] += 1               # Öka värde i index-1 med 1

print(sex)                      # Skriv ut listan
print(sju)                      # Skriv ut listan
print(slag)                     # Skriv ut listan

När jag kör koden så får jag följande utskrift.

[18, 20, 16, 17, 20, 9]
[0, 18, 20, 16, 17, 20, 9]
[5, 5, 4, 6, 5, 3, 3, 4, 4, 4, 5, 1, 3, 3, 5, 2, 3, 1, 1, 6, 6, 2, 2, 6, 5, 5, 3, 2, 2, 5, 1, 3, 2, 4, 2, 5, 1, 1, 3, 1, 3, 5, 3, 3, 6, 5, 6, 2, 2, 1, 1, 5, 1, 4, 5, 1, 4, 3, 2, 5, 3, 1, 5, 4, 4, 3, 4, 1, 4, 2, 2, 4, 4, 6, 2, 4, 2, 5, 1, 4, 1, 1, 2, 1, 2, 3, 6, 2, 3, 4, 2, 2, 5, 5, 6, 1, 5, 2, 4, 5]

Dictionary

Dags att kika på dictionary istället. Detta blir en mer strukturerad samling av resultatet. Det ger oss fler möjligheter att bearbeta resultatet, det är kraftfullare men kan också kännas lite klurigare. Viktigt att analysera varje del för sig, det ser krångligare ut än vad det är. Bli inte rädd för all kod, ta ner den och jobba med varje liten del för sig själv. Det kommer vara värt det!

from random import randint          # Importar funktionalitet för slump

antal_slag = 100                    # Antal tärningsslag
slag = {}                           # Skapa en tom dictionary

for i in range(100):
    d = randint(1, 6)               # Slumpa ett värde 1-6
    # Använd try / except för att lägga till eller skapa index.
    try:                            # försök ...                 
        slag[d] += 1                # ... öka värdet på slag[d] med 1
    except:                         # ... om det skapar ett fel (index finns inte)
        slag[d] = 1                 # ... Skapa index d, ge värdet 1

# Skriv ut dict
print("\nSkriver ut hela dictionaryn")
print(slag)
# Vad ser vi? Ingen ordning på index utan de är i den ordning som de skapas.

# Loopa igenom alla värden och index i dict
print("\nSkriver ut alla index med värden ett i taget")
for key in slag:
    print(key, "->", slag[key])     # key är index, slag[key] är värdet.

# .items() behövs för att både index och värde skall hämtas.
# när vi loopar på detta sätt så skapas en tuple (index, värde) för varje "par"
print("\nUtskrift av tuple, utifrån dict sorterad på index.")
for t in sorted(slag.items()):      # en variabel (t) lagrar tuple 
    print(t)                        # index och value ingår i tupeln

print("\nUtskrift av dict OMVÄNT sorterad på index.")
# här hämtas index och value istället för att fortsätta med en tuple
for index, value in sorted(slag.items(), reverse=True):
    print(f"Tärningsvärdet {index} slogs {value} ggr.")

print("\nUtskrift av dict OMVÄNT sorterad på antal slag.")
for t in sorted(slag.items(), key=lambda x:x[1], reverse=True):
    print(f"Tärningsvärdet {t[0]} slogs {t[1]} ggr.")
# Denna del av koden berättar för sorted-funktionen att sortera baserat på det andra elementet i varje tupel (dvs. antalet gånger tärningsvärdet slogs). Utan detta skulle sorted sortera tuplarna baserat på deras första element (tärningsvärdena).

Utskriften när jag körde detta exempel blev

Skriver ut hela dictionaryn
{6: 23, 3: 15, 5: 18, 2: 11, 4: 18, 1: 15}

Skriver ut alla index med värden ett i taget
6 -> 23
3 -> 15
5 -> 18
2 -> 11
4 -> 18
1 -> 15

Utskrift av tuple, utifrån dict sorterad på index.
(1, 15)
(2, 11)
(3, 15)
(4, 18)
(5, 18)
(6, 23)

Utskrift av dict OMVÄNT sorterad på index.
Tärningsvärdet 6 slogs 23 ggr.
Tärningsvärdet 5 slogs 18 ggr.
Tärningsvärdet 4 slogs 18 ggr.
Tärningsvärdet 3 slogs 15 ggr.
Tärningsvärdet 2 slogs 11 ggr.
Tärningsvärdet 1 slogs 15 ggr.

Utskrift av dict OMVÄNT sorterad på antal slag.
Tärningsvärdet 6 slogs 23 ggr.
Tärningsvärdet 5 slogs 18 ggr.
Tärningsvärdet 4 slogs 18 ggr.
Tärningsvärdet 3 slogs 15 ggr.
Tärningsvärdet 1 slogs 15 ggr.
Tärningsvärdet 2 slogs 11 ggr.

Matteprovet

Här kommer några uppgifter där du kan jobba lite med bearbetning av data. Vi kommer nu jobba med listor i listor. Det finns två olika listor som i grunden lagrar samma sak. Den yttre listan lagrar ett antal elevers resultat vid ett matteprov. Matteprovet bestod av tre delar och varje inre lista innehåller dessa tre resultat;  

[[13, 13, 9], .........]

innebär att eleven har fått 13 poäng i första delprovet, 13 poäng i det andra delprovet och 9 poäng i det sista delprovet.

[["Anna", 13, 13, 9], .........] 

Här är samma innehåll förutom att nu hittar du också namnet på vilken elev som har detta resultat.

Här finns de två listorna som används i övningen.

resultat = [[13, 13, 9], [13, 9, 7],  [16, 10, 7], [12, 12, 5], [12, 10, 8], [12, 10, 5], [16, 13, 8], [16, 11, 9], [16, 9, 7], [15, 11, 9], [12, 8, 8], [14, 13, 4], [12, 12, 7], [14, 11, 12], [14, 10, 9], [14, 9, 10], [13, 11, 4], [15, 8, 5], [14, 13, 11], [13, 11, 4], [15, 10, 7], [14, 8, 4], [12, 9, 11]]

resultat_med_namn = [['Anna', 14, 14, 8], ['Behnood', 14, 9, 7],  ['Cecilia', 15, 11, 9], ['David', 14, 12, 9], ['Elin', 16, 14, 7], ['Faysal', 16, 11, 10], ['Gabriella', 14, 8, 6], ['Hugo', 12, 12, 8], ['Imre', 13, 10, 6], ['Jakob', 13, 14, 9], ['Kosovare', 15, 12, 8], ['Liridon', 14, 14, 7], ['Mohamed', 13, 10, 8], ['Noah', 14, 12, 9], ['Olivia', 15, 10, 9], ['Petter', 13, 10, 6], ['Qamar', 13, 10, 8], ['Ravand', 16, 9, 9], ['Sara', 14, 14, 5], ['Tobias', 13, 8, 4], ['Ulrika', 16, 10, 9], ['Viktor', 16, 8, 4], ['Xerxes', 12, 9, 11]]

Uppgifter

 
Utan namn
Med namn
Grundläggande datainsamling
A. Beräkna den totala poängen för varje elev.
B. Hitta den högsta och lägsta totalpoängen i klassen.
A. Gör en topplista med de tre elever som har högst poäng.
B. Hitta den högsta och lägsta totalpoängen i klassen.
Statistiska beräkningar
C. Beräkna medelvärdet för varje delprov samt för hela provet.
C. Beräkna medelvärdet för varje delprov samt för hela provet.
 
D1. Beräkna medianpoängen för hela provet och för varje delprov separat.
D2. Vilka elever nådde medianvärdet på delprov eller hela provet?
 
Betyg
(se betygsskalor nedan)
E. Hur många elever fick de olika betygen på provet?
E. Skriv ut betygen och sedan namnen på eleverna som fick detta betyg.
T.ex. A: Sven, Lars, Ofelia.

Betygsskalor

A – minst 35 poäng totalt och minst 10 poäng på delprov 3
B – minst 35 poäng totalt
C – minst 30 poäng totalt
D – minst 20 poäng total och minst 10 poäng på delprov 2 eller 3.
E – minst 20 poäng totalt

Lämna ett svar

Din e-postadress kommer inte att publiceras.

Denna webbplats använder Akismet för att minska skräppost. Lär dig hur din kommentardata bearbetas.