0% ont trouvé ce document utile (0 vote)
22 vues61 pages

2024 T Informatique

Le document présente un cahier d'examen pour un concours en informatique, structuré en trois parties : programmation orientée objet, bases de données relationnelles, et un système de recommandation basé sur le filtrage collaboratif. Il décrit les classes à implémenter pour créer un système de recommandation utilisant le modèle Item-Based Collaborative Filtering (IBCF), ainsi que les méthodes associées pour manipuler les données des utilisateurs et des items. Des exemples de données et des instructions spécifiques pour chaque question sont également fournis.

Transféré par

tcharlylasla3
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
22 vues61 pages

2024 T Informatique

Le document présente un cahier d'examen pour un concours en informatique, structuré en trois parties : programmation orientée objet, bases de données relationnelles, et un système de recommandation basé sur le filtrage collaboratif. Il décrit les classes à implémenter pour créer un système de recommandation utilisant le modèle Item-Based Collaborative Filtering (IBCF), ainsi que les méthodes associées pour manipuler les données des utilisateurs et des items. Des exemples de données et des instructions spécifiques pour chaque question sont également fournis.

Transféré par

tcharlylasla3
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

E IS

IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
E IS
IP
B-
BI
CONSIGNES GÉNÉRALES

DOCUMENTS NON AUTORISES


CE CAHIER D’EXAMEN COMPORTE 25 PAGES + 2 PAGES SUPPLÉMENTAIRES
LES RÉPONSES DOIVENT ÊTRE ÉCRITES DANS
LES ESPACES RÉPONSES DÉDIÉES
EN CAS DE BESOIN UTILISER LES PAGES VIDES EN FIN DU CAHIER, DANS
CE CAS, IL FAUT LE SIGNALER DANS L’ESPACE RÉPONSE CORRESPONDANT
L’USAGE DES CALCULATRICES EST INTERDIT
Il FAUT RESPECTER IMPÉRATIVEMENT LES NOTATIONS DE L’ÉNONCÉ
VOUS POUVEZ ÉVENTUELLEMENT UTILISER L’ANNEXE
BI
B-
IP

Le sujet comporte trois parties qui traitent les aspects suivants :


E
Partie I : Programmation orientée objet (Q1..Q21).
Partie II : Base de données relationnelle (Q22..Q31).
IS

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 1/33


Partie I : Programmation Orientée Objet
Les systèmes de recommandation sont des algorithmes d’intelligence artificielle utilisés pour
suggérer des éléments pertinents aux internautes par rapport à leurs préférences. Ils sont largement
utilisés dans de nombreux domaines tels que le commerce électronique, les services de streaming
de musique et de vidéo, les applications de voyage, l’éducation et bien d’autres.
Parmi les systèmes de recommandation on s’intéresse au modèle Item-Based Collaborative
Filtering (IBCF) qui permet de recommander des items à des users en se basant sur l’historique
de leurs interactions avec des items similaires. IBCF se base sur des évaluations (scores) émises
par les users pour certains items.
Un exemple de système de recommandation est celui de cours en ligne (items) pour des étudiants
(users). Le modèle IBCF exploite des données qui représentent les préférences des étudiants pour
certains cours sous forme de scores. Les données peuvent être organisées dans une matrice où les
lignes représentent les étudiants, les colonnes représentent les cours et les éléments de la matrice
représentent les évaluations.

Math History Programming English Chemistry Art


User1 4 3 5 - 2 1
User2 - 2 4 3 - 5
BI
User3 5 - 4 2 3 -
score = User4 3 4 - 5 1 2
User5 2 - 3 1 - 4
User6 1 5 2 4 5 3
B-
User7 - 3 - 2 4 1
User8 4 - 1 5 2 3

Figure 1 – Exemple de données d’entrées pour un Système de recommandation de cours en ligne


IP

Dans cet exemple :


— Chaque ligne i représente un étudiant useri .
E
— Chaque colonne j représente un cours itemj .
— Un scoreij est donné par un étudiant i pour un cours j sur une échelle de 1 à 5., où '-'
IS
indique aucune évaluation.
Dans la suite de l’énoncé, nous utiliserons les données de cet exemple pour la validation du travail
demandé.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 2/33


Classes à Implémenter
Dans le but de réaliser un système de recommandation selon le modèle IBCF, on propose
d’implémenter un ensemble de classes permettant de mettre en place les fonctionnalités et les
données nécessaires :
— DataFrame : Une classe pour stocker les données tabulaires représentant les scores attribués
par les users aux items et offrant des méthodes pour les représenter et les manipuler.
— SimilarityMatrix : Une classe dérivée de DataFrame pour représenter la matrice de simi-
larités entre les items.
— MaskedDataFrame : Une classe dérivée de DataFrame pour stocker et manipuler les données
tabulaires avec des valeurs masquées (Dans la figure 1 l’user7 n’a pas interagit avec l’item1 ,
ainsi le score associé est une valeur masquée).
— SimilarityMeasure : Une classe abstraite qui encapsule les données et les opérations néces-
saires pour appliquer une mesure de similarité sur les items (Similarité Cosinus, Similarité
de Jaccard et Similarité Euclidienne). Elle est dédiée à la spécialisation par héritage.
— CosineSimilarityMeasure : Une classe dérivée de la classe SimilarityMeasure pour cal-
culer la similarité cosinus entre les items.
— JaccardSimilarityMeasure : Une classe dérivée de la classe SimilarityMeasure pour
BI
calculer la similarité de Jaccard entre les items.
— EuclidianSimilarityMeasure : Une classe dérivée de la classe SimilarityMeasure pour
calculer la similarité Euclidienne entre les items.
B-
— SelectionStrategy : Une classe abstraite qui encapsule les données et les opérations né-
cessaires pour appliquer une stratégie de sélection des items les plus similaires à un item
donné pour un user spécifique (Stratégie plus proches voisins et Stratégie de seuillage). Elle
est dédiée à la spécialisation par héritage.
IP
— KNNStrategy : Une classe dérivée de la classe SelectionStrategy pour sélectionner les items
selon la stratégie des plus proches voisins.
— ThresholdStrategy : Une classe dérivée de la classe SelectionStrategy pour sélectionner
E
les items selon la stratégie de seuillage.
— IBCFSystem : Une classe pour encapsuler le processus d’apprentissage (calcul de la matrice
IS
de similarité des items à partir du MaskedDataFrame) et de prédiction (calcul du score le plus
proche qu’un user aurait attribué à un item à suggérer) d’un système de recommandation
IBCF.

