parent
8197fdf825
commit
f2bc57acf9
@ -0,0 +1,16 @@ |
|||||||
|
from abc import ABC, abstractmethod |
||||||
|
|
||||||
|
|
||||||
|
class AbstractImporter(ABC): |
||||||
|
|
||||||
|
def __init__(self, files_path): |
||||||
|
self.files_path = files_path |
||||||
|
super().__init__() |
||||||
|
|
||||||
|
@abstractmethod |
||||||
|
def import_trajectories(self, raw_data): |
||||||
|
pass |
||||||
|
|
||||||
|
@abstractmethod |
||||||
|
def import_structure(self, raw_data): |
||||||
|
pass |
@ -1,128 +0,0 @@ |
|||||||
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] |
|
||||||
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 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,67 @@ |
|||||||
|
import os |
||||||
|
import glob |
||||||
|
import pandas as pd |
||||||
|
import json |
||||||
|
import numpy as np |
||||||
|
from abstract_importer import AbstractImporter |
||||||
|
|
||||||
|
|
||||||
|
class JsonImporter(AbstractImporter): |
||||||
|
|
||||||
|
def __init__(self, files_path): |
||||||
|
self.df_samples_list = [] |
||||||
|
self.df_structure = pd.DataFrame() |
||||||
|
self.df_variables = pd.DataFrame() |
||||||
|
super(JsonImporter, self).__init__(files_path) |
||||||
|
|
||||||
|
def import_data(self): |
||||||
|
data = self.read_json_file() |
||||||
|
self.import_trajectories(data) |
||||||
|
self.import_structure(data) |
||||||
|
self.import_variables(data) |
||||||
|
|
||||||
|
|
||||||
|
def import_trajectories(self, raw_data): |
||||||
|
self.normalize_trajectories(raw_data, 0, 'samples') |
||||||
|
|
||||||
|
def import_structure(self, raw_data): |
||||||
|
self.df_structure = self.one_level_normalizing(raw_data, 0, 'dyn.str') |
||||||
|
|
||||||
|
def import_variables(self, raw_data): |
||||||
|
self.df_variables = self.one_level_normalizing(raw_data, 0, 'variables') |
||||||
|
|
||||||
|
def read_json_file(self): |
||||||
|
try: |
||||||
|
read_files = glob.glob(os.path.join(self.files_path, "*.json")) |
||||||
|
for file_name in read_files: |
||||||
|
with open(file_name) as f: |
||||||
|
data = json.load(f) |
||||||
|
return data |
||||||
|
except ValueError as err: |
||||||
|
print(err.args) |
||||||
|
|
||||||
|
def one_level_normalizing(self, raw_data, indx, variables_key): |
||||||
|
return pd.json_normalize(raw_data[indx][variables_key]) |
||||||
|
|
||||||
|
def normalize_trajectories(self, raw_data, indx, trajectories_key): |
||||||
|
for sample_indx, sample in enumerate(raw_data[indx][trajectories_key]): |
||||||
|
self.df_samples_list.append(pd.json_normalize(raw_data[indx][trajectories_key][sample_indx])) |
||||||
|
|
||||||
|
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] |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ij = JsonImporter("../data") |
||||||
|
ij.import_data() |
||||||
|
print(ij.df_samples_list[7]) |
||||||
|
print(ij.df_structure) |
||||||
|
print(ij.df_variables) |
Reference in new issue