Vous êtes sur la page 1sur 11

FOUILLE DE DONNÉES

CORRECTION TP1
PRÉSENTÉ PAR

M. Taoufik BEN ABDALLAH M. Ali BEN MRAD


 taoufik.benabdallah@iit.ens.tn  benmradali2@gmail.com
2022-2023 ⚫
Travaux pratiques 1

Importation des bibliothèques

!pip install mlxtend --upgrade

import pandas as pd

from mlxtend.frequent_patterns import apriori, association_rules, fpgrowth

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 2
Travaux pratiques 1

1) Charger le jeu de donnée produits.xlsx dans une variable nommée 𝒅𝒇_𝒑 en utilisant
la fonction read_excel de la bibliothèque pandas. Afficher 𝒅𝒇_𝒑

#Assemblage Google Drive dans Colaboratory


from google.colab import drive
drive.mount('/content/drive')

#Chargement du fichier

df_p=pd.read_excel("/content/drive/MyDrive/produits.xlsx")
df_p

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 3
Travaux pratiques 1

2) Déterminer les 𝒌 −items fréquents (𝒌 ≥ 𝟏) en appliquant l’algorithme Apriori


sachant que 𝑺𝒎𝒊𝒏 = 𝟎. 𝟒 (utiliser la fonction apriori de la bibliothèque
mlxtend.frequent_patterns). Le résultat sera enregistré dans un dataframe nommé
𝒇_𝒊𝒕𝒆𝒎𝒔_𝒂𝒑𝒓𝒊𝒐𝒓𝒊

f_items_apriori=apriori(df_p,
min_support=0.4, use_colnames=True)

f_items_apriori

DataFrames with non-bool types result in worse


computationalperformance and their support might be discontinued in
the future!

df_p.info()?

df_p=df_p.astype('bool')
df_p.info()

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 4
Travaux pratiques 1

3) Déterminer les 𝒌 −items fréquents (𝒌 ≥ 𝟏) en appliquant l’algorithme FP-growth


sachant que 𝑺𝒎𝒊𝒏 = 𝟎. 𝟒 (utiliser la fonction fpgrowth de la bibliothèque
mlxtend.frequent_patterns). Le résultat sera enregistré dans un dataframe nommé
𝒇_𝒊𝒕𝒆𝒎𝒔_𝒇𝒑𝒈𝒓𝒐𝒘𝒕𝒉

f_items_fpgrowth=fpgrowth(df_p,
min_support=0.4, use_colnames=True)

f_items_fpgrowth

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 5
Travaux pratiques 1
4) Comparer 𝒇_𝒊𝒕𝒆𝒎𝒔_𝒂𝒑𝒓𝒊𝒐𝒓𝒊 et 𝒇_𝒊𝒕𝒆𝒎𝒔_𝒇𝒑𝒈𝒓𝒐𝒘𝒕𝒉 en terme de temps d’exécution
(utiliser la commande python timeit en fixant r à 𝟏𝟎 et n à 𝟏𝟎𝟎. Interpréter les résultats
obtenus
FP-growth Apriori
Ligne de commande python

python -m timeit [-n N] [-r N] [statement ...]


-n N, --number=N
Nombre d’exécutions de l’instruction statement
-r N, --repeat=N
Le nombre de répétitions de calcul de Timer

%timeit -n 100 -

r 10 fpgrowth(df_p, min_support=0.6)
3.74 ms ± 84.4 µs per loop (mean ± std. dev. of 10
runs, 100 loops each)
%timeit -n 100 -
r 10 apriori(df_p, min_support=0.6)
1.38 ms ± 69.5 µs per loop (mean ± std. dev. of 10
runs, 100 loops each)

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 6
Travaux pratiques 1

5) Afficher l’ensemble des k-items fréquents (𝒌 ≥ 𝟐) contenant l’item 𝑪 à partir de


𝒇_𝒊𝒕𝒆𝒎𝒔_𝒂𝒑𝒓𝒊𝒐𝒓𝒊. Utiliser les fonctions de comparaison vectorisées des dataframes
pandas (𝐞𝐪(==), 𝐠𝐞(≥), et 𝐠𝐭(>))

DataFrame.eq
Compare DataFrames for equality elementwise

DataFrame.ge
Compare DataFrames for greater than inequality or equality elementwise

DataFrame.gt
Compare DataFrames for strictly greater than inequality elementwise

f_items_apriori[f_items_apriori['itemsets'].ge({'C'})]

>=({'C'})

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 7
Travaux pratiques 1

6) Déterminer et afficher toutes les règles d’association pertinentes à partir de


𝒇_𝒊𝒕𝒆𝒎𝒔_𝒂𝒑𝒓𝒊𝒐𝒓𝒊 sachant que 𝒄𝒐𝒏𝒇𝒎𝒊𝒏 = 𝟎. 𝟔 (utiliser la fonction association_rules
de la bibliothèque mlxtend.frequent). Le résultat sera enregistré dans un dataframe
nommé 𝒓𝒖𝒍𝒆𝒔𝟏
rules1 = association_rules(f_items_apriori,metric="confidence", min_threshold=0.6)

rules1
≥ 0.6

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 8
Travaux pratiques 1

7) Déterminer et afficher toutes les règles d’association intéressantes à partir


de 𝒓𝒖𝒍𝒆𝒔𝟏. Le résultat sera enregistré dans un dataframe nommé 𝒓𝒖𝒍𝒆𝒔𝟐

rules2=rules1[rules1['lift'].ge(1)].reset_index()

rules2

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 9
Travaux pratiques 1

8) Afficher les 𝟓 règles d’association les plus intéressantes à partir 𝒓𝒖𝒍𝒆𝒔𝟐 (utiliser
la fonction sort_values de la bibliothèque pandas pour trier la base de règles).

rules2=rules2.sort_values(by='lift',ascending=False).head()

rules2

[:5]
Parmi celles trouvées, afficher les règles d’association dont la condition (antecedents)
comporte l’item 𝑬 et le résultat (consequents) comporte l’item 𝑺

rules2[rules2['antecedents'].ge({'E'})]
[rules2['consequents'].ge({'S'})]

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 10
Travaux pratiques 1

9) Déterminer 𝑺𝒎𝒊𝒏 de sorte que le nombre de règles intéressantes est au moins égal à 3

import numpy as np
c=np.arange(1, 0.2, -0.1)

for i in c:
try:
rules = association_rules(apriori(df_p, min_support=i,
use_colnames=True), metric="lift", min_threshold=1)
if len(rules)>=3:
print("s_min={:.2f}".format(i))
break
except: pass

else:
print(None)

IIT-Sfax
T. Ben Abdallah & A. Ben Mrad 11

Vous aimerez peut-être aussi