En praktisk implementation av ett rekommendationssystem

Storlek: px
Starta visningen från sidan:

Download "En praktisk implementation av ett rekommendationssystem"

Transkript

1 Konsten att välja En praktisk implementation av ett rekommendationssystem Projektarbete Artificiell intelligens Patricia Lindblad 729G43 729G43 patli010!1

2 1. Introduktion Vad är ett rekommendationssystem? Kollaborativ filtrering Innehållsbaserad filtrering 4 2. Implementation Kollaborativa rekommendationer Innehållsbaserade rekommendationer Kombinerade rekommendationer 6 3. Reflektioner Resultat Betygsskalor Attribut Grannskapets rekommendationer Hybridsystem 8 4. Källor 9 5. Bilagor Bilaga A - Exempel på rekommendation Bilaga B - Kod för rekommendationssystemen Bilaga C - Kod för Movie-klassen Bilaga D - Kod för User-klassen G43 patli010!2

3 1. Introduktion I dagsläget finns så mycket material (eng. content) tillgängligt för varje internetanvändare att det är omöjligt att tillgodogöra sig allt. Bara på YouTube i juni 2015 laddades det upp 400 timmar material varje minut, och antalet uppladdat material har ökat exponentiellt de senaste 10 åren ( Hours of video, 2018). När det finns mycket material att välja på för användaren finns det en valfrihet, men för mycket material kan tvärtom vara begränsande. Det material användaren egentligen är intresserad av drunknar i mängderna av annat material, eller så uppstår det en Too much choice - effekt. Där användaren blir så överväldigad av antalet alternativ att den inte väljer någonting alls (Scwartz, 2006). Till exempel om Netflix utbud hade varit en lång lista med alla tillgängliga filmer, eller om Amazon.com listade sina produkter i alfabetisk ordning skulle själva akten att göra ett val kunna bli för betungande för användaren, som då istället skulle avstå från att göra ett val över huvud taget. För att hjälpa användarna att sålla denna enorma mängd tillgängligt material, och för att eventuellt öka försäljningen med ett uppskattat 10-25% (Recommender Systems, 2015) konstruerades rekommendationssystem, som systematiskt sållar det tillgängliga materialet åt användaren, och parar ihop användare med material eller artiklar Vad är ett rekommendationssystem? Rekommendationssystem används inom industrin för att koppla samman användare (eng. users) med artiklar (eng. items). Systemet kan antingen föreslå ett topantal artiklar för en specifik användare, eller för varje artikel föreslå ett top-antal användare som kan vara intresserade av artikeln. Att föreslå top-antal artiklar är dock vanligare, trots att algoritmerna är spegelvänt identiska (Aggarwal, 2016). Det finns många olika sätt att bygga rekommendationssystem. Två av de enklaste är kollaborativ (eng. collaborative) och innehållsbaserad (eng. content-based) filtrering Kollaborativ filtrering En kollaborativ filtreringsmetod kan också kallas för en grannskapsbaserad filtrering (eng. neighbourhood-based filtering). Metoden bygger på att användare som tidigare betygsatt artiklar med samma betyg med stor sannolikhet också kommer tycka samma 729G43 patli010!3

4 sak om icke betygsatta artiklar. De användare som ingår i samma kluster ingår då i varandras grannskap. Exempel: Anna har sett filmerna X, Y och Z. Bo har också sett filmerna X och Y, men inte Z. Anna och Bo har betygsatt filmerna X och Y likadant, se tabellen nedan. X Y Z Anna Bo 3 1? Vi vet inte vad Bo tycker om film Z eftersom han inte betygsatt den. Däremot vet vi att Anna tyckte mycket om film Z då hon gav den högsta betyg (5). Eftersom att Anna om Bo har betygsatt filmer likadant tidigare är det hög sannolikhet att de kommer tycka likadant om film Z också. Eftersom Anna tyckte mycket om film Z rekommenderas film Z till Bo Innehållsbaserad filtrering Den innehållsbaserade filtreringen utgår från användarens egna betygsättningar. Artiklar som fått högt betyg av användaren har en uppsättning attribut. Andra artiklar som har samma attribut rekommenderas till användaren. Ju fler likadana attribut artiklarna har, desto starkare blir rekommendationen. Ett till filmexempel: I exemplet nedan har Bo sett filmen Shrek och gett den högsta betyg. Alla de tre andra filmerna i biblioteket får en uppsättning attribut med binära värden för att enkelt kunna jämföra filmerna. Animerad Musik Barn OK IMDB > 8 Shrek JA JA JA NEJ Ex Machina NEJ NEJ NEJ NEJ Blues Brothers NEJ JA JA NEJ Hitta Nemo JA NEJ JA JA Eftersom Bo satte högsta betyg på Shrek är det relevant att hitta filmer som liknar Shrek att rekommendera till Bo. Därför jämförs attributen från olika filmer för att se vilken film som mest liknar Shrek. 729G43 patli010!4

