TIG054 Fortsättning i programmering Flashcards

1
Q

Kompileringsfel (Compile Error)

A

Syntaxfel eller liknande

Saker som gör att Python inte förstår koden.

Måste åtgärdas innan programmet kan köras.

Vanligtvis ger kompilatorn felmeddelande.

Ex. print(“Hello, world!”
Ex. print(y), men y är inte definerad
Ex. z = x + y, men x är en int medan y är en string
Ex. Glömt kolon efter if sats
Ex. Felstavat funktion

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Exekveringsfel

A

Runtime Error
Uppstår under programmets gång (inte under kompileringen).

Uppstår när ett program försöker utföra en åtgärd som inte kan slutföras korrekt av olika anledningar.

Ex. Division med noll, index utanför gränserna, nullreferens (referera till variabel som inte har något värde).

Programmet avbryts och ett felmeddelande visas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Logiska Fel

A

Fel i själva logiska uppbyggnaden av programmet.

Orsaker inte krascher eller kompileringsfel, men resulterar ändå i ett oönskat beteende eller felaktig resultat när programmet körs.

Ex. Uppstår ofta i komplicerade villkorssatser.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Debugging

A

Åtgärda fel i programmet.

Identifiera, isolera och korrigera fel (buggar).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Breakpoints

A

Markeringar som sätts ut där man vill att stegandet ska börja.

Programmet körs som vanligt fram till första breakpointen. Sedan stannar den upp (innan koden på breakpointen körs) och låter den stega fram rad för rad.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Continue (VS Debugging)

A

Höger pil.

Kör vidare (till nästa breakpoint eller till programslut)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Step In (VS Debugging)

A

Om det finns ett funktionsanrop på raden, så följ med in i funktionen.

Annars, gå vidare till nästa rad.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Step Over (VS Debugging)

A

Gå vidare till nästa rad.

Om det finns ett funktionsanrop på raden, utför det bakom kulisserna (hoppa inte in och visa).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Abstraktion (Abstraction)

A

Process att generalisera konkreta detaljer.

Fokusera på detaljer med större betydelse.

Ex. Skapa klasser av vanligt förekommande objekt, skapa funktioner för vanliga händelser

Användaren av funktionen behöver bara veta dess indata och resultatet, inte nödvändigtvis dess interna arbete

Ex. För vårt Zoo skapar vi en klass Animal med information som namn, id och ålder samt metoder för att komma åt denna information.
Sedan skapar vi subklasser av sköldpadda, lejon och pingvin som inherite från Animal. Animal klassen är således en abstraction eftersom vi aldrig kommer skapa enbart en Animal utan vi skapar ett specifikt djur.

D: Don’t
R: Repeat
Y: Yourself

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Stepwise Refinement / Stegvis Förfining

A

Man bryter ner en komplex uppgift eller system i mindre, mer hanterbara delar (delproblem).

Sedan fokuserar man på att förbättra varje del (problem) steg för steg tills man har en fullständig lösning.

Processen börjar med en övergripande idé eller mål. Sedan delas detta upp i mindre delar eller delproblem.

Passar bäst “i det lilla”, ex. när man ska designa en funktion med sina underfunktioner

Ex. Jackson Structured Programming (JSP), göra det grafiskt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Objektorienterad Programering (OOP)

A

Programmeringsparadigm/Metod

Programvaran struktureras kring objekt, vilka är grundläggande enheter som innehåller data och metoder för att manipulera den data.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Procedurell Programmering

A

Programmeringsparadigm/Metod

Programmen struktureras kring sekvenser av instruktioner, kända som procedurer eller funktioner.

Fokus är på att bryta ned problem i mindre delar och lösa dem steg för steg genom att använda sekvenser, selektion (villkor) och iteration (loopar).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Objekt

A

Ett objekt representerar en entitet i systemet och innehåller data, känd som attribut eller egenskaper, samt metoder, vilka är funktioner som kan användas för att manipulera data.

Ex. Objektet “bil” har attribut som modell, färg och hastighet

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Klass

A

En klass är en mall eller en ritning för att skapa objekt.

Den beskriver strukturen och beteendet för objekt av en viss typ.

Från en klass kan flera objekt skapas, och de delar samma struktur och beteende som definierats av klassen.

Ex.
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Vad för speciell metod behövs i Python för att skapa en instans av ett objekt?

A

__init__
Den kallas även för konstruktorn (i andra programmeringsspråk).

Det är en speciell metod i Python som kallas när en instans av en klass skapas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Vad för första argument måste finnas med i __init__ metoden av en klass?

A

self
Self behövs för att referera till den aktuella instansen av klassen.

När du definierar en metod i en klass i Python, måste den första parametern alltid vara self.

Ex.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

“self “ är en konventionell term, men du kan använda vilket namn du vill, men det är en allmänt accepterad praxis att använda self

När en metod på en klass kallas, skickas den aktuella instansen av klassen automatiskt till metoden som det första argumentet (vanligtvis self). Detta gör att metoden kan arbeta med de attribut och metoder som tillhör den specifika instansen av klassen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Attribut

A

Datafälten som tillhör ett objekt.

Representerar egenskaper eller tillstånd för objekten som skapas från klassen.

Lagrar data som är associerad med varje instans av klassen.

Attributen definieras inuti klassen och kan vara av olika datatyper, till exempel strängar, heltal, listor, eller till och med andra objekt.

När du skapar en instans av en klass, får varje instans sina egna kopior av klassens attribut. Detta innebär att varje instans kan ha olika värden för sina attribut, och att ändra attributens värden för en instans inte påverkar andra instanser av samma klass

Ex. Kan en klass som representerar en bil ha attributen tillverkare, modell och år
Bil1 är Tesla, Model X, 2023
Bil2 är Volvo, XC40, 2020

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Metoder

A

Funktioner som är definierade i en klass och som används för att manipulera objektens tillstånd eller utföra andra åtgärder relaterade till klassen.

Fungerar som vanliga funktioner, fast knutna till objektet.

Ex. Introduce är en metod i klassen Person
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def introduce(self):
    print(f"My name is {self.name} and I am {self.age} years old.")
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Instans (Objektinstans)

A

Refererar till en specifik förekomst av en klass.

När du skapar en instans av en klass, skapar du ett konkret objekt baserat på den mall eller blåsprint som klassen representerar.

Ex.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

Skapa instans av klassen ‘Person’
person1 = Person(“Alice”, 30)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Instansvariabler

A

Instansvariabler är variabler som är associerade med en specifik instans av en klass.

Varje instans av en klass har sina egna kopior av instansvariabler, och ändringar som görs på dessa variabler påverkar bara den specifika instansen.

I Python definieras instansvariabler inuti klassens konstruktor (__init__) med hjälp av self-referensen. När en instans skapas, används konstruktorn för att initialisera dess instansvariabler

Fungerar som vanliga variabler, fast knutna till objektet.

Ex.
class Person:
def __init__(self, name, age):
self.name = name # Instansvariabel
self.age = age # Instansvariabel

Skapa instanser av klassen ‘Person’
person1 = Person(“Alice”, 30)
person2 = Person(“Bob”, 25)

Användning av instansvariabler
print(person1.name) # Output: Alice
print(person2.age) # Output: 25

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Hur definieras instansvariabler?

A

I Python definieras instansvariabler inuti klassens konstruktor (__init__) med hjälp av self-referensen. När en instans skapas, används konstruktorn för att initialisera dess instansvariabler.

Ex. species
class Animal:
def __init__(self, species):
self.species = species

animal1 = Animal(“dog”)

animal1 har en egen kopia av dessa instansvariabler med ett specifikt värde som tilldelats när instansen skapades.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Parameter

A

En variabel eller värde som används för att överföra data till en funktion eller metod när den kallas.

Parametrar används för att göra funktioner och metoder mer generella och återanvändbara, eftersom de tillåter funktioner att utföra operationer på olika värden utan att behöva hårdkoda dem direkt inuti funktionen.

Ex. a och b i funktionen
def add_numbers(a, b):
return a + b

result = add_numbers(3, 5)
print(result)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Vad behöver alla parameterlistor (samt instansvariabler) inledas med?

A

Self, som refererar till objektet själv.

När man anropar funktioner i objektet så måste själva objektet skickas med i processen. Detta för att klassen ska veta vilket objekt det är som ska använda sig av funktionen som finns i “ritningen”.

Detta gäller även för funktioner som inte har andra parametrar.

Instansvariablarna börjar med self för att visa att de hör till objektet.

Ex.
class Person:
def __init__(self, name, birth)
self.name = name
self.birth = birth
def updateName(self, name):
self.name = name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Information Hiding

A

Ett koncept inom objektorienterad programmering som handlar om att begränsa tillgången till viss information eller implementeringsdetaljer om en klass eller ett objekt.

Målet är att isolera och skydda interna detaljer från att bli oavsiktligt eller medvetet ändrade av andra delar av programmet som använder klassen eller objektet.

Genom att tillämpa information hiding kan du kontrollera hur data och metoder används och manipuleras utanför klassens gränssnitt. Detta ökar säkerheten och stabiliteten i koden samt underlättar underhåll och utveckling.

Det finns flera sätt att uppnå information hiding.
Ex. Använd av privata medlemmar, Använda getter/setter-metoder (för att styra åtkomsten och ändringen av attribut)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

API

A

Application Programming Interface

Ett sätt för olika program eller delar av program att kommunicera med varandra och dela data och funktionalitet på ett standardiserat sätt.

API:er kan vara externa, där de tillhandahåller funktioner och data från en annan applikation eller tjänst, eller interna, där de definierar hur komponenter inom en applikation interagerar med varandra

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Hur kan man göra information hiding för variabler?

A

Genom att ge variabler speciella namn.

Oftast finns det konventioner för variabelnamn för att indikera att de är avsedda att vara privata eller skyddade och inte ska manipuleras direkt utanför klassen.

I Python används vanligtvis en konvention med en eller flera understreck (_ eller __) i början av variabelnamnet för att indikera att det är en “protected” eller “private” variabel.

Skyddade: _ Ett enda understreck
Privata: __ Dubbla understreck
Privata använder sig av Name Mangling (inbyggd funktion hos Python)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Name Mangling

A

En funktion i Python som ändrar namnet på variabler som börjar med dubbla understreck (__) i början av deras namn (dvs. privata variabler).

Detta görs för att förhindra oavsiktlig åtkomst från utanför klassen.

När du definierar en variabel eller metod i en klass med dubbla understreck i början av dess namn, ändrar Python automatiskt namnet på den variabeln eller metoden till _klassnamn__variabel eller _klassnamn__metod där klassnamn är namnet på klassen. Detta gör att variabeln eller metoden inte kan nås utanför klassen med sitt ursprungliga namn.

Ex.
class MyClass:
def __init__(self):
self.__private_variable = “This is a private variable”

def get_private_variable(self):
    return self.\_\_private_variable

my_object = MyClass()
print(my_object.get_private_variable()) #Detta funkar
print(my_object.__private_variable) #Detta ger fel

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Vad innebär felet “AttributeError”?

A

Du försöker komma åt en privat variabel genom att kalla på dess variabelnamn istället för att använda dess get-metod.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Donut Model

A

Donut-modellen, även känd som Donut-programmet eller Donut-hålmönster, är en välkänd design som används i datorsäkerhet för att förklara sårbarheter i system.

Modellen illustrerar ett lagerbaserat skydd för att visa hur olika skyddslager, eller “skyddshål”, kan utnyttjas för att angripa ett system.

I inre “hålet” finns variablerna som är skyddade. Man kommer endast åt deras värden via metoderna som finns i det yttre lagret (getters and setters)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Hur är klassdiagram uppbyggda? Hur ser dem ut?

A

Ett klassdiagram är en typ av UML-diagram som används för att visualisera strukturen i ett system genom att modellera klasser och deras relationer till varandra.

Klassdiagram visar hur olika klasser är relaterade och hur de samverkar för att uppnå ett visst systemmål.

Klasser: Rektanglar med tre fält: överst visas klassens namn, i mitten visas dess attribut och längst ner visas dess metoder.

Attribut: Attribut är egenskaper eller data som tillhör en klass. De visas i mitten av klassrektangeln och anges vanligtvis med dess namn och datatyp.

Metoder: Funktioner eller operationer som en klass kan utföra. De visas längst ner i klassrektangeln och anges vanligtvis med dess namn, parametrar och returtyp.

Relationer: Relationer mellan klasser visas med linjer som förbinder klasserna.

Public: +
Private: -
Protected: #

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Association (Klassdiagram)

A

Visar att två klasser har en relation till varandra.

En simple association som inte har någon dependency relation.

Representerar i klassdiagram som en enkel ifylld linje mellan två klasser.

Ex. Student - Course

Ex. Bibliotek - Bok
Bibliotek kan associeras med flera böcker, och en bok kan associeras med flera bibliotek. Associationen “innehåller” indikerar att ett bibliotek innehåller böcker, och en bok kan hittas i ett eller flera bibliotek. De är inte beroende av varandra

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Aggregation (Klassdiagram)

A

Visar att en klass innehåller eller består av andra klasser.

Det visar en “har en” (“has a) relation

Det representeras vanligtvis med en ifylld linje med en öppen diamantformad pil.

Ex. Bil ◇- Personer (Passengers)
En person har en eller flera bilar, men bilar kan existera utanför en person.
(Cars may have passengers)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Komposition (Composition) (Klassdiagram)

A

Liknar aggregation, men med en starkare koppling där den inre klassen är en del av den yttre klassen och inte kan existera utan den.

“When a child object wouldn’t be able to exist without its parent object”

Det representeras vanligtvis med en ifylld linje med en fylld diamantformad pil.

Ex. House (contains) ◆- Room
Ett hus innehåller flera rum, men rummen existerar bara inom huset. (Om huset förstörs/rivs), så kommer även rummen i huset förstöras.

Ex.
class Room:
def __init__(self, size):
self.size = size

class House:
def __init__(self):
self.rooms = [Room(“Living room”), Room(“Bedroom”)]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Arv (Inheritence) (Klassdiagram)

A

Skapa en instans av underklassen

Arv (inheritance) är ett av huvudkoncepten inom objektorienterad programmering där en klass kan ärva egenskaper och beteenden från en annan klass, som kallas förälderklass eller överklass. Den klass som ärver egenskaper och beteenden kallas barnklass eller underklass.

Arv möjliggör återanvändning av kod och möjliggör en hierarkisk struktur där specialiserade klasser kan bygga på generella klasser

I Python uppnås arv genom att ange förälderklassen som en parameter vid definitionen av en barnklass. När en instans av barnklassen skapas, ärver den automatiskt attribut och metoder från förälderklassen.

Relationen visas med en öppen diamantformad ifylld pil med ett rakt/fullt sträck från barnklassen (subklassen) till föräldrar klassen.

Ex. Animal ◁- Dog

Ex.
class Animal:
def __init__(self, species):
self.species = species

def sound(self):
    return "Make a sound"

class Dog(Animal):
#Om vi gör en egen konstruktor för subklassen måste vi importera in de variabler som skapas i föräldrarklassen
def __init__(self, species, breed):
super().__init__(species)
self.breed = breed

def sound(self):
    return "Bark"

my_dog = Dog(“Canine”, “Labrador”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Föräldrarklass/Överklass

A

En klass som andra klasser härstammar från genom arv i objektorienterad programmering.

En föräldrarklass definierar egenskaper och beteenden som är gemensamma för flera relaterade klasser och kan återanvändas av dess barnklasser.

Dessa attribut och metoder kan ärvas av barnklasserna, vilket innebär att barnklasserna automatiskt får tillgång till och kan använda dem.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Barnklasser/Underklasser

A

En klass som ärver egenskaper och beteenden från en föräldrarklass genom arv i objektorienterad programmering.

Barnklasser bygger på föräldrarklassens funktionalitet genom att lägga till eller modifiera dess egna metoder och attribut, vilket möjliggör specialisering och anpassning av klasserna för specifika syften.

Barnklasser ärver alla metoder och attribut från föräldrarklassen och kan utöka eller överrider dessa efter behov.

Detta ger möjlighet till återanvändning av kod och förenklar underhåll och förvaltning av koden.

Ex.
class Animal:
def __init__(self, species):
self.species = species

def make_sound(self):
    print("Animal makes a sound")

class Dog(Animal): # Dog är en barnklass av Animal
def __init__(self, species, breed):
super().__init__(species)
self.breed = breed

def make_sound(self):  # Överrider make_sound-metoden från föräldrarklassen
    print("Dog barks")

Skapa en instans av barnklassen
my_dog = Dog(“Mammal”, “Labrador”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

super()

A

En inbyggd funktion i Python som används för att få åtkomst till metoder och attribut från förälderklassen i en barnklass.

Det möjliggör anrop av metoder och konstruktorer från förälderklassen inuti barnklassens metoder eller konstruktor.

Genom att använda super() i en barnklass kan du anropa metoder från förälderklassen utan att behöva hårdkoda namnet på förälderklassen.

Detta gör koden mer flexibel och minskar duplicering av kod

Syntax: super().metodNamn(argument)

Ex.
class Parent:
def method(self):
print(“Parent method”)

class Child(Parent):
def method(self):
super().method() # Anropa metoden från förälderklassen
print(“Child method”)

Skapa en instans av barnklassen och anropa dess metod
child = Child()
child.method()
#Skriver ut parent method och child method

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

super().__init__

A

super().__init__() används för att anropa konstruktorn från förälderklassen (eller överklassen) till en barnklass.

Det används vanligtvis i en barnklasskonstruktor för att initialisera attribut eller utföra andra åtgärder som förälderklassen ansvarar för.

När en barnklass definierar sin egen __init__()-metod och du vill att förälderklassens __init__()-metod ska köras för att göra något extra arbete vid instansiering av barnklassen, då används super().__init__().

Detta gör att du kan undvika att duplicera kod från förälderklassen i barnklassen och låter dig ha mer flexibilitet och bättre underhållbarhet.

Ex.
class Vehicle:
def __init__(self, color):
self.color = color

def display_color(self):
    print("Vehicle color:", self.color)

class Car(Vehicle):
def __init__(self, color, brand):
super().__init__(color) # Anropa förälderklassens konstruktor för att initialisera färgen
self.brand = brand

def display_details(self):
    super().display_color()  # Anropa förälderklassens metod för att visa färgen
    print("Car brand:", self.brand)

Skapa en instans av barnklassen
my_car = Car(“Blue”, “Toyota”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Konvention vid importering av Pandas

A

import pandas as pd

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

Konvention vid importering av Numpy

A

import numpy as np

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

NumPy

A

Python-bibliotek som används för att utföra matematiska operationer på arrayer och matriser.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

Fördelar med NumPy

A
  1. Effektivitet: Hantering av stora dataset och matriser. Beräkningar kan utföras snabbare.
    - Sparar på minnet då vi kan välja datatyper i referens till bits
  2. NumPy Arrayer: Mer kraftfulla och flexibel datastruktur än vanliga Python-listor.
    - Enklare att utföra matematiska operationer på dataset med flera dimensioner.
    - Avancerad indexering och slicing-funktionalitet. Enkelt att extrahera och manipulera data från arrayer på ett effektiv sätt.
  3. Broadcast-Funktionalitet: Möjligt att utföra beräkningar även när dimensionerna på arrayerna inte matchar.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

Hur kan vi installera NumPy?

A

pip install numpy

It is included in Anaconda

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

Vad för funktion genererar en NumPy Array av jämnt fördelade värden inom ett givet intervall?

A

np.arrange([start, ], stop, [step, ]
Start: Valfria startvärdet för sekvensen. Om inget anges antas det vara 0.
Stop: Stoppvärdet. Exlusivet, ingår inte i arrayen.
Step: Steget mellan varje efterföljande värde. Om inget anges antas det vara 1.

En bättre “version” av Pythons Range.

Ex. my_array = np.arange(1, 8, 0.5)
Ger
[1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

Array

A

En datatyp som används för att lagra en samling av element, där varje element kan nås via ett indexeringsnummer.

En array kan bestå av element av samma datatyp och kan vara dimensionell (en rad), tvådimensionell (en matris), tredimensionell eller flerdimensionell.

Elementen i en array lagras i minnet i en sekvensiell ordning, vilket gör det möjligt att nå dem genom att använda deras index eller position i arrayen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

Vad för funktion skapar en NumPy Array från en befintlig sekvens eller lista?

A

np.array(objekt, dtype)
Objekt: Den befintliga sekvensen, ex. en lista.
Dtype: Den valfria datatypen för elementen i arrayen. Om inte angiven kommer datatypen att härldeas från de indata som tillhandahålls.

Ex. a = np.array([1, 2, 3])
Ger en array med elementen [1, 2, 3]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

Hur kan vi ändra antalet bits som sparas för en datatyp i en NumPy Array?

A

dtype=np.(datatyp)+(bits)

Ex. dtype = np.int8
Vilket vid print(type(array)) får vi numpy.int8

Vanligtvis är int 64 bits, men vi ändrar detta genom dtype = np.int8

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

Vad för funktion använder vi för att få storleken på vår NumPy Array?

A

np.shape(array)

Detta returnerar en tupel med antalet (rader, kolumner)

Vi får formen (dimensionerna) av en array.

Ex. array_2d = np.array([[1,2,3], [4,5,6]])
np.shape(array_2d)
Ger (2, 3) vilket betyder att vi har 2 rader och 3 kolumner

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

Hur fungerar indexeringen för NumPy Arrayer?

A

array[row_index, column_index]

Ex. my_array[1, 2] = Element på rad 2 och kolumn 2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
50
Q

Slicing för Arrayer

A

array[start_row:end_row, start_column:end_column]
start_row: Startindex för raderna som ska extraheras.
end_row: Slutindex för raderna som ska extraheras. Notera att det sista indexet inte inkluderas.
start_column: Startindex för kolumnerna som ska extraheras.
end_column: Slutindex för kolumnerna som ska extraheras. Notera att det sista indexet inte inkluderas.

Några viktiga punkter att tänka på:

För att extrahera hela rader eller kolumner kan du använda : som en platsmarkör.
Ex. array[:, 1] extraherar hela kolumnen med index 1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
51
Q

Hur skapar vi en array fylld med nollor?

A

np.zeros(shape, dtype)
Shape: En tuple som beskriver dimensionerna på arrayen (rader, kolumner)
Dtype (Valfritt): Datatypen för elementen i arrayen. Standardvärde är “float”

Ex. np_zeros = np.zeros((2, 3)) skapar en tvådimensionell array med 2 rader och 2 kolumner
[[0. 0. 0.] [0.0.0]]

Ex. Np_zeros = np.zeros(5)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
52
Q

Hur beräknar vi medelvärdet av elementen i en array?

A

np.mean(array, axis)
Array: Arrayen
axis (valfritt): Axel längs vilken medelvärdet ska beräknas. Om inte angivet beräknas medelvärdet över hela arrayen, dvs axis=None

Ex. my_array_1 = np.array([[0, 1, 2, 3, 4],[10, 11, 12, 13, 10],
[30, 43, 11, 50, 30]])

medel = np.mean(my_array_1, axis=0)
Ger [13.33333333 18.33333333 8.33333333 22. 14.66666667]

Ex. medel = np.mean(my_array_1)
Ger 15.333333333333334

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
53
Q

axis=None

A

Operationen utförs över hela arrayen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
54
Q

axis=0

A

Operationen utförs längs raderna.

Lodrätt.

Ex. my_2d_array = np.array([[20, 30, 40], [10, 10, 20]])
np.mean(my_2d_array, axis=0)
Ger [15. 20. 30.]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
55
Q

axis=1

A

Operationen utförs över kolumnerna.

Vågrätt

Ex. my_2d_array = np.array([[20, 30, 40], [10, 10, 20]])
print(np.mean(my_2d_array, axis=1))
Ger [30. 13.33333333]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
56
Q

axis=-1

A

Motsvarar den sista axeln i en array, vilket är axeln som löper längs raderna.

Vågrätt

Ex. my_2d_array = np.array([[20, 30, 40], [10, 10, 20]])
print(np.mean(my_2d_array, axis=-1))
Ger [30. 13.33333333]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
57
Q

Vad finns det för begränsningar med Python listor (i jämförelse med NumPy Array)?

A

Omöjligt att plocka ut specifika element från Python Listor.

Ex. my_list[[1, 3, 4]] ger fel, medan detta fungerar för Array där vi får elementet på index 1, index 3 och index 4.

Ex. my_list{my_list>12] ger fel, medan detta fungerar för Array där vi får alla element i arrayen som har ett värde större än 12.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
58
Q

Vad betyder kommatecken (,) vid indexing för arrayer?

A

Kommatecken skiljer mellan varje dimension.

Ex. my_2d_array[1,3] ger elemented som ligger på rad 1 och kolumn 3.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
59
Q

Vad ger detta för utskrift?
my_2d_array = np.array([[0, 1, 2, 3, 4], [10, 11, 12, 13, 10], [30, 43, 11, 50, 30]])
print(my_2d_array[1:, [1, 3, 4]])

A

En array med [[11 13 10]
[43 50 30]].

Den plockar ut varje element på index 1, index 3 och index 4 från och med rad 1.

Tänk att varje rad är en lista där indexen börjar från 0 på första elementet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
60
Q

Vad för värden för new_array?
new_array = old_array + 3

A

new_array tar alla värden i old_array och adderar dem med 3 och sparar i new_array.

Detta fungerar på samma sätt för alla andra matematiska funktioner.

Fungerar även med slicing av arrayer.
Ex. new_array = old_array[:, 2] + 3 innebär att new_array tar alla element som finns på index 2 (alla element i kolumn 2) och adderar dem med 3, sedan sparas dem i new_array.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
61
Q

Vad för element får new_array?
new_array = old_array + old_array

A

Innebär att elementen i old_array adderas med sig själv och läggs in i new_array.

Ger samma resultat som new_array = old_array * 2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
62
Q

my_array[my_array<3] = 0

A

Betyder att alla element i my_array som är mindre än 3 kommer tilldelas värdet 0 istället.

Fungerar på samma sätt med matematiska funktioner
Ex. my_array[my_array<3] += 5

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
63
Q

Vad för datatyper kan en NumpyArray ha?

A

Flera olika.

Int, float, bool, string, etc.

Dessa kan vara i olika bits.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
64
Q

Kan man mixa datatyper i en NumPy Array?

A

Nej. De måste vara samma datatyper.

NumPy arrays är designade att vara “homogeneous”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
65
Q

Om man ska göra matematiska funktioner mellan två olika arrayer, kan de ha olika shapes?

A

Nej.

De måste ha samma datatyp och samma dimensioner.

Ex. my_array_1 = np.array([[10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20]])
my_array_2 = np.array([[0, 1, 2, 3, 4], [10, 11, 12, 13, 10], [30, 43, 11, 50, 30]])
mix_array = my_array_1 + my_array_2
Ger fel

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
66
Q

Vad för funktionen beräknar summan av elementen i en NumPy Array?

A

np.sum(Array, [axis])
Array: Arrayen
axis (valfritt): Axel längs vilken medelvärdet ska beräknas. Om inte angivet beräknas medelvärdet över hela arrayen, dvs axis=None

Ex. my_array_1 = np.array([[0, 1, 2, 3, 4],[10, 11, 12, 13, 10],])
summa = np.sum(my_array_1)
Ger 66

Ex. summa = np.sum(my_array_1, axis=0)
Ger [10 12 14 16 14]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
67
Q

Vad för funktionen returnerar det minsta värdet i en NumPy Array?

A

np.min(array, [axis])
axis (valfritt): Axel längs vilken medelvärdet ska beräknas. Om inte angivet beräknas medelvärdet över hela arrayen, dvs axis=None

Ex. my_array_1 = np.array([[0, 1, 2, 3, 4], [10, 11, 12, 13, 10]])
minsta = np.min(my_array_1, axis=1)
Ger [ 0 10]

Ex. minsta = np.min(my_array_1)
Ger 0

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
68
Q

Vad för funktionen returnerar det största värdet i en NumPy Array?

A

np.max(array, [axis])
axis (valfritt): Axel längs vilken medelvärdet ska beräknas. Om inte angivet beräknas medelvärdet över hela arrayen, dvs axis=None

Ex. my_array_1 = np.array([[0, 1, 2, 3, 4], [10, 11, 12, 13, 10]])
största = np.max(my_array_1)
Ger 13

Ex. största = np.max(my_array_1, axis=-2)
Ger [10 11 12 13 10]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
69
Q

Vad för funktionen returnerar indexen på det största värdet i en NumPy Array?

A

np.argmax(array, [axis])
axis (valfritt): Axel längs vilken medelvärdet ska beräknas. Om inte angivet beräknas medelvärdet över hela arrayen, dvs axis=None

Ex. my_array_1 = np.array([[0, 1, 2, 3, 4], [10, 11, 12, 13, 10]])
största_index = np.argmax(my_array_1)
Returnerar 8

Ex. största_index = np.argmax(my_array_1, axis=1)
Ger [4 3]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
70
Q

Hur “räknas”/”tilldelas” elementen sina index i en NumPy Array med flera dimensioner?

A

rad 0: 0, 1, 2, 3, 4, …
rad 1: 0, 1, 2, 3, 4, …
osv.

Om man använder matematiska funktioner kan detta ändras beroende på axis.

Ex. axis=0
rad 0: 0, 0, 0, 0, …
rad 1: 1, 1, 1, 1, …
rad 2: 2, 2, 2, 2,

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
70
Q

Vad för funktionen returnerar indexen på det minsta värdet i en NumPy Array?

A

np.argmin(array, [axis])
axis (valfritt): Axel längs vilken medelvärdet ska beräknas. Om inte angivet beräknas medelvärdet över hela arrayen, dvs axis=None

Ex. my_array_1 = np.array([[0, 1, 2, 3, 4], [10, 11, 12, 13, 10]])
minsta_index = np.argmin(my_array_1)
Ger 0

Ex. minsta_index = np.argmin(my_array_1, axis=0)
Ger [0 0 0 0 0]

Ex. minsta_index = np.argmin(my_array_1, axis=1)
Ger [0 0]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
71
Q

Vad är Pandas?

A

En populär Python-baserad programvarubibliotek som används för datahantering och dataanalys.

Det erbjuder datastrukturer och funktioner för att effektivt manipulera och analysera strukturerade data.

Pandas kan läsa och skriva data från och till olika datakällor, inklusive CSV-filer, Excel-filer, SQL-databaser, JSON-filer, HTML och mycket mer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
72
Q

Hur skapar vi en DataFrame i Pandas?

A

pd.DataFrame(data)

Ex. df = pd.DataFrame(data=(“äpple”, “banan”, “päron”))
Ger 0
0 äpple
1 banan
2 päron

Ex. data = (“äpple”, “banan”, “päron”)
df = pd.DataFrame(data)
Som ger samma.

Ex. data = {‘Name’: [‘Fanny’, ‘Patrik’, ‘Charlie’], ‘Age’: [21, 30, 25], ‘City’: [‘Göteborg’, ‘Stockholm’, ‘Nashville’]}
df = pd.DataFrame(data)
Ger
Name Age City
0 Fanny 21 Göteborg
1 Patrik 30 Stockholm
2 Charlie 25 Nashville

pd.DataFrame(data={‘col1’: [x, y, z], ‘col2’: [a, b, c]})

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
73
Q

Hur kan vi “tilldela” våra kolumner namn i Pandas?

A

Genom användning av Dictionaries.

Ex. data = {‘Name’: [‘Fanny’, ‘Patrik’, ‘Charlie’], ‘Age’: [21, 30, 25], ‘City’: [‘Göteborg’, ‘Stockholm’, ‘Nashville’]}

Varje key blir kolumnnamnet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
74
Q

Vad för funktion använder vi för att hämta kolumnens etiketter (namn) från en Pandas Dataframe?

A

df.columns
df: Namnet på den DataFrame man skapat

Ex.
data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’], ‘Age’: [25, 30, 35], ‘City’: [‘New York’, ‘Los Angeles’, ‘Chicago’]}
df = pd.DataFrame(data)
columns = df.columns
Ger Index([‘Name’, ‘Age’, ‘City’], dtype=’object’)

Det returnerar alltså en Index som innehåller namnen på kolumnerna i DataFrame

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
75
Q

Vad för funktion använder vi för att hämta antalet radindex i en Pandas DataFrame?

A

df.index
df: Namnet på den DataFrame man skapat

Ex.
data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’], ‘Age’: [25, 30, 35], ‘City’: [‘New York’, ‘Los Angeles’, ‘Chicago’]}
df = pd.DataFrame(data)
index = df.index
Vilket ger RangeIndex(start=0, stop=3, step=1)

Den returnerar alltså ett RandeIndex-objekt som innehåller radindexen för DataFramen.
- I exemplet är det en numerisk sekvens från 0 till 2.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
76
Q

Vad för funktion använder vi för att extrahera de faktiska värdena från DataFrame (utan att inkludera rad- eller kolumnindex)?
Vad returnerar funktionen?

A

df.values
df: Namnet på den DataFrame man skapat

Funktionen returnerar en tvådimensionell NumPy-Array som innehåller datavärden från DataFrame

Ex.
data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’], ‘Age’: [25, 30, 35], ‘City’: [‘New York’, ‘Los Angeles’, ‘Chicago’]}
df = pd.DataFrame(data)
values = df.values
Ger [[‘Alice’ 25 ‘New York’]
[‘Bob’ 30 ‘Los Angeles’]
[‘Charlie’ 35 ‘Chicago’]]

