O rico ecossistema de ferramentas de ciência de dados do Python é um grande atrativo para os usuários. A única desvantagem de uma coleção tão ampla e profunda é que às vezes as melhores ferramentas podem passar despercebidas.

Aqui está um resumo de alguns dos melhores projetos de ciência de dados mais recentes ou menos conhecidos disponíveis para Python. Alguns, como os polares, estão recebendo mais atenção do que antes, mas ainda merecem uma atenção mais ampla. Outros, como o ConnectorX, são joias escondidas.

ConectorX

A maioria dos dados fica em algum lugar em um banco de dados, mas a computação normalmente acontece fora de um banco de dados. Obter dados de e para o banco de dados para o trabalho real pode ser uma lentidão. O ConnectorX carrega dados de bancos de dados em muitas ferramentas comuns de organização de dados em Python e mantém as coisas rápidas, minimizando a quantidade de trabalho a ser feito.

Assim como o Polars (que discutirei em breve), o ConnectorX usa uma biblioteca Rust em seu núcleo. Isso permite otimizações, como a capacidade de carregar de uma fonte de dados em paralelo com o particionamento. Os dados no PostgreSQL, por exemplo, podem ser carregados desta forma especificando uma coluna de partição.

Além do PostgreSQL, o ConnectorX também oferece suporte à leitura de MySQL/MariaDB, SQLite, Amazon Redshift, Microsoft SQL Server e Azure SQL e Oracle. Os resultados podem ser canalizados para um DataFrame Pandas ou PyArrow, ou para Modin, Dask ou Polars por meio de PyArrow.

PatoDB

O pessoal de ciência de dados que usa Python deve estar ciente do SQLite – um banco de dados relacional pequeno, mas poderoso e rápido, empacotado com Python. Como é executado como uma biblioteca em processo, em vez de um aplicativo separado, é leve e responsivo.

DuckDB é mais ou menos como se alguém tivesse respondido à pergunta: “E se fizéssemos SQLite para OLAP?” Como outros mecanismos de banco de dados OLAP, ele usa um armazenamento de dados colunar e é otimizado para cargas de trabalho de consultas analíticas de longa duração. Mas oferece tudo o que você espera de um banco de dados convencional, como transações ACID. E não há nenhum pacote de software separado para configurar; você pode executá-lo em um ambiente Python com um único pip install comando.

DuckDB pode ingerir dados diretamente no formato CSV, JSON ou Parquet. Os bancos de dados resultantes também podem ser particionados em vários arquivos físicos para maior eficiência, com base em chaves (por exemplo, por ano e mês). A consulta funciona como qualquer outro banco de dados relacional baseado em SQL, mas com recursos integrados adicionais, como a capacidade de obter amostras aleatórias de dados ou construir funções de janela.

DuckDB também possui uma coleção pequena, mas útil de extensões, incluindo pesquisa de texto completo, importação/exportação de Excel, conexões diretas com SQLite e PostgreSQL, exportação de arquivo Parquet e suporte para muitos formatos e tipos de dados geoespaciais comuns.

Optimus

Um dos trabalhos menos invejáveis ​​que você pode realizar é limpar e preparar dados para uso em um projeto centrado em DataFrame. Optimus é um conjunto de ferramentas completo para carregar, explorar, limpar e gravar dados em uma variedade de fontes de dados.

A Optimus pode usar Pandas, Dask, CUDF (e Dask + CUDF), Vaex ou Spark como mecanismo de dados subjacente. Os dados podem ser carregados e salvos em Arrow, Parquet, Excel, em uma variedade de fontes de banco de dados comuns ou em formatos de arquivo simples, como CSV e JSON.

A API de manipulação de dados se assemelha ao Pandas, mas adiciona .rows() e .cols() acessadores para facilitar ações como classificar um DataFrame, filtrar por valores de coluna, alterar dados de acordo com critérios ou restringir o intervalo de operações com base em alguns critérios. O Optimus também vem com processadores para lidar com tipos de dados comuns do mundo real, como endereços de e-mail e URLs.

Um possível problema com o Optimus é que ele ainda está em desenvolvimento ativo, mas seu último lançamento oficial foi em 2020. Isso significa que pode não estar tão atualizado quanto outros componentes da sua pilha.

Polares

Se você passa muito tempo trabalhando com DataFrames e está frustrado com os limites de desempenho do Pandas, procure o Polars. Esta biblioteca DataFrame para Python oferece uma sintaxe conveniente semelhante ao Pandas.

Ao contrário do Pandas, porém, o Polars usa uma biblioteca escrita em Rust que tira o máximo proveito do seu hardware pronto para uso. Você não precisa usar sintaxe especial para aproveitar recursos de aprimoramento de desempenho, como processamento paralelo ou SIMD; é tudo automático. Até mesmo operações simples, como a leitura de um arquivo CSV, são mais rápidas.

Polars fornece modos de execução rápidos e lentos, para que as consultas possam ser executadas imediatamente ou adiadas até que sejam necessárias. Ele também fornece uma API de streaming para processar consultas de forma incremental, embora o streaming ainda não esteja disponível para muitas funções. E os desenvolvedores do Rust podem criar suas próprias extensões Polars usando pyo3.

Serpente

Os fluxos de trabalho de ciência de dados são difíceis de configurar e ainda mais difíceis de fazer de maneira consistente e previsível. Snakemake foi criado para automatizar o processo, configurando fluxos de trabalho de análise de dados de forma a garantir que todos obtenham os mesmos resultados. Muitos projetos de ciência de dados existentes dependem do Snakemake. Quanto mais partes móveis você tiver em seu fluxo de trabalho de ciência de dados, maior será a probabilidade de você se beneficiar da automatização desse fluxo de trabalho com o Snakemake.

Os fluxos de trabalho Snakemake se assemelham aos fluxos de trabalho GNU make – você define as etapas do fluxo de trabalho com regras, que especificam o que eles recebem, o que eles lançam e quais comandos executar para conseguir isso. As regras de fluxo de trabalho podem ser multithread (supondo que isso lhes proporcione algum benefício) e os dados de configuração podem ser canalizados a partir de arquivos JSON ou YAML. Você também pode definir funções em seus fluxos de trabalho para transformar dados usados ​​em regras e gravar nos logs as ações executadas em cada etapa.

Os trabalhos do Snakemake são projetados para serem portáteis – eles podem ser implantados em qualquer ambiente gerenciado pelo Kubernetes ou em ambientes de nuvem específicos, como Google Cloud Life Sciences ou Tibanna na AWS. Os fluxos de trabalho podem ser “congelados” para usar um conjunto específico de pacotes, e os fluxos de trabalho executados com sucesso podem ter testes de unidade gerados automaticamente e armazenados com eles. E para arquivamento de longo prazo, você pode armazenar o fluxo de trabalho como um tarball.