Source code for handwriting_sample.reader.readers

import os
import json
import pandas as pd
from handwriting_sample.base import LoggableObject


# ------------ #
# File readers #
# ------------ #

[docs]class JSONFileReader(LoggableObject): """Class implementing JSON file reader"""
[docs] @classmethod def read(cls, path, verbose=False): """Reads the handwriting data and meta data""" # Read the handwriting data from a JSON file with open(path, "r") as file: json_data = json.load(file) # Get data and meta data data = json_data.get("data") meta = json_data.get("meta_data") cls.log(f"Data has been loaded from a JSON file: {path}", be_verbose=verbose) # Return data and meta data return data, meta
[docs]class SVCFileReader(LoggableObject): """Class implementing SVC file reader"""
[docs] @classmethod def read(cls, path, column_names, verbose=False): """Reads the handwriting data and meta data""" # Read the handwriting data from an SVC file data = pd.read_csv(path, sep=" ", names=column_names, skiprows=1).to_dict(orient="list") meta = cls._read_metadata_from_svc_file_name(path) cls.log(f"Data has been loaded from an SVC file: {path}", be_verbose=verbose) # Return data and meta data return data, meta
@classmethod def _read_metadata_from_svc_file_name(cls, file_path): """Reads meta data included in the file name""" # Prepare meta data meta_data = {} # Open file and read the first line with open(file_path) as f: raw_meta_data = f.readline() # Store the samples count meta_data["samples_count"] = int(raw_meta_data) # Get only file name and split it to get meta data from it file_path = os.path.basename(os.path.splitext(file_path)[0]) meta_from_file_name = file_path.split("_") # Handle two optional information included in file name for HandAQUS if len(meta_from_file_name) >= 4: meta_data["participant"] = {"id": meta_from_file_name[0]} meta_data["created_on"] = meta_from_file_name[-1] meta_data["administrator"] = meta_from_file_name[-2] meta_data["task_id"] = meta_from_file_name[-3] if len(meta_from_file_name) == 6: meta_data["participant"] = { "id": meta_from_file_name[0], "birth_date": meta_from_file_name[1], "sex": meta_from_file_name[2] } else: cls.log("Old file-name format no additional meta data") # Return meta data return meta_data
# ------------ # # Data readers # # ------------ #
[docs]class ListReader(LoggableObject): """Class implementing list object reader"""
[docs] @classmethod def read(cls, data, column_names, verbose=False): """Reads the handwriting data and meta data""" # Get the handwriting data from a list object data = {column: value for column, value in zip(column_names, data)} meta = {} cls.log(f"Data has been loaded from a list", be_verbose=verbose) # Return data and meta data return data, meta
[docs]class NumpyArrayReader(LoggableObject): """Class implementing numpy array reader"""
[docs] @classmethod def read(cls, data, column_names, verbose=False): """Reads the handwriting data and meta data""" # Get the handwriting data from a list object data = {column: data[..., i] for i, column in enumerate(column_names)} meta = {} cls.log(f"Data has been loaded from a numpy array", be_verbose=verbose) # Return data and meta data return data, meta
[docs]class PandasDataFrameReader(LoggableObject): """Class implementing pandas dataframe reader"""
[docs] @classmethod def read(cls, data, verbose=False): """Reads the handwriting data and meta data""" # Get the handwriting data from a list object data = data.to_dict(orient="list") meta = {} cls.log(f"Data has been loaded from a pandas dataframe", be_verbose=verbose) # Return data and meta data return data, meta