Ex. np.shape(values)
Ger (3,3) vilket betyder att den har 3 rader och 3 kolumner.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
77
Q

Hur gör man för att få ut specifik kolumndata från en Pandas DataFrame?

A

df[‘kolumnnamn’]
kolumnnamn: Namnet på den kolumn du vill ha information om.

Ex.
data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’], ‘Age’: [25, 30, 35], ‘City’: [‘New York’, ‘Los Angeles’, ‘Chicago’]}
df = pd.DataFrame(data)
print(df[‘Name’])
Ger
0 Alice
1 Bob
2 Charlie
Name: Name, dtype: object

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
78
Q

Hur gör man för att få ut specifik raddata från en Pandas DataFrame?

A

df.iloc[row_index, column_index]
row_index: Indexerare för rader (heltal, lista av heltal, slicer eller en boolisk array).
column_index: Indexerare för kolumner (heltal, lista av heltal, slicer eller en boolisk array)

Ex.
data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’], ‘Age’: [25, 30, 35], ‘City’: [‘New York’, ‘Los Angeles’, ‘Chicago’]}
df = pd.DataFrame(data)
row = df.iloc[1]
print(row)
Ger
Name Bob
Age 30
City Los Angeles
Name: 1, dtype: object

Ex.
cell = df.iloc[1, 0]
print(cell)
Ger Bob

