Programar é se F#der!

Segundo Gabe Newell, criador da Valve, “os (estatísticos) programadores de amanhã são os magos do futuro. Eles terão poderes mágicos se comparado aos outros. Mas o que é programar?

Bom, entre muitas outras coisas, programar é se f#der! Sim! E muito!

Meu primeiro contato com programação foi a duas décadas, quando comecei a programar em Pascal, Clipper, C++, Cobol e Delphi. Provavelmente algumas dessas linguagens você se quer tenha ouvido falar e não me recordo de tê-las usado depois de formado.

Já passei muito perrengue com essas linguagens, por causa de ponto e vírgula, parênteses, chaves, colchetes, loops infinitos e por aí vai. Mas quero usar esse texto para falar algo que aconteceu hoje de manhã.

Programar é se f#der!

Estou trabalhando em um projeto na área de varejo e preciso usar as técnicas estatísticas para responder perguntas de negócios. Até aqui tudo bem!

Para responder as perguntas, você e eu sabemos que precisamos de dados; nossa matéria prima. Então na semana passada, exercitei as minhas habilidades (ainda) limitadas de SQL, para criar as minhas ABTs e disponibilizá-las para análises.

Investi praticamente cinco dias realizando as mais variadas consultas em um SQL Server da Microsoft. Transformei os dados e criei variáveis novas no próprio banco de dados para facilitar meu trabalho usando a linguagem R.

Trabalhei com todo tipo de manipulação de dados que eu precisava: transformei datas; separei horas (importante para a minha análise); criei dias da semana; criei chave únicas; fiz join nas tabelas; mudei o tipo de dados.

Depois de criar as ABT’s, salvei no repositório de dados que costumo acessar com RStudio. Até aqui maravilha!

Como os conjuntos de dados possuem centenas de milhões de registros, instalei o pacote readr para garantir performance. Na última sexta-feira (27/03/2020), importei todos os arquivos que eu precisava para deixar tudo pronto e hoje começar com a análise descritiva (exploratória) dos dados.

Logo pela manhã tivemos uma reunião e eu avisei a minha equipe que havia criado todas as ABT’s necessárias para realizar as análises e responder às perguntas de negócios. Esse é o objetivo, lembra?

Eis que depois da reunião fui rodar o código para importar os arquivos e a tela preta do RStudio me cuspia erros que nem o Stack Overflow conseguia me ajudar. Pelo menos nenhuma das respostas me ajudou a decifrar o erro que esse código apontava.

COM_jan2020 <- (file.choose(), 
               col_names = c("Marca","Marketplace","Seller","Departamento","Data do Pedido",
                             "Status do pagamento", "Estado","Municipio","Codigo do pedido",
                             "Codigo da entrega","Valor do  item","Valor da comissao",
                             "Valor do frete", "Qtde SKU"), 
               skip = 1, col_types = NULL, locale("pt"), quoted_na = TRUE, 
               quote = "\"", comment = "", trim_ws = TRUE,
               progress = show_progress(), skip_empty_rows = TRUE)

Li muitas respostas no Stack Overflow, consultei documentação do pacote, acessei sites em português e inglês, utilizei a função help (  ), pedi ajuda para os livros, xinguei no Twitter, troquei os nomes das colunas, incluí e exclui parâmetros da função, mudei o nome do arquivo e do objeto. E nada! Nadinha mesmo!

Fui almoçar frustrado porque a parte da manhã era para eu ter criado pelo menos umas tabelas resumo. Mas como criaria as tabelas, se não conseguia importar meus dados? Pensei: “Que merda! Programar é se f#der mesmo!”

Voltei do almoço com o intuito de usar uma função de outro pacote. Durante as minhas buscas, me deu um estalo: “Por que buscar uma função de outro pacote? Tente mudar a forma de importar os arquivos utilizando o mesmo pacote.”

Pode parecer óbvio agora, mas na hora, por mais óbvio e simples que seja, você pode deixar passar algo. Então o que fiz foi trocar por esse código e ele importou os conjuntos de dados lindamente.

COM_jan2020 <- readr::read_csv2(file = "ABT_COM_012020.csv", 
                                col_names = c("Marca","Marketplace","Seller","Departamento","Data do Pedido",
                                              "Status do pagamento", "Estado","Municipio","Codigo do pedido",
                                              "Codigo da entrega","Valor do  item","Valor da comissao","Valor do frete",
                                              "Qtde SKU"), 
                                skip = 1, col_types = NULL, locale("pt"), quoted_na = TRUE, 
                                quote = "\"", comment = "", trim_ws = TRUE,
                                progress = show_progress(), skip_empty_rows = TRUE)

Na hora, minha vontade era de dar um soco na mesa junto com as palavras de libertação; como diria meu amigo Paulo Pinheiro.

Mas tive que me conter porque minha esposa estava entrevistando um profissional para a equipe dela, via Skype. Mas vontade não faltou!

Em tempos de coronavírus, minha vontade foi reprimida rsrs.

P.S: Omiti mais da metade dos campos da minha ABT e criei outros campos para ilustrar o código e manter a integridade contratual do meu trabalho.