como lidar com arquivos muito grandes dentro do Python tabelas com mais de 1 milhão de linhas ou que possuem múltiplos gigab como é que a gente faz para esse dado caber na memória R do nosso computador para que a gente tenha mais velocidade em extrair insites desses dados esse vídeo aqui vai ser bem simples mas eu vou apresentar algumas estratégias que eu adquiri ao longo dos últimos 10 anos analisando dados do mercado financeiro porque quem acompanha o canal um tempo sabe que eu sou Analista de dados com foco em desenvolvimento de estratégia de trading e
durante muitos anos eu precisei ser capaz de manipular dados do mercado financeiro que são gigantescos umas tabelas que eu já tive que processar possuiam 10 20 50 milhões de linhas com informações sobre operações feitas no mercado preços do livro O que que os participantes estavam fazendo então para consegui trabalhar com dados muito grandes eu precisei desenvolver uma série de técnicas cada uma aplicada a um tipo de problema diferente mas eu percebi que existiam algumas dessas técnicas que elas eram aplicadas A grande maioria dos problemas e é isso que eu vou apresentar para vocês aqui e
talvez vocês percebam que não estão conseguindo trabalhar com dados tão grandes porque não estão aplicando algumas simples dicas que eu vou deixar para vocês aqui e Antes de mostrar essas estratégias eu preciso fazer um disclaimer existem muitas estratégias pra gente lidar com Big Data inclusive muitos formatos de dados diferentes esse vídeo aqui vai se limitar Aos aos tipos de dados que são mais comuns que são Dados tabulares em duas dimensões ou seja tabelas arquivos csvs ou tabelas que são contidas em bancos de dados SQL se vocês tiverem alguma dúvida específica em relação a algum outro
formato deixe nos comentários Então vamos lá entrando aqui no computador eu preparei esse arquivo para vocês ele é um conjunto de dados de exemplo que eu peguei aqui do próprio site do kegle ele tem 1.9 GB ele é uma tabela contendo 10 milhões de linhas aproximadamente passa um pouquinho disso por 30 colunas Então esse conjunto de dados aqui já é grande suficiente e vocês vão perceber que a gente consegue aumentar em muita performance do nosso script ou das nossas análises por implementar algumas pequenas melhorias Então vou fechar isso aqui e eu vou criar um scriptz
em Python que eu vou chamar de deira pp e eu vou tentar primeiramente importar essa essa tabela utilizando o método pandas que é o read csv então importo o pandas aqui e eu vou utilizar o Read csv do pandas e vou executar isso aqui no meu terminal iterativo então uso o método read csv do pandas e eu vou executar isso aqui no meu terminal interativo já reparem aqui que ele demora bastante para rodar o meu aqui levou cerca de 20 segundos o dado tá aqui dentro mas até difícil de mostrar ele de tão grande que
ele é ele tem aqui 10 milhões de linhas e 44.000 10 milhões 44.000 linhas por 32 colunas tá então são informações aqui de voos ao longo do mundo com destinos tempo de atraso é um deir setet para esse tipo de análise tá a gente não tá interessado no deir set em si mas nas estratégias para comprimir esse cara então a gente vai usar algumas poucas funções do pandas que vão nos permitir ent desse problema aqui como um todo a primeira delas é o ponto info quando a gente dá um ponto info no nosso dado ele
vai perguntar qual que é o tipo de dado para cada uma das colunas que eu processei aqui tá então tem algumas colunas que ele não conseguiu processar muito bem aqui ele colocou como Timo 64 e ele começa a colocar aqui ano na qual o voo saiu Timo 64 mês Timo 64 que é inteiro né porque é ano é um número qualquer mês também vai de de 0 a 11 ou de 1 a 12 não tem tenho certeza e a gente começa a ver alguns dados aqui vários tipos diferentes a gente percebe que tem alguns deles
aqui que são do tipo Object e a gente tem outros do tipo float então basicamente nesse conjunto de dados a gente tem três tipos float int e Object vamos dar uma olhadinha em um exemplo de cada um deles vamos começar aqui com ear tá que vocês entendam que a gente tem aqui por de trás disso vamos começar aqui com o ear ele foi interpretado como in 64 Como eu disse são apenas números tá a gente sabe aqui que por exemplo airtime tempo de voo é do tipo float por qu porque eles são se eu não
me engano acho que em minutos tá eles podem assumir valores decimais aqui por isso que o Python interpretou isso como como um float que é o que que é o decimal agora a dificuldade é a gente entender esse flight date Por que que ele tá no Object que que é esse Object Object na verdade é quando o Python não consegue inferir um tipo adequado pro nosso conjunto de dados então é como se ele pegasse e aloc asse um espaço na memória muito grande para poder caber qualquer coisa porque ele não sabe o que vem tá
e como a gente vai perceber daqui a pouquinho Object é o tipo de dado que a gente mais tem que ter cuidado quando estamos trabalhando com dados muito grandes como é que eu sei disso porque eu vou utilizar uma outra função aqui chamado Memory usage ele vai calcular Qual a memória RAM utilizado por cada uma das colunas dos meus dados mas é importante que vocês passem um parâmetro aqui chamado Deep como sendo true Porque vocês querem que ele faça uma análise profunda porque se a gente não passar isso ele vai interromper a a mensuração dele
em um certo patamar que eu não lembro de cabeça agora e essa informação vai ficar errada tá já mostro para vocês o resultado disso Vou definir isso aqui como sendo uma variável Memory como sendo DF iG Memory usage vou executar Só que demora um pouquinho e reparem que ele me devolve aqui em bytes quando cada coluna ocupa de espaço prestem atenção no Object olha quão maior eles eles são em relação a os outros tá não dá pra gente ter uma ideia precisa agora mas parece que é de uma ordem de grandeza de 10 vezes tá
então aqui já tem eu garanto que eu tive que lidar com esse 1 vezes quando a gente se depara com esse tipo de situação onde tem algumas colunas que roubam a maior parte da memória se a gente focar nossos esforços só em otimizar isso aqui eu garanto que o dado por si só toda locação de memória fica muito mais eficiente vamos pegar agora esse Memory Vamos fazer uma conta eu quero somar todos os bytes tá ele deu esse número aqui que é até difícil de ver vamos transformar isso aqui em gigabytes porque esse meu computador
aqui ele é um MacBook Air ele é um computador relativamente simples não tão potente com 8 GB de Ram e mesmo com essas estratégias aqui eu consigo lidar com conjunto de dados muito grandes em um computador que não tem tanta memória RAM por saber otimizar isso aqui vou mostrar para vocês quanto que isso aqui ocupa na Ram então para isso eu vou pegar aqui a gente tem as informações em bytes e eu preciso converter para Gigabyte então byte a gente vai ter KB que é 1024 by mab que é 1024 KB e GB que é
1024 MB então preciso dividir isso aqui por 1024 a c quando eu executo isso ele tem que esse conjunto de dados Está ocupando 4 GB da minha memória RAM vamos ver agora com essa estratégia que eu vou aplicar agora com as estratégias em si né O que que a gente consegue fazer e quanto que a gente resolve dessa memória e Inclusive eu poderia pegar aqui o nosso Memory e eu vou dividir pelo Memory sun e vocês vão perceber que esses nossos vou multiplicar por 100 PR a gente temem termos percentuais aqui vocês vão perceber que
só esses quatro essas quatro colunas aqui elas já dão quase 50% dessa memória eh Total tá então a gente conseguir focar nelas e reduzir elas nós vai ter um ganho de memória aqui de quase duas vezes tá E essa só uma das estratégias possíveis como que a gente começa a estratégia aqui a gente analisar manualmente cada uma dessas colunas e tentar dar uma comprimida nesse dado então primeira delas a gente tem aqui o flight date tá flight date que que ele tá tentando inferir aqui a gente vai olhar para ela e refletir tá isso aqui
é data é o dia que ele não conseguiu interpretar isso como um date time ele precisaria passar isso de um objeto para um tipo de dado ideal para tratar data então para isso a gente vem fazer isso manualmente como eu vou utilizar o método pandas P2 date time tá e eu passo aqui o meu flight date eu vou subscrever ele pedindo que ele faça conversão para mim de de datetime então se eu peço agora por exemplo de novo o nosso DF pinfo e eu venho aqui ó eu já consegui trocar o nosso flight date para
datetime 64 já é um outro tipo de dado ganhei alguma coisa com isso não sei vamos ver se eu fazer o novo cálculo aqui agora ver como é que ficou o nosso Memory a gente tem que conseguir reduzir o nosso Fly date em 10 vezes o consumo de memória que ele tinha vamos ver esses outros três aqui próxima variável DF Market marketing airline Network ele tem vários valores parecidos o a o a o a o a então provavelmente a gente pode dar uma olhadinha nesse valor para ver quantos tipos de dados diferentes a gente tem
aqui posso utilizar o método value counts que ele vai contar cada um dos valores encontrar todos os os únicos e contar as ocorrências ao executar isso aqui reparem que a gente só tem 1 2 3 4 5 6 7 8 9 10 12 opções então ele não precisa tá guardando Todo o espaço do Object para guardar essas 12 opções existem formas mais mais eficientes de ele representar isso internamente isso aqui na verdade a gente poderia traduzir como um dado categórico que que significa um categórico por mais que ele pareça um texto na verdade cada uma
dessas colunas pertence a uma categoria diferente e o número de categorias ele é finito tá então isso aqui não seria nada muito diferente de eu pegar e dizer que o aa é um número 0 1 2 por exemplo e pedir pro Python trocar o texto a string por esse número e como você sabem texto pro pandas e pro Python armazenar texto ele é um dos tipos de dados mais pesados que existem Então se a gente troca a forma como ele tá representando de Object para category que é a categoria vocês vão ver um ganho muito
expressivo e aqui a gente faz isso só vou dar um zoom out aqui tá galera a gente faz isso utilizando método S Type pedi para ele fazer essa troca de tipo category vem aqui e coloca o seguinte DF Market airline eu quero que ele represente agora do tipo categoria eu vou subscrever na minha variável total ao executar isso aqui ele executou eu vamos ver agora como é que tá o tipo de dado ele mudou aqui pra categoria E se eu pergunto o tamanho novo desse novo dado eu tenho agora que ele é 1/8 dos outros
ele é tão simplificado ele é tão eficiente que o basal antes nosso era esse 8 aqui 8 milhões vamos ver 80 milhões de bytes 80 m mais ou menos agora ele passou para 10 milhões 1/8 do basal a gente conseguiu reduzir ele em praticamente sei lá 100 vezes o tamanho original que ele tinha mais ou menos isso aqui provavelmente se a gente for investigar as outras colunas que faltam que é o Orange Orange City name e d City name vou até mostrar para vocês aqui mas se eu não me engano elas também são desse tipo
que é Origin City name tá que é nome da cidade de origem provavelmente a gente não vai ter muitas opções de cidades são algumas cidades que tem aeroporto nos Estados Unidos se eu peço aqui o value counts a gente vai ter 380 cidades diferentes tá mas mesmo assim representar isso aqui de forma categórica custa pro Python muito menos do quees entar como uma string que exigiria esse Object então o que que eu faço eu venho aqui uso a mesma estratégia só que eu vou trocar o nome de orang de marketing airline Network para Origin City
name faço essa troca aqui e posso fazer a mesma para o Destiny que é a última última coluna que faltou faço essa aqui também vamos ver agora como é que ficou os nossos conjuntos de dados todos eles agora a gente não tem mais Object tá se eu pedir para ele calcular o memory usage vamos ver se ele fez a conta e vou pedir para ele mostrar para mim agora como é que ficaram os finais reparem que tem alguns aqui que ocupam um pouco mais de espaço esse aqui tinha só oito opções esse aqui ele tem
380 opções então ele ocupou o dobro do espaço do primeiro só que mesmo assim ele tá ocupando 1/4 do espaço dos outros se a gente ver agora qual que foi a o o tamanho ganho final do nosso conjunto de dados a gente estava em quase 5 GB agora a gente caiu para 2 GB tá isso aqui é um ganho muito expressivo com apenas quatro colunas otimizadas seria possível ainda otimizar todas as outras mas reparem que foram pouquíssimas linhas de código que me deram muita velocidade comprimi muito dado quando eu trabalhava no mercado financeiro não é
incomum eu pegar um dado que estava mal processado quando eu carregava via csv Eu puxava de algum banco de dados esql e com alguns pré-processamento desse eu consegui reduzir o tamanho do consumo da rã para mais de 90% o tamanho final era 10% do tamanho original isso podem acontecer com os dados de vocês Resumindo a primeira dica foquem no tipo de dado e evitem Object segunda dica eu quero que vocês dependendo do tipo de problemas se vocês estão trabalhando com tabelas em csv ou até em dados em bancos de dados SQL estão tendo problemas de
performance existe um tipo de dado alternativo chamado ponto parqu que eu uso muito eu uso muit muito esse tipo de dado no mercado financeiro todas as nossas bases eram em ponto parquê ele é um tipo de arquivo mais eficiente para que a gente consiga reduzir essa esse consumo de dados em alguns problemas tá vocês vão ter que dar uma olhadinha na documentação procurem por apach parquê ele tem algumas regrinhas diferentes ele é estruturado guardado de uma forma não não h não semelhante ao que é um ponto csv ou mesmo Como é que é um ponto
SQL ou arquivos em bancos de dados SQL Mas vocês vão ver algumas alguns ganhos de velocidade aqui no ponto parqu que são bizarros tá então por exemplo eu poderia pegar esse meu conjunto de dados aqui dar um to Parque eu vou exportar ele em formato parquê e eu vou chamar aqui de flights p parqu tá para isso é importante que vocês tenham a biblioteca se eu não me engano é p Arrow instalada essa aqui mas Quando tentarem executar esse método pandas vai dizer o que vocês T que instalar Olha que legal eu vou exportar isso
aqui ele demora um pouquinho tá E ele gerou para mim esse arquivo aqui flights P parquê se eu volto no sistema operacional lembrem que o nosso ponto csv Originalmente tinha 2 GB tá o ponto parquê ele tem 300 m então ele caiu aqui para 1/8 do do valor então já caiu muito só o quanto de de espaço ele ocupa no computador mas o mais interessante é o tempo de leitura desse dado eu vou até comparar para vocês aqui vou mostrar o pandas carregando as duas informações Então vou dar o df2 vai ser igual um pon
read parque Vamos ler aqui o nosso flights P Parque Olha que legal eu vou executar aqui você passaram 2 segundos 3 segundos e ele já leu o dado e o mais interessante é que esse dado aqui ponto parquê ele vai preservar os tipos de dados na qual ele foi exportado lembra que a gente tinha gerado feito todo esse pré-processamento aqui para comprimir ele ele preservou Isso pra gente de maneira inteligente diferente de um ponto csv que a gente teria que ler o processo de leitura vou até mostrar aqui de novo ó comecei a rodar processo
de leitura leva muito mais e quando ele lê ele não infere os tipos a gente precisa especificar e alguns dos tipos nem tem como especificar gente precisa fazer tudo na mão de novo Olha aqui passou 10 20 segundos praticamente ainda tá carregando o nosso dado e o dado também não vai ser tão eficiente quanto é o ponto parquê ele leu agora demorou um tempão se eu peço aqui pro nosso ponto DF h de novo o tipo de dados dele ele me volta aqui ele tá ocupando 4 GB na Ram enquanto que no ponto parquê se
eu substituir aqui por df2 nosso conjunto de dados tem 2 GB Então essa aqui são duas pequenas dicas que eu deixo para vocês espero que ajudem a trabalhar com dados tabulares isso aqui me ajudou muito ao longo dos últimos anos é uma dica que eu dei para muitos alunos Eu percebo que eles também eh quando lidam com problemas como esse conseguem resolver a maior parte dos seus problemas só fazendo essas duas coisas transformando em ponto parquê e cuidando dos ponto objects Se tiverem mais dúvidas quanto a isso algum outro formato de dados por favor deixem
nos comentários se vocês não entenderam nada do que eu falei nem um pouco do por fazer isso ou mesmo como fazer isso que linguagem de programação é essa eu deixo embaixo o link das imovei Academy que é a escola na qual eu sou um dos fundadores que a gente ensina programação em Python do Zero paraa análise de dados a gente tem uma trilha focada para análise de dados para tu transformar o Python na tua principal ferramenta de trabalho tem muitas trilhas tem muitos conteúdos diferentes para mercado financeiro também tem pra Construção de dashboards com python
aplicativos web automações de tarefas deem uma olhadinha no site abá isso aqui interessa vocês forte abraço e até o próximo vídeo