79
Q

Vad för funktion används för att läsa in data från en CSV-fil och skapa en Pandas DataFrame?

A

pd.read_csv(‘filnamn.csv’)
filnamn: Namnet på filen i csv-format

När koden körs läses filen in och omvandlas till en DataFrame som sedan tilldelas till variabeln df.

Se till att CSV-filen finns i samma mapp som Python filen.
Ex. df = pd.read_csv(‘tågförseningar.csv’)

80
Q

Vad för funktion används för att läsa in data från en Excel-fil och skapa en Pandas DataFrame?

A

pd.read_excel(‘file.xlsx’, sheet_name=’Sheetname’)
‘file.xlsx’: Namnet på Excel-filen som ska läsas in.
sheet_name: Namnet på den kalkylblad i Excel-filen som ska läsas in. Om inte angivet, läses standardarket in.

Ex.
df = pd.read_excel(‘my_file.xlsx)

81
Q

Vad för funktion använder man för att spara innehållet i en Pandas DataFrame till en CSV-fil?

A

df.to_csv(‘csvfilename.csv’)
df: Namnet på din Pandas DataFrame
csvfilename.csv: Namnet på CSV filen du vill spara DataFramen i

82
Q

Vad för funktion använder man för att spara innehållet i en Pandas DataFrame till en Excel-fil?

