|
|
|
import os
|
|
|
|
import glob
|
|
|
|
import pandas as pd
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Importer():
|
|
|
|
"""
|
|
|
|
Fornisce tutti i metodi per importare i dataset contenuti nella directory files_path
|
|
|
|
in pandas data_frame.
|
|
|
|
Permette di effettuare operazioni
|
|
|
|
volte ad ottenere i valori contenuti in tali frame nel formato utile alle computazioni successive.
|
|
|
|
|
|
|
|
:files_path: il path alla cartella contenente i dataset da utilizzare
|
|
|
|
:df_list: lista contentente tutti i padas_data_frame contenuti nella directory files_path
|
|
|
|
"""
|
|
|
|
def __init__(self, files_path):
|
|
|
|
self.files_path = files_path
|
|
|
|
self.df_list = []
|
|
|
|
|
|
|
|
|
|
|
|
def import_data_from_csv(self):
|
|
|
|
"""
|
|
|
|
Importa tutti i file csv presenti nel path files_path in data_frame distinti.
|
|
|
|
Aggiunge ogni data_frame alla lista df_list.
|
|
|
|
Parameters:
|
|
|
|
void
|
|
|
|
Returns:
|
|
|
|
void
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
read_files = glob.glob(os.path.join(self.files_path, "*.csv"))
|
|
|
|
for file in read_files:
|
|
|
|
my_df = pd.read_csv(file)
|
|
|
|
self.check_types_validity(my_df)
|
|
|
|
self.df_list.append(my_df)
|
|
|
|
except ValueError as err:
|
|
|
|
print(err.args)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def merge_value_columns(self, df):
|
|
|
|
"""
|
|
|
|
Effettua il merging di tutte le colonne che contengono i valori delle variabili
|
|
|
|
in un unica colonna chiamata State.
|
|
|
|
Parameters:
|
|
|
|
df: il data_frame su cui effettuare il merging delle colonne
|
|
|
|
Returns:
|
|
|
|
void
|
|
|
|
"""
|
|
|
|
df['State'] = df[df.columns[2:]].apply(lambda row: ''.join(row.values.astype(str)), axis=1)
|
|
|
|
|
|
|
|
def merge_value_columns_in_all_frames(self):
|
|
|
|
"""
|
|
|
|
Richiama il metodo merge_value_columns su tutti i data_frame contenuti nella df_list
|
|
|
|
Parameters:
|
|
|
|
void
|
|
|
|
Returns:
|
|
|
|
void
|
|
|
|
|
|
|
|
"""
|
|
|
|
for data_frame in self.df_list:
|
|
|
|
self.merge_value_columns(data_frame)
|
|
|
|
|
|
|
|
def drop_unneccessary_columns(self, df):
|
|
|
|
"""
|
|
|
|
Rimuove le colonne contenenti i valori delle variabili dal data_frame df.
|
|
|
|
Parameters:
|
|
|
|
df: il data_frame su cui rimuovere le colonne
|
|
|
|
Returns:
|
|
|
|
void
|
|
|
|
|
|
|
|
"""
|
|
|
|
cols = df.columns.values[2:-1]
|
|
|
|
print(cols)
|
|
|
|
df.drop(cols, axis=1, inplace=True)
|
|
|
|
|
|
|
|
def drop_unneccessary_columns_in_all_frames(self):
|
|
|
|
"""
|
|
|
|
Richiama il metodo drop_unneccessary_columns su tutti i data_frame contenuti nella df_list
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
void
|
|
|
|
Returns:
|
|
|
|
void
|
|
|
|
|
|
|
|
"""
|
|
|
|
for data_frame in self.df_list:
|
|
|
|
self.drop_unneccessary_columns(data_frame)
|
|
|
|
|
|
|
|
def get_data_frames(self):
|
|
|
|
"""
|
|
|
|
Restituisce la lista contenente tutti i data_frames caricati in df_list.
|
|
|
|
Parameters:
|
|
|
|
void
|
|
|
|
Returns:
|
|
|
|
data_frames list
|
|
|
|
"""
|
|
|
|
return self.df_list
|
|
|
|
|
|
|
|
def clear_data_frames(self):
|
|
|
|
"""
|
|
|
|
Rimuove tutti i valori contenuti nei data_frames presenti in df_list
|
|
|
|
Parameters:
|
|
|
|
void
|
|
|
|
Returns:
|
|
|
|
void
|
|
|
|
"""
|
|
|
|
for data_frame in self.df_list:
|
|
|
|
data_frame = data_frame.iloc[0:0]
|
|
|
|
|
|
|
|
|
|
|
|
def check_types_validity(self, data_frame): #Solo un esempio di controllo sui valori contenuti nel dataset
|
|
|
|
"""
|
|
|
|
Controlla la correttezza dei tipi contenuti nei dati caricati nel data_frame (in questo caso solo che nella seconda colonna siano contenuti dei float)
|
|
|
|
"""
|
|
|
|
if data_frame.iloc[:,1].dtype != np.float64:
|
|
|
|
raise ValueError("The Dataset is Not in the correct format")
|
|
|
|
|
|
|
|
#TODO Integrare i controlli di correttezza sul dataset e capire quali assunzioni vanno fatte
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|