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,
=["output/ReportEventCounter.json",
filenames"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):
= 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)
simdata[for sweep_var in self.sweep_variables:
if sweep_var in simulation.tags.keys():
= simulation.tags[sweep_var]
simdata[sweep_var] return simdata
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.