A

df.to_excel(‘excelfilename.xlsx’)
df: Namnet på din Pandas DataFrame
excelfilename.xlsx: Namnet på Excel filen du vill spara DataFramen i

83
Q

Vad är en CSV-fil?

A

En CSV-fil, vilket står för “Comma-Separated Values” på engelska, är en vanligt förekommande filformat för att lagra tabellliknande data.

Det är en textfil där varje rad representerar en rad i en tabell och där kolumnerna är separerade med ett specifikt tecken, vanligtvis ett kommatecken (“,”), semikolon (“;”), eller tabulator (“\t”).

Varje rad i en CSV-fil representerar vanligtvis en post eller en uppsättning data, och kolumnerna representerar olika egenskaper eller variabler för den posten.

Ex. En CSV-fil kan användas för att lagra data från en Excel-tabell, en databasexport eller från någon annan källa där data presenteras i tabellform

84
Q

Vad för matematiska funktioner kan vi göra på Pandas DataFrames?

A

Vi kan använda NumPy metoder/funktioner.

Ex. Räkna ut medelvärdet av vissa värden
data={‘name’: [‘Ashley’, ‘Blake’, ‘Casey’, ‘Dylon’], ‘study_hours’: [30, 35, 40, 10], ‘points_exam’: [20, 15, 22, 14], ‘grade’: [‘VG’, ‘G’, ‘VG’, ‘G’]}
df = pd.DataFrame(data)
medel = df[[‘study_hours’, ‘points_exam’]].mean()
print(medel)
Ger
study_hours 28.75
points_exam 17.75
dtype: float64

85
Q

Hur gör vi för att visa de första/sista N raderna av en Pandas DataFrame?

A

df.head(N)
N (valfritt): Om inget värde anges visas de 5 första raderna.

Ex.
data = {‘A’: [1, 2, 3, 4, 5], ‘B’: [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]}
df = pd.DataFrame(data)
print(df.head(2))
Ger
A B
0 1 a
1 2 b

Ex. df.head(-2) visar alla rader förutom de 2 sista.

86
Q

Vad för funktion använder vi för att generera sammanfattande statistik för en Pandas DataFrame?

A

df.describe()
df: Namnet på den DataFrame man skapat

Denna metod beräknar olika statistiska mått för numeriska kolumner i DataFrame, såsom medelvärde, standardavvikelse, minsta värde, kvartiler och maximalt värde.

Ex.
df = pd.DataFrame(data={‘name’: [‘Ashley’, ‘Blake’, ‘Casey’, ‘Dylon’], ‘study_hours’: [30, 35, 40, 10], ‘points_exam’: [20, 15, 22, 14], ‘grade’: [‘VG’, ‘G’, ‘VG’, ‘G’]})
information = df.describe()
print(information)
Ger
study_hours points_exam
count 4.000000 4.00000
mean 28.750000 17.75000
std 13.149778 3.86221
min 10.000000 14.00000
25% 25.000000 14.75000
50% 32.500000 17.50000
75% 36.250000 20.50000
max 40.000000 22.00000

87
Q

Vad för funktion använder vi för att gruppera data efter värden i en eller flera kolumner i en Pandas DataFrame?

A

df.groupby(‘by’)
df: Namnet på den DataFrame man skapat
by: Namnet på gruppen du vill sortera på

Du måste sedan göra en numerisk funktion på gruppen innan den kan skrivas ut.

Ex.
df = pd.DataFrame(data={
‘name’: [‘Ashley’, ‘Blake’, ‘Casey’, ‘Dylon’],
‘study_hours’: [30, 35, 40, 10],
‘points_exam’: [20, 15, 22, 14],
‘grade’: [‘VG’, ‘G’, ‘VG’, ‘G’]
})

Filter out non-numeric columns
numeric_cols = df.select_dtypes(include=[np.number])

Group by ‘grade’ and calculate the mean for numeric columns
grouped_df = numeric_cols.groupby(df[‘grade’]).mean()

print(grouped_df)
Ger
study_hours points_exam
grade
G 22.5 14.5
VG 35.0 21.0

88
Q

Histogram

A

Histogram är en sorts stapeldiagram som visar hur många det finns för varje egenskapsintervall.

Ett histogram visar frekvensen och fördelning.

Vanligtvis är X-axeln dataintervall och Y-axeln frekvensen.

Ex. Frekvensen av hur många som kom mellan 0-2 min, 2-4 min, 4-6 min, osv. sent.

89
Q

Stapeldiagram (Bar Plot)

A

Ett stapeldiagram visar antal för olika kategorier.

Stapeldiagram är en diagramtyp som genom höjden på staplarna visar olika faktorers värden.

Stapeldiagrammet har bredare bas på staplarna än stolpdiagrammet.

Dock ska det vara ett mellanrum mellan dem till skillnad från histogrammet.

Ex. Antalet studenter vars favoritfärg är rött, blått, grönt respektive lila.

90
Q

Linjediagram (Line Plot)

A

Används för att visualisera trender och mönster.

Ett linjediagram visar förändringar över tid eller kontinuerliga värden.

Denna typ av diagram används ofta för att visa hur något förändras med tiden, det vill säga för att presentera värdet för en variabel över tid.

Ett sådant linjediagram visar värdet för den ena storheten, variabeln, på den vertikala axeln (y-axeln) och värdet för den andra storheten (tidsintervallet), på den horisontella axeln (x-axeln), och datapunkterna (värdet för variabeln vid ett visst tidsintervall) förbinds med linjer.

Ex. Temperaturen på en plats under 24 timmar (eller 1 vecka, 1 månad, 1 år, osv.)

91
Q

Scatter Plott (Punktdiagram)

A

Visar sambandet mellan två variabler.

Används för att identifiera korrelationer eller mönster.

Varje punkt representerar ett par värden.

Till skillnad från linjediagram sammanbinds inte punkterna med linjer eller kurvor.

Ex. Se möjliga korrelationen mellan inkomst (kr) och Metro Health Index (hälsa).

92
Q

Chartchunk

A

Onödig grafik kan vara missvisande för visualiseringar.

Onödiga 3D effekter kan vara missvisande.

93
Q

Vad är viktigt att tänka på för visualiseringar?

A
  • Att ha tydliga axlabels för att förklara variablerna.
  • Skalor och enheter bör vara lätta att förstå.
  • Undvik chartchunk.
  • Användning av färger kan förstärka budskapet.
94
Q

Matplotlib

A

Matplotlib är en populär Python-baserad visualiseringsbibliotek som används för att skapa 2D-diagram och grafer.

Det ger användare en mängd olika funktioner för att skapa olika typer av diagram och anpassa dem enligt behov.

Med Matplotlib kan du skapa bland annat linjediagram, stapeldiagram och histogram.

Biblioteket erbjuder också möjligheter att anpassa diagrammens utseende, inklusive färger, linjestilar, text och mycket mer

95
Q

Hur importerar vi Matplotlib?

A

import matplotlib.pyplot as plt

96
Q

Vad för två huvudsakliga metoder finns det för att skapa diagram med Matplotlib?

A
  1. plt-metoden
    Enklaste och vanligaste metoden för att skapa diagram.
    plt-metoden fungerar som ett globalt statiskt objekt, där du direkt anropar funktioner för att skapa diagram
  2. ax-metoden
    Mer objektorienterad metod för att skapa diagram.
    Du skapar en figur och en axel explicit, och sedan använder du metoder på axeln för att lägga till data och anpassa diagrammet
