Analyse des événements

Analyser ReportEventCounter

Les sorties json ReportEventCounter, InsetChart et ReportMalariaFiltered ont toutes une structure très similaire, de sorte qu’un analyseur écrit pour l’un de ces types de sortie peut généralement être facilement adapté à un autre.

Dans l’exemple ci-dessous, le fichier InsetChart.json est lu en plus du fichier ReportEventCounter.json pour obtenir non seulement le nombre d’individus qui ont reçu une intervention mais aussi la population totale par pas de temps dans la simulation. Les données des deux fichiers de sortie sont combinées dans le même cadre de données.

class ReceivedCampaignAnalyzer(IAnalyzer):
    def __init__(self, expt_name, channels=None, sweep_variables=None, working_dir='./', start_year=2022):
        super(ReceivedCampaignAnalyzer, self).__init__(working_dir=working_dir,
                              filenames=["output/ReportEventCounter.json",
                                         "output/InsetChart.json"])
        self.sweep_variables = sweep_variables or ["Run_Number"]
        self.channels = channels or ['Received_Treatment']
        self.start_year = start_year
        self.expt_name = expt_name
        
    def map(self, data, simulation):
        simdata = pd.DataFrame({x: data[self.filenames[0]]['Channels'][x]['Data'] for x in self.channels})
        simdata['Population'] = data[self.filenames[1]]['Channels']['Statistical Population']['Data']
        simdata['Time'] = simdata.index
        simdata['Day'] = simdata['Time'] % 365
        simdata['Month'] = simdata['Day'].apply(lambda x: self.monthparser((x + 1) % 365))
        simdata['Year'] = simdata['Time'].apply(lambda x: int(x / 365) + self.start_year)
        for sweep_var in self.sweep_variables:
            if sweep_var in simulation.tags.keys():
                 simdata[sweep_var] = simulation.tags[sweep_var]
        return simdata