Interface de la Classe DataFrame


Rôle & responsabilités
Cette classe encapsule une matrice des scores données par des users pour des items. Cette
matrice est à deux axes respectivement indexables par les noms des users et les noms des items.

Attributs
• data : La matrice des scores (instance de la classe [Link]).
• rowMap : Un dictionnaire qui relie les noms des users (clés) aux indices des lignes associés
(valeurs).
• colMap : Un dictionnaire qui relie les noms des items (clés) aux indices des colonnes associés
(valeurs).

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 3/33


Méthodes à implémenter
Q1. __init__(...) : Initialise une instance à partir des paramètres data, rows et columns re-
présentant respectivement la matrice des scores, la liste des noms des utilisateurs et la liste
des noms des items supposées énumérées dans l’ordre des lignes et des colonnes associées.

Espace de réponse pour Q1


import numpy as np
class DataFrame:
def __init__(self, data, rows, columns):

Solution:

import numpy as np
BI
class DataFrame:
def __init__(self, data, rows, columns):
nrows, ncolumns = [Link]
B-
[Link] = [Link]()
[Link] = {row:i for i, row in enumerate(rows)}
[Link] = {col:j for j, col in enumerate(columns)}
IP

Q2. mapRow(...) : reçoit un str rowName qui correspond au nom d’un user et retourne l’indice de
la ligne correspondante.
E
Espace de réponse pour Q2
IS
def mapRow(self, rowName):

Solution:

def mapRow(self, rowName):


return [Link][rowName]

Q3. mapCol(...) : reçoit un str colName qui correspond au nom d’un item et retourne l’indice
de la colonne correspondante.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 4/33


Espace de réponse pour Q3

def mapCol(self, colName):

Solution:

def mapCol(self, colName):


return [Link][colName]

Q4. mapPos(...) : reçoit un tuple locName contenant deux chaînes qui correspondent respecti-
vement à un nom d’user et un nom d’item et retourne un tuple contenant l’indice de la ligne
BI
et l’indice de la colonne associées.

Espace de réponse pour Q4


B-
def mapPos(self, locName):
IP
E
Solution:
IS
def mapPos(self, locName):
row, col = locName
return [Link][row], [Link][col]
#ou bien
def mapPos(self, locName):
row, col = locName
return [Link](row), [Link](col)

Q5. getRowNames(...) : qui retourne les noms des lignes sous forme d’une liste triée selon l’ordre
des indices.

Espace de réponse pour Q5

def getRowNames(self):

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 5/33


Solution:

def getRowNames(self):
return sorted([Link], key = [Link])

def getRowNames(self):
return list([Link])

Q6. getColumnNames(...) : qui retourne les noms des colonnes sous forme d’une liste triée selon
l’ordre des indices.

Espace de réponse pour Q6


BI

def getColumnNames(self):
B-
IP

Solution:
E
def getColumnNames(self):
return list([Link])
IS
def getColumnNames(self):
return sorted([Link], key = [Link])

Q7. __getitem__(...) : méthode spéciale qui reçoit un tuple locName contenant deux chaînes
qui correspondent respectivement à un nom d’user et un nom d’item et retourne le score associé
à partir de la matrice data.

Espace de réponse pour Q7

def __getitem__(self, locName):

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 6/33


Solution:

def __getitem__(self, locName):


idx = [Link](locName)
return [Link][idx]

Interface de la classe SimilarityMatrix


Rôle & responsabilités

Cette classe hérite de la classe DataFrame, elle encapsule une matrice carrée contenant les
similarités entre toutes les paires d’items. Ainsi, les deux axes sont indexables par les noms
des items.

Méthodes à implémenter
BI
Q8. __init__(...) : Initialise une nouvelle instance à partir des paramètres data, itemNames re-
présentant respectivement la matrice des similarités entre les paires des items et la liste des
noms des items.
B-

Espace de réponse pour Q8

class SimilarityMatrix(DataFrame):
IP
def __init__(self, data, itemNames):
E IS

Solution:

class SimilarityMatrix(DataFrame):
def __init__(self, data, itemNames):
super().__init__(data, itemNames, itemNames)
# ou bien
class SimilarityMatrix(DataFrame):
def __init__(self, data, itemNames):
DataFrame.__init__(self, data, itemNames, itemNames)

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 7/33


Interface de la classe MaskedDataFrame
Rôle & responsabilités

Cette classe hérite de la classe DataFrame, elle encapsule une matrice des scores donnés par
des users pour certains items. Cette matrice est à deux axes respectivement indexables par les
noms des users et les noms des items.
— Une interaction user, item (produisant un score effectif) est marquée par la valeur False au
niveau du masque.
— L’absence d’interaction user, item (décrite par le symbole "-" dans la figure 1) est marquée
par la valeur True au niveau du masque.