97
Q

Hur skapar vi ett eller flera diagram med “ax-metoden”?

A

Metod 1
#Vi skapar en figur. Detta är det övergripande behållaren för alla diagram och axlar som ska ritas
fig = plt.figure()
#Lägger till en ny axel (“rutnät”/diagram) till figuren.
ax = fig.add_subplot()
#För flera “rutnät”/diagram gör man flera subplots
ax2 = fig.add_subplot()
#Sedan specificerar man innehållet i respektive ax
Ex. ax.plot(x, y) skapar ett linjediagram i första axeln.

Metod 2
Alternativt kan man skriva
fig, ax = plt.subplots(Antal)
Antal: Hur många axlar du vill ha
ax.plot(x, y)
fig.show()

Ex. fig, ax = plt.subplots(2, 3) skapar 6 axlar med 2 rader och 3 kolumner

98
Q

Vad för kommando använder vi för att visa dem diagram vi ritat?

A

plt.show() alternativ fig.show()

Annars kommer inget visas upp för oss.

99
Q

Hur gör vi flera axlar med fig, ax = plt.subplots()? Hur refererar vi till dem?

A

fig, ax = plt.subplots(rader, kolumner)

Vi refererar till dem med index.

ax[rad, kolumn]

Ex. ax[0,0] handlar om första axeln

100
Q

Hur skapar vi linjediagram med Matplotlib?

A

ax.plot(x, y)
plt.plot(x, y)

Ex.
fig, ax = plt.subplots()

x_data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_data = [10, 5, 0, 2, -1, 3, 8, 11, 9, 4]

ax.plot(x_data, y_data)

101
Q

Hur skapar vi en Scatterplot/Spridningsplot med Matplotlib?

A

Skapa en ny figur och en axel

ax.scatter(x, y)
plt.scatter(x, y)

Ex.
fig, ax = plt.subplots()

Rita scatterdiagram
ax.scatter(df[‘Income’], df[‘Health’])
ax.set_ylabel(‘Health’)
ax.set_xlabel(‘Income (Thousand kr)’)

plt.show()

102
Q

Hur skapar vi stapeldiagram med Matplotlib?

A

a) ax.bar(categories, values)
b) plt.bar(categories, values)
categories: X-axeln
values: Y-axeln (höjden av varje bar)

Ex.
df_favcol = pd.DataFrame(data={‘Color’: [‘red’, ‘blue’, ‘green’, ‘purple’],
‘Favorite’: [20, 10, 5, 15]})

fig, ax = plt.subplots(1, figsize=(4,4))

ax.bar(df_favcol[‘Color’], df_favcol[‘Favorite’])

ax.set_ylabel(‘Favorite colour (# Students)’)

plt.show()

Ex.
# Data
categories = [‘A’, ‘B’, ‘C’, ‘D’]
values = [23, 45, 56, 78]

Create a bar plot
plt.bar(categories, values)

103
Q

Hur skapar vi histogram med Matplotlib?

A

ax.hist(data, bins=ANTAL)
plt.hist(data, bins=ANTAL)
data: NumPy Array, (lista, tupler)
bins: Hur många bins (intervaller) som datan ska delas upp i

Ex. ax.hist(df[‘Price’])
Endast ett “värde” kan skickas in i ett histogram. Detta eftersom den räknar värdena i den kolumnen av DataFramen

Ex.
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8]

fig, ax = plt.subplots()

ax.hist(data, bins=8)

104
Q

Hur skapar vi boxplot med Matplotlib?

A

ax.boxplot(data)
plt.boxplot(data)

Ex.
data = np.array([
[1, 2, 3, 4, 5], # Sample 1
[3, 4, 5, 6, 7], # Sample 2
[2, 3, 4, 5, 6] # Sample 3
])

fig, ax = plt.subplots()

ax.boxplot(data)

Ex.
df_class = pd.DataFrame(data = {
‘Class_A’: np.random.normal(0, 2, 10),
‘Class_B’: np.random.normal(2, 5, 10),
‘Class_C’: np.random.normal(-2, 3, 10)
})

fig, ax = plt.subplots(figsize=(6, 3))

En lista av kolumner
ax.boxplot([df_class[‘Class_A’], df_class[‘Class_B’], df_class[‘Class_C’]])
ax.set_xlabel(‘Classes’)
ax.set_ylabel(‘Values’)

plt.show()

105
Q

Hur sätter vi en Y-label i ett diagram med Matplotlib?

A

ax.set_ylabel(‘Text’)
Eller
plt.ylabel(‘Text’)

106
Q

Hur sätter vi en X-label i ett diagram med Matplotlib?

A

ax.set_xlabel(‘Text’)
Eller
plt.xlabel(‘Text’)

107
Q

Hur skapar vi ett eller flera diagram med “plt-metoden”?

A

Vi använder direkt plt metoden för det specifika diagram vi vill visa.

Ex. plt.plot(x, y) skapar ett linjediagram med x och y värdena.
plt.show()

108
Q

Vad för funktion använder man för att ställa in X och Y Tick Labels?

A

ax.set_xticklabels([labels])
ax.set_yticklabels([labels])

Ex.
ax[1].set_xticklabels([2, 3, 4, 5, 6, 7, 8, 9])

109
Q

Vad för funktion använder man för att ställa in X och Y Ticks?

A

ax.set_xticks(ticks)
ax.set_yticks(ticks)
ticks: Oftast en lista med positioner för tickarna.

Ex.
ax[1].set_xticks(np.arange(1, 9, 1))

110
Q

Vad för funktion använder man för att ställa in de minsta och största värdena på X-axeln och Y-axeln?

A

ax.set_xlim(left, right)
ax.set_ylim(bottom, top)
Per automatik är dessa värden None om inget annat anges

Ex.
ax.set_xlim(left=1, right=4)
ax.set_ylim(10, 20)

Ex. Med NumPy Array
fig, ax = plt.subplots(1, figsize=(6,3))

data = np.array([[0,1,2,3,4,5], [15,10,9,2,1,-5]])

ax.plot(data[0], data[1], linewidth=5, color=’salmon’)

ax.set_ylim([np.min(data), np.max(data)])

ax.set_xticks(np.arange(0, 6))
ax.set_xticklabels([‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’])

111
Q

Vad för funktion använder man för att ange en titel för sitt diagram i Matplotlib?

A

ax.set_title(‘title’)

112
Q

Vad för funktion använder man för att lägga till en förklarande text i ett diagram?

A

ax.legend()

Det är en ruta som dyker upp som visar färg och vilken linje det tillhör. T.ex. Två linjediagram med blå respektive gul färg. Då visar legend att blå linje är Linje 1 och gul linje är Linje 2. Om man sedan ska förklara mer om linjerna blir det lättare att referera.

113
Q

Vad för funktion använder man för att spara en figur man skapat med Matplotlib?

A

fig.savefig(‘fname.png’)
fname: Namnet du vill spara bilden till

Den sparar figuren till en PNG-fil

Funktionen sparar figuren till en bildfil på sin dator.

Den sparar figuren exakt som den visas i fönstret eller den skärm som genererades.

114
Q

Vad för funktion använder man för att ändra storleken på figuren i Matplotlib?

A

figsize=()
I plt.subplots(figsize=(x,y))

Ex. fig, ax = plt.subplots(figsize=(6, 4))

Ex. fig, ax = plt.subplots(figsize=(20, 4)) skapar en mycket bredare figur

115
Q

Hur kan man ändra tjockleken på linjerna i linjediagram?

A

linewidth inuti axeln
ax.plot(x,y, linewidth=TJOCKLEK)

Ex. ax.plot([1, 2, 3], [4, 5, 6], linewidth=2)

116
Q

Hur ändrar man färgen på linjen/prickarna i Matplotlib?

A

color
ax.plot(x,y, color=’FÄRG’)

Ex. ax.plot([1, 2, 3], [4, 5, 6], color=’red’)

Ex. ax.plot([1, 2, 3], [4, 5, 6], color=’red’, linewidth=6)

117
Q

I vilken ordning anger man färg och tjocklek för en linje i ett diagram i Matplotlib?

A

Det spelar ingen roll.

Ex. ax.plot([1, 2, 3], [4, 5, 6], color=’red’, linewidth=6) ger samma sak som ax.plot([1, 2, 3], [4, 5, 6], linewidth=6, color=’red’)

118
Q

Hur kan man göra ett stapeldiagram i Matplotlib där varje stapel har en egen färg?

A

Om man vill att varje stapel ska ha sin egen unika färg, kan man specificera en lista med färger för varje stapel.

Man kan sedan använda color-parametern tillsammans med plt.bar()/ax.bar() för att ange färgerna för varje stapel separat.

Ex.
fig, ax = plt.subplots()

categories = [‘A’, ‘B’, ‘C’, ‘D’]
values = [10, 20, 15, 25]
colors = [‘red’, ‘blue’, ‘green’, ‘orange’]

ax.bar(categories, values, color=colors)

119
Q

Hur kan man ändra storleken och utseendet på en scatterplot?

A

s och marker
ax.scatter(x, y, s=STORLEK, marker=’TYPE’)

Ex.
ax.scatter(x, y, s=10, marker=’x’)

120
Q

Kan man göra diagram direkt med Pandas?

A

Ja.

df.plot()
df.hist()
df.boxplot()
osv.
df: Den DataFrame man har skapat

Ex.
df = pd.DataFrame(data={‘Year’: [2010, 2012, 2014, 2016, 2018, 2020, 2022, 2024], ‘Antal’: [10, 20, 60, 50, 70, 30, 20, 5]})

df.plot(‘Year’)

121
Q

Har Python inbyggda funktioner för grafikhantering och/eller gränssnitt?

A

Nej.

Man måste installera och importera externa bibliotek.

122
Q

Grafikbibliotek

A

Bibliotek skapade för ren grafik och visualisering.

Passar program som fokuserar på grafiska presentationer såsom spel och liknande.

Ex. Turtle, Pygame, Arcade

123
Q

GUI (Graphical User Interface) Bibliotek

A

Bibliotek skapade för att bygga grafiska gränssnitt.

Uppbyggt kring knappar, formulär, olika kontroller för interaktion, m.m.

Passar program som är uppbyggda kring interaktioner med användaren via formulär, knappar och liknande kontroller.

124
Q

Turtle

A

Grafikbibliotek (skapat i utbildningssyfte)

Ritar på skärmen genom att styre en “sköldpadda”.

Fungerar utmärkt för: enkla spel, ritningar, matematiska mönster, m.m.

Den utgår från ett koordinatsystem med (0,0) i mitten.

Viktigt att tänka på:
import turtle
turtle.done()
Döp inte filen till turtle.py

Ex.
ture = turtle.Turtle() # Döp turtlen du skapar
ture.forward(100) # Framåt 100 steg
ture.backward(100) # Bakåt 100 steg
ture.right(90) # Vänd åt höger 90°
ture.left(90) # Vänd åt vänster 90°
ture.goto(50, 50) # Gå direkt till (50, 50)

125
Q

Animering

A

Följer en loop.

Visa ett objekt
Ta bort objektet
Ändra egenskaper (position, ev. ny bildruta)
Visa objektet igen

126
Q

Vad för bibliotek kan man använda för Animering och Spel (Spelbibliotek)?

A

Pygame och Arcade.

Kommer ofta med stöd för game loop eller inbyggd funktionalitet som gör samma sak.

Kommer ofta med stöd för animering av objekt i form av spriters eller liknande.

Det går att göra enkla animeringar med Turtle, men det är inte idealt för ändamålet (bilden flimrar, man måste skapa egen loop)

127
Q

Pygame

A

Grafik.
Största spelbiblioteket för Python.

Ingen inbyggd loop, men optimerad för att skapa egen.

import pygame
import sys

Ex. Skapar ett fönster med en rektangel som du kan flytta på.
import pygame
import sys

Initialize Pygame
pygame.init()

Set up the screen
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption(“Simple Pygame Example”)

Set up colors
WHITE = (255, 255, 255)
RED = (255, 0, 0)

Set up the rectangle
rect_width = 50
rect_height = 50
rect_x = (screen_width - rect_width) // 2
rect_y = (screen_height - rect_height) // 2
rect_speed = 5

Main game loop
running = True
while running:
# Event handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

# Get the state of all keys
keys = pygame.key.get_pressed()

# Move the rectangle based on arrow key presses
if keys[pygame.K_LEFT]:
    rect_x -= rect_speed
if keys[pygame.K_RIGHT]:
    rect_x += rect_speed
if keys[pygame.K_UP]:
    rect_y -= rect_speed
if keys[pygame.K_DOWN]:
    rect_y += rect_speed

# Fill the screen with white color
screen.fill(WHITE)

# Draw the rectangle
pygame.draw.rect(screen, RED, (rect_x, rect_y, rect_width, rect_height))

# Update the display
pygame.display.flip()

# Cap the frame rate
pygame.time.Clock().tick(30)

Quit Pygame
pygame.quit()
sys.exit()

128
Q

Arcade

A

Grafik.
Spelbibliotek för Python.
Modernare än Pygame.

Har en inbyggd game loop.

129
Q

Jämför Pygame och Arcade

A

Båda är spelbibliotek för Python (Grafik).
Pygame:
- Mycket populärt (= lätt att hitta information om)
- Något knöligare att använda (inte lika modernt som Arcade)
- Spretig dokumentation

Arcade:
- Inte riktigt lika populärt (= svårare att hitta information om)
- Lättare att använda och mer modern design
- Utmärkt dokumentation

130
Q

Vad är GUI bibliotek ofta uppbyggda kring?

A

Widgets.

Knappar, formulär, kontroller, etc.

Används som byggstenar när man skapar UI:t till sitt program.

131
Q

Native GUI

A

Använder de inbyggda GUI-komponenter som tillhandahålls av operativsystemet eller det programmeringsramverk som används.

Använder plattformens inbyggda GUI-bibliotek.

Samma utseende på resterande program på plattformen

Bra för:
Standardprogram som användaren vill ska matcha andra program på datorn.
Ex. Ordbehandling m.m.

132
Q

Egendesignat GUI

A

Skapar eget utseende på fönster och kontroller.

Ser likadant ut oavsett vilken plattform man kör det på.

Bra för:
Program som behöver se likadana ut på alla plattformar.
Ex. Spel, Spotify, Discord, Slack, etc.

Vanligt med Tkinter som är med standardinstallationen men måste importeras
import tkinter as tk

Andra GUI-bibliotek måste installeras innan import

133
Q

Ge exempel på GUI-bibliotek som kan användas för Custom GUI

A
  1. Tkinter
    - Fungerar bra för enkla saker
    - Daterat utseende
    - Cross-plattform och väldigt enkelt
    Inget stöd för mobila enheter
  2. PySimpleGUI
    - Bygger på TkInter men med förenklad kod
    - Något snyggare utseende
    - Finns en del teman
    Inget stöd för mobila enheter
  3. Kivy
    - Fokuserat på mobil och touchkontroller
    - Funkar även på desktop
    - Färdiga program kan relativt enkelt packas ner till appar som fungerar på Windows, Mac, Linux, Android, iOS
    Stöd för mobila enheter
  4. Flet
    - Ramverk från Google (använder Material Design)
    - Baserat på Flutter (ett UI-programutvecklingskit med öppen källkod skapat av Google)
    - Använder sig av programmeringsspråket Dart
    - Låter en koda i Python men omvandlar till “riktigt” Flutter i bakgrunden
    - Enklare att använda än Flutter
    - Främst för mobil eller mobilliknande UI:n, men passar även utmärkt för desktop (till och med web)
    - Byggs med “controls” (Flutterwidgets)
    Stöd för mobila enheter
134
Q

Har GUI bibliotek stöd för grafik?

A

Ja. Trots att GUI-bibliotek är
fokuserade på UI så har alla visst stöd för ren grafik.

De använder Canvas-element vilket är en HTML-elementtyp som tillhandahåller en yta för att rita grafik med hjälp av JavaScript.

Canvas-element (widgets, controls)
låter en skapa upp en “målarduk” på
vilken man kan rita enklare grafik.

135
Q

Ge exempel på GUI-bibliotek som kan användas för Native GUI

A
  1. QT for Python
    - Professionellt GUI baserat på Qt (universellt bibliotek som finns för många olika programmeringsspråk).
    - Cross-Platform (även mobila enheter)
136
Q

Rekursion

A

En programmeringsteknik där en funktion kallar sig själv i sin egen definition.

Det är vanligt i Python och används för att lösa problem som kan delas upp i mindre delproblem av samma typ.

Ex. En funktion som bekräknar faktoriell av ett tal.
Faktoriell: En matematisk term som används för att beskriva produkten av ett heltal och alla positiva heltal som är mindre än det
5! = 5 * 4 * 3 * 2 * 1 = 120

def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)