5 Shrek och Ex Machina har 1 gemensamt attribut Shrek och Blues Brothers har 3 gemensamma attribut Shrek och Hitta Nemo har 2 gemensamma attribut Den film som bäst liknar användarens tidigare uttryckta preferens och kommer att rekommenderas är alltså Blues Brothers. 2. Implementation Jag byggde två enkla varianter på rekommendationssystem, som rekommenderar filmer utifrån ett dataset kallat MovieLens. MovieLens finns tillgängligt på internet tack vare forskargruppen GroupLens vid University of Minnesota. Datasetet innehåller betygssättningar på filmer av 700 användare, och filmerna är annoterade med attribut. Datasetet består av två separata csv-filer. Den första innehåller [FilmId, FilmTitel, Attribut], den andra [AnvändarId, FilmId, Betyg, Tidstämpel]. Mina rekomendationssystem består av två delar, en kollaborativ och en innehållsbaserad som presenteras nedan Kollaborativa rekommendationer För att skapa en given användares grannskap jämfördes användaren med alla andra användare, och fick matchningspoäng för varje film de gett samma betyg. De 10 användare som fick högst matchningspoäng ansågs vara samma typ av användare som den givna användaren, och ingick då i den givna användarens grannskap. Alla betygsättningar dessa tio gjort räknades samman med de andra betygssättningarna för samma film av de andra användarna i grannskapet och sedan dividerades summan på antalet som betygsatt filmen. Detta gav ett genomsnittsbetyg för varje film. Exempel: om film A fått högsta betyg (5) av 1 användare i grannskapet får film A 5 totala poäng (5 1). Om film B har setts av alla de andra i grannskapet och fått betyg 1 av alla i grannskapet får film B 1 poäng totalt ((1 10) 10). Om film C får blandade omdömen av hälften av grannskapet kan det se ut som följer: = 17, 17 5 = 3. 4 poäng totalt. Funktionen returnerade de 10 filmer med högst genomsnittsbetyg. 729G43 patli010!5

6 2.2. Innehållsbaserade rekommendationer För en given användare sparas de filmer som fått betyg 4.0 eller högre av användaren. Dessa anses vara användarens favoritfilmer. Alla filmer är sedan tidigare annoterade med genrer, vilket här är filmens attribut. För alla favoritfilmer viktas alla attribut efter hur många gånger de förekom totalt bland alla favoritfilmer. Alla filmer i filmbiblioteket får ett totalbetyg baserat på vikterna av sina attribut. Till exempel: om 5 av Annas favoritfilmer är annoterade med "Action", och två är annoterade med "Comedy" så får en film annoterad med "Action" +5 poäng, en film med "Comedy"+2 poäng och en film med både "Action" och "Comedy"+7 poäng. Om attributet Romance inte förekom alls bland Annas favoritfilmer får en film annoterad med Romance +0 för det attributet. Funktionen returnerade de 10 filmer med högst betyg Kombinerade rekommendationer Slutligen anropades de båda funktionerna ovan, och rekommenderade en slutgiltig lista på filmer baserat på användarens uttryckta preferenser och kollaborativa grannskap i en och samma rekommendation. Ett exempel på en retur från systemen finns i bilaga A - Exempel på rekommendation. 3. Reflektioner Nedan följer några reflektioner kring hur arbetet skulle kunna utvecklas i ett framtida projekt Resultat Resultatet är svårt för mig personligen att bedöma, eftersom en bra rekommendation är kvalitativ snarare än kvantitativ. Rekommendationssystemen levererar ofelbart titeln på 20 filmer varje gång koden körs. Dock har jag inte sett alla filmer, och inte heller vet jag vem användaren är, och vilka filmer av de rekommenderade denna skulle tycka om. Rent matematiskt och logiskt gör koden det den ska. Hur bra 729G43 patli010!6

7 rekommendationerna sedan är beror också på om de grundantaganden som gjordes i början är korrekta. Till exempel att användare som har satt samma betyg tidigare kommer göra det i fortsättningen. För en utveckling av det här projektet skulle det kunna implementeras en funktion som specificerar vad rekommendationen baseras på. Någonting i stil med Du såg The Hunger Games, då kanske du gillar. En sådan funktion skulle förbättra användarupplevelsen (Aggarwal, 2016) och göra det lättare att bedöma rekommendationens rimlighet Betygsskalor Det finns olika varianter på möjliga betygsskalor rekommendationssystem kan använda sig av. I MovieLens uttrycks betygen på en 10-gradig skala från 0 till 5.0. Användarens betyg behöver alltså inte vara ett heltal, utan betyg som 3.5 är godkända värden. Min tolkning är att den här skalan enbart uttrycker grader av gillande, och att det inte finns någon metod för användaren att uttrycka sitt specifika ogillande för en artikel. Dock hade man kunnat tolka betyg 3.0 som neutralt, 5.0 som starkt gillande och 1.0 som starkt ogillande. Då hade rekommenderaren kunnat aktivt undvika att rekommendera attribut associerade med ogillade filmer. I den nuvarande koden är betyg 1.0 fortfarande en form utav gillande Attribut I det här fallet var en films attribut enbart en lista på genrer. Dock finns det många aspekter av en film som kan avgöra vad användaren tycker om filmen, och som skulle kunna avgöra huruvida användaren vill se en film eller inte. Attribut som Favoritskådespelare, Lyckligt slut eller Bra filmmusik skulle behövas hållas i åtanke för att göra ännu bättre rekommendationer. Mer detaljerade attribut skulle ge mer skräddarsydda rekommendationer baserat på användarens tidigare betygsättningar, men inte heller vill man ha för homogena rekommendationer. En som bara hittar varianter på filmen man precis såg är inte ett bra alternativ. Helst vill man basera rekommendationerna på vad användaren sett, och samtidigt rekommendera många olika varianter på artiklar 729G43 patli010!7