Attributs

— mask : Une matrice de booléens (instance de la classe [Link]) ayant les même
dimensions que l’attribut hérité data où les cases à True sont les cases masquées (les
items que l’utilisateur n’a pas évalué).
Pour l’exemple de données illustrés dans la figure 1, le masque associé est présenté comme suit
dans la figure 2.
BI

Math History Programming English Chemistry Art


User1 False False False True False False
B-
User2 True False False False True False
User3 False True False False False True
mask = User4 False False True False False False
User5 False True False False True False
IP
User6 False False False False False False
User7 True False True False False False
User8 False True False False False False
E
Figure 2 – Masque associé aux données de la figure 1
IS
Méthodes à implémenter

Q9. __init__(...) : Initialise une instance à partir des paramètres data, rows, columns et
mask représentant respectivement la matrice des scores, la liste des noms des utilisateurs, la
liste des noms des items et la matrice du masque.

Espace de réponse pour Q9

class MaskedDataFrame(DataFrame):
def __init__(self, data, rows, columns , mask):

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 8/33


Solution:

class MaskedDataFrame(DataFrame):
def __init__(self, data, rows, columns , mask):
super().__init__(data, rows, columns)
[Link] = [Link]()

Q10. __getitem__(...) : méthode spéciale qui reçoit un tuple locName contenant deux chaînes
qui correspondent respectivement à un nom d’user et un nom d’item et retourne le score associé
à partir de la matrice data si l’user a évalué l’item et None, sinon.

Espace de réponse pour Q10

def __getitem__(self, locName):


BI
B-

Solution:
IP
def __getitem__(self, locName):
row, col = [Link](locName)
if not [Link][row, col]:
E
return super().__getitem__(locName)
#ou bien
IS
def __getitem__(self, locName):
idx = super().mapPos(locName)
if not [Link][idx]:
return super().__getitem__(locName)
#ou bien

def __getitem__(self, locName):


idx = [Link](self, locName)
if not [Link][idx]:
return DataFrame.__getitem__(self, locName)

Q11. getInteractions(...) : prend le nom d’un item colName et retourne un ensemble conte-
nant les noms des users qui ont interagit avec cet item.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 9/33


Espace de réponse pour Q11

def getInteractions(self, colName):

Solution:

def getInteractions(self, colName):


"""
prend le nom d'un item colName et retourne un ensemble contenant
les noms des utilisateurs qui ont voté pour cet item
"""
return {rowName for rowName in [Link]()
if self[rowName, colName] is not None}
BI
B-
def getInteractions(self, colName):
s = set()
for rowName in [Link]():
if self[rowName, colName] is not None:
IP
[Link](rowName)
return s
E

Q12. getDomain(...) : extrait un ensemble contenant les noms des items qui ont été évalués par
l’user rowName.
IS

Espace de réponse pour Q12

def getDomain(self, rowName):

Solution:

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 10/33


def getDomain(self, rowName):
"""
extraire un ensemble contenant les items qui ont été évalués
par l'user rowName
"""
#extraire les cours qui ont été évalués par un utilisateur
return {colName for colName in [Link]()
if self[rowName, colName] is not None }

def getDomain(self, rowName):


rowIdx = [Link](rowName)
s = set()
for colName, colIdx in [Link]():
if not [Link][rowIdx, colIdx]:
BI
[Link](colName)
return s
B-
Q13. commonRows(...) : prend deux noms d’items colName1 et colName2 et en considérant
uniquement les users qui ont interagit avec les deux items en question, extrait un tuple de
deux vecteurs ([Link]) contenant les scores attribués.
IP
Espace de réponse pour Q13

def commonRows(self, colName1, colName2):


E IS

Solution:

def commonRows(self, colName1, colName2):


"""
prend deux noms d'items col_name1 et col_name2 et en
considérant uniquement les users qui ont interagit avec
les deux items en question, extrait un tuple de deux vecteurs
([Link]) contenant les scores attribués.
"""
c1 = [Link](colName1)
c2 = [Link](colName2)
inter = (~[Link][:,c1])& (~[Link][:,c2])
return ([Link][inter,c1], [Link][inter,c2])

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 11/33


def commonRows(self, colName1, colName2):
users1 = [Link](colName1)
users2 = [Link](colName2)
v1 = [Link]([self[user, colName1] for user in users1 & users2])
v2 = [Link]([self[user, colName2] for user in users1 & users2])
return v1, v2

Interface de la classe SimilarityMeasure


Rôle & responsabilités

Cette classe abstraite encapsule la logique de production d’une matrice de similarité selon une
métrique spécifiée par le biais de l’héritage.
BI
Attributs

— mdf : instance de la classe MaskedDataFrame, à partir de laquelle la matrice de similarité


des paires des items est calculée.
B-

Méthodes à implémenter

La méthode __init__(...) : initialise l’attribut mdf à partir du paramètre d’entrée.


IP

class SimilarityMeasure:
def __init__(self, mdf):
E
[Link] = mdf
IS
La méthode measure(...) : implémente une métrique de similarité. Cette méthode sera re-
définie dans les classes filles.

def measure(self, colName1, colName2):


# pour cette classe le script de cette méthode
# n'est pas demandé

Q14. getSimilarityMatrix(...) : calcule et retourne une instance de la classe SimilarityMatrix qui


est la matrice de similarité entre toutes les paires des colonnes de l’attribut mdf.

