0
respostas

Desafio - tratando uma base de dados

#lendo arquivo json e normalizando ele

#lendo arquivo json
with open('/content/cursos_cadastrados.json') as arquivo:
  json_dados = json.load(arquivo)

#normalizando arquivo
json_dados = pd.json_normalize(json_dados)

#visualizando os dados
json_dados.head(10)

#Tratando valores nulos

#identificando em quais colunas estão os valores nulos
json_dados.isna().sum()

#deve haver uma forma de fazer isso menos artesanalmente
#colunas com valores nulos
colunas_apagar = ['carga_horaria', 'concluintes', 'data_inicio', 'data_conclusao', 'descricao', 'preco']

#eliminando os registros com valores nulos
json_tratado = json_dados.dropna(subset = colunas_apagar).copy().reset_index(drop = True)

#conferindo o dataframe sem nulos
json_tratado.head(10)

#identificando se ainda há valores nulos
json_tratado.isna().sum()

#verificando dataframe tratado
json_tratado.head(10)

#Verificando se há duplicatas
json_tratado.duplicated()

#verifica quantas amostras são duplicadas (True)
json_tratado.duplicated().sum()

#grava numa variável quais registros estão duplicados
filtro_duplicadas = json_tratado.duplicated()
filtro_duplicadas

#obter os registros que estão com dados duplicados
json_tratado[filtro_duplicadas]

#retirar os registros duplicados usando o drop_duplicates
json_tratado.drop_duplicates(inplace = True)

#confirmando se ainda existem registros duplicados na base
json_tratado.duplicated().sum()

#verificando a base sem duplicatas
json_tratado.reset_index()
json_tratado.head(10)

#Tratando strings vazias

#gerando um relatório de todas as colunas do modelo
#é impresso para cada coluna os valores únicos de cada coluna para checar inconsistências
for coluna in json_tratado.columns:
  print(f'Coluna: {coluna}')
  print(json_tratado[coluna].unique())
  print('-' * 30)

#colunas com strings vazias
#deve haver uma forma de fazer isso menos artesanalmente
colunas_vazias = ['concluintes', 'data_inicio', 'data_conclusao', 'instrutor.nome', 'instrutor.email', 'instrutor.telefone']

#obtendo o índice do registro com endereco.rua vazio
indice = []
for coluna in colunas_vazias:
  indice = json_tratado[json_tratado[coluna] == ''].index

#checando os índices dos registros com strings vazias
print(indice)

#removendo registros com strings vazias
json_tratado.drop(indice, inplace = True)

#checando dataframe tratado
json_tratado.head(10)

#checando tipos dos dados
json_tratado.info()

#converter a coluna concluintes para int
json_tratado['concluintes'] = json_tratado['concluintes'].astype(int)

#converter a coluna preco para float
json_tratado['preco'] = json_tratado['preco'].astype(float)

#checando novamente tipos dos dados
json_tratado.info()