8 till användaren (Aggarwal, 2016). Om alla rekommendationer är mer eller mindre identiska föreligger risken att användaren inte skulle tycka om en enda av artiklarna. En ännu mer avancerad variant skulle vara ett försök till att klustra attribut, för att avgöra om vissa attribut exklusivt förekommer med varandra. Så att användare som till exempel enbart tycker om Skräck-komedier inte får rekommendationer på filmer som bara har attributet Skräck eller Komedi Grannskapets rekommendationer Tyvärr finns det en rent matematisk aspekt av grannskapsrekommendationerna som antagligen gör att den slutgiltiga rekommendationen inte blir så bra som den kunde varit. För att räkna ut vad grannskapet gav för genomsnittsbetyg adderas betyget från alla i grannskapet som sett den aktuella filmen. Summan divideras med antalet som sett filmen får att få deras genomsnittsbetyg, och de med högst betyg rekommenderas till den givna användaren. Dock får detta effekten att om film X fått högsta betyg av en enda användare i grannskapet får film X högre genomsnittsbetyg (5.0) än en film Y som setts av alla 10 användarna i grannskapet och som fått högsta betyg av alla utom en användare. Även om den 10de användaren ger betyg 4.5 blir snittbetyget 4.95, och systemet kommer rekommendera film X. Algoritmen för hur genomsnittsbetyget bör förbättras, genom att vikta filmernas genomsnittsbetyg så att de filmer fler har sett får en starkare rekommendation än i nuläget Hybridsystem En filtreringsmetod som tar hänsyn till flera olika filtreringsmetoder, till exempel kollaborativa och innehållsbaserade kallas för ett hybrid(rekommendations)system (eng. hybrid system). En klar förbättring till det nuvarande systemet och en eventuell framtida variant skulle vara ett implementerat hybridsystem, som förutsäger användarens betyg baserat på grannskapets genomsnittliga betyg samt vilka uttalade preferenser av attribut användaren har. 729G43 patli010!8

9 4. Källor Aggarwal, C. C. (2016). Recommender Systems: The textbook. Cham: Springer International Publishing. Hours of video uploaded to YouTube every minute as of July (2018). Hämtad från: Recommender Systems. ( ). Hämtad , från Scwartz, B. ( ). More isn t always better. Harvard Business Review. Hämtad från: 729G43 patli010!9

10 5. Bilagor 5.1. Bilaga A - Exempel på rekommendation 729G43 patli010!10

11 5.2. Bilaga B - Kod för rekommendationssystemen """ Två rekommendationssystem. Bygger på MovieLens-biblioteket av användare och betygsättningar.""" import ML_User_class as uc import MovieLens_attr as ma import csv import operator # Dictionary med 'UserId': '{ratings}' user_data = uc.user.users(uc.user.get_all_data()) # Slumpmässigt valt User-objekt my_user = uc.user.pick_random_user() # Anropar funktionen som uppdaterar användarens top 10 matchande användare uc.user.match_users(my_user, user_data) # Lista med alla Movie-objekt movie_data = ma.movie.give_attributes_and_ids(ma.movie.get_all_data()) # COLLABORATIVE FILTERING # baseras på användare som har liknande ratings # returnerar lista med de 10 starkaste rekomendationerna def collaborative_filtering(user): # Hämtar användarens top 10 matchande användare # Returnerar en nästlad lista på formatet: [användaren, en lista med 10 dictionarys]. # I varje dictionary finns alla ratings gjorda av en utav de 10 bäst matchande användarna def get_other_users_ratings(user): other_users_ratings = [] for each_user in user.top_10_users: other_users_id = each_user[0] #print(other_users_id) for userid, ratings in uc.user.users(uc.user.get_all_data()).items(): if userid == other_users_id: other_users_ratings.append(ratings) elif userid == user.id: user.ratings = ratings return [user, other_users_ratings] # Tar in en nästlad lista med [användaren, en lista med dictionarys] # För varje film som de top 10 matchande användarna sett, men användaren själv inte sett # summeras alla ratings till en rekommendationssumma. De filmer med högst rekommenadtionssumma # är de starkast rekommenderade filmerna. # Reutrnerar de 10 starkast rekommenderade Movie-objekten 729G43 patli010!11

12 def my_top_10_rec(user_and_other_users_ratings): user = user_and_other_users_ratings[0] others_ratings = user_and_other_users_ratings[1] not_viewed_movies = {} for each_rating in others_ratings: for movie, score in each_rating.items(): if movie not in not_viewed_movies: if movie not in user.ratings.keys(): not_viewed_movies[movie] = [float(score)] elif movie in not_viewed_movies: not_viewed_movies[movie] += [float(score)] dictionary_total_scores = compute_scores(not_viewed_movies) sorted_recommended_movies = sorted(dictionary_total_scores.items(), key=operator.itemgetter(1), reverse=true) top_10_recommended_movies = sorted_recommended_movies[:10] return top_10_recommended_movies # Tar in ett dictionary med 'MovieId': [alla betyg] # Returnerar dictionary med 'MovieId': total score def compute_scores(all_scores): total_dict = {} for movie, ratings in all_scores.items(): sum_scores = 0 total_score = 0 for score in ratings: sum_scores += score total_score = sum_scores/len(ratings) total_dict[movie] = total_score return total_dict # Tar in en lista med Movie-objekt # Returnerar en lista med titlarna på dessa Movie-objekt def get_titles(top_10_recommended_movies): top_10_titles = [] for each_rating in top_10_recommended_movies: movie = each_rating[0] top_10_titles.append(ma.movie.get_a_movie_title(movie, ma.movie.get_all_data())) return top_10_titles return get_titles(my_top_10_rec(get_other_users_ratings(my_user))) # CONTENT BASED FILTERING # baseras på användarens egna ratings # returnerar lista med de 10 starkaste rekomendationerna def content_based_filtering(user, movie_data): # Tar in ett User-objekt och en lista med Movie-objekt 729G43 patli010!12