print(factorial(5))
# Output: 120

f(5) =
5 * f(4) =
5 * 4 * f(3) =
5 * 4 * 3 * f(2) =
5 * 4 * 3 * 2 * f(1) =
5 * 4 * 3 * 2 * 1 = 120

137
Q

Vad är viktigt att ha med i en rekursiv funktion?

A

Det är viktigt att det finns med ett termineringsvillkor i rekursiva funktioner.
M.a.o ett “basfall” där funktionen INTE anropar sig själv.
- Detta för att programmet inte ska krascha

138
Q

Vad är några steg involverade i processen att lösa problem inom AI?

A
  1. Definiera problemutrymmet:
  • Detta innebär att förstå och tydligt definiera problemet som ska lösas.
  • Det kräver att man identifierar alla relevanta komponenter och begränsningar i problemet.
    -Representation av problemet: Detta involverar att välja en lämplig representation för problemet, som kan vara symbolisk, numerisk eller någon annan form som passar problemet bäst.
  • Kartläggning till datastrukturer: Efter att ha definierat problemet måste det översättas till en form som kan bearbetas av en dator. Detta innebär att välja eller skapa lämpliga datastrukturer för att representera informationen som krävs för att lösa problemet.
  1. Sökning:
  • Representation av “tillståndsutrymmet”: För att hitta lösningar på problemet måste alla möjliga tillstånd eller steg som systemet kan befinna sig i representeras. Detta kan göras genom att skapa ett tillståndsdiagram eller en annan lämplig struktur.
  • Hur man hittar möjliga lösningar: När tillståndsutrymmet är definierat måste algoritmer utvecklas för att navigera genom detta utrymme och hitta lösningar.
  • Vilka “drag” som kan göras: Detta innebär att identifiera de handlingar eller förändringar som kan göras i systemet för att förflytta sig från ett tillstånd till ett annat.
  • Hur datastrukturer kan manipuleras: Under sökningen kan datastrukturer manipuleras för att hålla reda på upptäckta tillstånd, utvärdera potentiella drag och göra beslut om vilken väg som ska tas för att närma sig en lösning
139
Q

Vad är elementen som definierar ett State-Space?

A
  1. Formell representation av möjliga tillstånd i en problem lösning (vanligtvis ett träddiagram)
  2. Operatorer för att generera nya tillstånd (new states) från ett givet tillstånd (given state)
  3. Något sätt att känna igen ett måltillstånd (goal state)
  4. En startpunkt (start state) för problemet, representerad som roten (the root) av grafen.
140
Q

Hur kan vi representera en problem space för exempelvis ett labyrinth?

A

Vi kan skapa en lista med rader och kolumner.

Ex.
maze = [
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 1],
[0, 0, 0, 0, 0]
]

Varje lista representerar en rad i labyrintet. Inom varje rad finns det element som representerar kolumnerna. 0 representerar en tom yta man kan röra sig igenom och 1 representerar en vägg man inte kan gå igenom.

Sedan kan man komma åt individuella element genom indixes.
Ex. maze[0,0] ger elementer på första raden, vilket är 0 i detta fall.

141
Q

Binärt Träd (Binary Tree)

A

Ett binärt träd är en hierarkisk datastruktur som består av noder som är ordnade i en speciell ordning.

Varje nod har högst två “barn” som vanligtvis kallas för vänster och höger barn.

Ett binärt träd implementeras i Python med hjälp av objektorienterad programmering.

Begrepp
1. Rotnod
2. Barnnod
3. Föräldernod
4. Lövnod
5. Terminalnod
6. Subträd

Ex.
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None

class BinaryTree:
def __init__(self, root_data):
self.root = Node(root_data)

Skapar ett binärt träd med rotvärde 1
# 1
# / \
# None None
tree = BinaryTree(1)

Lägger till vänster och höger barn till rotnoden
tree.root.left = Node(2)
tree.root.right = Node(3)

Nu ser trädet ut så här:
# 1
# / \
# 2 3

142
Q

Rotnod

A

Binary Trees.
Den översta noden i trädet som fungerar som startpunkten för strukturen

143
Q

Barnnod

A

Binary Trees.
Noder som är direkt anslutna till en föräldernod

144
Q

Föräldernod

A

Binary Trees.
En nod som har en eller flera barnnoder.

145
Q

Lövnod

A

Binary Trees.
En nod som inte har några barnnoder, vilket innebär att det är en terminalnod längst ner i trädet

146
Q

Subträd

A

Binary Trees.
Ett träd som är en del av ett större träd och består av en nod och dess efterföljande barn och dessas barn.

147
Q

Terminalnod

A

Binary Trees.
En terminalnod i ett binärt träd är en nod som inte har några barnnoder.

Det är en lövnod längst ner i trädet.

Terminalnoder har inga ytterligare grenar som förlänger sig från dem.

I ett binärt träd representerar terminalnoder de slutliga dataelementen eller lövdata som inte behöver ytterligare bearbetning eller fördjupning.

De kan ses som “slutpunkterna” i trädstrukturen

