def probabilidade_causas_acidentes(self):
        """ Calculates the probability of the causes of accidents

            @brief Local variable:

                query -
                    SQL instruction to query the number of accidents
                by cause separated by year

                data_frame -
                    Saves the results from the query in data frame
                format

                medias_list -
                    List of avarages grouped by cause

                desvios_padroes_list -
                    List of standard deviations groupad by cause

                probabilidade_causas_acidentes_list -
                    List with the probabilities of the causes of accidents

                prob_causa_acidentes -
                    Instance of ProbabilidadeAcidentes

            @return A list of objects containing the causes of accidents
        """

        query = """SELECT causa, quantidade_ocorrencias, ano
                FROM estatisticas_causa
                ORDER BY causa, ano ; """

        data_frame = self.executa_query(query, get_data_frame=True)
        medias_list = data_frame.groupby(
            'causa'
        )['quantidade_ocorrencias'].mean()

        desvios_padroes_list = data_frame.groupby(
            'causa'
        )['quantidade_ocorrencias'].std()

        probabilidade_causas_acidentes_list = []

        init_array = 0
        for i in range(init_array, len(medias_list)):
            prob_causa_acidentes = ProbabilidadeAcidentes()
            prob_causa_acidentes.causa = medias_list.keys()[
                i].decode('iso-8859-1').encode('utf8')

            limits_min_one = 0
            limits_max_one = 5000
            limits_min_two = 5001
            limits_max_two = 10000
            limits_min_three = 10001
            limits_max_three = 30000
            limits_min_four = 30001
            limits_max_four = 50000
            limits_min_five = 50001
            limites = [
                (limits_min_one, limits_max_one),
                (limits_min_two, limits_max_two),
                (limits_min_three, limits_max_three),
                (limits_min_four, limits_max_four),
                (limits_min_five, sys.maxsize)
            ]

            normalization_in_percent = 100
            for (inferior, superior) in limites:
                if (medias_list[i] >= inferior and medias_list[i] <= superior):
                    prob_causa_acidentes.probabilidade_por_limite_list.append(
                        normalization_in_percent * (
                            distribuicao_normal(
                                inferior,
                                medias_list[i],
                                desvios_padroes_list[i]
                            ) + distribuicao_normal(
                                superior,
                                medias_list[i],
                                desvios_padroes_list[i]
                            )
                        )
                    )
                elif (medias_list[i] >= inferior):
                    prob_causa_acidentes.probabilidade_por_limite_list.append(
                        normalization_in_percent * (
                            distribuicao_normal(
                                inferior,
                                medias_list[i],
                                desvios_padroes_list[i]
                            ) - distribuicao_normal(
                                superior,
                                medias_list[i],
                                desvios_padroes_list[i]
                            )
                        )
                    )
                elif (medias_list[i] <= inferior):
                    prob_causa_acidentes.probabilidade_por_limite_list.append(
                        normalization_in_percent * (
                            distribuicao_normal(
                                superior,
                                medias_list[i],
                                desvios_padroes_list[i]
                            ) - distribuicao_normal(
                                inferior,
                                medias_list[i],
                                desvios_padroes_list[i]
                            )
                        )
                    )

            probabilidade_causas_acidentes_list.append(
                prob_causa_acidentes
            )

        return probabilidade_causas_acidentes_list