13 # Returnerar ett dictionary med attributen för filmerna hade som användaren satte # betyg 4 eller högre på, och många andra filmer som användaren gillade som hade samma attribut. # Format: 'Attribut': 'förekomster' # Exempelvis betyder "('Action': 5)" att användaren tyckte om 5 olika filmer som hade Attributet 'Action' # Returnerar också lista med alla Movie-objekt def attributes_user_liked(user, movie_data): liked_movies = [] liked_attributes = {} for movie_id, rating in user.ratings.items(): if float(rating) >= 4.0: liked_movies.append(movie_id) for movie_id in liked_movies: for each_movie in movie_data: if movie_id == each_movie.id: for attribute in each_movie.attr: if attribute not in liked_attributes: liked_attributes[attribute] = 1 if attribute in liked_attributes: liked_attributes[attribute] += 1 return [liked_attributes, movie_data] # Tar in en nästlad lista med [attribut, lista med alla Movie-objekt] # Anropar matching_score som räknar ut hur stark rekommenationen för en specifik film är # Returnerar titlarna på 10 starkast rekommenderade filmerna def match_movies(attributes_user_liked_and_movie_data): liked_attributes = attributes_user_liked_and_movie_data[0] movie_data = attributes_user_liked_and_movie_data[1] every_movie_score = {} potential_matches = [] titles = [] for movie in movie_data: for attribute in movie.attr: if attribute in liked_attributes.keys(): potential_matches.append(movie) for movie in potential_matches: every_movie_score[movie.title] = matching_score(liked_attributes, movie) sorted_recommendations = sorted(every_movie_score.items(), key=operator.itemgetter(1), reverse=true) top_10 = sorted_recommendations[:10] for movie in top_10: titles.append(movie[0]) return titles # Tar in ett dictionary med de attribut associerade med filmer som användaren gillat, samt ett Movie-objekt 729G43 patli010!13

14 # Returnerar ett rekommenadtionsvärde för en film baserat på # hur många gånger attributet förekom hos användaren def matching_score(liked_attributes, movie): total_score = 0 for attribute in movie.attr: if attribute in liked_attributes.keys(): total_score += liked_attributes[attribute] return total_score return match_movies(attributes_user_liked(user, movie_data)) # Tar in rekomendationerna från collaborative filtering och content-based filtering # Returnerar en lista med en kombinerad rekomendation def hybrid(content, collaborative): hybrid_recommendations = [] for movie in content: if movie not in hybrid_recommendations: hybrid_recommendations.append(movie) for movie in collaborative: if movie not in hybrid_recommendations: hybrid_recommendations.append(movie) print('recommended FOR YOU:' + '\n') for movie in hybrid_recommendations: print(str(movie) + '\n') return hybrid_recommendations hybrid(content_based_filtering(my_user, movie_data), collaborative_filtering(my_user)) 729G43 patli010!14

15 5.3. Bilaga C - Kod för Movie-klassen """ Tar in csv-fil på formatet MovieId, MovieTitle, MovieAttributes.""" import csv class Movie: def init (self): self.id = '' self.title = '' self.attr = {} # Hämtar data från csv-filen # Returnerar datan som en nästlad lista, där varje lista: # [MovieId, MovieTitle, Attribute1 Attribute2] def get_all_data(): all_data = [] with open('movies.csv', newline='') as dataset: reader = csv.reader(dataset) next(reader, None) for row in reader: all_data.append(row) return all_data # Tar in ett movieid, och den nästlade listan med all data ovan # Returnerar titeln på filmen som tillhör movieid def get_a_movie_title(movie_id, all_data): for movie in all_data: if movie[0] == movie_id: return movie[1] # Tar den nästlade listan med all data ovan # Returnerar en lista med alla filmer som Movie-objekt # Varje movie-objekt har uppdaterats med sina tillhörande id, titlar och attribut def give_attributes_and_ids(all_data): movie_obj = [] for each_movie in all_data: movie_id = each_movie[0] movie_title = each_movie[1] movie_attr = each_movie[2] each_movie = Movie() movie_obj.append(each_movie) each_movie.id = movie_id each_movie.title = movie_title each_movie.attr = movie_attr.split(' ') return movie_obj 729G43 patli010!15

16 5.4. Bilaga D - Kod för User-klassen """ Tar in csv-fil på formatet UserId, MovieId, Rating, Timestamp.""" import csv import random import operator class User: def init (self): self.id = '' self.ratings = {} self.top_10_users = [] # format {'FilmId': 'rating'} # Hämtar data från csv-filen # Returnerar datan som en nästlad lista, där varje lista: # [UserId, MovieId, Rating, Timestamp] def get_all_data(): all_data = [] with open('ratings.csv', newline='') as dataset: reader = csv.reader(dataset) next(reader, None) for row in reader: all_data.append(row) return all_data # Tar den nästlade listan med all data ovan # Returnerar en lista med alla användare som User-objekt # Varje User-objekt har uppdaterats med sina tillhörande id och ratings def give_users_id_and_ratings(all_data): all_user_ids = [] users_with_id = [] for each_rating in all_data: user_id = each_rating[0] if user_id not in all_user_ids: all_user_ids.append(user_id) for user in all_user_ids: user_id = user user = User() #user.all_inst.append(user) user.id = user_id users_with_id.append(user) for user in users_with_id: for rating in all_data: if rating[0] == user.id: user.ratings[rating[1]] = rating[2] return users_with_id # Tar in den nästlade listan med all data ovan 729G43 patli010!16

