compute_frequencies#

compute_frequencies(partitioner: Partitioner, column_name: str, verbose_names: bool = False, max_num_partitions: int | None = None) DataFrame[source]#

Compute the frequencies of unique values in a given column in the partitions.

The frequencies sum up to 1 for a given partition id. This function takes into account all possible labels in the dataset when computing the count for each partition (assign 0 as the size when there are no values for a label in the partition).

Parameters:
  • partitioner (Partitioner) – Partitioner with an assigned dataset.

  • column_name (str) – Column name identifying label based on which the count will be calculated.

  • verbose_names (bool) – Whether to use verbose versions of the values in the column specified by column_name. The verbose value are possible to extract if the column is a feature of type ClassLabel.

  • max_num_partitions (Optional[int]) – The maximum number of partitions that will be used. If greater than the total number of partitions in a partitioner, it won’t have an effect. If left as None, then all partitions will be used.

Returns:

dataframe – DataFrame where the row index represent the partition id and the column index represent the unique values found in column specified by column_name (e.g. represeting the labels). The value of the dataframe.loc[i, j] represnt the ratio of the label j to the total number of sample of in partition i.

Return type:

pd.DataFrame

Examples

Generate DataFrame with label counts resulting from DirichletPartitioner on cifar10

>>> from flwr_datasets import FederatedDataset
>>> from flwr_datasets.partitioner import DirichletPartitioner
>>> from flwr_datasets.metrics import compute_frequencies
>>>
>>> fds = FederatedDataset(
>>>     dataset="cifar10",
>>>     partitioners={
>>>         "train": DirichletPartitioner(
>>>             num_partitions=20,
>>>             partition_by="label",
>>>             alpha=0.3,
>>>             min_partition_size=0,
>>>         ),
>>>     },
>>> )
>>> partitioner = fds.partitioners["train"]
>>> counts_dataframe = compute_frequencies(
>>>     partitioner=partitioner,
>>>     column_name="label"
>>> )