feat:retorna codigo do ibge do nome do municipio e da uf#411
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #411 +/- ##
==========================================
- Coverage 99.83% 99.67% -0.16%
==========================================
Files 21 21
Lines 591 612 +21
==========================================
+ Hits 590 610 +20
- Misses 1 2 +1 ☔ View full report in Codecov by Sentry. |
camilamaia
left a comment
There was a problem hiding this comment.
Valeu pela contribuição! Sei que tá em rascunho, mas vim dar umas dicas, vai que ajuda... qualquer coisa é só chamar que estamos aqui!
|
@camilamaia obrigado pela ajuda, em breve aplicarei as mudanças! |
README.md
Outdated
| * str: O código IBGE do município. Retorna None se o nome não for válido ou não existir. | ||
| Exemplo: | ||
|
|
||
| ``` |
README_EN.md
Outdated
| 'RJ' | ||
| >>> convert_code_to_uf("99") | ||
| >>> | ||
| >>>>>>> main |
There was a problem hiding this comment.
essa modificação está correta?
There was a problem hiding this comment.
lembra os passos/comandos para gerar esse arquivo?
seria interessante ter essa referência para uma possível automação futura
There was a problem hiding this comment.
Boa pergunta @mateusoliveira43!
@CarduCaldeira consegue passar para gente como foi gerado?
There was a problem hiding this comment.
Desculpa a demora em responder @camilamaia. Vou descrever os passos realizados:
-
Foi baixado um arquivo .zip em https://www.ibge.gov.br/explica/codigos-dos-municipios.php nomeado DTB_2022, nele consta um arquivo nomeado RELATORIO_DTB_BRASIL_MUNICIPIO.xls para extrair o codigos dos municipios.
-
O arquivo é carregado em um pandas DataFrame e selecionado as colunas 'Nome_UF', 'Nome_Município' e 'Código Município Completo'.
-
São aplicadas nas colunas 'Nome_UF' e 'Nome_Município' a função _transform_text que retorna uma string normalizada.
-
A coluna 'Nome_UF' possui os nomes dos estados por extenso, para padronizar com o restante do código o nome por extenso é substituído pelo sigla do estado.
-
É gerado então o arquivo cities_code.json.
Segue abaixo o código utilizado, para roda-ló usei python3.10 com:
- pandas==2.2.3
- xlrd==2.0.1
import pandas as pd
import unicodedata
import json
def _transform_text(municipality_name: str): # type: (str) -> str
"""
Normalize municipality name and returns the normalized string.
Args:
municipality_name (str): The name of the municipality.
Returns:
str: The normalized string
Example:
>>> _transform_text("São Paulo")
"sao paulo"
>>> _transform_text("Goiânia")
"goiania"
>>> _transform_text("Conceição do Coité")
"'conceicao do coite'
"""
normalized_string = (unicodedata.normalize('NFKD', municipality_name)
.encode('ascii','ignore').decode('ascii'))
case_fold_string = normalized_string.casefold()
return case_fold_string
def create_json():
"""
Load the municipal code from an .xls file and
structure it in a json file
"""
file_path = './RELATORIO_DTB_BRASIL_MUNICIPIO.xls'
df = pd.read_excel(file_path)
#select only 'Nome_UF','Nome_Município','Código Município Completo' columns
df_only = df[['Nome_UF','Nome_Município','Código Município Completo']]
df_only.loc[:, 'Nome_UF'] = df_only['Nome_UF'].apply(_transform_text)
df_only.loc[:, 'Nome_Município'] = (df_only['Nome_Município']
.apply(_transform_text))
#Change the name of the municipality to its acronym
uf_codes = {'acre': 'AC', 'alagoas': 'AL',
'amapa': 'AP', 'amazonas': 'AM',
'bahia': 'BA', 'ceara': 'CE',
'distrito federal': 'DF', 'espirito santo': 'ES',
'goias': 'GO', 'maranhao': 'MA', 'mato grosso': 'MT',
'mato grosso do sul': 'MS', 'minas gerais': 'MG',
'para': 'PA', 'paraiba': 'PB', 'parana': 'PR',
'pernambuco': 'PE', 'piaui': 'PI',
'rio de janeiro': 'RJ', 'rio grande do norte': 'RN',
'rio grande do sul': 'RS', 'rondonia': 'RO',
'roraima': 'RR', 'santa catarina': 'SC',
'sao paulo': 'SP', 'sergipe': 'SE', 'tocantins': 'TO'}
df_only.loc[:,'Nome_UF'] = df_only['Nome_UF'].map(uf_codes)
#create ./cities_code.json' file
result = {}
for _, row in df_only.iterrows():
state = row['Nome_UF']
municipality = row['Nome_Município']
code = row['Código Município Completo']
if state not in result:
result[state] = {}
result[state][municipality] = code
with open('./cities_code.json', 'w') as json_file:
json.dump(result, json_file, indent=4)
| return code | ||
|
|
||
|
|
||
| def _transform_text(municipality_name: str): # type: (str) -> str |
There was a problem hiding this comment.
valeria escrever teste só para essa função?
There was a problem hiding this comment.
Como é uma função privada e parece que eles já estão testando o seu comportamento na função pública, acredito que seja meio que opcional. Você concorda @mateusoliveira43
There was a problem hiding this comment.
Boa pergunta @mateusoliveira43!
@CarduCaldeira consegue passar para gente como foi gerado?
| return code | ||
|
|
||
|
|
||
| def _transform_text(municipality_name: str): # type: (str) -> str |
There was a problem hiding this comment.
Como é uma função privada e parece que eles já estão testando o seu comportamento na função pública, acredito que seja meio que opcional. Você concorda @mateusoliveira43
camilamaia
left a comment
There was a problem hiding this comment.
Apanhando aqui para o lint.... agora vai 🤞
camilamaia
left a comment
There was a problem hiding this comment.
Antes revisando tarde do que mais tarde kkkk Agora vai, dale!!!!
Valeu pela paciência <3

Descrição
Implementa uma função que recebe o nome do municipio e a sigla da UF e retorna seu código do IBGE.
@mateusoliveira43, @pedromendesjr, @nettorobson
Mudanças Propostas
Checklist de Revisão
Comentários Adicionais (opcional)
Estamos na dúvida na utilização de um arquivo json para leitura dos códigos referentes ao municípios (caso implementado) ou utilização de uma API externa para obter tais códigos.
Uma sugestão de desenvolvimento para melhoria seria a criação de um processo de automação para atualização do json
Issue Relacionada
Closes #399