Source code for tacrpy.data_operations

"""
Modul pro běžné transformace a zpracování dat.
"""

import pandas as pd


[docs] def create_mapping_dict(df: pd.DataFrame) -> dict: """ Z dataframe, kde se k jedné hodnotě váže více pozorování v samostatných řádcích (např. projekt má N uchazečů) vytvoří mapovací dict :param df: dataframe s hodnotami one-to-many :return: mapovací dict, kde unikátní ID je klíč a hodnotou je seznam hodnot, které patří k danému unikátnímu ID """ if df.shape[1] < 2: raise ValueError("DataFrame mmusí mít aspoň da sloupce pro vytvoření mapovacího slovníku.") grouped_data = df.groupby(df.columns[0])[df.columns[1]] return grouped_data.apply(list).to_dict()
[docs] def list_intersection(list1: list, list2: list, percentages: bool = True) -> dict: """ Získá průnik hodnot mezi dvěma seznamy (listy) a vypočítá metriky průniku. Metriky průniku: - *intersect (list)* - seznam stejných hodnot - *intersect_count (int)* - počet stejných hodnot - *intersect_ratio (float)* - podíl stejných hodnot vůči všem unikátním hodnotám z obou seznamů - *intersect_l1_ratio (float)* - podíl stejných hodnot vůči všem hodnotám v prvnímu seznamu - *intersect_l2_ratio (float)* - podíl stejných hodnot vůči všem hodnotám v druhému seznamu :param list1: seznam hodnot :param list2: seznam hodnot :param percentages: poměrové metriky zobrazí vrátí v procentech (0-100) s přesností na dvě desetinná místa :return: dict metrik průniků """ if not list1: raise ValueError("list1 je prázdný") if not list2: raise ValueError("list2 je prázdný") set1, set2 = set(list1), set(list2) intersect = set1.intersection(set2) l1_count = len(set1) l2_count = len(set2) all_count = len(set1.union(set2)) intersect_count = len(intersect) intersect_dict = dict() intersect_dict['intersect'] = list(intersect) intersect_dict['intersect_count'] = intersect_count intersect_ratio = intersect_count / all_count intersect_l1_ratio = intersect_count / l1_count intersect_l2_ratio = intersect_count / l2_count if percentages: rounding = lambda x: round(x * 100, 2) # prevod na procenta intersect_dict['intersect_ratio'] = rounding(intersect_ratio) intersect_dict['intersect_ratio_l1'] = rounding(intersect_l1_ratio) intersect_dict['intersect_ratio_l2'] = rounding(intersect_l2_ratio) else: intersect_dict['intersect_ratio'] = intersect_ratio intersect_dict['intersect_ratio_l1'] = intersect_l1_ratio intersect_dict['intersect_ratio_l2'] = intersect_l2_ratio return intersect_dict