Open LeandroGripp opened 2 years ago
Estou tendo problemas com o tamanho da base de dados. Por ter 29 milhões de linhas, não está sendo possível carregar toda a estrutura de dados na memória, com todas as colunas. Com menos colunas, até está sendo possível carregar em memória, mas iterar sobre as linhas é extremamente lento. Como cada linha diz respeito à participação de um cnpj em um item, seria preciso iterar por elas para gerar um dicionário com os itens e seus valores, descartando duplicatas (nesse momento, não nos interessamos tanto pelas participações dos CNPJs em si) Alternativas já pensadas:
Ao selecionar apenas colunas de interesse e descartar entradas que se tornam duplicadas ao eliminar grande parte das colunas, é possível carregar os dados em memória. Continua sendo excessivamente custoso iterar sobre as linhas (ainda são 24 milhões - a maior parte dos itens tem apenas um cnpj participante), então as análises vão ficar restritas às operações que é possível fazer no Pandas, que são bem otimizadas.
Com o dataset reduzido, foi possível utilizar o pandas-profiling. A grandeza de interesse era, principalmente, o valor global mínimo por item. Abaixo coloco algumas métricas encontradas sobre esse valor.
Verificamos, assim, que o valor máximo é da ordem de 19 milhões. Apesar de ser um valor alto, é coerente com a ordem de grandeza que licitações podem assumir. Para garantir a razoabilidade, verificamos também quais seriam esses itens milionários e constatamos que são itens que de fato tendem a ter valores altos:
Além disso, foi plotado um histograma (em escala logarítmica, pois em linear ele confina praticamente todos os itens juntos) para determinar a distribuição de valores.
Pode-se notar que, como esperado, a maior parte dos itens não passa da ordem das dezenas de milhares de reais, o que sugere que a base de dados pode ser trabalhada de forma coerente
Caracterizar os dados de itens e lotes que o César disponibilizou.