Skip to content

Stats venues

StatMakerVenues

Bases: StatMaker

Class to collect and print some stuff about venues.

Source code in may/stats/stats_venues.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class StatMakerVenues(StatMaker):
    """Class to collect and print some stuff about venues. 

    """
    def __init__(self, venue_manager: "VenueManager"):
        super().__init__()
        self.venue_manager = venue_manager

    def get_num_members(self,venue):
        total = 0
        for s in venue.subsets.values():
            total += s.num_members
        return total

    def get_membership_statistics(self,venue_type: str, stats_label: str=None):
        stat_id = self._generate_stat_id()
        if stats_label is None:
            stats_label = str(stat_id)
        my_venues = self.venue_manager.get_venues_by_type(venue_type)
        my_data = [self.get_num_members(venue) for venue in my_venues]
        my_stats = self.collect_statistics(my_data)
        self.stats[stats_label] = (stat_id, stats_label, my_stats)
        return (stat_id, stats_label, my_stats)

    def print_venue_comp(self, example_venue):
        logger.info("    Venue: {} , {}".format(example_venue.id, example_venue.name))
        if example_venue.properties:
            props = list(example_venue.properties.items())
            for key, value in props:
                logger.info(f"      - {key}: {value}")
        for key, subset in example_venue.subsets.items():
            logger.info("      - subset id({}), {} :  {}".format(id(subset), key, subset.num_members))


    def get_example_membership(self, venue_type: str, n_examples=3, stats_label: str=None):
        my_venues = self.venue_manager.get_venues_by_type(venue_type)
        for i in range(n_examples):
            example_venue = random.choice(my_venues)
            self.print_venue_comp(example_venue)

    def get_extreme_membership(self, venue_type: str, stats_label: str=None):
        my_venues = self.venue_manager.get_venues_by_type(venue_type)
        num_subsets = len(my_venues[0].subsets)
        subset_numbers = np.zeros((len(my_venues), num_subsets))
        for i,v in enumerate(my_venues):
            for j,s in enumerate(v.subsets.values()):
                subset_numbers[i,j] = s.num_members
        extreme_max_subset_numbers = np.argmax(subset_numbers, axis=0)
        extreme_min_subset_numbers = np.argmin(subset_numbers, axis=0)
        extreme_max_total = np.argmax(np.sum(subset_numbers, axis=1))
        extreme_min_total = np.argmin(np.sum(subset_numbers, axis=1))
        for vindex in extreme_max_subset_numbers:
            logger.info("Venue with extreme max in specific subsets membership:")
            self.print_venue_comp(my_venues[vindex])
        # for vindex in extreme_min_subset_numbers:
        #     logger.info("Venue with extreme min in specific subsets membership:")
        #     self.print_venue_comp(my_venues[vindex])
        logger.info("    Venue with extreme max in total members:")
        self.print_venue_comp(my_venues[extreme_max_total])
        logger.info("    Venue with extreme min in total members:")
        self.print_venue_comp(my_venues[extreme_min_total])                        

    def print_lots_of_stats(self, venue_type):
        stat_id, stats_label, my_stats = self.get_membership_statistics(venue_type)
        logger.info("")
        logger.info(f"Statistics on total membership for {venue_type}\n")
        for key, value in my_stats.items():
            logger.info(f"  {key}  =  {value}")

    def print_examples(self, venue_type):
        logger.info(f"Example {venue_type} types:")            
        self.get_example_membership(venue_type)

    def print_extremes(self, venue_type):
        logger.info(f"Extreme {venue_type} types:")
        self.get_extreme_membership(venue_type)