148
Q

Vad är skillnaden mellan grafer och träd?

A

I träd ska det finnas endast en väg (path) mellan två nodes.
Ex. Mormor → Åse → Fanny

I en graf kan det finnas flera vägar mellan noder.
Ex. Mumbai → Paris → New York
Mumbai → Paris → Dubai → New York
Mumbai → Dubai → New York

149
Q

Riktad Graf (Directed Graph)

A

En grafisk struktur där bågarna (edges) mellan noderna har en riktning.

Detta innebär att det finns en tydlig skillnad mellan start-och slutnod för varje kant.

Ex. Flight Routes (Flygrutter)
Mumbai → Paris → New York

Ex. One-Way Streets

150
Q

Oriktad Graf (Undirected Graph)

A

En grafisk struktur där bågarna (edges) mellan noder inte har någon riktning.

Det betyder att förbindelserna mellan noderna är symmetriska och kan representeras som icke-riktade linjer.

Ex. Facebook kontakt nät
Fanny - Åse - Maria

Ex. Two-Way Streets

151
Q

Viktad Graf (Weighted Graph)

A

En viktad graf är en grafisk struktur där varje båge (edge) har en vikt eller ett värde associerat med den.

Dessa vikter representerar vanligtvis en viss egenskap hos förbindelsen mellan noderna, såsom längden på en väg, kostnaden för en transportrutt, kapaciteten för en ledning, eller någon annan måttenhet som är relevant för det specifika problemet.

Ex. Flygrutter
1. Mumbai → (4000) Paris → (3000) New York (7000)
2. Mumbai → (500) Dubai → (6000) New York (6500)
3. Mumbai → (5000) Boston → (200) Hartford → (100) New York (5120)
Rutt 3 är kortast väg i km

152
Q

Grafsökning

A

En process för att uforska och navigera genom noder och bågar i en graf för att hitta specifika mål, upptäcka mönster eller utföra olika operationer baserat på grafstrukturen.

Det finns flera olika algoritmer för grafsökning var och en med olika användningsområden och egenskaper.

  1. Breddförst Sökning (BFS)
    (Breadth-First Search)
  2. Djupförst Sökning (DFS)
    (Depth-First Search)
153
Q

Djupförst Sökning (DFS) / Depth-First Search

A

En grafsöknings algoritm som utforskar en gren av grafen så långt (djupt) det är möjligt innan den backar upp och fortsätter med en annan gren.

Den utforskar alltså så långt ner längs en gren som möjligt innan den backar upp.

Go deep before we go wider.

Ex. Grafstrukturer som innehåller labyrinter eller träd, där man vill utforska så långt ner i grenen som möjligt.

154
Q

Breddförst Sökning (BFS) / Bredth-First Search

A

En grafsöknings algoritm som söker igenom grafen i lagerordning (börjandes från en startnod).

Den utforskar alla grannar till den aktuella noden innan den går vidare till nästa lager av noder.

Go wider before we go deep.

Detta innebär att den först utforskar alla närliggande noder på djupet 1, sedan på djupet 2, och så vidare.

Ex. Hitta den kortaste vägen mellan två noder i en oviktad graf

155
Q

Cyklisk Graf

A

En grafisk struktur där det finns minst en cykel, vilket innebär en sekvens av noder och bågar som bildar en sluten slinga.

En cykel är en sekvens av noder där den sista noden är densamma som den första, och där varje nod är direkt ansluten till nästa nod i sekvensen via en båge.

En cyklisk graf kan vara riktad eller oriktad.

En cyklisk graf kan innehålla loopar, vilket är bågar som förbinder en nod till sig själv. Loopar bidrar till förekomsten av cykler i grafen.

Ex.
A —– B
| |
| |
D —– C

156
Q

Acyklisk Graf

A

En grafisk struktur som inte innehåller några cykler.

Det innebär att det inte finns någon sekvens av noder och bågar där den sista noden är densamma som den första, och där varje nod är direkt ansluten till nästa nod i sekvensen via en kant.

Ex. Trädstrukturer, DAG (Riktade Acykliska Grafer)

157
Q

Databas

A

En databas är en strukturerad samling av data som lagras och hanteras på ett sådant sätt att användarna kan söka, hämta, uppdatera och manipulera informationen på ett effektiv sätt.

Data i en databas organiseras vanligtvis i tabeller, där varje tabell representerar en specifik typ av information.

Tabellerna kan sedan ha kopplingar till varandra, vilket är vad som “skapar” databasen.

Ex. En tabell med Customer Information, en tabell med Product Information och en tabell med Order Information som hämtar information från de två andra tabellerna.

158
Q

Varför införde man relationsbaserade modeller (databaser)?

A

På grund av begränsningar i dokumentbaserade system.

159
Q

Vad byggs relationsdatabaser på?

A

Bygger på tabeller med inbördes relationer.

160
Q

DBMS (“Database Management System”)

A

En programvara/ett system som används för att lagra, hämta, manipulera och hantera data i en databas på ett effektivt och säkert sätt.

Det är programvaran som hanterar kopplingarna till databasen.

DBMS fungerar som en mellanhand mellan användarna och databasen, och det tillåter användarna att interagera med databasen genom att utföra olika operationer såsom att lägga till data, hämta data, uppdatera data och ta bort data.

161
Q

SQL (“Structured Query Language”)

A

Ett standardiserat programmeringsspråk som används för att interagera med relationella databaser.

Används för att prata med RDBMS (“Relational Database Management System”)

SQL möjliggör för användare att skapa, hämta, uppdatera och radera data från databaser samt att utföra olika typer av operationer och frågor för att manipulera och hantera databasens struktur och innehåll.

162
Q

Relationsdatabas/RDBMS (“Relational Database Management System”)

A

En typ av databas som organiserar data i tabeller med rader och kolumner, och relationer mellan tabellerna etableras genom att använda nycklar.

  • Tabeller: Data i en relationsdatabas lagras i tabeller.
  • Relationer: Relationer mellan tabeller etableras genom att använda nycklar.
  • SQL (Structured Query Language): SQL används för att kommunicera med och utföra operationer på en relationsdatabas.

Varje data har en egen kolumn eller fält (unikt namn)

Rader motsvarar entiteter som lagts in i tabellen.

163
Q

Vad måste varje tabell ha i en relationsdatabas?

A

Varje tabell måste ha primärnyckel (primary key). Det är en unik identifierar för varje post eller rad i en tabell.

Relationer till andra tabeller ges via främmande nyckel (foreign key).

164
Q

Primärnyckel (Primary Key)

A

En primärnyckel (Primary Key) är en unik identifierare för varje post eller rad i en tabell i en relationsdatabas.

Primärnyckeln används för att säkerställa att varje rad i tabellen är unik och kan användas för att söka, referera till och identifiera specifika poster i tabellen.

Används för:
- Identifiering
- Indexering

Ex. Användar-ID, produktnummer, beställningsnummer

165
Q

Främmande Nyckel (Foreign Key)

A

En främmande nyckel (foreign key) är en kolumn eller en uppsättning av kolumner i en tabell som refererar till primärnyckeln i en annan tabell.

Främmande nycklar används för att skapa relationer mellan tabeller i en relationsdatabas och definierar förbindelserna mellan olika poster i olika tabeller.

Ex. En tabell för Orders har en Primary Key Order_ID men tar även in Customer_ID från tabellen Customers. Customer_ID blir då en främmande nyckel i tabellen Orders som skapar en relation mellan beställningar och användarna.

166
Q

Vad för 3 relationstyper finns det för relationsdatabaser?

A
  1. One-To-One
    Varje post i den första tabellen är kopplad till exakt en post i den andra tabellen, och vice versa
  2. One-To-Many
    Varje post i den första tabellen kan vara kopplad till flera poster i den andra tabellen, men varje post i den andra tabellen är kopplad till exakt en post i den första tabellen
  3. Many-To-Many
    Flera poster i den första tabellen kan vara kopplade till flera poster i den andra tabellen, och vice versa.
167
Q

One-To-One Relationstyp

A

Relationsdatabaser.
En “one-to-one” relation är en typ av relation mellan två tabeller i en relationsdatabas där varje post i den första tabellen är kopplad till exakt en post i den andra tabellen, och vice versa.

Med andra ord, varje post i den första tabellen är unikt associerad med en enda post i den andra tabellen, och vice versa.

Ex. En “Customers” tabell innehåller grundläggande information om kunder, medan en “CustomerDetails” tabell innehåller mer detaljerad information om varje kund.
Varje kund i “Customers” tabellen är kopplad till exakt en rad i “CustomerDetails” tabellen och vice versa.

168
Q

One-To-Many Relationstyp

A

Relationsdatabaser.

En “one-to-many” relation är en typ av relation mellan två tabeller i en relationsdatabas där varje post i den första tabellen kan vara kopplad till flera poster i den andra tabellen, men varje post i den andra tabellen är kopplad till exakt en post i den första tabellen.

Med andra ord, en entitet i den första tabellen kan ha flera relaterade entiteter i den andra tabellen, men varje entitet i den andra tabellen är kopplad till endast en entitet i den första tabellen.

Ex. En användare kan göra flera blogginlägg (men varje blogginlägg tillhör en användare).

169
Q

Stack Overflow Error

A

Ett körningsfel (Exekveringsfel/Runtime Error)

Inträffar vanligtvis när ett programs anropstack överskrider dess maximala storlek.

Ex. Detta kan hända på grund av oändlig rekursion eller djup rekursion, där funktioner anropar sig själva för många gånger utan ett avslutningsvillkor

170
Q

Vad för syntax behöver vi ha för att koda en databas med SQLite?