Espace de réponse pour Q14

def getSimilarityMatrix(self):

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 12/33


Solution:

def getSimilarityMatrix(self):
colNames = [Link]()
dsim = [Link](len(colNames))
for i in range(len(colNames)):
for j in range(i):
dsim[i,j] = dsim[j,i] = [Link](colNames[i], colNames[j])
return SimilarityMatrix(dsim, colNames)

Interface de la classe CosineSimilarityMeasure


BI

Rôle & responsabilités

Cette classe concrète encapsule la logique de production d’une matrice de similarité selon
B-
le cosinus de l’angle entre les deux vecteurs vi et vj représentants les scores de deux items
en considérant uniquement les users qui ont simultanément interagit avec ces deux items en
question.
IP
X
scoreu,i scoreu,j
u∈U (itemi ,itemj )
CosineSimilarity(itemi , itemj ) = s s
E
X X
score2u,i score2u,j
u∈U (itemi ,itemj ) u∈U (itemi ,itemj )
IS
Cette formule est équivalente à :
vi .vj
CosineSimilarity(vi , vj ) =
∥vi ∥ ∥vj ∥

Équation 1 – Similarité Cosinus

Où :
— U(itemi , itemj ) est l’ensemble des users qui ont simultanément interagit avec les items
itemi et itemj .
— vi , vj sont deux vecteurs contenant les scores de deux items itemi et itemj en considérant
uniquement les users qui ont simultanément interagit avec les deux items.
— vi .vj représente le produit scalaire entre vi et vj .
— ∥v∥ représente la norme euclidienne du vecteur v.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 13/33


Méthodes à implémenter
Q15. measure(...) : calcule et retourne un réel représentant la similarité cosinus entre les deux
items dont les noms sont passés dans les paramètres colName1 et colName2 comme illustré
par l’équation 1.

Espace de réponse pour Q15

class CosineSimilarityMeasure(SimilarityMeasure):
def measure(self, colName1, colName2):

Solution:
BI
class CosineSimilarityMeasure(SimilarityMeasure):
def measure(self, colName1, colName2):
c1, c2 = [Link](colName1, colName2)
return [Link](c2) / ([Link](c1) * [Link](c2))
B-
IP
Interface de la classe JaccardSimilarityMeasure
Rôle & responsabilités
Cette classe concrète encapsule la logique de production d’une matrice de similarité selon
E
l’indice de Jaccard qui capture le rapport entre l’intersection et l’union entre les deux vecteurs
vi et vj représentants les scores de deux items en considérant uniquement les users qui ont
IS
simultanément interagit avec ces deux items en question.
X
min (scoreu,i , scoreu,j )
u∈U (itemi ,itemj )
JaccardSimilarity(itemi , itemj ) = X
max (scoreu,i , scoreu,j )
u∈U (itemi ,itemj )

Cette formule est équivalente à :


X
min (viu , vju )
u
JaccardSimilarity(vi , vj ) = X
max (viu , vju )
u

Équation 2 – Similarité de Jaccard

Où :

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 14/33


— U(itemi , itemj ) est l’ensemble des users qui ont simultanément interagit avec les items
itemi et itemj .
— vi , vj sont deux vecteurs contenant les scores de deux items itemi et itemj en considérant
uniquement les users qui ont simultanément interagit avec les deux items.
— viu est l’élément qui correspond à l’utilisateur u dans le vecteur vi .

Méthodes à implémenter

Q16. measure(...) : calcule et retourne un réel représentant la similarité de Jaccard entre les
deux items dont les noms sont passés dans les paramètres colName1 et colName2 comme
illustré par l’équation 2.

Espace de réponse pour Q16

class JaccardSimilarityMeasure(SimilarityMeasure):
def measure(self, colName1, colName2):
BI
B-
Solution:

class JaccardSimilarityMeasure(SimilarityMeasure):
IP
def measure(self, colName1, colName2):
c1, c2 = [Link](colName1, colName2)
a = [Link]([c1,c2])
E
return ([Link](axis = 0).sum()/ [Link](axis = 0).sum())
IS

Interface de la classe EuclidianSimilarityMeasure


Rôle & responsabilités

Cette classe concrète encapsule la logique de production d’une matrice de similarité basée
sur la distance euclidienne qui représente la longueur de la droite qui relie deux vecteurs
vi et vj représentants les scores de deux items en considérant uniquement les users qui ont
simultanément interagit avec ces deux items en question.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 15/33


1
EuclidianSimilarity(itemi , itemj ) = s X
1+ (scoreu,i − scoreu,j )2
u∈U (itemi ,itemj )

Cette formule est équivalente à :


1
EuclidianSimilarity(vi , vj ) = s
X
1+ (viu − vju )2
u

Équation 3 – Similarité euclidienne

Où :
— U(itemi , itemj ) est l’ensemble des users qui ont simultanément interagit avec les items
itemi et itemj .
— vi , vj sont deux vecteurs contenant les scores de deux items itemi et itemj en considérant
uniquement les users qui ont simultanément interagit avec les deux items.
BI
— viu est l’élément qui correspond à l’utilisateur u dans le vecteur vi .

Méthodes à implémenter
B-
Q17. measure(...) : calcule et retourne un réel représentant la similarité euclidienne entre les
deux items dont les noms sont passés dans les paramètres colName1 et colName2 comme
illustré par l’équation 3.
IP
Espace de réponse pour Q17

class EuclidianSimilarityMeasure(SimilarityMeasure):
E
def measure(self, colName1, colName2):
IS

Solution:

