def getLegislativeBody(body_name): """ """ try: body = list( dbConn.build_collection('orgao').find({"tipoOrgao": body_name}, { '_id': 0, 'sigla': 1 })) if len(body) > 0: body_initials = [item['sigla'] for item in body] return body_initials else: return None except Exception as e: print(e)
def __init__(self): self._collection_deputy = dbConn.build_collection('deputado') self._query_fields = { '_id': 0, 'ideCadastro': 1, 'nomeParlamentarAtual': 1, 'ufRepresentacaoAtual': 1, 'partidoAtual': 1, 'urlFoto': 1 } @app.route("/deputy_listing", methods=['POST']) def getDeputyListing(): allDeputiesId = self.getDeputyIdList() allDeputies = [] for depId in allDeputiesId: result = list( self._collection_deputy.find({ 'ideCadastro': depId }, self._query_fields).sort('numLegislatura', -1)) allDeputies.append(result[0]) return {'allDeputies': allDeputies} @app.route("/deputy_listing_legislature", methods=['POST']) def getDeputyListingLegislature(): legislature_number = request.form['legislature'] allDeputiesId = self.getDeputyIdList() allDeputies = [] for depId in allDeputiesId: result = list( self._collection_deputy.find({ 'ideCadastro': depId, 'numLegislatura': str(legislature_number) })) allDeputies.append(result[0]) return {'allDeputies': allDeputies}
def get_count_deputies_by_gender(): genderCount = {} result = list( dbConn.build_collection('deputado').aggregate([{ "$group": { "_id": { "legislatura": "$numLegislatura", "sexo": "$sexo", "deputado": "$ideCadastro" } } }])) for item in result: if item['_id']['legislatura'] in genderCount: if item['_id']['sexo'] in genderCount[item['_id']['legislatura']]: genderCount[item['_id']['legislatura']][item['_id'] ['sexo']] += 1 else: genderCount[item['_id']['legislatura']][item['_id'] ['sexo']] = 1 else: genderCount[item['_id']['legislatura']] = {item['_id']['sexo']: 1} return genderCount
def __init__(self, id_register): self.id_register = id_register self._collection = dbConn.build_collection('deputado') self.history = self._history()
def __init__(self): self._collection_deputy = dbConn.build_collection('deputado') self._collection_uf = dbConn.build_collection('uf') self._collection_expense = dbConn.build_collection('gasto') @app.route("/professions", methods=['POST']) def getProfessionsChartData(): allProfessionData = {} for legislature in LEGISLATURES: query_search = {'numLegislatura': str(legislature)} query_field = {'nomeProfissao': 1, '_id': 0} result = list( self._collection_deputy.find(query_search, query_field)) if result: result_values = [ list(map(str.strip, item['nomeProfissao'].split(','))) if item['nomeProfissao'] is not None else ["Não informada"] for item in result ] result_values_merged = list( chain.from_iterable(result_values)) result_counter = dict(Counter(result_values_merged)) result_counter_fmt = { 'data': [{ 'name': key, 'value': value } for key, value in result_counter.items()] } allProfessionData.update( {str(legislature): result_counter_fmt['data']}) return {'professionData': allProfessionData} @app.route("/schooling", methods=['POST']) def getSchoolingChartData(): allSchoolingData = {} for legislature in LEGISLATURES: query_search = {'numLegislatura': str(legislature)} query_field = {'escolaridade': 1, '_id': 0} result = list( self._collection_deputy.find(query_search, query_field)) if result: result_values = [ item['escolaridade'] if item['escolaridade'] is not None else "Não informado" for item in result ] result_counter = dict(Counter(result_values)) result_counter_sorted = { key: value for key, value in sorted(result_counter.items(), key=lambda item: item[1], reverse=True) } result_counter_fmt = { 'data': [[key, value] for key, value in result_counter_sorted.items()] } allSchoolingData.update( {str(legislature): result_counter_fmt['data']}) return {'schoolingData': allSchoolingData} @app.route("/total_spent", methods=['POST']) def getTotalSpentChartData(): allSpent = {} for legislature in LEGISLATURES: query = [{ '$match': { 'codLegislatura': legislature } }, { '$group': { '_id': 0, 'sum': { '$sum': '$vlrLiquido' } } }] result = list(self._collection_expense.aggregate(query)) if result: result = result[0]['sum'] allSpent.update({legislature: format_number(result)}) return {'allSpent': allSpent} @app.route("/values_by_state", methods=['POST']) def getValuesByState(): query = {'sigla': 1, 'cotaParlamentar': 1, '_id': 0} result = list(self._collection_uf.find({}, query)) result_fmt = [[ 'br-' + item['sigla'].lower(), item['cotaParlamentar'] ] for item in result] return {'data': {'56': result_fmt}} @app.route("/deputies_quantity", methods=['POST']) def getDeputiesQuantity(): query = {'sigla': 1, 'cotaParlamentar': 1, '_id': 0} result = list(self._collection_uf.find({}, query)) result_fmt = [[ 'br-' + item['sigla'].lower(), item['cotaParlamentar'] ] for item in result] return {'data': result_fmt} @app.route("/party_representation", methods=['POST']) def getPartiesRepresentation(): data = {} for legislature in LEGISLATURES: query = [{ '$match': { 'numLegislatura': str(legislature) } }, { '$group': { '_id': '$partidoAtual.sigla', 'count': { '$sum': 1 } } }] result = list(self._collection_deputy.aggregate(query)) if len(result) > 0: result_fmt = [[ item['_id'], item['count'], item['_id'], color_party(item['_id']) ] for item in result] data.update({legislature: result_fmt}) return {'data': data}
def getPresenceInEvent(self, event_collection_name, presence_key_name, date_key_name, legislature_number=55): """ Given a event collection name and which key is used to identify the presences and the date, returns a dictionary w/ the total n of events, the presence of the deputy and the median presence for that event (given the deputy's period of exercise)""" try: # ======= periods of active exercise # dates_in_exercise = self.getDeputyDatesExercise(legislature_number) if event_collection_name.endswith('comissao_inquerito'): print('CPI') cpi_comissions_initials = getLegislativeBody( 'Comissão Parlamentar de Inquérito') # ======= recover all events query = { 'ideCadastro': str(self.deputy.id_register), 'numLegislatura': str(legislature_number) } result_member_comissions = list( self._collection_deputy.find(query)) if len(result_member_comissions) > 0: result_member_comissions = result_member_comissions[0] deputy_cpi = [ item['siglaComissao'] for item in result_member_comissions['comissoes']['comissao'] if item['siglaComissao'] in cpi_comissions_initials ] if len(deputy_cpi) > 0: query_event = {'legislatura': int(legislature_number)} all_events = list( dbConn.build_collection( event_collection_name).find(query_event)) cpi_events = [ event for event in all_events if event['sigla'] in deputy_cpi ] if len(all_events) > 0: presences = list( chain.from_iterable([ event[presence_key_name] for event in cpi_events ])) presences_by_deputy = Counter(presences) mean_presence = np.mean( list(presences_by_deputy.values())) print(presences_by_deputy) deputy_presence = presences_by_deputy[int( self.deputy.id_register)] print(event_collection_name, deputy_presence, len(cpi_events)) return { 'presence': deputy_presence, 'mean-presence': mean_presence, 'all-events': len(cpi_events) } else: print('No events') return None else: print('Deputy has no CPI') return None else: print('Deputy has no commission field') return None elif event_collection_name.endswith('comissao_permanente'): print('CP') cp_comissions_initials = getLegislativeBody( 'Comissão Permanente') # ======= recover all events query = { 'ideCadastro': str(self.deputy.id_register), 'numLegislatura': str(legislature_number) } result_member_comissions = list( self._collection_deputy.find(query)) if len(result_member_comissions) > 0: result_member_comissions = result_member_comissions[0] deputy_cp = [ item['siglaComissao'] for item in result_member_comissions['comissoes']['comissao'] if item['siglaComissao'] in cp_comissions_initials ] if len(deputy_cp) > 0: query_event = {'legislatura': int(legislature_number)} all_events = list( dbConn.build_collection( event_collection_name).find(query_event)) cp_events = [ event for event in all_events if event['sigla'] in deputy_cp ] if len(all_events) > 0: presences = list( chain.from_iterable([ event[presence_key_name] for event in cp_events ])) presences_by_deputy = Counter(presences) mean_presence = np.mean( list(presences_by_deputy.values())) deputy_presence = presences_by_deputy[int( self.deputy.id_register)] print(event_collection_name, deputy_presence, len(cp_events)) return { 'presence': deputy_presence, 'mean-presence': mean_presence, 'all-events': len(cp_events) } else: print('No events') return None else: print('Deputy has no CP') return None else: print('Deputy has no commission field') return None elif event_collection_name.endswith( 'audiencia_publica') or event_collection_name == "votacao": # ======= recover all events print(event_collection_name) query_event = {'legislatura': int(legislature_number)} query_deputy = { 'legislatura': int(legislature_number), presence_key_name: float(self.deputy.id_register) } all_events = list( dbConn.build_collection(event_collection_name).find( query_event)) if len(all_events) > 0: presences = list( chain.from_iterable([ event[presence_key_name] for event in all_events ])) presences_by_deputy = Counter(presences) mean_presence = np.mean(list(presences_by_deputy.values())) if event_collection_name == 'votacao': deputy_presence = presences_by_deputy[str( self.deputy.id_register)] elif event_collection_name.endswith('audiencia_publica'): deputy_presence = dbConn.build_collection( event_collection_name).find(query_deputy).count() print(event_collection_name, deputy_presence, len(all_events)) return { 'presence': deputy_presence, 'mean-presence': mean_presence, 'all-events': len(all_events) } else: print('No events') return None except Exception as e: print(e)
def __init__(self, id_register): self._collection_deputy = dbConn.build_collection('deputado') self._collection_authors = dbConn.build_collection('autoria') self._collection_expenses = dbConn.build_collection('gasto') self.deputy = self._set_up_deputy(id_register)