Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
160 lines (126 loc) · 6.33 KB
/
Copy pathmain.py
File metadata and controls
160 lines (126 loc) · 6.33 KB
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
152
153
154
155
156
157
158
159
160
import pandas as pd
import utils.eda as eda
import utils.preprocessing as preprocessing
import utils.addestramento_word2vec as w2v
import utils.addestramento_supervisionato as add_sup
# Attivazione/disattivazione stampe dettagliate
stampe = False
# ==============================================================================
# IMPORT DEL DATASET
# ==============================================================================
print("\n\n==================================================")
print(" IMPORTAZIONE DEL DATASET ")
print("==================================================\n")
print("[INFO] Importazione del dataset...\n")
dataframe = pd.read_csv("dataset/netflix_titles.csv")
print("[OK] Dataset importato.\n")
# ==============================================================================
# EDA - ANALISI ESPLORATIVA DEI DATI
# ==============================================================================
print("\n\n==================================================")
print(" ANALISI ESPLORATIVA DEL DATASET (EDA) ")
print("==================================================\n")
print("[INFO] Avvio analisi esplorativa del dataset...\n")
eda.general_informations(dataframe)
if stampe:
print("\n[INFO] Generazione dei grafici di analisi esplorativa...\n")
eda.bar_product_subdivision(dataframe)
eda.bar_plot_series(dataframe)
eda.bar_plot_movie(dataframe)
eda.plot_product_genres(dataframe)
print("[OK] Grafici EDA generati con successo.\n")
# ==============================================================================
# PREPROCESSING
# ==============================================================================
print("\n\n==================================================")
print(" PREPROCESSING DATI ")
print("==================================================\n")
print("[INFO] Avvio preprocessing del dataset...\n")
# Unificazione generi
print("[INFO] Unificazione dei generi in corso...\n")
dataframe = preprocessing.unify_genres(dataframe)
print("[OK] Generi unificati.\n")
if stampe:
print("[INFO] Generazione del grafico di unificazione dei generi...\n")
eda.plot_unified_product_genres(dataframe)
print("[OK] Grafico generato con successo.\n")
# Rinomina features
print("\n[INFO] Rinomina delle colonne in corso...\n")
dataframe = preprocessing.rename_features(dataframe)
print("[OK] Rinomina completata.\n")
dataframe.info()
# Gestione valori nulli
print("\n[INFO] Identificazione e gestione dei valori nulli...\n")
preprocessing.find_null_values(dataframe)
dataframe = preprocessing.manage_null_values(dataframe)
preprocessing.find_null_values(dataframe)
print("[OK] Valori nulli gestiti correttamente.\n")
# Rimozione duplicati
print("\n[INFO] Rimozione duplicati...\n")
dataframe = preprocessing.remove_duplicates(dataframe)
print("[OK] Duplicati rimossi.\n")
# Eliminazione di features non utili al programma
print("\n[INFO] Eliminazione delle features non utili per il programma...\n")
dataframe = preprocessing.delete_features(dataframe)
print("[OK] Eliminazione completata.\n")
# Modifica valori tipo
print("\n[INFO] Mappatura dei valori di tipo del prodotto in corso...\n")
dataframe = preprocessing.type_permutation(dataframe)
print("[OK] Tipologia di prodotto mappata.\n")
# Mapping categorie età
print("\n[INFO] Mappatura categorie di età...\n")
dataframe['Categoria'] = dataframe['Categoria'].apply(preprocessing.map_rating)
print("[OK] Categorie di età mappate.\n")
if stampe:
print("[INFO] Generazione del grafico di distribuzione delle categorie di età...\n")
eda.bar_plot_categories(dataframe)
print("[OK] Grafico generato con successo.\n")
# Permutazione generi in vettori numerici
print("\n[INFO] Conversione generi in vettori numerici...\n")
dataframe = preprocessing.create_genres_vector(dataframe)
print("[OK] Conversione completata.\n")
print("\n\n[OK] Preprocessing completato. Dataset finale:\n")
dataframe.info()
# Creazione copia dataset per addestramento non supervisionato
non_sup_dataframe = dataframe.copy()
# ==============================================================================
# APPRENDIMENTO SUPERVISIONATO - TEST
# ==============================================================================
print("\n\n==================================================")
print(" TEST APPRENDIMENTO SUPERVISIONATO ")
print("==================================================\n")
print("[INFO] Avvio test apprendimento supervisionato...\n")
add_sup.simulate_testing_sup_train(dataframe, stampe=stampe)
print("[OK] Test completato.\n")
# ==============================================================================
# APPRENDIMENTO NON SUPERVISIONATO - TEST
# ==============================================================================
print("\n\n==================================================")
print(" TEST APPRENDIMENTO NON SUPERVISIONATO ")
print("==================================================\n")
print("[INFO] Avvio test apprendimento non supervisionato...\n")
no_sup_model = w2v.simulate_testing_non_sup_train(dataframe, stampe=stampe)
print("[OK] Test completato.\n")
# ==============================================================================
# INTERAZIONE UTENTE
# ==============================================================================
while True:
print("\n\n==================================================")
print(" MENU PRINCIPALE ")
print("==================================================\n")
print("1 - Cercare film per parole chiave (Apprendimento non supervisionato)")
print("2 - Cercare film per preferenze personali (Apprendimento supervisionato)")
print("3 - Uscire")
print("==================================================\n")
scelta = input("Inserire il numero dell'opzione desiderata: ").strip()
if scelta == "1":
print("\n[INFO] Avvio ricerca per parole chiave...")
w2v.search_movies_by_user_input(non_sup_dataframe, no_sup_model, stampe=stampe)
elif scelta == "2":
print("\n[INFO] Avvio ricerca basata sulle preferenze personali...\n")
add_sup.user_testing_sup_train(dataframe, stampe=stampe)
elif scelta == "3":
print("\n[INFO] Uscita dal programma...\n")
break
else:
print("\n[ERRORE] Scelta non valida. Inserire un numero tra 1 e 3.\n")