Pandas vs. SQL — Parte 4: Pandas é mais conveniente
tl;dr: Neste post, comparamos Pandas vs. SQL no terceiro de três eixos: conveniência. Descrevemos seis maneiras pelas quais o modelo de dataframe do Pandas é mais conveniente para casos de uso de ciência de dados e aprendizado de máquina.
Nesta quarta oferta de nossa batalha épica entre Pandas e SQL, ilustramos como o Pandas é mais conveniente do que o SQL para ciência de dados e aprendizado de máquina. O Pandas foi projetado por cientistas de dados para cientistas de dados e se beneficiou de milhares de melhorias fornecidas com entusiasmo pela comunidade de ciência de dados de código aberto - tudo com o objetivo de maior utilidade e facilidade de uso. Portanto, não é surpresa que seja um bom ajuste!
Antes de começarmos, se você perdeu nossas ofertas Pandas vs. SQL anteriores, ainda pode se atualizar aqui: Parte 1: A praça de alimentação e o restaurante estilo Michelin , Parte 2: Pandas é mais conciso e Parte 3: Pandas é mais Flexível . Nossas postagens anteriores focaram em comparações do modelo de dados do dataframe e da álgebra do dataframe — nesta postagem, nos concentramos na ergonomia do dataframe: especificamente, como os dataframes são usados.
Para facilitar a pesquisa, aqui está uma lista útil das várias maneiras pelas quais os dataframes do Pandas são mais convenientes do que suas contrapartes relacionais/SQL:
- No Pandas, você pode construir consultas de forma incremental à medida que avança; no SQL, você não pode.
- No Pandas, é fácil operar e nomear resultados intermediários; no SQL é mais difícil.
- No Pandas, é fácil ter uma noção rápida dos dados; no SQL é muito mais difícil.
- Pandas tem suporte nativo para visualização; SQL não.
- O Pandas facilita o aprendizado de máquina; SQL não.
- O Pandas preserva a ordem para ajudar os usuários a verificar a exatidão das etapas intermediárias - e permite que os usuários operem sob ordem; SQL não.
1. No Pandas, você pode construir consultas de forma incremental à medida que avança; no SQL, você não pode.
Uma distinção importante entre Pandas e SQL é que o Pandas permite que os usuários coloquem operações em camadas de forma incremental sobre outras para construir consultas mais complicadas. Ao mesmo tempo, os usuários podem inspecionar os resultados intermediários desses fragmentos de consulta — em um esforço para verificar a exatidão à medida que avançam. A depuração é muito fácil com o Pandas!
Portanto, em nosso conjunto de dados, digamos que queremos nos concentrar nas licenças correspondentes à Geary Street. Podemos extrair esse subconjunto do conjunto de dados da seguinte maneira:
Uma coisa que podemos ter notado é que Geary abrange muitos bairros, codificados aqui como 'Neighborhoods - Analysis Boundaries'
. Suponha que queremos apenas examinar esta coluna 'Neighborhoods - Analysis Boundaries'
(e descartar as 42 colunas restantes), podemos simplesmente anexar a cláusula [['Neighborhoods - Analysis Boundaries']]
no final da expressão anterior.
São muitas linhas: 1966. Então, como nossas duas últimas etapas, digamos que queremos identificar os bairros em Geary com mais licenças. Uma maneira de fazer isso é anexar um 'sort_values'
seguido por um 'value_counts'
.
Interessante, então o bairro principal é o Tenderloin, seguido por Outer Richmond. Observe que, embora essa sequência de operações certamente possa ser expressa em SQL, teria sido muito mais trabalhoso. Não podemos simplesmente acrescentar operadores no final da consulta SQL: há locais específicos na consulta onde precisaríamos fazer alterações. Por exemplo, para alterar quais colunas são exibidas, precisaríamos modificar a SELECT
parte da consulta desde o início. Em vez disso, o Pandas permite que você pense operacionalmente (ou imperativamente) - e construa seu resultado final passo a passo, enquanto examina os resultados intermediários.
2. No Pandas, é fácil operar e nomear resultados intermediários; no SQL é mais difícil.
Pandas, uma vez que está embutido em uma linguagem de programação real, Python, empresta muitos dos idiomas programáticos familiares para operar em dataframes. Em particular, podemos atribuir uma expressão de dataframe a uma variável; essas variáveis podem então ser operadas e/ou atribuídas a outras variáveis.
Vamos pegar um exemplo simples para ilustrar. Como esse conjunto de dados é de um desafio de limpeza de dados, digamos que suspeitamos que pode haver muitos valores nulos. Podemos verificar quantos são por coluna, usando o seguinte:
Isso é um monte de valores nulos! Suponha que eu queira criar uma versão limpa do meu conjunto de dados, descartando colunas com muitos valores nulos, com o limite definido em 190.000 valores não nulos. (O conjunto de dados geral tem cerca de 199.000 linhas.)
Uau — o número de colunas cai de 43 para apenas 13. Como vimos aqui, fomos capazes de definir facilmente uma nova variável 'sf_permits_cleaned'
(assim como criamos a variável anterior 'missing_values_count'
), usando a atribuição de variável programática padrão e, posteriormente, operá-la. Essa abordagem é natural para programadores. No SQL, pode-se obter um efeito semelhante por meio de visualizações, mas definir visualizações e operar nelas é menos intuitivo e mais complicado.
3. No Pandas, é fácil ter uma noção rápida dos dados; no SQL é muito mais difícil.
O Pandas oferece maneiras rápidas de entender os dados e metadados de um dataframe. Já vimos exemplos disso quando imprimimos um dataframe simplesmente usando seu nome de variável, ou se usamos as funções 'head/tail()'
. Por conveniência, para caber em uma tela, certas linhas e colunas são ocultadas '...'
para ajudar os usuários a obter uma imagem de alto nível dos dados.
Se quisermos inspecionar um resumo das colunas e seus tipos, uma função conveniente oferecida pelo Pandas é 'info()'
, que lista as colunas do conjunto de dados, seus tipos e número de valores nulos. Podemos usar esta função para inspecionar o dataframe que acabamos de criar.
Portanto, parece que a única coluna que ainda contém valores nulos é a coluna de descrição; todas as outras colunas estão totalmente preenchidas.
Outra função útil do Pandas, voltada para colunas numéricas, é 'describe()'
, que fornece um resumo conveniente dessas colunas, com contagens, médias, desvios padrão e quantis.
Hmm, então parece haver uma rua número 0. Curioso!
Infelizmente, o SQL não oferece conveniências semelhantes para entender a forma e as características de um conjunto de dados — você teria que escrever consultas personalizadas para essa finalidade. Para o exemplo anterior, o comprimento desta consulta seria proporcional ao número de colunas numéricas.
4. Pandas tem suporte nativo para visualização; SQL não.
A análise de tabelas de números só o levará até certo ponto. Muitas vezes, o que você precisa são formas visuais de entender as informações nos quadros de dados. Ao contrário do SQL, que exige que você carregue seus dados em uma ferramenta separada de visualização ou BI (Business Intelligence), o Pandas oferece suporte de visualização integrado diretamente na biblioteca. Por exemplo, posso simplesmente ligar 'plot()'
para ver um gráfico de barras 'Current Status'
de várias licenças.
Parece que a grande maioria das licenças está nas categorias concluídas, emitidas e arquivadas, com um pequeno número em outras categorias.
O poder desse recurso é óbvio: ao contrário dos bancos de dados SQL, você não precisa sair da biblioteca se quiser gerar visualizações — você pode fazer isso ali mesmo! Se você quiser "aprimorar" sua experiência de visualização, há inúmeras bibliotecas de visualização que se integram perfeitamente com os pandas, incluindo Matplotlib , seaborn e altair . E se você é preguiçoso, como eu, e não deseja escrever nenhum código para gerar visualizações, pode usar Lux , nossa biblioteca de recomendação de visualização nativa do Pandas, para gerar visualizações para você automaticamente, tudo ajustado ao seu conjunto de dados . Leia mais sobre o Lux aqui .
5. O Pandas facilita o aprendizado de máquina; SQL não.
O aprendizado de máquina é um componente-chave da ciência de dados, permitindo que os usuários não apenas entendam dados não estruturados, como imagens, vídeos e textos, mas também façam previsões sobre o futuro. Como o Pandas está totalmente integrado ao ecossistema de ciência de dados, não é surpresa que ele funcione bem com bibliotecas de aprendizado de máquina, incluindo as comuns como scikit-learn , pytorch , numpy , entre outras. Aqui, usaremos a biblioteca spaCy , uma biblioteca de processamento de linguagem natural relativamente nova, para entender uma coluna de texto em nosso conjunto de dados. O SpaCy oferece vários modelos pré-treinados de palavras para realizar incorporação de palavras, reconhecimento de entidades nomeadas, marcação de parte da fala, classificação, entre outros. Para instalar o spaCy, executamos os seguintes comandos:
Agora que o instalamos, suponha que queremos entender o tipo de atividades (por exemplo, demolição, remoção, substituição, etc.) envolvidas em cada solicitação de permissão (ou seja, linha) em nosso conjunto de dados. Isso é difícil de entender antecipadamente, mas está oculto no campo de texto, 'Description'
. Vamos usar o pacote para extrair uma lista de verbos mencionados neste campo. Como parte disso, primeiro carregamos o 'en_core_web_md'
modelo de spaCy e, em seguida, extraímos cada verbo na tokenização da descrição usando o modelo, armazenando-o em uma matriz, conforme a seguir.
Assim, como podemos ver acima, o modelo faz um trabalho razoável de extração de verbos, mesmo que falte alguns (por exemplo, instalar). Com a crescente disponibilidade de grandes modelos pré-treinados (por exemplo, modelos de transformadores), espero uma integração ainda maior desses modelos no processamento de dados do dia-a-dia nos pandas.
A integração do aprendizado de máquina em bancos de dados SQL é extraordinariamente difícil. Embora alguns bancos de dados ofereçam construções específicas de aprendizado de máquina (por exemplo, BigQuery ML), os usuários são limitados no que podem realizar e não têm um controle refinado. Outra abordagem kludgy é usar UDFs para fazer aprendizado de máquina. Muitas vezes, o que acaba acontecendo são os usuários exportando seus dados fora do contexto do banco de dados para realizar o aprendizado de máquina.
6. O Pandas preserva a ordem para ajudar os usuários a verificar a exatidão das etapas intermediárias - e permite que os usuários operem sob ordem; SQL não.
Pandas preserva a ordem. Isso é importante para depuração e validação, pois se está construindo expressões de consulta mais complicadas. Continuando com meu exemplo fresco após a extração spaCy de verbos, digamos que eu queira usar a 'explode'
função para expandir os verbos individuais no dataframe anterior em várias linhas, uma por verbo; Eu posso fazer isso simplesmente da seguinte maneira.
Observe que agora tenho três linhas correspondentes à linha 1 original, uma com cada um dos verbos extraídos. Essa preservação da ordem facilita a verificação da correção dessa etapa. Usando um banco de dados SQL, isso seria muito mais difícil porque a ordem não é garantida, portanto, seria necessário examinar toda a saída para ver onde uma determinada linha terminou (ou, em vez disso, adicionar uma cláusula para impor uma ordem de saída específica).ORDER BY
Conclusão
Nesta postagem, abordamos várias maneiras pelas quais o Pandas é mais conveniente do que o SQL do ponto de vista do usuário final. Isso inclui a facilidade de construir consultas Pandas corretamente, por meio da preservação da ordem, composição incremental, nomeação e manipulação e inspeção ao longo do caminho. Isso também inclui a integração com outras necessidades de ciência e análise de dados, incluindo visualização e aprendizado de máquina: o Pandas permite que os usuários visualizem e executem modelagem preditiva inteiramente dentro do Pandas, mas também fornece os ganchos para conectar as saídas a outras bibliotecas populares de visualização e aprendizado de máquina e pacotes, especialmente dentro do ecossistema PyData. Em última análise, o Pandas está inserido em uma linguagem de programação completa, Python, e herda todo o seu poder constituinte.
Se você puder pensar em outros exemplos em que o Pandas é mais conveniente do que o SQL, ou vice-versa, adoraríamos ouvi-lo! Sinta-se à vontade para responder ao nosso tweet e siga-nos no Twitter ou LinkedIn para mais conteúdo sobre Pandas/Python/ciência de dados!