From dd7d73fba90898ae1fa5db5d67f313ce0e34632c Mon Sep 17 00:00:00 2001 From: Gustavo Lopes Date: Mon, 11 Jun 2018 18:21:50 -0300 Subject: [PATCH] Extracao de metodo #6 --- radar_parlamentar/analises/grafico.py | 75 +++++++++++++++++---------- radar_parlamentar/importadores/sen.py | 3 +- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/radar_parlamentar/analises/grafico.py b/radar_parlamentar/analises/grafico.py index 831fa9ea..548aaf40 100644 --- a/radar_parlamentar/analises/grafico.py +++ b/radar_parlamentar/analises/grafico.py @@ -123,13 +123,9 @@ def _dict_cp2(self, ap): def _dict_cp(self, ap, idx): """ap -- AnalisePeriodo; idx == 0 para cp1 and idx == 1 para cp2""" dict_cp = {} + theta = self._set_theta(ap) try: - theta = round(ap.theta, 0) % 180 + 90 * idx - except AttributeError: - theta = 0 - try: - var_explicada = round( - ap.pca.eigen[idx] / ap.pca.eigen.sum() * 100, 1) + var_explicada = self.calculate_var_explicada(ap, idx) if ap.pca.Vt is not None: composicao = [round(el, 2) for el in 100 * ap.pca.Vt[idx, :] ** 2] @@ -143,6 +139,18 @@ def _dict_cp(self, ap, idx): # o JsonGenerator não deveria entender dessas cosias. return dict_cp + @classmethod + def calculate_var_explicada(self, ap, idx): + return round(ap.pca.eigen[idx] / ap.pca.eigen.sum() * 100, 1) + + @classmethod + def _set_theta(self, ap): + try: + theta = round(ap.theta, 0) % 180 + 90 * idx + except AttributeError: + theta = 0 + return theta + @classmethod def _list_votacoes_do_periodo(self, ap): list_votacoes = [] @@ -189,38 +197,53 @@ def _dict_partido(self, partido): dict_partido["r"] = [] dict_partido["x"] = [] dict_partido["y"] = [] + self._fill_dict_partido(partido, dict_partido) + + return dict_partido + + def _fill_dict_partido(self, partido, dict_partido): for ap in self.analise_temporal.analises_periodo: label_periodo = str(ap.periodo) cache_coords_key = label_periodo coordenadas = self.partidosScaler.scale(ap.coordenadas_partidos, cache_coords_key) - try: - x = round(coordenadas[partido][0], 2) - y = round(coordenadas[partido][1], 2) - self.max_partido_radius_calculator.add_point(x, y) - if not isnan(x): - dict_partido["x"].append(round(x, 2)) - dict_partido["y"].append(round(y, 2)) - else: - dict_partido["x"].append(0.) - dict_partido["y"].append(0.) - except KeyError as error: - logger.error("KeyError: %s", error) - dict_partido["x"].append(0.) - dict_partido["y"].append(0.) - tamanho = ap.tamanhos_partidos[partido] - dict_partido["t"].append(tamanho) - raio = self.raio_partido_calculator.get_raio( - partido, label_periodo) - dict_partido["r"].append(raio) + self._fill_dict_partido_coordinates(partido, dict_partido, coordenadas) + self._append_dimensions(ap, label_periodo, partido, dict_partido) + + self._append_parlamentares(partido, dict_partido) + + def _append_dimensions(self, ap, label_periodo, partido, dict_partido): + tamanho = ap.tamanhos_partidos[partido] + dict_partido["t"].append(tamanho) + raio = self.raio_partido_calculator.get_raio( + partido, label_periodo) + dict_partido["r"].append(raio) + + def _append_parlamentares(self, partido, dict_partido): dict_partido["parlamentares"] = [] parlamentares = \ self.analise_temporal.casa_legislativa.parlamentares().filter( partido=partido).select_related('partido') + for parlamentar in parlamentares: dict_partido["parlamentares"].append( self._dict_parlamentar(parlamentar)) - return dict_partido + + def _fill_dict_partido_coordinates(self, partido, dict_partido, coordenadas): + try: + x = round(coordenadas[partido][0], 2) + y = round(coordenadas[partido][1], 2) + self.max_partido_radius_calculator.add_point(x, y) + if not isnan(x): + dict_partido["x"].append(round(x, 2)) + dict_partido["y"].append(round(y, 2)) + else: + dict_partido["x"].append(0.) + dict_partido["y"].append(0.) + except KeyError as error: + logger.error("KeyError: %s", error) + dict_partido["x"].append(0.) + dict_partido["y"].append(0.) def _dict_parlamentar(self, parlamentar): leg_id = parlamentar.id diff --git a/radar_parlamentar/importadores/sen.py b/radar_parlamentar/importadores/sen.py index 1c2e7c06..880ec8e5 100644 --- a/radar_parlamentar/importadores/sen.py +++ b/radar_parlamentar/importadores/sen.py @@ -154,6 +154,7 @@ def _create_parlamentar(self, parlamentar_list_info): senador.partido = parlamentar_list_info[3] senador.localidade = parlamentar_list_info[4] senador.save() + return senador def _find_parlamentar(self, voto_parlamentar_tree): nome_senador = voto_parlamentar_tree.find('NomeParlamentar').text @@ -309,7 +310,7 @@ def _add_votacao_to_model(self, votacao_tree): if self._save_votacao(votacao_tree, votacao): return True, votacao - + def _save_votacoes_in_db(self, xml_text): tree = etree.fromstring(xml_text)