A
  1. Importera SQLite
    import sqlite3
  2. Skapa databasen
    connection = sqlite3.connect(“namn.db”)
  3. För att skriva med SQLite måste vi ha ett cursor “objekt” som faktiskt pratar med databasen
    #Alla våra kommandon till databasen går genom cursor
    cursor = connection.cursor()
  4. Skapa tabell
    cursor.execute(“create table NAMN (NAME_VALUE, …”)
  5. Data
    Ex. En lista med tuplers
  6. Lägg in data i tabellen
    cursor.execute(“insert into NAMN values (?, …)”, DATA)
  7. Stäng databasen
    connection.close()
171
Q

SQLite kommando för välja alla (select all)

A

*

172
Q

Vad är syntaxen för SQL Query Syntax (Basic)?

A

i. SELECT [* | DISTINCT] column1 [,column2]
ii. FROM table1 [,table2]
iii. [WHERE “conditions”]
iiii. [GROUP BY “column-list”]
iv. [HAVING “conditions”]
vi. [ORDER BY “column-list” [ASC | DESC] ] ;

i. SELECT: This is the keyword used to retrieve data from a database. You specify the columns you want to retrieve after the SELECT keyword. You can also use * to select all columns.
- DISTINCT: This is optional. If included, it ensures that the returned rows are unique. It eliminates duplicate rows.

ii. FROM: This specifies the tables from which you want to retrieve data.

iii. WHERE: This is used to specify conditions that must be met for the rows to be included in the result set. It filters rows based on the given conditions.

iiii. GROUP BY: This is used to group the result set by one or more columns. It’s typically used with aggregate functions like SUM, AVG, COUNT, etc., to perform calculations on groups of rows.

v. HAVING: This is similar to the WHERE clause but applies to groups as a whole rather than individual rows. It filters groups based on the given conditions.

vi. ORDER BY: This is used to sort the result set based on the specified column(s). You can specify whether to sort in ascending (ASC) or descending (DESC) order

: means “or”

173
Q

Hur gör vi för att skriva ut alla filmer som är släppta efter år 2000 med SQLite?

A

for row in cursor.execute(“select FILMER from TABELL where ÅR > 2000):
print(row)

174
Q

cursor.fetchall()

A

SQL
En metod som används för att hämta alla rader som matchar den utförda frågan.

Om du inte använder fetchall() (eller någon annan metod för att hämta resultaten), kommer SQL-frågan fortfarande att utföras mot databasen, men du kommer inte att hämta några resultat från databasen för att använda dem vidare i din kod.

Om du inte hämtar resultaten på något sätt kommer din kod bara att utföra frågan mot databasen utan att göra något med det resultat som returneras.

Ex.
cursor.execute(“select * from gta where city=:c”, {“c”: “Liberty City”})
gta_search = cursor.fetchall()
print(gta_search)

175
Q

När använder man cursor.execute() jämfört med cursor.executemany()?

A
  1. cursor.execute() används för att köra en enstaka SQL-fråga. Du anger SQL-frågan som en sträng som ett argument
    Ex.
    cursor.execute(“INSERT INTO table_name (column1, column2) VALUES (?, ?)”, (value1, value2))
  2. cursor.execute() används för att köra samma SQL-fråga flera gånger med olika uppsättningar av parametrar. Du anger SQL-frågan som en sträng och en lista eller tupel av tuplar som innehåller parametrarna för varje iteration.
    Ex.
    data = [(value1_1, value2_1), (value1_2, value2_2), …]
    cursor.executemany(“INSERT INTO table_name (column1, column2) VALUES (?, ?)”, data)
176
Q

Hur skapar vi en tabell med SQL?

A

Create Table kommandot i cursor.

cursor.execute(“create table TABLE_NAME (COLUMN1 DATATYPE1, ….)”)

Ex.
cursor.execute(“create table gta (release_year integer, release_name text, city text)”)

177
Q

Vad för information behöver stå med när vi skapar en tabell i SQL?

A

Datatyp måste stå med.

Integer, Text, Float, etc.

Ex.
cursor.execute(“create table gta (release_year integer, release_name text, city text)”)

178
Q

Hur lägger vi in data i en tabell i SQL?

A

Insert Into kommandot i cursor.

  1. Enstaka SQL-frågor
    cursor.execute(insert into TABLE_NAME (COLUMN1, …) values (?, …)”, (VALUE1, …))
  2. Samma SQL-fråga flera gånger
    data = [(…,…), (…,…)]
    cursor.executemany(insert into TABLE_NAME (COLUMN1, …) values (?, …)”, data)
179
Q

Vad returneras när du utför en förfrågan (query) mot en databas i Python?

A

Den returneras som en lista med tupler.

Ex.
cursor.execute(“select * from gta where city=:c”, {“c”: “Liberty City”})
gta_search = cursor.fetchall()
print(gta_search)

Ger
[(2001, ‘Grand Theft Auto III’, ‘Liberty City’), (2008, ‘Grand Theft Auto IV’, ‘Liberty City’)]

180
Q

Hur gör man för att hämta unika värden från en specifik kolumn i en tabell med SQL?

A

Man använder Distinct i Select

Unika värden innebär ett av värdena ifall det finns dubbletter

cursor.execute(select distinct KOLUMNNAMN from TABELL_NAMN)

Ex.
cursor.execute(“INSERT INTO users (name) VALUES (‘Alice’)”)
cursor.execute(“INSERT INTO users (name) VALUES (‘Bob’)”)
cursor.execute(“INSERT INTO users (name) VALUES (‘Alice’)”)

cursor.execute(“SELECT DISTINCT name FROM users”)

Detta ger
Alice
Bob

181
Q

Vad är “första” (primary) regeln för Binära Träd (Binary Trees)?

A

Dem kan ha max 2 barn (children)
(0-2 barn)

Dem kan även inte vara cykliska

182
Q

Binary Search Tree

A

En datastruktur som används för att lagra och hantera data på ett sätt som gör det effektivt att söka, lägga till, ta bort och sortera element.

I ett binärt sökträd är varje nod i trädet organiserad på ett sätt som gör att alla värden i den vänstra delträdet till en nod är mindre än nodens värde, och alla värden i den högra delträdet är större än (eller lika med) nodens värde.

Det är rekursivt (recursive).

Detta mönster gör det möjligt att snabbt söka efter specifika värden genom att jämföra dem med nodvärden och följa lämpliga grenar i trädet.

183
Q

Traverse

A

Att “traverse” i sammanhanget med binära sökträd betyder att gå igenom alla noderna i trädet på ett systematiskt sätt.

Det finns olika sätt att traversera ett binärt sökträd, och de vanligaste metoderna är.

  1. Inorder-Traversal
  2. Preorder-Traversal
  3. Postorder-Traversal
184
Q

Inorder-Traversal

A

Vid inorden-traversering besöks noderna i en binärträd i följande ordning: vänster delträd, rot, höger delträd.

Med andra ord besöks för varje nod först dess vänster barn, sedan noden själv och slutligen dess högra barn.

I ett binärt sökträd (BST) besöker inorden-traversering noderna i sorterad ordning.

Ex.
1
/ \
2 3
ger 2, 1, 3

185
Q

Pre-Order Traversal

A

Vid Pre-Order Traversal besöks noderna i en binärträd i följande ordning: rot, vänster delträd, höger delträd.

Det vill säga för varje nod besöks noden själv först, sedan dess vänster barn och slutligen dess högra barn.

Ex.
1
/ \
2 3
ger 1, 2, 3

186
Q

Post-Order Traversal

A

Post-Order Traversal besöker noderna i en binärträd i följande ordning: vänster delträd, höger delträd, rot.

För varje nod besöks först dess vänster barn, sedan dess högra barn och slutligen noden själv.

Ex.
1
/ \
2 3
ger 2, 3, 1

187
Q

Är Private och Protected strikta åtkomstmodifikatorer i Python?

A

Nej. I Python används dessa som konventioner för att indikera avsikten med variabler och metoder.

188
Q

Vad är skillnaden mellan Private och Protected variabler/metoder?

A

Private: __variabelNamn
(_ClassName__variabelNamn)
De kan inte kommas åt utanför den klass som definierar dem (inte heller dess subklasser)

Protected: _variabelNamn
Ska endast användas inom klassen själv eller dess subklasser

189
Q

Hur visar/ser vi att en klass är en abstraktion?

A

Genom att den i klassdiagramet (UML) är skriven i Italics eller «klassnamn»

Ex. «Animal»

190
Q

Vilka typer av fel kan Stegvis Förfining (Stepwise Refinement) förebygga?

A
  1. Stegvis förfining gör att vi kan minska logiska fel genom att vi har en tydlig plan först. De logiska felen kan vara svåra att hitta så med stepwise refinement kan man testa att en del fungerar innan man går vidare.
  2. Gör även att vi snabbare och lättare kan åtgärda exekveringsfel då man vet var i koden det inte fungerar.
191
Q

Inner Join

A

Det som är gemensamt mellan två tabeller.

“Only returns connected, matching rows”

SELECT * FROM left_table INNER JOIN right_table ON left_table.foreignkey = right_table.primary key

Ex.
Transactions: transaction_id, amount, customer_id
Customers: customer_id, first_name, last_name

SELECT * FROM transactions INNER JOIN customers ON transactions.customer_id = customers.customer_id

Ger en tabell:
transaction_id - amount - customer_id - customer_id - first_name - last_name

Detta ger all information från dessa två tabeller som har matchande customer_id

Transaction: 100, 150kr, 123
Customer: 123, “fanny”, “bogren”

100 - 150 - 123 - “fanny” - “bogren”

Ex. Man kan också välja att få fram specifika kolumner istället för alla kolumner
cursor.execute(“SELECT order_id, name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id”)

192
Q

Vid ett Select statement i SQL, när måste man skriva tabellnamn.variabel_namn istället för enbart variabel_namn?

A

Om samma variabel finns i flera tabeller. Det innebär att variabeln är ambigious.

Ex.
Transactions: transaction_id, amount, CUSTOMER_ID
Customers: CUSTOMER_ID, first_name, last_name

SELECT transaction_id, first_name FROM transactions INNER JOIN customers ON transactions.customer_id = customers.customer_id
Detta är ok då dessa variabler finns i varsin lista

Ex.
SELECT customer_id FROM transactions INNER JOIN customers ON transactions.customer_id = customers.customer_id
Detta går INTE eftersom cusomter_id finns i båda tabellerna.
Vi måste skriva

193
Q

Left Join

A

En “LEFT JOIN” är en typ av sammanslagning (join) i SQL som används för att kombinera rader från två tabeller baserat på en gemensam kolumn, och den returnerar alla rader från den vänstra tabellen (första tabellen som nämns i frågan), även om det inte finns några matchande rader i den högra tabellen (andra tabellen).

“Returns all connected rows, and unconnected rows from the left table (even nulls in right)”

SELECT *
FROM vänster_tabell
LEFT JOIN höger_tabell ON vänster_tabell.gemensam_kolumn = höger_tabell.gemensam_kolumn;

Ex.
cursor.execute(“SELECT * FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id”)
(4, ‘Emily Brown’, ‘emily.brown@example.com’, None, None, None)
(5, ‘David Wilson’, ‘david.wilson@example.com’, 103, ‘5’, 100)

194
Q

Right Join

A

En “RIGHT JOIN” är en typ av sammanslagning (join) i SQL som liknar en LEFT JOIN, men den returnerar alla rader från den högra tabellen (andra tabellen som nämns i frågan), även om det inte finns några matchande rader i den vänstra tabellen (första tabellen som nämns i frågan).

Om det inte finns någon matchning i den vänstra tabellen kommer NULL-värden att visas för kolumnerna i den vänstra tabellen i resultatet.

“Returns all connected rows, and unconnected rows from right table (even nulls in left)”

SELECT *
FROM vänster_tabell
RIGHT JOIN höger_tabell ON vänster_tabell.gemensam_kolumn = höger_tabell.gemensam_kolumn

Ex.
cursor.execute(“SELECT * FROM orders RIGHT JOIN customers ON orders.customer_id = customers.customer_id”)

(105, ‘3’, 300, 3, ‘Michael Johnson’, ‘michael.johnson@example.com’)
(None, None, None, 4, ‘Emily Brown’, ‘emily.brown@example.com’)