17 # Returnerar dict med 'UserId': {ratings} def users(all_data): all_user_ratings = {} users = User.give_users_id_and_ratings(all_data) for user in users: all_user_ratings[user.id] = user.ratings return all_user_ratings # Tar in ett User-objekt och den nästlade listan med all data ovan # Uppdaterar User-objektets.top_10_users # Returnerar en lista med User-objektets top 10 matchande användare def match_users(input_user, all_data): my_matching_scores = {} my_seen_movies = [] input_ratings = all_data[input_user.id] for movie, rating in input_ratings.items(): my_seen_movies.append(movie) for movie in my_seen_movies: for user, ratings in all_data.items(): for title, score in ratings.items(): if movie == title and input_ratings[movie] == ratings[movie] and user!= input_user.id: if user not in my_matching_scores: my_matching_scores[user] = 1 else: my_matching_scores[user] += 1 sorted_my_matching_scores = sorted(my_matching_scores.items(), key=operator.itemgetter(1), reverse=true) input_user.top_10_users = sorted_my_matching_scores[:10] return input_user.top_10_users # Returnerar ett slumpmässigt User-objekt def pick_random_user(): rand_user = random.choice(user.give_users_id_and_ratings(user.get_all_data())) return rand_user 729G43 patli010!17

Rekommendationer på nätet

Rekommendationer på nätet Linköpings universitet Rekommendationer på nätet Kollaborativa rekommendationssystem Cornelia Böhm 2017-01-12 Abstrakt Rekommendationssystem är algoritmer som används för att filtrera ut de produkter som

Läs mer

Rekommendationssystem. med fördjupning på collaborative filtering

Rekommendationssystem. med fördjupning på collaborative filtering Rekommendationssystem med fördjupning på collaborative filtering, majsc331 870325-1929 729G11 Artificiell Intelligens II Linköpings Universitet HT 2009 Innehållsförteckning Inledning... 1 Bakgrund...

Läs mer

SÅ BLIR DIN NETFLIX- UPPLEVELSE BÄTTRE. En litteraturstudie om Netflixs rekommendationssystem

SÅ BLIR DIN NETFLIX- UPPLEVELSE BÄTTRE. En litteraturstudie om Netflixs rekommendationssystem SÅ BLIR DIN NETFLIX- UPPLEVELSE BÄTTRE En litteraturstudie om Netflixs rekommendationssystem Sammanfattning Studien fokuserar på Latent Factor Model som var ett stort genomslag under Netflix Prize tävlingen

Läs mer

Effekten av varierande datamängd vid filmbetygsprediktion

Effekten av varierande datamängd vid filmbetygsprediktion EXAMENSARBETE INOM TEKNIK, GRUNDNIVÅ, 15 HP STOCKHOLM, SVERIGE 2016 Effekten av varierande datamängd vid filmbetygsprediktion En studie med en egenkonstruerad rekommendationsalgoritm ERIK LINDBOM ADAM

Läs mer

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Detta lösningsförslag är skrivet i stor hast, så det är möjligt att det innehåller en del slarvfel jag ber i så fall om ursäkt för

Läs mer

LINKÖPINGS UNIVERSITET. Rekommendationssystem

LINKÖPINGS UNIVERSITET. Rekommendationssystem LINKÖPINGS UNIVERSITET Rekommendationssystem, julho969 900728-5969 729G11 Artificiell Intelligens II Linköpings universitet HT 2010 Innehållsförteckning Introduktion Vad är ett rekommendationssystem?...

Läs mer

Colloborative filtering ett rekommendationssystem

