Module fcmpy.expert_fcm.checkers
Expand source code
import numpy as np
import pandas as pd
import collections
from datetime import date
from tqdm import tqdm
from typing import Union
from fcmpy.expert_fcm.input_validator import type_check
from fcmpy.expert_fcm.transform import Transform
class ConsistencyCheck:
"""
Class of methods for checking the consistency of the data.
"""
@staticmethod
def checkConsistency(data: Union[dict, collections.OrderedDict]):
"""
Extract inconsistent ratings for the given linguistic terms in the
supplied data. The method writes out an excel file with the
inconsistencies and prints out a message if inconsistencies
were identified.
Parameters
----------
data : dict, collections.OrderedDict
"""
current_date=date.today()
flat_data = Transform.flatData(data=data)
pairs = set(flat_data.index) # a set of all concept pairs.
incon = {}
for pair in tqdm(pairs):
val = {}
for expert in data.keys():
dat = data[expert].copy(deep=True)
dat.columns = [x.lower() for x in dat.columns] # set columns to lower case.
dat = dat.set_index(['from', 'to']).replace(r'', np.nan) # replace the empty cells to np.nan
dat[[i for i in dat if '-' in i]] = dat[[i for i in dat if '-' in i]] * -1
v = dat.loc[pair].values[np.logical_not(np.isnan(dat.loc[pair].values))]
if len(v) > 0:
val[expert] = int(v)
if len(set(list(val.values()))) > 1:
incon[pair] = val
if incon:
res = pd.DataFrame(incon).T
res.index.set_names(['from', 'to'], inplace = True)
res.to_excel(f'inconsistentRatings_{current_date.day}_{current_date.month}_{current_date.year}.xlsx', na_rep='NA')
print(f'{list(res.index)} pairs of concepts were rated inconsistently across the experts. \
For more information check the inconsistentRatings_{current_date.day}_{current_date.month}_{current_date.year}.xlsx')
class ColumnsCheck:
"""
Check the columns of the data.
"""
@staticmethod
@type_check
def checkColumns(data: Union[dict, collections.OrderedDict]):
"""
Checks whether the dataframe includes From --> To column.
It raises an error, if the columns are not found.
Parameters
----------
data : dict
"""
for expert in data.keys():
if ('from' not in [x.lower() for x in data[expert].columns]) | \
('to' not in [x.lower() for x in data[expert].columns]):
raise ValueError('Columns From --> To were not found. Check the data!')
Classes
class ColumnsCheck
-
Check the columns of the data.
Expand source code
class ColumnsCheck: """ Check the columns of the data. """ @staticmethod @type_check def checkColumns(data: Union[dict, collections.OrderedDict]): """ Checks whether the dataframe includes From --> To column. It raises an error, if the columns are not found. Parameters ---------- data : dict """ for expert in data.keys(): if ('from' not in [x.lower() for x in data[expert].columns]) | \ ('to' not in [x.lower() for x in data[expert].columns]): raise ValueError('Columns From --> To were not found. Check the data!')
Static methods
def checkColumns(data: Union[dict, collections.OrderedDict])
-
Checks whether the dataframe includes From –> To column. It raises an error, if the columns are not found.
Parameters
data
:dict
Expand source code
@staticmethod @type_check def checkColumns(data: Union[dict, collections.OrderedDict]): """ Checks whether the dataframe includes From --> To column. It raises an error, if the columns are not found. Parameters ---------- data : dict """ for expert in data.keys(): if ('from' not in [x.lower() for x in data[expert].columns]) | \ ('to' not in [x.lower() for x in data[expert].columns]): raise ValueError('Columns From --> To were not found. Check the data!')
class ConsistencyCheck
-
Class of methods for checking the consistency of the data.
Expand source code
class ConsistencyCheck: """ Class of methods for checking the consistency of the data. """ @staticmethod def checkConsistency(data: Union[dict, collections.OrderedDict]): """ Extract inconsistent ratings for the given linguistic terms in the supplied data. The method writes out an excel file with the inconsistencies and prints out a message if inconsistencies were identified. Parameters ---------- data : dict, collections.OrderedDict """ current_date=date.today() flat_data = Transform.flatData(data=data) pairs = set(flat_data.index) # a set of all concept pairs. incon = {} for pair in tqdm(pairs): val = {} for expert in data.keys(): dat = data[expert].copy(deep=True) dat.columns = [x.lower() for x in dat.columns] # set columns to lower case. dat = dat.set_index(['from', 'to']).replace(r'', np.nan) # replace the empty cells to np.nan dat[[i for i in dat if '-' in i]] = dat[[i for i in dat if '-' in i]] * -1 v = dat.loc[pair].values[np.logical_not(np.isnan(dat.loc[pair].values))] if len(v) > 0: val[expert] = int(v) if len(set(list(val.values()))) > 1: incon[pair] = val if incon: res = pd.DataFrame(incon).T res.index.set_names(['from', 'to'], inplace = True) res.to_excel(f'inconsistentRatings_{current_date.day}_{current_date.month}_{current_date.year}.xlsx', na_rep='NA') print(f'{list(res.index)} pairs of concepts were rated inconsistently across the experts. \ For more information check the inconsistentRatings_{current_date.day}_{current_date.month}_{current_date.year}.xlsx')
Static methods
def checkConsistency(data: Union[dict, collections.OrderedDict])
-
Extract inconsistent ratings for the given linguistic terms in the supplied data. The method writes out an excel file with the inconsistencies and prints out a message if inconsistencies were identified.
Parameters
data
:dict, collections.OrderedDict
Expand source code
@staticmethod def checkConsistency(data: Union[dict, collections.OrderedDict]): """ Extract inconsistent ratings for the given linguistic terms in the supplied data. The method writes out an excel file with the inconsistencies and prints out a message if inconsistencies were identified. Parameters ---------- data : dict, collections.OrderedDict """ current_date=date.today() flat_data = Transform.flatData(data=data) pairs = set(flat_data.index) # a set of all concept pairs. incon = {} for pair in tqdm(pairs): val = {} for expert in data.keys(): dat = data[expert].copy(deep=True) dat.columns = [x.lower() for x in dat.columns] # set columns to lower case. dat = dat.set_index(['from', 'to']).replace(r'', np.nan) # replace the empty cells to np.nan dat[[i for i in dat if '-' in i]] = dat[[i for i in dat if '-' in i]] * -1 v = dat.loc[pair].values[np.logical_not(np.isnan(dat.loc[pair].values))] if len(v) > 0: val[expert] = int(v) if len(set(list(val.values()))) > 1: incon[pair] = val if incon: res = pd.DataFrame(incon).T res.index.set_names(['from', 'to'], inplace = True) res.to_excel(f'inconsistentRatings_{current_date.day}_{current_date.month}_{current_date.year}.xlsx', na_rep='NA') print(f'{list(res.index)} pairs of concepts were rated inconsistently across the experts. \ For more information check the inconsistentRatings_{current_date.day}_{current_date.month}_{current_date.year}.xlsx')