class EuclidianSimilarityMeasure(SimilarityMeasure):
def measure(self, colName1, colName2):
c1, c2 = [Link](colName1, colName2)
return 1 / (1+ [Link](((c1-c2)**2).sum()))

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 16/33


Interface de la classe SelectionStrategy
Rôle & responsabilités
Cette classe abstraite encapsule la stratégie d’extraction des items les plus similaires à un item
donné à partir d’un domaine d’items qui contient les items avec lesquels un utilisateur donné
a interagi. La similarité entre les items est capturée dans une matrice de similarité attachée
aux instances de cette classe.

Attributs

— sMatrix : instance de la classe SimilarityMatrix, contenant les similarités entre toutes


les paires possibles d’items.

Méthodes à implémenter
La méthode __init__(...) : initialise l’attribut sMatrix à partir du paramètre d’entrée.

class SelectionStrategy:
BI
def __init__(self, sMatrix):
[Link] = sMatrix
B-
La méthode select(...) : implémente une stratégie de sélection des items les plus similaires
à un item donné colName à partir d’un ensemble d’items colDomain. Cette méthode sera
redéfinie dans les classes filles.
IP
def select(self, colName, colDomain):
# pour cette classe le script de cette méthode
# n'est pas demandé
E IS
Interface de la classe KNNStrategy
Rôle & responsabilités
Cette classe concrète implémente une stratégie de sélection qui extrait les n plus proches
voisins à un item donné à partir du domaine d’items. La notion de proximité entre les items
est proportionnelle à la similarité entre les items représentée par l’attribut sMatrix.

Attributs

— n : entier positif qui représente le nombre de voisins les plus similaires relativement à
colName que la méthode select doit extraire à partir du domaine d’items colDomain.

Méthodes à implémenter
La méthode __init__(...) : initialise à partir des paramètres, les attributs hérités et l’attribut
n. Cette méthode est implémentée comme suit :

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 17/33


class KNNStrategy(SelectionStrategy):
def __init__(self, smatrix, n):
super().__init__(smatrix)
self.n = n

Q18. La méthode select(...) : implémente une stratégie de sélection des items les plus similaires
à un item donné colName à partir d’un ensemble d’items colDomain. Cette méthode doit trier
les items de colDomain selon leurs similarités relatives à l’item colName puis retourne les
n premiers items de cette liste triée.

Espace de réponse pour Q18

def select(self, colName, colDomain):


BI

Solution:
B-

def select(self, colName, colDomain):


return sorted(colDomain, key =
IP
lambda colNamei : [Link][colName, colNamei],
reverse = True)[:self.n]
E

Interface de la classe ThresholdStrategy


IS
Rôle & responsabilités

Cette classe concrète implémente une stratégie de sélection qui extrait du domaine d’items
colDomain tous les items dont la similarité relative à l’item colName est supérieure ou égale
à un seuil alpha.

Attributs

— alpha : réel positif représentant le seuil de similarité minimale, permettant de détermi-


ner les items à extraire du domaine d’items colDomain, en fonction de leurs similarités
relatives à l’item colName.

Méthodes à implémenter

La méthode __init__(...) : initialise à partir des paramètres, les attributs hérités et égale-
ment l’attribut alpha. Cette méthode est implémentée comme suit :

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 18/33


class ThresholdStrategy(SelectionStrategy):
def __init__(self, sMatrix, alpha):
super().__init__(sMatrix)
[Link] = alpha

Q19. La méthode select(...) : implémente une stratégie de sélection des items les plus similaires
à un item donné colName à partir d’un ensemble d’items colDomain. Elle retourne la liste des
items de colDomain ayant une similarité relative à colName supérieure ou égale à alpha.

Espace de réponse pour Q19

def select(self, colName, colDomain):


BI

Solution:
B-
def select(self, colName, colDomain):
return [colNamei for colNamei in colDomain
if [Link][colName, colNamei] >= [Link]]
IP

Interface de la classe IBCFSystem


E

Rôle & responsabilités


IS
Cette classe joue le rôle d’une façade qui exploite les classes précédentes pour implémenter un
système de recommandation basé sur le modèle IBCF son interface offre deux méthodes :
— fit(...) : qui assure l’apprentissage des similarités à partir d’un MaskedDataFrame.
— predict(...) : qui exploite les données apprises pour prédire un score potentiel qu’un
utilisateur aurait attribué à un item à suggérer.

Attributs

— sMeasure : une chaîne de caractère décrivant la mesure de similarité que le système doit
adopter, elle supporte les valeurs "cosine", "jaccard" ou bien "euclidian".
— selectParameter : une valeur numérique décrivant le paramètre de la stratégie de sé-
lection à adopter. Elle peut prendre deux formes : KNNStrategy pour un paramètre
de type int (paramètre formel n) et ThresholdStrategy pour un paramètre de type
float (paramètre formel alpha).
— mdf : instance de la classe MaskedDataFrame.
— sMatrix : instance de la classe SimilarityMatrix.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 19/33


— strategy : instance de la classe SelectionStrategy.
— mdf, sMatrix et strategy sont des attributs qui seront initialisés dans la méthode
fit (à traiter dans Q20).

Méthodes à implémenter

La méthode __init__(...) : initialise les attributs à partir des deux paramètres d’entrée.
Cette méthode est implémentée comme suit :

class IBCFSystem:
def __init__(self, similarityMeasure, selectParameter):
[Link] = similarityMeasure
[Link] = selectParameter