Colloborative filtering ett rekommendationssystem Colloborative filtering ett rekommendationssystem 1 Innehållsförteckning 2 1. Inledning Dagens samhälle är idag uppbyggt till stor del av internet. Vi kan i princip sköta det mesta av våra liv via nätet.

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D. Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D. tobias@dsv.su.se Notera att exemplen är i Python 2.5 För att översätta till Python 3.0, gör följande ändringar print(x,y) istället för print x,y input("ett

Läs mer

729G04 Programmering och diskret matematik. Föreläsning 7

729G04 Programmering och diskret matematik. Föreläsning 7 729G04 Programmering och diskret matematik Föreläsning 7 Föreläsningsöversikt Information Interaktion via text Läsa från fil Skriva till fil Spara och läsa abstrakta datatyper från fil Information Felaktigt

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två Binära träd Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två gånger, talar man om binära träd. Sådana

Läs mer

Lektion 2: Sökagenter. Robin Keskisärkkä

Lektion 2: Sökagenter. Robin Keskisärkkä Lektion 2: Sökagenter Robin Keskisärkkä Lektionens innehåll Introduktion till laboration 2 Implementation av en sökalgoritm Livekodning Konfrontera ett liknande problem själva Extra: Heuristisk sökning

Läs mer

VILKET REKOMMENDATIONSSYTEM SKA EN INTERAKTIV MEDIETJÄNST VÄLJA?

VILKET REKOMMENDATIONSSYTEM SKA EN INTERAKTIV MEDIETJÄNST VÄLJA? VILKET REKOMMENDATIONSSYTEM SKA EN INTERAKTIV MEDIETJÄNST VÄLJA? Med Spotify som praktiskt fall.se 12 januari 2017 729G43 Kognitionsvetenskapliga programmet, LiU. Sammanfattning Rekommendationssystem är

Läs mer

Institutionen för datavetenskap Department of Computer and Information Science

Institutionen för datavetenskap Department of Computer and Information Science Institutionen för datavetenskap Department of Computer and Information Science Examensarbete Smarta receptförslag algoritmutvärdering och implementationsförslag av Bernhard Hahn LIU-IDA/LITH-EX-G--12/032--SE

Läs mer

Grundläggande datalogi - Övning 2

Grundläggande datalogi - Övning 2 Grundläggande datalogi - Övning 2 Björn Terelius November 7, 2008 Klasser skapas med nyckelordet class Klasser Konstruktorer och destruktorer Undantagshantering class MyClass: Docstring and doctests for

Läs mer

TiVo ett rekommendationssystem. TiVo ett rekommendationssystem

TiVo ett rekommendationssystem. TiVo ett rekommendationssystem Sammanfattning I dagens informationssamhälle kan det ibland vara svårt att sortera ut relevant information från mängden. Vi får då förlita oss till rekommendationer och omdömen från andra i allt från vilken

Läs mer

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

Föreläsning 13 och 14: Binära träd

Föreläsning 13 och 14: Binära träd Föreläsning 13 och 14: Binära träd o Binärträd och allmänna träd o Rekursiva tankar för binärträd o Binära sökträd Binärträd och allmänna träd Stack och kö är två viktiga datastrukturer man kan bygga av

Läs mer

Regression med Genetiska Algoritmer

Regression med Genetiska Algoritmer Regression med Genetiska Algoritmer Projektarbete, Artificiell intelligens, 729G43 Jimmy Eriksson, jimer336 770529-5991 2014 Inledning Hur många kramar finns det i världen givet? Att kunna estimera givet

Läs mer

Tentamen i Introduktion till programmering

Tentamen i Introduktion till programmering Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:

Läs mer

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul Föreläsning 8 Programmeringsteknik och Matlab DD1312 er, Self Metoderna:, av metoder, Det är en metod som tillhör klassen och inte objektet. class Skylt(object): antal=0 def init (,r):.reklam=r def antal():

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok,

Läs mer

kl Tentaupplägg

kl Tentaupplägg Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer

Läs mer

729G04 Programmering och diskret matematik

729G04 Programmering och diskret matematik Tentamen 729G04, 2013-01-11 1(8) 729G04 Programmering och diskret matematik Tentamen 2013 01 11 kl 08.00 13.00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker Uppgifter:

Läs mer

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Från laboration 3 till 4 I laboration 3 har du implementerat klasser implementerat metoder i klasserna I laboration 4 kommer du att implementera

Läs mer

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-03-19 Skrivtid: 14:00 19:00 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>... Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener ... 3 Typsnitt ... 3 Övergångar ... 4 Mall för slide ... 5 , ...

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för

Läs mer

Personifierad Netflix

Personifierad Netflix Linköpings universitet Personifierad Netflix Lisa Rönnqvist 2016-08-24 Sammanfattning INNEHÅLLSFÖRTECKNING 1. Inledning... 1 1.1 Bakgrund... 1 1.2 Syfte... 2 2. Netflix... Fel! Bokmärket är inte definierat.

Läs mer

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 1 ( 7) Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

Programmering grundkurs

Programmering grundkurs Programmering grundkurs Föreläsning 11 Jody Foo, jody.foo@liu.se Föreläsningsöversikt Laboration 6 Abstraktion och OOP Klassdiagram med UML (Unified Modelling Language) Egna klasser som innehåller andra

Läs mer

729G04 Programmering och diskret matematik

729G04 Programmering och diskret matematik Tentamen 729G04, 2013-02-15 1(9) 729G04 Programmering och diskret matematik Tentamen 2013 02 15 kl 14.00 19.00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker Uppgifter:

Läs mer

Tentamen Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037) Tentamen Datastrukturer (DAT07) Datum och tid för tentamen: 2016-01-09, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och ca

Läs mer

Dugga Datastrukturer (DAT036)

Dugga Datastrukturer (DAT036) Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre

Läs mer

Grundläggande datalogi - Övning 4

Grundläggande datalogi - Övning 4 Grundläggande datalogi - Övning 4 Björn Terelius November 21, 2008 Definitioner Olika mått på komplexitet Definition En funktion f sägs vara O(g) om det existerar konstanter c, N så att f (n) < cg(n) för

Läs mer

Övning 1 - Abstrakta datatyper

Övning 1 - Abstrakta datatyper /home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20121 0 # coding : latin Övning 1 - Abstrakta datatyper 18 Summering Vi gick igenom betydelsen av abstrakta datatyper/datastrukturer.

Läs mer

TDP Regler

TDP Regler Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt

Läs mer

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Introduktion till programmering SMD180. Föreläsning 9: Tupler Introduktion till programmering Föreläsning 9: Tupler 1 1 Sammansatta datatyper Strängar Sekvenser av tecken Icke muterbara Syntax: "abcde" Listor Sekvenser av vad som helst Muterbara Syntax: [1, 2, 3]

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2014-04-25, 14:00 18:00. Författare: Nils Anders Danielsson. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Rekommendationssystem för livestreamingtjänster

