def map_concepts_to_indicators(
        self, n: int = 1, min_temporal_res: Optional[str] = None
    ):
        """ Map each concept node in the AnalysisGraph instance to one or more
        tangible quantities, known as 'indicators'.

        Args:
            n: Number of matches to keep
            min_temporal_res: Minimum temporal resolution that the indicators
            must have data for.
        """

        for node in self.nodes(data=True):
            query_parts = [
                "select Indicator from concept_to_indicator_mapping",
                f"where `Concept` like '{node[0]}'",
            ]

            # TODO May need to delve into SQL/database stuff a bit more deeply
            # for this. Foreign keys perhaps?

            query = "  ".join(query_parts)
            results = engine.execute(query)

            if min_temporal_res is not None:
                if min_temporal_res not in ["month"]:
                    raise ValueError("min_temporal_res must be 'month'")

                vars_with_required_temporal_resolution = [
                    r[0]
                    for r in engine.execute(
                        "select distinct `Variable` from indicator where "
                        f"`{min_temporal_res.capitalize()}` is not null"
                    )
                ]
                results = [
                    r
                    for r in results
                    if r[0] in vars_with_required_temporal_resolution
                ]

            node[1]["indicators"] = {
                x: Indicator(x, "MITRE12")
                for x in [r[0] for r in take(n, results)]
            }
Map each concept node in the AnalysisGraph instance to one or more
        tangible quantities, known as 'indicators'.

        Args:
            n: Number of matches to keep
            min_temporal_res: Minimum temporal resolution that the indicators
            must have data for.