Q20. La méthode fit(...) : implémente la phase d’apprentissage des similarités à partir du para-
mètre mdf instance de la classe MaskedDataFrame. Cette méthode doit appliquer la démarche
suivante :
BI
1. Créer un attribut mdf à partir du paramètre d’entrée.
2. Selon l’attribut sMeasure et en utilisant l’attribut mdf, instancier la classe dérivée re-
présentant la Mesure de similarité adéquate et l’affecter à l’attribut sMeasure.
B-
3. Construire la matrice de similarités et l’affecter à l’attribut sMatrix.
4. Selon la nature du paramètre selectParameter, instancier la classe dérivée représentant
la Stratégie de sélection adéquate et l’affecter à l’attribut strategy.
IP
Espace de réponse pour Q20

def fit(self, mdf):


E IS

Solution:

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 20/33


def fit(self, mdf):
[Link] = mdf
if [Link] == "cosine":
[Link] = CosineSimilarityMeasure(mdf)
elif [Link] == "jaccard":
[Link] = JaccardSimilarityMeasure(mdf)
else:
[Link] = EuclidianSimilarityMeasure(mdf)
[Link] = [Link]()
if type([Link]) == int:
[Link] = KNNStrategy([Link],
,→ [Link])
else:
[Link] = ThresholdStrategy([Link],
,→ [Link])
BI

Q21. La méthode predict(...) : implémente la phase de prédiction du score qu’un user rowName au-
rait donnée à un item colName. Cette méthode doit effectuer les étapes suivantes :
B-
1. En utilisant l’attribut mdf tester si l’user a déjà interagit avec l’item et retourner le score
attribué si c’est le cas.
2. Sinon, construire colDomain l’ensemble des items que l’user rowName a interagit avec.
3. Si colDomain est vide, alors retourner None.
IP
4. Sinon, appliquer la stratégie de sélection pour construire une liste selected contenant
les items les plus similaires à colName qui ont été appréciés par l’user rowName.
5. Calculer puis retourner score
ˆ rowName,colName le score que l’user rowName aurait attribué à
E
l’item colName en appliquant l’équation suivante :
X
IS
sMatrixi,colName scorerowName,i
i∈selected
ˆ rowName,colName =
score X
|sMatrixi,colName |
i∈selected

Équation 4 – Prédiction du score

Espace de réponse pour Q21

def predict(self, rowName, colName):

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 21/33


Solution:

def predict(self, rowName, colName):


colDomain = [Link](rowName)
mdf = [Link]
smatrix = [Link]
if len(colDomain) == 0:
return None
if mdf[rowName, colName] is not None:
return mdf[rowName, colName]
else:
selected = [Link](colName, colDomain)
,→ #N(i;u)
denom = sum(abs(smatrix[colName, colNamei]) for colNamei
,→ in colDomain)
numerator = sum(smatrix[colName, colNamei] * mdf[rowName,
,→ colNamei]
BI
for colNamei in colDomain)
return numerator/denom
B-
IP
E IS

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 22/33


Partie II : Base de Données Relationnelle
Le cloud computing fait référence à l’utilisation de la mémoire et des capacités de calcul des
ordinateurs et des serveurs répartis dans le monde entier et liés par un réseau. Les applications
et les données ne se trouvent plus sur un ordinateur déterminé d’une entreprise donnée mais
dans un cloud composé de nombreux serveurs distants interconnectés formant un centre de
calcul réparti. Les entreprises louent donc du matériel, des applications et des services chez
des fournisseurs cloud computing pour réduire leurs charges de développement IT.
L’objectif de cette partie est de gérer la consommation des entreprises clientes en terme de
services et de ressources matérielles.
Le schéma relationnel de la base de données décrit ci-dessous a été élaboré pour les besoins de
l’énoncé.

■ DataCenters(DataCenterID, NomDC, Emplacement, CapacitéServ)


