Como criar quadros de dados de Pandas | Data Science Rebalanced | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Como criar quadros de dados de Pandas

teacher avatar Data Science Rebalanced, Data Scientists

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Trailer do curso

      1:43

    • 2.

      Visão geral do curso e ferramentas

      1:22

    • 3.

      Guia para otimização

      1:19

    • 4.

      Quando otimizar

      2:36

    • 5.

      Visão geral dos métodos

      0:22

    • 6.

      Carregar um caderno de Júpiter

      2:17

    • 7.

      Sobre os dados

      1:03

    • 8.

      Loop “for”

      2:46

    • 9.

      Iterrows

      1:13

    • 10.

      Itertuples

      1:22

    • 11.

      Compreensão de lista

      1:41

    • 12.

      Aplicar

      1:19

    • 13.

      Vetorização com série de Pandas

      1:09

    • 14.

      Exemplo de código 1

      4:26

    • 15.

      Exemplo de código 2

      3:59

    • 16.

      Exemplo de código 2 - lento

      2:44

    • 17.

      Exemplo de código 2

      2:13

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

76

Estudantes

--

Projeto

Sobre este curso

Você já gastou uma hora escrevendo código para limpar seus dados apenas para encontrar que eles são necessários três horas para executar? Às vezes, é bom mudar para outra tarefa enquanto você espera que seu código seja executado; no entanto, refatoração é frequentemente necessária ao se mover para ambientes de produção. Neste curso, você vai aprender como acelerar uma tarefa que você vai se encontrar fazendo muito como Cientista de Dados ou Analista de Dados: como fazer um loop por Pandas DataFrames e transformar seus dados.

Leah é um cientista de dados em uma grande instituição financeira e descobriu que há uma grande diferença entre habilidades e técnicas que os alunos aprendem na escola versus o que eles realmente precisam no trabalho no mundo real. Escrever Python eficiente não foi estressado em todo o programa de graduação de Leah. Ela vai ajudar você a evitar cometer os mesmos erros que ela cometeu no seu primeiro trabalho ensinando como fazer um processo rápido com DataFrames.

Este curso é destinado a cientistas de dados e programadores que desejam expandir seus conhecimentos para escrever Python eficiente.

Neste curso, você vai aprender as seguintes técnicas para fazer looping através de Pandas DataFrames:

  • Para loops
  • Iterrows()
  • Itertuples()
  • Compreensão de lista
  • Candidatar()
  • Vetorização com série de Pandas

Leah vai passar por dois exemplos do mundo real de código lento e mostrar como refactor

Nenhum conhecimento prévio dos Pandas é necessário para este curso; no entanto, um entendimento básico do Python 3 será útil (mas não necessário).

Música por TimMoor

Imagens usadas neste curso - computador

Conheça seu professor

Teacher Profile Image

Data Science Rebalanced

Data Scientists

Professor

Leah Berg and Ray McLendon are Data Scientists at a large financial institution and have over 15 years of combined experience. They have a passion for seeing people grow and become the best versions of themselves. When Leah and Ray graduated from university, they struggled at their first Data Scientist jobs and quickly realized that academia only told half the story.

While their degree programs placed a large emphasis on machine learning algorithms with perfectly cleaned and balanced data sets, they found the opposite true in the industry. Every problem they encountered required 90% of their time spent focusing on messy and imbalanced data sets, as well as the people generating those data sets.

Leah and Ray created Data Science Rebalanced to help data scientists new to the... Visualizar o perfil completo

