-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.py
152 lines (107 loc) · 4.49 KB
/
App.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# Import des bibliothèques nécessaires
import pandas as pd
from itertools import combinations
from fct import *
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from reportlab.pdfgen import canvas
import io
from flask import send_file
#from sklearn.preprocessing import StandardScaler
#from mlxtend.preprocessing import TransactionEncoder
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def upload_file():
return render_template('upload.html')
@app.route('/hello')
def hello():
return render_template('hello.html')
@app.route('/uploader', methods = ['GET', 'POST'])
def uploader_file():
if request.method == 'POST':
f = request.files['file']
min_sup =float( request.form['min_sup'])
min_conf = float(request.form['min_conf'] )
lift_choix = request.form['lift']
type_algorithme= request.form['type_algorithme']
filename = f.filename
f.save(f.filename)
# Chargement des données
df = pd.read_csv(filename,header=None)
# Vérification de l'existence de la colonne "Date"
# Nettoyage des données
df.dropna(inplace=True) # suppression des valeurs manquantes
df.drop_duplicates(inplace=True) # suppression des doublons Lignes
df = df.astype(str)
array = df.values
# Exemple d'utilisation de la fonction Apriori avec un ensemble de données fictif
data = [['a', 'b', 'c', 'd'], ['a', 'c', 'd'], ['b', 'c'], ['a', 'b', 'd'], ['a', 'c', 'd']]
#min_sup = -0.3
#min_conf = 0.6
match type_algorithme:
case '1':
rules , frequent_itemsets =apriori_Classique_frozenset(array, min_sup, min_conf,lift_choix)
print(type(rules))
case '2':
rules , frequent_itemsets = apriori_vfrag_Frozenset(array, min_sup, min_conf,lift_choix)
rules= list(rules)
print(type(rules))
case '3':
rules , frequent_itemsets = apriori_Close(array, min_sup, lift_choix )
rules= list(rules)
print(rules)
# Affichage des règles d'association générées
freq_items_dict = {tuple(sorted(list(k))): v for k, v in frequent_itemsets.items()}
# Convert float keys to string keys
itemsets_frequens = {str(k): v for k, v in freq_items_dict.items()}
# Sort itemsets based on frequency values
sorted_itemsets = itemsets_frequens.items()
# Convert float keys to string keys
# Extract itemsets and frequencies as separate lists
labels = [', '.join(list(itemset)) for itemset, freq in sorted_itemsets]
frequencies = [freq for itemset, freq in sorted_itemsets]
# Create bar plot
fig, ax = plt.subplots()
ax.bar(labels, frequencies)
# Add labels, title, and legend
ax.set_xlabel('Itemsets')
ax.set_ylabel('Frequency')
ax.set_title('Frequent Itemsets')
ax.legend(['Support'])
# Save plot to PNG image file
fig.savefig('static/plot.png')
# Save plot to PNG image file
plot_buf = io.BytesIO()
fig.savefig(plot_buf, format='png')
plot_buf.seek(0)
# Écrire les frozensets dans le fichier avec un saut de ligne
with open("frozensets.txt", "w") as f:
f.write('Les itemset frequent :' + '\n')
for freq in freq_items_dict :
f.write(str(freq) + '\n')
f.write('The rules :' + '\n')
for rule in rules:
rule_str = ' => '.join([str(itemset) for itemset in rule])
f.write(rule_str + '\n')
# Générer le PDF
c = canvas.Canvas("static/frozensets.pdf")
y = 750 # Position verticale de départ
# Lire les frozensets à partir du fichier et les ajouter au PDF
with open("frozensets.txt", "r") as f:
for line in f:
c.drawString(50, y, line.strip())
y -= 20 # Saut de ligne
c.save()
# Return the HTML template with links to the plot.png and frozensets.pdf files
return render_template('result.html', plot_path='/plot.png', pdf_path='/frozensets.pdf')
# Serve the plot.png file
@app.route('/plot.png')
def plot_png():
return send_file(io.BytesIO(open('plot.png', 'rb').read()), mimetype='image/png')
# Serve the frozensets.pdf file
@app.route('/frozensets.pdf')
def frozensets_pdf():
return send_file('frozensets.pdf', mimetype='application/pdf')
if __name__ == '__main__':
app.run(debug = True)