La table DataCenters enregistre les informations relatives aux centres de calcul qui
offrent leurs services et ressources.
— DataCenterID : identifiant d’un centre de calcul, de type entier clé primaire.
— NomDC : nom du centre de calcul, de type chaîne de caractères.
BI
— Emplacement : désigne l’emplacement physique du centre de calcul, de type chaîne
de caractères.
— CapacitéServ : le nombre maximum de serveurs qu’un centre de calcul peut contenir,
de type entier.
B-
■ Serveurs(ServeurID, NomSrv, AdresseIP, CapacitéStk, Statut, #DataCenterID)
La table Serveurs enregistre les informations relatives aux serveurs installés dans les
différents centres de données.
IP
— ServeurID : utilisé pour identifier de manière unique chaque serveur, de type entier
clé primaire.
— NomSrv : nom du serveur, de type chaîne de caractères.
E
— AdresseIP : c’est l’adresse IP du serveur, de type chaîne de caractères.
— CapacitéStk : indique la capacité de stockage du serveur, exprimée en téraoctets, de
type entier.
IS
— Statut : représente l’état actuel du serveur, par exemple, s’il est en ligne, hors ligne,
en maintenance, etc., de type chaîne de caractères.
— DataCenterID : identifiant d’un centre de calcul de type entier, clé étrangère qui fait
référence à la table DataCenter.
■ Logiciels(LogicielID, NomLog, Version, Editeur, Type)
La table Logiciels enregistre les informations relatives aux applications offertes par le
centre de calcul.
— LogicielID : utilisé pour identifier de manière unique chaque logiciel, de type entier
clé primaire.
— NomLog : nom du logiciel, de type chaîne de caractères.
— Version : version spécifique actuelle du logiciel, de type chaîne de caractères.
— Editeur : nom de l’entreprise ou de l’individu qui a développé ou édité le logiciel, de
type chaîne de caractères.
— Type : type du logiciel, par exemple, système d’exploitation, application de com-
merce électronique, application de gestion de stock, utilitaire, etc., de type chaîne de
caractères.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 23/33


■ Licences(LicenceID, TypeLicence, DateExp, #LogicielID)
La table Licences enregistre les informations relatives aux licences permises aux diffé-
rents logiciels. Certains logiciels libres sont livrés sans licences.
— LicenceID : utilisé pour identifier de manière unique chaque licence, de type entier
clé primaire.
— TypeLicence : représente le type de distribution d’une licence, par exemple, proprié-
taire, open source, libre, commercial, etc., de type chaîne de caractères.
— DateExp : date à laquelle la licence expire, indiquant jusqu’à quand le logiciel peut
être légalement utilisé avec cette licence, de type date selon le format "AAAA-MM-JJ".
— LogicielID : identifiant du logiciel associé à une licence donnée, clé étrangère qui
fait référence à la table Logiciels.
■ Utilisateurs(UserID, NomUser, Mail, Rôle)
La table Utilisateurs enregistre les informations relatives aux entreprises qui louent
des services de Cloud Computing.
— UserID : identifiant de l’entreprise locataire d’un ou plusieurs services, de type entier
clé primaire.
— NomUser : nom de l’entreprise locataire, de type chaîne de caractères.
BI
— Mail : adresse mail de l’entreprise locataire, de type chaîne de caractères.
— Rôle : activité économique de l’entreprise locataire, par exemple, une banque, une
assurance, une boîte de développement, etc., de type chaîne de caractères.
B-
■ Affectations(AffectationID, DateAffect, DuréeEstimée, #UserID, #ServeurID,
#LicenceID)
La table Affectations enregistre les informations relatives à un acte de location qui se
traduit par une affectation d’une licence logiciel installée sur un serveur pour un utilisateur
IP
donné.
— AffectationID : utilisé pour identifier de manière unique chaque affectation de type
entier, clé primaire.
E
— DateAffect : Indique la date à laquelle l’affectation a été effectuée, de type date
selon le format "AAAA-MM-JJ".
— DuréeEstimée : Représente la durée estimée de l’affectation, exprimée en heures, de
IS
type entier.
— UserID : identifiant de l’entreprise locataire, de type entier clé étrangère qui fait
référence à la table Utilisateurs.
— ServeurID : identifiant d’un serveur sur lequel les données de l’utilisateur sont enre-
gistrées, de type entier clé étrangère qui fait référence à la table Serveurs.
— LicenceID : identifiant de la licence louée par un utilisateur, de type entier, clé
étrangère qui fait référence à la table Licences.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 24/33


Travail demandé
Algèbre relationnelle

Exprimer en algèbre relationnelle les requêtes permettant de :

Q22. Lister les identifiants des serveurs avec leurs capacités de stockage.

Espace de réponse pour Q22

Solution:
Π (Serveurs)
BI
ServeurID,CapacitéStk

Q23. Lister les identifiants et les adresses IP des serveurs qui hébergent des logiciels utilisés par
B-
des entreprises qui œuvrent dans le domaine de l’assurance.

Espace de réponse pour Q23


IP
E IS
Solution:

Π
ServeurID,AdresseIP

σ
Rôle= "assurance"

Serveurs ▷◁
ServeurID
Affectations ▷◁
UserID
Utilisateurs


SQL

Q24. Écrire la requête qui permet de créer la table Affectations en supposant que toutes les
tables référencées sont déjà créées.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 25/33


Espace de réponse pour Q24

Solution:

CREATE TABLE Affectations (


AffectationID INTEGER PRIMARY KEY,
Dat_affectation DATE,
Durée_estimée INTEGER,
UserID INTEGER,
ServeurID INTEGER,
LicenceID INTEGER,
FOREIGN KEY (UserID) REFERENCES Utilisateurs (UserID),
BI
FOREIGN KEY (ServeurID) REFERENCES Serveurs (ServeurID),
FOREIGN KEY (LicenceID) REFERENCES Licences (LicenceID)
);
B-

Dans la suite on suppose que les tables de la base de données sont remplies en respectant les
IP
contraintes et les règles de gestion su citées.

Q25. Calculer la capacité totale de stockage pour chaque centre de calcul.


E
Espace de réponse pour Q25
IS

Solution:

SELECT DataCenterID, SUM(CapacitéStk) AS CapacitéTOT


FROM Serveurs
GROUP BY DataCenterID;

Q26. Déterminer tous les détails relatifs aux logiciels qui pour le moment n’ont aucune licence.

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 26/33


Espace de réponse pour Q26

Solution:

SELECT *
FROM Logiciels
WHERE LogicielID NOT IN
(
SELECT LogicielID
FROM Licences
);
BI

Q27. Déterminer toutes les informations relatives aux serveurs qui hébergent des logiciels avec
des licences de type "logiciel libre".
B-
Espace de réponse pour Q27
IP
E

Solution:
IS
SELECT *
FROM Serveurs
WHERE ServeurID IN
(
SELECT ServeurID
FROM Affectations as A, Licences AS L
WHERE ([Link] = [Link])
AND (TypeLicence LIKE "logiciel libre")
);
/* ou bien */
SELECT S.*
FROM Serveurs AS S, Affectations as A, Licences AS L
WHERE [Link] = [Link]
AND [Link] = [Link]
AND TypeLicence LIKE "logiciel libre";

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 27/33


Q28. Déterminer les identifiants, les capacités serveurs et les capacités disponibles (égale à la
capacité serveur du DataCenter – nombre de serveurs effectivement affectés à ce DataCenter)
le résultat sera trié par ordre décroissant des capacités disponibles.

Espace de réponse pour Q28

Solution:

SELECT [Link],
CapacitéServ,
CapacitéServ - COUNT(*) AS CapacitéDispo
FROM DataCenters AS D, Serveurs AS S
BI
WHERE [Link] = [Link]
GROUP BY [Link]
ORDER BY CapacitéDispo DESC;
B-
IP
E IS

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 28/33


SQLITE

Dans cette partie, on suppose que la table suivante a été ajoutée à la base de données :
■ Monitoring(MonitoringID, DateSurv, Statut, Commentaires, DuréeStatut, #UserID, #ServeurID)
La table Monitoring enregistre les informations relatives à des prélèvements réguliers pour
assurer la surveillance de performances et de disponibilité des serveurs pour les utilisateurs.
C’est le basculement de statut d’un serveur qui provoque l’insertion d’un nouveau tuple dans
cette base.
— MonitoringID : utilisé pour identifier de manière unique chaque enregistrement de sur-
veillance, de type entier clé primaire.
— DateSurv : indique la date et l’heure auxquelles la surveillance a été effectuée, de type
date et heure selon le format "AAAA-MM-JJ HH:MM:SS".
— Statut : Il indique l’état opérationnel du serveur au moment de la surveillance, ce qui
peut être utile pour analyser les performances et la disponibilité du serveur au fil du
temps. Ce champ pourrait inclure des valeurs telles que "En ligne", "Hors ligne",
"En maintenance", "En panne", "En surcharge", etc., de type chaîne de caractères.
— Commentaires : champ permettant d’enregistrer des commentaires ou des notes sur le
déroulement de la surveillance, de type chaîne de caractères.
BI
— DuréeStatut : La durée exprimée en millisecondes pendant laquelle le serveur reste dans
le statut actuel avant de basculer vers un autre statut, de type entier.
— UserID : identifiant de l’entreprise locataire de type entier clé étrangère qui fait référence
B-
à la table Utilisateurs.
— ServeurID : identifiant d’un serveur sur lequel les données de l’utilisateur sont enregistrées
de type entier, clé étrangère qui fait référence à la table Serveurs.
IP
Dans la suite, les fonctions demandées doivent être écrites en Python en désignant par cur le
curseur d’exécution des requêtes.

Q29. Écrire la fonction ServerMonitoring qui prend deux paramètres cur et serverID l’iden-
E
tifiant d’un serveur et retourne un dictionnaire dStat où les clés sont les statuts qui ont été
observés durant le monitoring de ce serveur et les valeurs sont des ensembles contenant les
dates et heures des observations de ces statuts.
IS

Espace de réponse pour Q29

def ServerMonitoring(cur, serverID):

Solution:

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 29/33


def ServerMonitoring(cur, serverID):
query = """
SELECT Statut, DateSurv
FROM Monitoring
WHERE ServeurID = ?;
"""
[Link](query, [serverID])
dStat = {}
for statut, datesurv in [Link]():
if statut not in dStat:
dStat[statut] = {datesurv}
else:
dStat[statut].add(datesurv)
return dStat
BI
Q30. Écrire la fonction DCStatutTimeSpan qui prend deux paramètres cur et dataCenterID l’iden-
tifiant d’un centre de calcul et retourne un dictionnaire ddcStat où les clés sont les sta-
tuts qui ont été observés durant le monitoring des serveurs installés dans ce centre de calcul
B-
("En ligne", "Hors ligne", "En maintenance", "En panne", "En surcharge") et les va-
leurs sont les durées de temps cumulés de tous les serveurs pour chaque statut.

Espace de réponse pour Q30


IP
def DCStatutTimeSpan(cur, dataCenterID):
E IS

Solution:

def DCStatutTimeSpan(cur, dataCenterID):


query = """
SELECT [Link], SUM(DuréeStatut) AS dTot
FROM Monitoring AS M, Serveurs AS S
WHERE ([Link] = [Link]) AND (DataCenterID = ?)
GROUP BY [Link];
"""
[Link](query, [dataCenterID])
ddcStat = {statut:duree for statut, duree in [Link]()}
return ddcStat

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 30/33


Q31. Écrire la fonction DCavailability qui prend deux paramètres cur et dataCenterID, l’iden-
tifiant d’un centre de calcul, et retourne disponibility, le ratio de disponibilité de ce centre
de calcul. Sachant que le ratio de disponibilité d’un centre de calcul est le rapport entre toutes
les durées de temps cumulées de ses serveurs pour le statut "En ligne", sur la somme des
durées de temps cumulées pour tous les états possibles.

Den ligne
Disponibility =
Dtotal

— Den ligne représente la durée cumulée où le datacenter était en ligne,


— Dtotal représente la somme de toutes les durées cumulées pour tous les statuts possibles.

Pour exprimer Dtotal sous forme d’une équation, on peut écrire :

X
Dtotal = Ds
s∈Statuts
BI
Espace de réponse pour Q31

def DCavailability(cur, dataCenterID):


B-
IP

Solution:
E IS
def DCavailability(cur, dataCenterID):
ddcStat = DCStatutTimeSpan(cur, dataCenterID)
disponibility = ddcStat['En ligne']/ sum([Link]())
return disponibility

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 31/33


Espace de réponse supplémentaire

BI
B-
IP
E IS

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 32/33


Espace de réponse supplémentaire

BI
B-
IP
E IS

Concours MP, PC et T Session 2024 Epreuve d’Informatique Page 33/33

Vous aimerez peut-être aussi