Par tranche d’âge et de temps

Analyser MalariaSummaryReport

Le rapport de synthèse regroupe les résultats des simulations surveillées dans les tranches d’âge, les intervalles de surveillance et/ou les tranches de parasitémie spécifiés par l’utilisateur. Des résultats tels que la prévalence par âge, l’incidence par âge et la densité parasitaire par âge peuvent être obtenus par le biais du rapport de synthèse. Plusieurs rapports de synthèse peuvent être demandés dans le script d’exécution de la simulation, et les analyseurs peuvent être construits pour travailler avec plusieurs rapports de synthèse.

class AnnualAgebinPfPRAnalyzer(IAnalyzer) :
    def __init__(self, expt_name, sweep_variables=None, working_dir='./', start_year=2022,
                 end_year=2025, burnin=None) :
        super(AnnualAgebinPfPRAnalyzer, self).__init__(working_dir=working_dir,
                              filenames=["output/MalariaSummaryReport_Annual_Agebin.json"])

La documentation sur le rapport de synthèse se trouve ici. Si vous écrivez un nouvel analyseur de rapports de synthèse, vous devrez savoir quelle partie du rapport de synthèse contient les données dont vous avez besoin.

Dans chaque rapport de synthèse, le canal DataByTimeAndAgeBins rapporte les sorties surveillées par time et age. Il doit donc être indexé deux fois, l’une pour sélectionner la plage de temps et l’autre pour sélectionner l’agebin. La liste extérieure est le temps et la liste intérieure est l’âge.

Dans cet exemple, les données d’intérêt se trouvent dans DataByTimeAndAgeBins : nous extrayons, pour chaque groupe d’âge, la PPR agrégée annuellement, l’incidence clinique, l’incidence sévère et la population. Tous les résultats sont combinés dans un cadre de données pour chaque groupe d’âge, puis les cadres de données spécifiques à l’âge sont concaténés en un seul cadre de données.

L’attachement de la variable de balayage pour la simulation respective se fait de la même manière pour tous les analyseurs.

    def map(self, data, simulation):
        adf = pd.DataFrame()
        nyears = (self.end_year - self.start_year)
        age_bins = data[self.filenames[0]]['Metadata']['Age Bins']
        d = data[self.filenames[0]]['DataByTimeAndAgeBins']
        for age in range(len(age_bins)):
            pfpr = [x[age] for x in d['PfPR by Age Bin'][:nyears]]
            clinical_cases = [x[age] for x in d['Annual Clinical Incidence by Age Bin'][:nyears]]
            severe_cases = [x[age] for x in d['Annual Severe Incidence by Age Bin'][:nyears]]
            pop = [x[age] for x in d['Average Population by Age Bin'][:nyears]]
            simdata = pd.DataFrame({'year': range(self.start_year, self.end_year),
                                    'PfPR': pfpr,
                                    'Cases': clinical_cases,
                                    'Severe cases': severe_cases,
                                    'Pop': pop})
            simdata['agebin'] = age_bins[age]
            adf = pd.concat([adf, simdata])
        for sweep_var in self.sweep_variables:
            if sweep_var in simulation.tags.keys():
                 adf[sweep_var] = simulation.tags[sweep_var]
        return adf