Level: Beginner

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Trailer do curso: Olá a todos, Bem-vindo ao vídeo de hoje, que é sobre dicas para escrever Python eficiente. Meu nome é Lisa Simpson e sou cientista de dados em uma grande instituição financeira. Mas cerca de quatro anos de experiência meu colega de trabalho Ray e eu realmente queríamos fazer esses vídeos porque percebemos que há uma enorme lacuna e as habilidades que você aprende na escola versus as que você realmente precisa no mundo real. Então, todos os nossos vídeos serão focados em conjuntos de dados do mundo real, problemas e oferecendo as habilidades necessárias para resolver aqueles que eles não necessariamente ensinam na escola. Estamos super animados por tê-lo hoje e esperamos que você fique por aqui. Existem várias maneiras diferentes de acelerar ou otimizar seu código em Python. Neste curso, vou me concentrar em acelerar uma tarefa específica que você provavelmente vai se encontrar fazendo muito como cientista de dados e não como fazer um loop através um Pandas DataFrame e aplicando alguns transformações para dados de texto. Vamos analisar quando e por que otimizar seu código, bem como passar por seis maneiras diferentes de percorrer um Pandas DataFrame. Em seguida, vamos pegar o que aprendemos para aplicá-lo a dois exemplos de código que refatoramos. Este tutorial é destinado a ser super amigável para iniciantes. Usaremos o Jupyter Notebooks para que você possa ver todo o código que estou escrevendo e executá-lo sozinho por si mesmo. E usaremos algumas bibliotecas de ciência de dados muito populares como pandas e NLTK. Os dados que usaremos para o curso de hoje são o conjunto de dados de notícias da AG. Este é um conjunto de dados de textos muito popular que contém mais de um milhão de artigos de notícias, seus títulos e suas descrições, bem como categorias para cada um dos artigos de notícias. Neste curso, estaremos nos concentrando no título do artigo de notícias. Além disso, embora existam mais de um milhão de pontos de dados neste conjunto de dados, vamos experimentar apenas alguns milhares de registros só porque não queremos que nosso código seja executado para sempre. E com isso, vamos começar. 2. Visão geral do curso e ferramentas: Tudo bem, vamos entrar em algumas dicas para escrever Python eficiente. Este curso é para ser realmente amigável para iniciantes. Usaremos algumas bibliotecas de ciência de dados muito populares, como pandas e NLTK ou Natural Language Toolkit. Agora você não precisa ser um especialista nessas bibliotecas, mas ajuda ter um pouco de familiaridade com elas. Farei o meu melhor para explicar as coisas à medida que avançamos ao longo do curso. Eu listei o Python 3 na seção de habilidades intermediárias. Espero que você já tenha um pouco de familiaridade com o Python. Mas se você não fizer isso, usaremos cadernos Jupyter. Você pode facilmente acompanhar e executar as células sozinho. Ao longo deste curso, vamos nos concentrar em algum pré-processamento de texto para nossos artigos de notícias. Na verdade, tenho outro curso sobre processamento de linguagem natural em Python, estaremos usando vários dos métodos que são ensinados nesse curso. Então, eu recomendo verificar esse antes de assistir a este curso, assim por diante, neste curso, estaremos usando o PyCharm como nosso ambiente de desenvolvimento, mas realmente estaremos usando o Jupyter Notebooks para o desenvolvimento real. Pycharm só nos permitirá criar um caderno Júpiter e fazer todas as nossas edições lá. Agora você pode usar qualquer IDE que desejar. Eu apenas prefiro PyCharm, mas sinta-se livre se você usar Anaconda, pode ser spidered ou VS Code ou qualquer IDE serve. Além dos notebooks PyCharm e Júpiter, estaremos nos concentrando nas bibliotecas, pandas e Kit de Ferramentas de Linguagem Natural ou NLTK. 3. Guia para otimização: Portanto, a versão curta para resumir este curso é que talvez você não precise fazer a otimização imediatamente. Eu recomendo executar algumas etapas antes de você realmente pular para otimizar seu código. Primeiro de tudo, seu código precisa realmente ser executado para que você possa saber se isso significa otimização. Então, primeiro dê o passo para garantir que seu código seja executado e depois dessa verificação, mas você obtém a saída que está esperando porque às vezes seu código pode funcionar, mas os resultados que são produzindo arte uma vez que você esperaria, uma vez que você a tenha executado, e é a saída que você esperaria, então você pode começar a pensar, ok, é essa visão que está sendo executada atualmente aceitável para mim? Mas não é tudo sobre você. Se você estiver escrevendo esse código para outra pessoa ou outra pessoa estiver consumindo seu código se você quiser ter certeza de que a velocidade é aceitável para isso, se não houver pessoas que estejam usando seu código, você pode ter usuários que trabalham indiretamente com seu código. Portanto, é importante conversar com eles sobre o tipo de desempenho que eles esperam de um determinado aplicativo. Então, finalmente, depois de cobrir tudo isso, você está potencialmente pronto para otimizar. E quando você começar a otimizar, você acabará repetindo o ciclo repetidas vezes até atender aos seus requisitos de otimização. Eu modifiquei esse cara é um pouco da documentação do Python. Portanto, sinta-se à vontade para ir ao site deles e ler muito mais sobre diferentes maneiras de otimizar. E, novamente, neste curso, vou focar apenas em um subconjunto muito pequeno de como você pode otimizar seu código Python. 4. Quando otimizando: Falamos sobre etapas para otimização, mas quando você deve realmente otimizar seu código? Eu listei alguns exemplos diferentes aqui de quando você pode querer otimizar seu código. Então, vamos falar sobre isso. E uma das primeiras vezes que você pode precisar otimizar seu código é quando você começa a trabalhar com IA de big data por mais tempo e trabalhou com conjuntos de dados realmente pequenos. Eu escrevi um código que funcionava para esses conjuntos de dados. Então, houve momentos em que comecei a escalar para conjuntos de dados maiores que não consegui executar meu código de forma eficiente como antes. Então, depois de começar a lidar com conjuntos de dados realmente grandes, você quer começar a tentar escrever seu código da maneira mais ideal possível. Outro motivo pelo qual você pode querer otimizar seu código é se você estiver criando um componente reutilizável. Então, digamos que você esteja trabalhando em uma determinada função e descubra que essa é realmente uma função realmente útil para outras pessoas da sua equipe. Você tem outras pessoas que estão fazendo exatamente a mesma coisa que você, e elas também podem usar essa função. Isso pode ser um caso quando você deseja otimizar seu código, já que mais pessoas o estão usando e, potencialmente, elas podem estar executando, digamos, em um conjunto de dados maior, então você está, veja se você vai em frente e faça alguma otimização para eles. Em seguida, talvez você queira otimizar quando for implantado na nuvem, portanto, sempre que começar a executar as coisas e dizer AWS ou Google Cloud, esses recursos não são gratuitos quando você executa coisas em seu laptop local. Não importa o quão lento eles correm. É basicamente sobre quanto tempo você está disposto a esperar que eles completem a nuvem. Você tem essa complexidade adicional de realmente ter que pagar por esses recursos que você está usando. Então, para não ter suas coisas funcionando para sempre e cobrando esse sino enorme, você provavelmente quer tentar otimizar seus códigos, fazê-lo funcionar o mais rápido possível. Outro exemplo de quando você pode querer otimizar é quando você está trabalhando com usuários externos e tentando fazer a melhor experiência possível para eles. Digamos que você tenha criado algum tipo de modelo que faça uma previsão em algum site e que o usuário tenha que interagir com esse modelo. Bem, eles não querem estar esperando 10 horas para obter uma resposta de você para qual é sua previsão. Quando você tem pessoas que dependem de algo que você está fornecendo, você definitivamente quer tentar otimizar seu código e torná-lo o mais rápido possível. otimização entra em jogo sempre que você está tentando iterar rapidamente durante uma prova de conceito. E muitas vezes quando você está trabalhando em uma prova de conceito, você terá muitos métodos ou técnicas diferentes que deseja conferir. E para poder experimentar tudo isso rapidamente, seu código precisa ser otimizado. Finalmente, há preocupações éticas para um código que é executado muito longo, mesmo que você tenha seu código rodando na nuvem realmente nos bastidores, tudo isso está sendo executado em um data center em algum lugar em datacenters têm uma pegada de carbono anexada a eles. Portanto, quanto mais tempo seu código for executado, mais você está aumentando potencialmente essa pegada de carbono do datacenter. Então, se você está consciente sobre o meio ambiente, isso também pode ser outro motivo para otimizar. 5. Visão geral dos métodos: Vamos percorrer seis maneiras diferentes de percorrer um DataFrame Pandas. Vamos começar da versão mais lenta e trabalhar até a versão mais rápida. Então, vamos estar cobrindo loops. Ele surgiu ou tuplas, uma compreensão de lista, aplicar declarações e vetorização com séries de pandas. E se você não sabe o que isso significa, tudo bem. Vamos cobrir tudo neste curso hoje. 6. Carregar um caderno de Jupyter: Tudo bem, então abri meu IDE, que é PyCharm. E o que eu fiz já foi apenas criar um TA de projeto para essa classe. Eu tenho uma pasta para os dados, tenho meu Jupyter Notebook lá, bem como meu arquivo requirements.txt que tem toda a biblioteca que usaremos nele. Mais uma vez, sinta-se à vontade para usar qualquer ambiente de desenvolvimento que funcione para você. Talvez esse seja o código VS, talvez você, que a aranha realmente não importa. Vamos usar isso nossos arquivos e, em seguida, abrir um caderno Júpiter a partir daqui. Portanto, uma das melhores práticas sempre que você inicia um projeto Python é criar um ambiente virtual e instalar todas as suas bibliotecas lá. Eu já fiz isso, mas se você não o fez, o que você pode fazer é abrir o terminal no PyCharm, eu já tenho a configuração do meu ambiente original e instalar esses requisitos, o que eu faria é apenas fazer essa linha aqui. Então este é pip install dash r, dizendo que temos um arquivo de requisitos e, em seguida, estamos listando o nome do arquivo de requisitos. Então, para colocar nosso caderno Júpiter funcionando aqui no terminal, vou digitar o caderno jupyter. E isso vai girar observando para interajamos com o Caderno Jupyter. E aqui está nosso servidor web local com nosso notebook Júpiter nele. Eu tenho este caderno Python aqui. Você deveria ter conseguido baixar isso mais os dados e o arquivo de requisitos com as bibliotecas do site do curso. Vou clicar nessas dicas para escrever notebook Python eficiente para abrir isso e começaremos. Tudo bem, agora que temos nosso caderno, vamos começar a percorrer algum código. Este caderno é realmente feito para ser uma peça autônoma, e há muito do que eu cobri nos slides nele. Portanto, sinta-se à vontade para ler todo esse texto, se você quiser como um pouco de motivação para o motivo pelo qual podemos querer acelerar nosso código. Um pequeno exemplo aqui no início, também tenho uma nota aqui sobre como baixar o PyCharm se você não tem um ambiente de desenvolvimento e gostaria de ter um, eu definitivamente recomendo PyCharm. Você pode seguir este link aqui, sair para esse site e, a partir daí, você pode selecionar seu sistema operacional diferente. E eu recomendaria ir com a versão da comunidade porque ela tem praticamente tudo o que você precisaria nela. Um pé que estou correndo agora. Mas se você quiser pagar por mais alguns recursos, eles também têm uma versão profissional. Vou pular algumas das coisas que já abordei nos slides e vamos descer para saber mais sobre nosso conjunto de dados. 7. Sobre os dados: Trabalharemos com o conjunto de dados de notícias da AG. E este é um conjunto de dados de texto muito popular que tem mais de um milhão de artigos de notícias diferentes e contém seus títulos de artigos de notícias, as descrições, bem como uma coluna de categoria e quais as diferentes categorias dos artigos de notícias são. Eu peguei esse conjunto de dados do Kaggle, então eu fiz um link aqui se você quiser ir e com medo, mesmo que haja mais de um milhão de registros no conjunto de dados, vamos usar uma amostra deles. Então, o que estou fazendo aqui é carregar e algumas bibliotecas que precisaremos. Estou lendo neste CSV train.py. Esse será nosso conjunto de dados com o qual trabalharemos. E então eu estou amostrando 5000 registros de lá. Esse estado aleatório é apenas um número aleatório que permite reproduzir meus resultados. Então, vamos seguir em frente e executar isso e dar uma olhada em nosso conjunto de dados. Então você pode ver aqui que temos essa coluna de índice de classe. Isso tem uma categoria para cada um dos artigos de notícias. Temos o título do artigo de notícias, bem como uma descrição do artigo de notícias. Nesta aula, nós realmente estaremos focados apenas em manipular o título do artigo de notícias que você também pode usar esse conjunto de dados para um problema de classificação , se quiser fazer. 8. Loop “for”: Então, hoje vamos fazer um loop sobre um quadro de dados. E há muitas maneiras diferentes de fazer isso. Uma das coisas realmente ótimas que eu amo Python ou realmente em qualquer linguagem de programação, é que não há uma única maneira correta de resolver um problema. Você pode ter duas pessoas tendem a ser ousadas. 20 pessoas apresentam soluções totalmente diferentes que resolvem o mesmo problema. Então, vamos percorrer seis maneiras diferentes de fazer um loop sobre um Pandas DataFrame. E vamos calcular o número de caracteres que estão no título de cada um desses artigos de notícias. E veremos como o desempenho afeta cada um desses métodos. Então, vamos começar com um dos métodos mais lentos. E este é apenas um loop básico de quatro loops que são usados, são realmente em muitos idiomas diferentes e são uma das maneiras mais básicas uma das maneiras mais básicas de iterar sobre dados. Então, se você aprendeu outra linguagem de programação antes do Python, provavelmente já fez quatro loops antes. O que isso acaba parecendo em Python é o seguinte para cada um desses exemplos, vou iniciar um cronômetro para rastrear quanto tempo os exemplos demoram. Basta observar que, dependendo dos recursos que você tem em sua máquina, você pode obter respostas um pouco diferentes do que eu. Mesmo se você executá-lo várias vezes, provavelmente terá respostas diferentes. E então usamos a biblioteca de tempo para obter nosso horário de início. E então também em nosso tempo de término também e calculamos quanto tempo leva. Então, fazer um loop sobre um DataFrame com um loop for-loop, o que primeiro fazemos, lista temporária para conter todo lista temporária para conter todo o número de caracteres no título que vamos fazer loop. A sintaxe é semelhante a muitas linguagens diferentes. Vamos dizer para I no intervalo 0 ao longo do DataFrame, tudo o que está fazendo é obter quantas linhas estão no DataFrame, descobrindo qual é o número máximo que precisamos iterar acabou. E estamos usando I como essa variável de índice. Então, dentro do loop for, o que estamos fazendo é pegar esse DataFrame, estamos fazendo isso. Eu tranco nele. E esta é uma maneira de indexar diferentes partes de um DataFrame Pandas e acessar diferentes partes deles estavam usando nossa variável de antes para dizer em qual item estamos no DataFrame. E então também estavam extraindo o título dessa coluna e para obter o número de caracteres, tudo o que fazemos essa função Len para obter o comprimento disso. Armazenamos isso em uma variável e, em seguida, adicionamos isso à nossa lista que fizemos temporariamente antes. Então, ele irá iterar sobre cada item em nosso DataFrame, calcular o comprimento, anexá-lo à lista e, finalmente, atribuímos essa lista a uma nova coluna em nosso DataFrame. Então, vamos ver quanto tempo isso leva em 5000 registros e vamos ver o resultado. Então, para mim, isso levou cerca de cinco segundos e, dependendo de novo, como são seus recursos em sua máquina, você provavelmente terá uma resposta diferente da que você provavelmente terá uma resposta diferente eu, e isso é totalmente bom. Então, estamos começando com nosso método mais lento aqui e depois vamos trabalhar até os métodos mais eficientes. Até agora, nossos resultados aqui, temos essa nova coluna em nosso DataFrame chamada alongamento. E isso tem o número de caracteres que estão no título de cada um desses registros. Então eu só estou imprimindo o primeiro vírus oh, registros. Mas isso fez isso se eu tiver 1000 registros no total. 9. Iterrows: Em seguida, temos uma função chamada iter rows. Esta é uma função específica do Pandas DataFrames e eu permite que específica do Pandas DataFrames e eu você itere sobre um DataFrame como pares de séries de índice. E os pares de séries de índices são a parte importante porque é aí que obtemos alguns de nossos ganhos de eficiência aqui. Sintaxe, por que isso realmente parece muito semelhante ao loop for que escrevemos antes. Na verdade, ele começa com um loop for-loop. Parece que usamos essa função de linhas ITER em vez do intervalo para poder obter automaticamente o número de linhas que precisam ser iteradas. Não temos que fazer essa coisa de alcance que fizemos antes. No entanto, desta vez nomeamos duas variáveis, uma chamada índice e em seguida, uma linha de coluna para que possamos iterar sobre os índices. E então temos nossa linha, e pegamos cada linha, obtemos o título dessa linha e, em seguida, obtemos o comprimento disso. E também acrescentamos isso à nossa lista é semelhante ao nosso exemplo anterior. Em seguida, atribua essa lista a uma nova coluna chamada length. Então, se executarmos isso, podemos ver quanto tempo isso leva e compará-lo com o método original. Então parece que anteriormente tínhamos cerca de cinco segundos aqui e reduzimos para cerca de 1,5 segundos ou mais. E você pode ver em nosso DataFrame aqui nós recebemos exatamente a mesma resposta. Então, basta encontrar um pouco mudando a maneira como escrevemos nosso código. Nós ganhamos muitas eficiências aqui, mas alerta de spoiler, podemos realmente fazer melhor do que isso. 10. Itertuples: Portanto, há outra função em pandas chamada itertools e é realmente semelhante a ela surgiu, mas em vez de iterar sobre pares de séries de índice, e isso realmente cria cada linha como uma tupla nomeada. E é aí que obtemos as eficiências aqui. sintaxe sábia parece semelhante à outra. Não precisamos definir um índice, uma vez que é uma tupla nomeada, apenas definimos nossa variável de linha e, em seguida chamamos isso de df.head são tuplas para loop sobre cada item em nosso DataFrame sem ter que fazer nenhum as coisas de intervalo que fizemos em nosso primeiro exemplo. Então, desta vez, pegamos cada linha, obtemos o título e, em seguida, temos o comprimento disso para anexá-lo à nossa lista e atribuímos a essa nova coluna. Então, quando executamos isso e isso realmente acaba obtendo resultados abaixo do segundo, se o que é uma grande melhoria de onde começamos que você está dando sobre isso ou tuplas é que você precisa usar este acessador de pontos. Portanto, título de ponto rho em vez dessa notação de colchetes que usamos com linhas ITER. E o irritante disso é que isso não funciona se você tiver espaços em nome de suas colunas. Então, para usar esse método, que eu recomendo que você faça sobre ele surgiu, você tem renomear todas as suas colunas se elas tiverem espaços para se livrar disso, o que pode ser um pouco chato de se fazer. Mas uma vez que você tenha escrito e uma vez que você tenha isso para o resto de sua vida. Então, no caso em que você está tentando decidir se eu deveria usá-lo surgiu ou inserir tuplas. Sempre recomendo usá-lo ou tuplas para iterar sobre um quadro de dados. Então, uma das maneiras mais rápidas que você pode. 11. Compreensão de lista: Últimos três métodos e vou falar sobre isso. Eles são todos bem parecidos em velocidade. E, dependendo da sua situação em que você esteja, talvez você possa usar um ou talvez tenha que buscá-lo lá em cima. Próximo passo temos a compreensão da lista. compreensão de lista oferece apenas uma sintaxe mais curta para criar uma nova lista com base em valores de uma lista existente. E isso é específico para Python, acredito que So. Você pode não ter visto isso em outros idiomas antes dele. A sintaxe pode ser um pouco confusa. Eu sei que quando comecei a aprender compreensões de listas, um meio que explodiu minha mente. Muito difícil para mim entender. Que uma vez que você começa a vê-los, algumas vezes, você fica muito confortável com eles e depois começou a ver onde você pode usá-los muito em seu código. Na verdade, é o que eu gosto de fazer com uma compreensão de lista é começar com o loop for, ler lá e depois voltar ao que está acontecendo no início da compreensão da lista. Então aqui estamos dizendo para x no título da coluna DataFrame obter o comprimento de cada saída. Então, estamos usando isso como uma lista e basicamente estamos dizendo que nossa coluna original era uma lista e, em seguida, vamos obter o tamanho desses e salvá-lo como uma nova lista. Fazemos isso tudo em uma linha, então é um pouco mais simples e compacto do que esses outros métodos sobre os quais falamos até agora. E isso realmente faz uma lista para nós, então não precisamos anexar à lista como fizemos e a outros cenários. Pegamos nossa lista e, em seguida, atribuímos isso a uma nova coluna e podemos executá-la e ver quanto tempo isso leva. E, novamente, isso é um pouco mais rápido. No final, as tuplas ITER se aproximam que fizemos antes. Mas às vezes há muitas coisas complicadas que você pode precisar fazer para enviar mensagens de texto ou quaisquer dados com os quais você está trabalhando. E não se encaixa perfeitamente na compreensão de uma lista. Portanto, há momentos em que você pode usar este e outras vezes em que pode fazer sentido usar o próximo método que é aplicado. 12. Aplique: Fly é específico para o Pandas DataFrames. E o que ele faz é que você aplique uma função ao longo de um eixo de um DataFrame. E o que isso significa é que posso aplicar uma função a todas as minhas colunas ou a todas as minhas linhas. E a maneira como eu uso isso na maioria das vezes é que vou aplicar uma função a todas as linhas no meu DataFrame. Muitas vezes você usa aplicar com instruções do Lambda para criar funções em linha. Então, a forma como isso parece em Python é que descobrimos qual coluna queremos manipular. Nesse caso, é nosso título do nosso DataFrame. Nós aplicamos pontos e, em seguida, fazemos este lambda x com dois pontos e , em seguida, damos a ele qual função queremos fazer. Então, neste caso, estou apenas obtendo o tamanho do meu valor x é que ele vai obter o comprimento, cada título em nossas linhas DataFrame. Mas eles são realmente bons sobre as declarações de apliques é que você pode escrever sua própria função personalizada, que veremos mais tarde em alguns exemplos que, e que em vez de colocar comprimento aqui, você acabou de chamar sua função. Então, é muito bom que você possa fazer coisas mais complexas em sua função. E, em seguida, basta chamar a função aqui e aplicá-la a cada linha no seu dataframe. Então, se executarmos isso para esse é super, super rápido. Temos novamente velocidades abaixo de segundo aqui em 5000 registros. E aplicar é uma das minhas maneiras favoritas pessoais aplicar funções a diferentes linhas e meu DataFrame. Como este é o que eu costumo escolher muitas vezes de todos os métodos dos quais estamos falando. 13. Vetorização com a série de Pandas: Um método final para looping sobre um DataFrame é a vetorização com séries de pandas. Essa geralmente é a abordagem mais rápida que você pode obter para looping no DataFrame. O complicado é que às vezes você não consegue colocar seus dados no formato certo para trabalhar com esse método. Temos sorte que neste caso, eu nos dei um exemplo em que isso não funciona. Podemos ver como isso funciona, mas às vezes você simplesmente não consegue colocar seus dados no formato certo para que isso funcione. E assim, a vetorização realmente permite que você aplique operações diferentes em matrizes inteiras em vez de cada indivíduo. Então, para todos os outros exemplos quais passamos até agora, ele está iterando cada linha em nosso DataFrame. vetorização está pegando a coluna inteira e, em seguida, aplicando uma transformação à coluna. Portanto, dessa forma, não precisamos iterar sobre cada item no DataFrame. Como isso parece na prática aqui é temos nossa coluna que queremos manipular. Estou obtendo a versão de string dessa coluna e, em seguida, obtendo o comprimento disso. E quando executamos isso, e isso também é muito rápido. E vejo aqui que ele está aparecendo como um pouco mais lento do que o método de aplicação. Mas se você executar isso algumas vezes diferentes, obterá resultados diferentes. Então, são todos subsegundos, então estamos em boa forma. 14. Exemplo de código 1 — Lenta: Então, agora vamos pegar tudo isso que aprendemos aqui e passar por alguns exemplos de código em que temos uma versão mais lenta do código e, em seguida, faremos algumas refatorações para torná-lo um pouco mais rápido. Neste primeiro exemplo, o que vamos fazer é limpar o título de nossos artigos de notícias em minúsculas m e enviar mensagens de texto, ou colocar certos tokens de um dicionário e depois remover números e pontuação dos textos. Essas são etapas de pré-processamento padrão que você normalmente faria se estiver lidando com dados de texto. E eu realmente tenho um curso sobre processamento de linguagem natural com Python que abrange vários deles, bem como diferentes métodos para trabalhar com processamento de linguagem natural. Então, se eles são novos para você, eu definitivamente recomendo verificar esse curso e aprender mais sobre essas etapas lá. Então, em nossa pasta de dados, outra coisa que incluí é um dicionário que eu inventei. É apenas um arquivo CSV. Então, temos duas colunas de e para. A partir da coluna tem um monte de abreviaturas e Reino Unido e NBA, nós e então a coluna duas temos a versão totalmente expandida dessa abreviação. Às vezes, há casos em que você deseja expandir para as abreviações que você pode ter em seu texto. E esta é uma maneira de fazer isso. Estou criando um dicionário você mesmo. O que vamos fazer aqui é exatamente isso. Temos algumas abreviações nos títulos de nossos artigos de notícias que queremos expandir para a versão completa deles. Então, para este primeiro exemplo, vamos começar importando algumas bibliotecas que usaremos. A maioria deles está apenas no Python base e, em seguida, usaremos pandas para nossos DataFrames como estamos usando nesses outros exemplos. Então, vou filtrar alguns avisos que recebemos para que não atrapalhe nossas parcelas de saídas sem aviso, pare os avisos de filtro estão fazendo. E então temos duas funções aqui para pré-processar nossos textos. A primeira é uma função de substituição de dicionário, e estamos apenas recebendo o título do artigo de notícias aqui. Então, nesta função, carregamos em nosso dicionário e o salvamos como um DataFrame, estamos criando uma lista temporária para armazenar todos os nossos tokens expandidos ou limpos. E então o que estamos fazendo é pegar nosso título de nosso artigo de notícias e dividir isso em espaços em branco. Então isso nos dá uma lista de tokens que vamos iterar sobre ele. Então, o que estamos fazendo aqui percorrer cada um dos nossos tokens, verificando se está no dicionário que o carregamos. Se for, vamos acrescentar essa versão expandida à nossa nova lista. Caso contrário, basta anexar o token anterior a partir daí. O que fazemos é juntar todos esses novamente usando esta função de junção. E nós apenas separamos aqueles com espaço em branco para que essa seja uma única string em vez de uma lista de tokens. Então, tudo isso é fazer alguma substituição de dicionário. E então temos a segunda parte do nosso pré-processamento aqui. Tomamos um dataframe inteiro e essa função e o que fazemos é realmente fazer alguma fatoração, que foi um dos métodos mais rápidos que falamos sobre isso, somos os primeiros minúsculos em nossos textos com esta string inferior em toda a coluna. E então estamos substituindo dígitos por um espaço. E então temos um monte de pontuações diferentes que listamos aqui que vamos substituir por espaços também. Então, depois de fazermos tudo isso, estamos usando uma aplicação com um Lambda para chamar essa função de substituição de dicionário e aplicá-la a cada linha do DataFrame. Então, estamos usando aqui uma mistura de algum método mais lento, bem como alguns métodos rápidos. E veremos aqui quanto tempo isso levará para correr. Vou carregar essas funções que acabei de falar. E então aqui da maneira como realmente chamamos isso e pré-processamos a função de título, passamos todo o nosso DataFrame. E então lembre-se de que também aplica a substituição do dicionário depois que fazemos a limpeza de nossos tokens. Então, se executarmos isso, veremos quanto tempo isso leva. E assim por diante da minha máquina estou executando algum software de relatório. Então é provavelmente por isso que está demorando um pouco mais, mas isso levou cerca de dois minutos para eu rodar em cerca de 5000 registros. Agora, se você tiver apenas 5 mil pontos de dados, então talvez isso seja bom o suficiente para você. Novamente, você pode pensar nessas diferentes etapas para otimização. Temos a urina do pé, obtivemos os resultados certos, e então começamos a pensar, ok, isso faz sentido ele corra tanto tempo no meu cenário? Estou bem com isso? Então, se eu só estou fazendo essa análise ao lado, provavelmente isso é bom para mim. Mas os problemas geralmente surgem quando você começa a lidar com conjuntos de dados realmente grandes. Novamente, esse conjunto de dados tem no total mais de um milhão de registros. Então, se fôssemos fazer isso em todo o conjunto de dados e poderíamos demorar muito para sermos pacientes e esperar por nós. Assim, podemos ver os resultados aqui temos essa nova coluna chamada, intitulada Clean. E você pode ver aqui que nós o colocamos em minúsculas. Temos algumas abreviações para as quais fui expandido. Também nos livramos dos números e, em seguida, qualquer uma dessas pontuações. 15. Exemplo de código 2 — Refactored: Então, passando para nossa versão refatorada disso, temos nossas mesmas duas funções, mas as escrevemos um pouco diferente. Então, em vez de carregar o dicionário toda vez que a função é executada , que era o que estávamos fazendo antes, vamos carregá-lo uma vez e depois passá-lo para nossa função. E então também vamos receber o título do artigo de notícias, como conseguimos antes. Então aqui nós condensamos nossa função original em leão. E isso está usando a funcionalidade dos dicionários, bem como usando a compreensão de lista. Assim, você pode ver aqui em nosso código abaixo, quando carregamos em nosso dicionário, fazemos alguma formatação para obtê-lo realmente em um formato de dicionário verdadeiro, enquanto antes era realmente um DataFrame. Quando fazemos isso, podemos realmente usar essa funcionalidade de ponto get para fazer isso. Procure para ver se a palavra existe no dicionário. Se ele retornar a versão totalmente expandida, caso contrário, retorne a palavra original. Então, mudamos toda essa declaração if else em apenas uma única linha aqui. E então o resto disso é apenas uma compreensão de lista. Então, dizemos que para cada palavra em nossa divisão de pontos de título, execute essa função. Esta divisão de pontos do título apenas obtém uma lista dos tokens que estão no título com base no espaço em branco. Então, e então fazemos um loop através de cada um deles e, em seguida, executamos essa função de dicionário. Finalmente, depois de recuperarmos nossa lista inteira, juntamos isso novamente como uma única string com a função join. Em seguida, temos nossa função de pré-processamento desta vez, em vez de pegar um DataFrame inteiro e executar operações em todo o DataFrame, vamos apenas fazer isso no próprio título e usar aplicar mais tarde para aplicar isso. Então aqui temos as mesmas poucas coisas que estávamos fazendo antes. Estamos fazendo nosso invólucro inferior com o ponto de título inferior. Você está substituindo dígitos desta vez pela biblioteca 3D, que é um pouco mais rápida do que a abordagem que estávamos fazendo antes. E então também estamos removendo toda a pontuação aqui. Isso pode parecer um pouco complicado, mas o que estamos fazendo aqui é usar esta função Translate, que é uma função que você pode chamar em strings. E então usaríamos esse str dot make trans para realizar algumas transformações. Aqui você notará que temos pontuação de ponto de string. A biblioteca de strings é muito boa porque já tem uma lista calculada para nós de todas as diferentes pontuações. Portanto, não precisamos listá-los todos como fizemos anteriormente. Então, em última análise, ambicioso substitui toda a pontuação por espaços em branco. E para ser honesto, eu não escrevi isso sozinho. Fui ao meu velho amigo Google e encontrei um post no Stack Overflow que estava discutindo diferentes maneiras de remover a pontuação e qual caminho foi o mais rápido. Eu encontrei isso e apenas copiei para este caderno e funciona muito bem para a nossa situação. Então isso é apenas um lembrete rápido de que você não precisa saber como otimizar tudo é totalmente normal para não se sentir à vontade para usar recursos como Google e StackOverflow para encontrar a melhor maneira de fazer algo. Agora vamos passar para realmente aplicar nessas funções e ver, você verá aqui que estamos carregando nosso dicionário apenas uma vez, originalmente, parecia que fazia sentido incluir isso com o uma vez que estava relacionado ao que estávamos fazendo, mas estava se abrindo toda vez que a função era chamada. Não precisamos fazer isso. Podemos apenas carregá-lo uma vez e obtê-lo neste formato de dicionário e depois passar isso para nossa função. Então, para realmente aplicar essas funções, estamos usando instruções de aplicação com uma função do Lambda para chamar essa função inline. Aqui estamos pegando o título da coluna DataFrame. Estamos usando isso se aplica com lambda x e, em seguida, chamamos nossa função de pré-processamento. Agora esta é a versão mais avançada do que eu estava falando anteriormente, onde estávamos usando lambdas para chamar a duração do título. Desta vez, estamos chamando nossa própria função personalizada, o que é muito bom. Então, geralmente o jeito que eu gosto de fazer as coisas. E assim, depois de recebermos nosso texto pré-processado e a próxima coisa que podemos fazer, ligue para a substituição do dicionário e substitua todas essas instâncias. E então, se corremos, isso realmente acaba demorando menos de um segundo. Então passamos de dois minutos antes para menos de um segundo aqui, o que é uma loucura apenas reescrevendo a maneira como escrevemos nosso código original. Você verá aqui que eu salvei dessa nova coluna chamada title clean versão dois. E isso nos dá exatamente o mesmo resultado que obtivemos antes. 16. Exemplo de código 2 — Lenta: Então, passando para o nosso próximo exemplo. Digamos que neste exemplo queremos contar o número de tokens que estão no título do artigo de notícias. Mas, para ser considerado um token, e teremos algumas condições que precisam ser verdadeiras. Vamos limatizar todos os nossos tokens para levá-los à sua forma raiz. E esses tokens lematizados têm que um, ser maior que um personagem para não ser uma palavra de parada. E três, esteja no Natural Language Toolkit, vocabulário. Tudo isso é uma espécie de nova terminologia para você. Eu recomendaria que você confira meu outro curso, processamento de linguagem natural em Python, onde mergulhamos profundamente no que significa lematizar se palavras de parada, o que é um vocabulário, toda essa terminologia. Então, para realmente implementar essas regras em Python, uma maneira de fazermos isso é importando algumas bibliotecas que precisamos, principalmente NLTK, que é Natural Language Toolkit e pandas. Então NLTK tem uma lista de palavras stop e então tem seu próprio lemmatizado é que vamos fazer. Se você estiver executando isso pela primeira vez, talvez precise baixá-los e eu já os baixei, então ele deve pular para mim quando eu executá-lo. Temos essa função aqui chamada tokens de contagem no vocab NLTK, e ela leva uma string dentro da função que estamos chamando de nosso WordNet lemmatizado do NLTK. E então estamos montando um balcão. Estamos começando com apenas um loop for simples aqui. E estamos novamente dividindo nossa string em espaços em branco semelhante aos nossos outros exemplos. Isso nos dá uma lista de tokens e vamos iterar sobre cada um desses tokens. Hum, então para cada token em nossa lista vai lematizar o token. E então, se o comprimento dos tokens maior que um, não está em nossas palavras de parada e está em nosso vocabulário, então aumente o contador e isso retornará o número de tokens que atendem a esses critérios. Vamos carregá-los. Você pode ver aqui que eu já tenho esses itens NLTK baixados, mas pode levar um segundo para você baixar. Em seguida, vou excluir o DataFrame com o qual estávamos trabalhando anteriormente e em vez disso, apenas amostrei 50 registros porque alerta de spoiler, esse método leva bastante tempo. E se estivéssemos fazendo 5000 registros que eu não gostaria que nos sentássemos aqui. Então, vamos nos poupar algum tempo aqui e excluí-los e recarregar em um DataFrame com apenas 50. Então, para realmente aplicar essa função primeiro, vamos aplicar o pré-processamento que fizemos em nosso primeiro exemplo, bem como nossa substituição de dicionário. Agora, vamos usar um dos métodos mais rápidos para aplicar essa função à nossa coluna de limpeza de título. Então, vamos ver quanto tempo isso leva para correr. Tudo bem, então para mim isso levou cerca de três minutos, o que provavelmente não é aceitável considerando que isso é apenas 50 registros. Então, vamos ver quais são os resultados aqui onde. Então, apenas olhando para os primeiros cinco registros em nosso DataFrame, você pode ver aqui que temos o número de tokens que atendem a determinados critérios. 17. Exemplo de código 2 — Refactored: Agora, para a versão refatorada disso, vamos nos livrar da vamos nos livrar da função que escrevemos antes e em vez disso, usá-la de uma maneira um pouco diferente. Vamos manter as duas primeiras coisas que fizemos do nosso exemplo anterior, pré-processamento e substituição de dicionário. Agora, o que também fizemos aqui é tirar essa palavra rede lemmatizada e as palavras de parada e o vocabulário da função. E estamos apenas chamando esses para que eles não sejam recriados toda vez que a função é chamada. Agora é aqui que a magia acontece. Temos uma declaração de aplicação aqui onde o lambda com uma compreensão de lista. Vamos quebrar isso porque pode parecer um pouco complicado no início. Então, o que eu costumo fazer de novo, quando olho para as compreensões de lista, Comece onde o for-loop está acontecendo, leia tudo isso para a direita e depois volto para o que está acontecendo no lado esquerdo disso. Então, aqui estamos aplicando essa operação a todo o nosso DataFrame em nossa coluna de limpeza de título. Então, nesse caso, essa é a nossa saída. Então, para cada item que estamos iterando, vamos dividi-lo no espaço em branco. Isso nos dá uma lista de tokens semelhantes ao que fizemos em exemplos anteriores. E então vamos verificar algumas condições diferentes. Vamos garantir que o token lemmatizado seja maior que um caractere. Não está em nossas palavras de parada e está no nosso vocab NLTK, se todos esses critérios forem atendidos, vamos retornar apenas esse token. Tudo isso está envolvido em uma compreensão de lista. Lembre-se, então teremos uma lista de tokens que atendem a esses critérios. E então podemos apenas obter o comprimento da lista. E isso deve nos dar o mesmo resultado do que tínhamos no slide anterior. Então, quando corremos isso, voltamos de perto de três minutos para menos de um segundo, o que é incrível vê-lo. Então, em nosso código aqui, você verá que obtemos exatamente a mesma resposta que fizemos para a versão anterior. E economizamos tanto tempo fazendo isso. Então isso encerra este curso sobre dicas para escrever Python eficiente. Espero que você tenha aprendido algumas técnicas para percorrer Pandas, DataFrames e também algum pré-processamento ao longo do caminho. E isso realmente apenas arranha a superfície do que você pode fazer com a otimização de seu código em Python, além disso, quando você começa a lidar com dados de ágar, existem outras ferramentas e bibliotecas, como Hadoop e VAX que podem ajudá-lo a lidar com seu big data. Obrigado por acompanhar esta lição, e estou ansioso para vê-lo na próxima.