Coverage for src/ipyvizzu/data/converters/df/converter.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-10-12 08:13 +0000

1""" 

2This module provides the `DataFrameConverter` abstract class. 

3""" 

4 

5from abc import abstractmethod 

6from typing import List 

7import warnings 

8 

9from ipyvizzu.data.converters.converter import ToSeriesListConverter 

10from ipyvizzu.data.converters.df.type_alias import DataFrame 

11from ipyvizzu.data.type_alias import ( 

12 DimensionValue, 

13 MeasureValue, 

14 Series, 

15) 

16 

17 

18class DataFrameConverter(ToSeriesListConverter): 

19 """ 

20 Converts data frame into a list of dictionaries representing series. 

21 Each dictionary contains information about the series `name`, `values` and `type`. 

22 """ 

23 

24 # pylint: disable=too-few-public-methods 

25 

26 def __init__( 

27 self, 

28 default_measure_value: MeasureValue, 

29 default_dimension_value: DimensionValue, 

30 max_rows: int, 

31 ) -> None: 

32 super().__init__(default_measure_value, default_dimension_value) 

33 self._max_rows = max_rows 

34 

35 def get_series_list(self) -> List[Series]: 

36 """ 

37 Convert the `DataFrame` columns to a list of dictionaries representing series. 

38 

39 Returns: 

40 A list of dictionaries representing series, 

41 where each dictionary has `name`, `values` and `type` keys. 

42 """ 

43 

44 series_list = [] 

45 for name in self._get_columns(): 

46 series_list.append(self._get_series_from_column(name)) 

47 return series_list 

48 

49 def _get_series_from_column(self, column_name: str) -> Series: 

50 values, infer_type = self._convert_to_series_values_and_type(column_name) 

51 return self._convert_to_series(column_name, values, infer_type) 

52 

53 def _is_max_rows_exceeded(self, row_number: int) -> bool: 

54 if row_number > self._max_rows: 

55 warnings.warn( 

56 "The number of rows of the dataframe exceeds the set `max_rows`, " 

57 f"the dataframe is randomly sampled to the set value ({self._max_rows}).", 

58 UserWarning, 

59 stacklevel=2, 

60 ) 

61 return True 

62 return False 

63 

64 @abstractmethod 

65 def _get_sampled_df(self, df: DataFrame) -> DataFrame: 

66 """ 

67 Returns a sampled data frame for the maximum number of rows. 

68 """ 

69 

70 @abstractmethod 

71 def _get_columns(self) -> List[str]: 

72 """ 

73 Return column names of the data frame. 

74 """