Rekommendationssystem för livestreamingtjänster EXAMENSARBETE INOM DATATEKNIK, GRUNDNIVÅ, 15 HP STOCKHOLM, SVERIGE 2016 Rekommendationssystem för livestreamingtjänster HENRIK SUNMARK KTH SKOLAN FÖR INFORMATIONS- OCH KOMMUNIKATIONSTEKNIK Handledare:

Läs mer

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program

Läs mer

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner

Läs mer

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS Namn Stil Dokumentation Objekt-orienterad programmering Dept. of Computer Science Umeå University jem@cs.umu.se OBS OBS OBS OBS OBS OBS OBS OBS Detta är inget gnäll på någon speciell utan jag ser detta

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken får ha anteckningar,

Läs mer

Mer grafik. Jan Erik Moström

Mer grafik. Jan Erik Moström Mer grafik from Tkinter import * root = Tk() mf = Frame(root) mf.pack() cv = Canvas(mf) o1 = cv.create_oval(100,100,80,80,outline="red",fill="blue", width=2) o2 = cv.create_oval(10,10,80,80,outline="red",fill="green",

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I Tentamen i Programmeringsteknik I 2016-10-17 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Abstrakta datatyper Laboration 2 GruDat, DD1344

Abstrakta datatyper Laboration 2 GruDat, DD1344 Abstrakta datatyper Laboration 2 GruDat, DD1344 Örjan Ekeberg (fritt från en idé av Henrik Eriksson) 27 oktober 2008 Målsättning Målet med denna laboration är att ge en inblick i hur man kan använda abstrakta

Läs mer

729G04 Programmering och diskret matematik TEN kl 8-12

729G04 Programmering och diskret matematik TEN kl 8-12 729G04 Programmering och diskret matematik TEN4 091020 kl 8-12 Examinator: Annika Silvervarg, telefonnummer 013-284068 Hjälpmedel: Dator, penna och suddgummi. Uppgifter: Tentamen består av 4 uppgifter

Läs mer

TNK046 GIS - Databaser Laborationsuppgift 2

TNK046 GIS - Databaser Laborationsuppgift 2 TNK046 GIS - Databaser Laborationsuppgift 2 Frågespråket SQL Översikt En sann cineast har börjat bygga upp en databas över filmer från gränslandet mellan science fiction och skräck. Databasen innehåller

Läs mer

Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813]

Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813] 1 Artificiell intelligens En agent som spelar Black Jack Andreas Perjons [andpe813] Linköpings Universitet 2019 2 Innehåll Introduktion...3 Metod..4 Programmets komponenter.4 Resultat...5 Diskussion...7

Läs mer

Övningar Dag 2 En första klass

Övningar Dag 2 En första klass Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt

Läs mer

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med

Läs mer

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen, EDA501/EDAA20 Programmering M MD W BK L LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA501/EDAA20 Programmering M MD W BK L 2017 05 31, 8.00 13.00 Anvisningar: Preliminärt ger uppgifterna 9 + 12 + 10 + 9 = 40 poäng.

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

Grundläggande datalogi - Övning 3

Grundläggande datalogi - Övning 3 Grundläggande datalogi - Övning 3 Björn Terelius November 14, 2008 Utskrift av stackar Tornen i Hanoi Principerna för rekursion: Hitta ett enkelt basfall (som har en känd lösning). Reducera varje annat

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum och tid för tentamen: 2017-01-11, 14:00 18:00. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 15:00 och ca 17:00. Godkända

Läs mer

TDDI TDDI22 Tentaregler

TDDI TDDI22 Tentaregler Inloggning TDDI22 Tentaregler Logga in i tentasystemet genom att välja session exam system och logga in med ditt vanliga LiU- ID. Välj inte att ha denna session som standardsession. Verifiera att dina

