Eu tentei descobrir uma resposta para essa pergunta por muitos meses enquanto aprendia pandas. Eu uso o SAS no meu trabalho diário e é ótimo pelo suporte fora do núcleo. No entanto, o SAS é horrível como um software por várias outras razões.
Um dia, espero substituir meu uso do SAS por python e pandas, mas atualmente não tenho um fluxo de trabalho fora do núcleo para grandes conjuntos de dados. Não estou falando de "big data" que requer uma rede distribuída, mas de arquivos muito grandes para caber na memória, mas pequenos o suficiente para caber em um disco rígido.
Meu primeiro pensamento é usar HDFStore
para armazenar grandes conjuntos de dados em disco e puxar apenas as peças necessárias para os quadros de dados para análise. Outros mencionaram o MongoDB como uma alternativa mais fácil de usar. Minha pergunta é esta:
Quais são alguns fluxos de trabalho de práticas recomendadas para realizar o seguinte:
- Carregando arquivos simples em uma estrutura de banco de dados permanente em disco
- Consultando esse banco de dados para recuperar dados para alimentar uma estrutura de dados do pandas
- Atualizando o banco de dados após manipular peças nos pandas
Exemplos do mundo real seriam muito apreciados, especialmente de quem usa pandas em "grandes dados".
Editar - um exemplo de como eu gostaria que isso funcionasse:
- Importe iterativamente um arquivo simples grande e armazene-o em uma estrutura de banco de dados permanente em disco. Esses arquivos geralmente são grandes demais para caber na memória.
- Para usar o Pandas, eu gostaria de ler subconjuntos desses dados (geralmente apenas algumas colunas por vez) que podem caber na memória.
- Eu criaria novas colunas executando várias operações nas colunas selecionadas.
- Eu teria que anexar essas novas colunas na estrutura do banco de dados.
Estou tentando encontrar uma maneira de praticar as melhores práticas para executar essas etapas. Lendo links sobre pandas e tabelas, parece que acrescentar uma nova coluna pode ser um problema.
Editar - Respondendo especificamente às perguntas de Jeff:
- Estou construindo modelos de risco de crédito ao consumidor. Os tipos de dados incluem características de telefone, SSN e endereço; valores de propriedade; informações depreciativas, como antecedentes criminais, falências, etc. Os conjuntos de dados que eu uso todos os dias têm cerca de 1.000 a 2.000 campos, em média, de tipos mistos de dados: variáveis contínuas, nominais e ordinais de dados numéricos e de caracteres. Eu raramente anexo linhas, mas realizo muitas operações que criam novas colunas.
- As operações típicas envolvem a combinação de várias colunas usando lógica condicional em uma nova coluna composta. Por exemplo
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'
,. O resultado dessas operações é uma nova coluna para cada registro no meu conjunto de dados. - Por fim, gostaria de acrescentar essas novas colunas à estrutura de dados em disco. Eu repetiria a etapa 2, explorando os dados com tabelas cruzadas e estatísticas descritivas, tentando encontrar relacionamentos interessantes e intuitivos para modelar.
- Um arquivo de projeto típico costuma ter cerca de 1 GB. Os arquivos são organizados de tal maneira que uma linha consiste em um registro de dados do consumidor. Cada linha tem o mesmo número de colunas para cada registro. Este sempre será o caso.
- É muito raro eu agrupar por linhas ao criar uma nova coluna. No entanto, é bastante comum eu definir subconjuntos em linhas ao criar relatórios ou gerar estatísticas descritivas. Por exemplo, convém criar uma frequência simples para uma linha de negócios específica, como cartões de crédito de varejo. Para fazer isso, selecionaria apenas os registros em que a linha de negócios = varejo, além das colunas nas quais quero relatar. Ao criar novas colunas, no entanto, eu puxaria todas as linhas de dados e apenas as colunas necessárias para as operações.
- O processo de modelagem exige que eu analise todas as colunas, procure relacionamentos interessantes com alguma variável de resultado e crie novas colunas compostas que descrevam esses relacionamentos. As colunas que exploro são geralmente feitas em pequenos conjuntos. Por exemplo, vou me concentrar em um conjunto de 20 colunas, digamos, apenas lidando com valores de propriedades e observando como eles se relacionam com a inadimplência de um empréstimo. Depois que essas são exploradas e novas colunas são criadas, passo para outro grupo de colunas, digamos educação universitária e repito o processo. O que estou fazendo é criar variáveis candidatas que explicam a relação entre meus dados e algum resultado. No final deste processo, aplico algumas técnicas de aprendizado que criam uma equação a partir dessas colunas compostas.
É raro que eu adicione linhas ao conjunto de dados. Eu quase sempre vou criar novas colunas (variáveis ou recursos na estatística / linguagem de aprendizado de máquina).