Läs mer

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass Övningstillfälle 4 Klasser och objekt (s. 221 ff.) Syfte 1: En naturlig fortsättning på koncepten abstraktion och inkapsling! Funktion (återanvändning av skyddad, säker och testad kod) Modul (återanvändning

Läs mer

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015 TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering Föreläsning 5 Programmeringsteknik DD1310 Doctest Modulen doctest Man kan använda modulen doctest för att testa programmet på ett mer systematiskt sätt. Så här gör man: 1. Skriver programmets funktioner

Läs mer

Laboration 1: Figurer i hierarki

Laboration 1: Figurer i hierarki Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras

Läs mer

PROV. 12 Egenskaper (provavsnitt)

PROV. 12 Egenskaper (provavsnitt) 12 Egenskaper (provavsnitt) 12.1 Egenskaper 12.2 Deklaration av egenskaper 12.3 Åtkomsttjänster för egenskaper 12.4 Åtkomsttjänster med genererade instansvariabler 12.5 Åtkomsttjänster med egna instansvariabelnamn

Läs mer

Datalogi för E Övning 3

Datalogi för E Övning 3 Datalogi för E Övning 3 Mikael Huss hussm@nada.kth.se AlbaNova, Roslagstullsbacken 35 08-790 62 26 Kurshemsida: http://www.csc.kth.se/utbildning/kth/kurser/2d1343/datae06 Dagens program Att skapa egna

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Tentamen Programmeringsteknik II 2016-05-30 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

729G74 - IT och programmering, grundkurs. Dugga.

729G74 - IT och programmering, grundkurs. Dugga. 729G74 - IT och programmering, grundkurs. Dugga. 2016-12-08. Kl. 14.00 till 16.00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier Uppgifter: Duggan består

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken får ha anteckningar,

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA20/EDA501 Programmering LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2011 10 19, 8.00 13.00 Anvisningar: Denna tentamen består av fem uppgifter. Preliminärt ger uppgifterna

Läs mer

Systems for automatic recommendations of news and events

Systems for automatic recommendations of news and events System för automatiska rekommendationer av nyheter och evenemang Systems for automatic recommendations of news and events THEODOR BRANDT Examensarbete inom Datorteknik Grundnivå, 15 hp Handledare på KTH:

Läs mer

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4 Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa

Läs mer

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2014-10-17 Skrivtid: 0800-1300 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Föreläsning 4: Poster

Föreläsning 4: Poster Föreläsning 4: Poster Följande är genomgånget: type Person_Type is Namn : String(30); Skonr : Float; Kon : Boolean; Diskussion runt detta med olika typer m.m. Har tagit upp vilka operationer man kan göra

Läs mer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo 729G75: Programmering och algoritmiskt tänkande Tema 1. Föreläsning 1 Jody Foo Föreläsningsöversikt Kursinfo / Om kursen Algoritmer Objektorienterad programmering i praktiken terminologi använda objekt

Läs mer

OOP Tentamen

OOP Tentamen DVS SU/KTH 1 (6) OOP OOP Tentamen 2007-12-21 13.00 18.00 Avser kurserna: DSK1:OOP GES:OOP ID1013 GKOOP-distans Anvisningar Skriv namn och personnummer på varje inlämnat blad. Påbörja varje ny uppgift på

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och

Läs mer

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program. Moduler Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program. Vi har också ofta behov av att skapa överblick i våra program. Som ett

Läs mer

Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Data Data Data Data Data Data Data Data

Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Data Data Data Data Data Data Data Data Datahantering i Excel Grundbegrepp I alla typer av databaser finns alltid en tabell där informationen i databasen fysiskt finns lagrad. Tabellen har samma enkla uppbyggnad som en tabell i ordbehandlingsprogrammet

Läs mer

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1 Inlämningsuppgift : Finn 2D1418 Språkteknologi Christoffer Sabel E-post: csabel@kth.se 1 1. Inledning...3 2. Teori...3 2.1 Termdokumentmatrisen...3 2.2 Finn...4 3. Implementation...4 3.1 Databasen...4

Läs mer

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av

Läs mer

v. 42 Python HT17 En introduktion Oscar Bergqvist

v. 42 Python HT17 En introduktion Oscar Bergqvist v. 42 HT17 Python En introduktion Oscar Bergqvist oscar.bergqvist@stockholm.se 1 Innehåll 2 IDLE... 3 2.1 Det interaktiva läget... 3 2.2 Standardläget... 3 2.3 Färger i IDLE... 3 3 Variabler... 3 3.1 Namn...

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller

Läs mer

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och

Läs mer

TDDD92 Artificiell intelligens -- projekt

TDDD92 Artificiell intelligens -- projekt jonas.kvarnstrom@liu.se 2018 TDDD92 Artificiell intelligens -- projekt Individuella uppgifter UPG2: Individuell skriftlig rapport 2 Vad? Läsa och förstå vetenskaplig litteratur Varför? Framtiden: Inte

Läs mer

Grunderna i SQL del 1

Grunderna i SQL del 1 Grunderna i SQL del 1 1. SELECT-frågor 2. SELECT 3. WHERE 4. ORDER BY 5. Inre join 6. Yttre join 7. Andra typer av join 8. Union 9. Aggregatfunktioner 10. Gruppera och summera Kap. 3 Kap. 4 Kap. 5 utom

Läs mer

Deklarativ programmering

Deklarativ programmering Deklarativ programmering TDP007 Konstruktion av datorspråk Föreläsning 7 Peter Dalenius Institutionen för datavetenskap 2014-03-03 Deklarativ programmering Program skrivet i ett deklarativt språk logikspråk,

Läs mer

Introduktion till programmering SMD180. Föreläsning 8: Listor

Introduktion till programmering SMD180. Föreläsning 8: Listor Introduktion till programmering Föreläsning 8: Listor 1 1 Listor = generaliserade strängar Strängar = sekvenser av tecken Listor = sekvenser av vad som helst Exempel: [10, 20, 30, 40] # en lista av heltal

Läs mer

Selektion och iteration

Selektion och iteration Selektion och iteration TDDD73 Funktionell och imperativ programmering i Python Föreläsning 6 Peter Dalenius Institutionen för datavetenskap 2014-09-15 Översikt Hur utformar man villkor för framför allt

Läs mer

v. 43 Python HT17 En introduktion Oscar Bergqvist

v. 43 Python HT17 En introduktion Oscar Bergqvist v. 43 HT17 Python En introduktion Oscar Bergqvist oscar.bergqvist@stockholm.se 1 Innehåll 2 IDLE... 3 2.1 Det interaktiva läget... 3 2.2 Standardläget... 3 2.3 Färger i IDLE... 3 3 Variabler... 3 3.1 Namn...

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

Services + REST och OAuth

Services + REST och OAuth Services + REST och OAuth Syftet med Services Skapa ett Drupal API för att exponera webb- API:er. Officiella versionen - Create a unified Drupal API for web services to be exposed in a variety of different

Läs mer