Tentarei formular uma resposta abordando os principais pontos em que os dois idiomas entram em jogo para ciência de dados / estatística / análise de dados e similares, como alguém que usa os dois.
O fluxo de trabalho na análise de dados geralmente consiste nas seguintes etapas:
- Buscando os dados de algum tipo de origem (provavelmente um banco de dados SQL / noSQL ou arquivos .csv).
- Analisando os dados em um formato decente e razoável (quadro de dados) para que se possa realizar operações e pensar nisso.
- Aplicando algumas funções aos dados (agrupamento, exclusão, mesclagem, renomeação).
- Aplicação de algum tipo de modelo aos dados (regressão, agrupamento, uma rede neural ou qualquer outra teoria mais ou menos complicada).
- Implantando / apresentando seus resultados para um público mais ou menos técnico.
Buscando dados
Em 99% do tempo, o processo de busca de dados se resume à consulta de algum tipo de banco de dados SQL ou Impala: o Python e o R têm clientes ou bibliotecas específicas que fazem o trabalho rapidamente e igualmente bem ( RImpala
, RmySQL
para o R e MySQLdb
para o Python funcionar sem problemas, não há muito a acrescentar). Quando se trata de ler arquivos .csv externos, o data.table
pacote para R fornece a função fread
que lê arquivos enormes e complicados .csv com qualquer opção de análise personalizada rapidamente e transforma o resultado diretamente em quadros de dados com nomes de colunas e números de linhas.
Organizando os quadros de dados
Queremos que os dados sejam armazenados em algum tipo de tabela para que possamos acessar qualquer entrada, linha ou coluna com facilidade.
O pacote Rdata.table
oferece maneiras imbatíveis de rotular, renomear, excluir e acessar os dados. A sintaxe padrão é muito parecida com o SQL dt[i, j, fun_by]
, onde deve estar dt[where_condition, select_column, grouped_by (or the like)]
; funções personalizadas definidas pelo usuário podem ser inseridas, assim como na j
cláusula, para que você fique completamente livre para manipular os dados e aplicar qualquer função complicada ou sofisticada em grupos ou subconjuntos (como a i-ésima linha, k-ésima e soma-o ao (k-2) -ésimo elemento da (i-1) -ésima linha se e somente se o desvio padrão de toda a coluna for o que é, agrupado pela última coluna). Dê uma olhada nos benchmarks e nesta outra pergunta incrível sobre SO. A classificação, a exclusão e a renomeação de colunas e linhas fazem o que elas precisam fazer, e os métodos R vetorizados padrão apply, sapply, lapply, ifelse
executam operações vetorizadas em colunas e quadros de dados completamente, sem repetir cada elemento (lembre-se de que sempre que você estiver usando loops em R, você estão fazendo muito mal).
O contraponto do Python é a pandas
biblioteca. Finalmente, ele fornece a estrutura pd.DataFrame
(que falta ao Python padrão, por algum motivo ainda desconhecido para mim) que trata os dados pelo que eles são, ou seja, quadros de dados (em vez de alguns numpy array, numpy list, numpy matrix
ou o que for). Operações como agrupamento, renomeação, classificação e similares podem ser facilmente alcançadas e também aqui o usuário pode aplicar qualquer função personalizada a um conjunto de dados ou subconjunto do quadro usando Python apply
ou lambda
. Pessoalmente, não gosto da gramática df[df.iloc(...)]
para acessar as entradas, mas isso é apenas gosto pessoal e não tem problema algum. Os benchmarks para operações de agrupamento ainda são um pouco piores que R, data.table
mas, a menos que você queira economizar 0,02 segundos para a compilação, não há grande diferença no desempenho.
Cordas
A maneira R de tratar seqüências de caracteres é usar o stringr
pacote que permite qualquer manipulação de texto, anagrama, expressão regular, espaços em branco à direita ou similar com facilidade. Também pode ser usado em combinação com as bibliotecas JSON que descompactam dicionários JSON e listam seus elementos, para que se tenha um quadro de dados final em que os nomes das colunas e os elementos sejam o que devem ser, sem nenhum caractere não UTF8 ou espaço em branco lá.
O Pandas do Python .str.
faz o mesmo trabalho de brincar com expressões regulares, seguindo ou tão bom quanto seu concorrente, portanto, mesmo aqui não há grande diferença de gosto.
Aplicando modelos
Aqui é onde, na minha opinião, surgem diferenças entre os dois idiomas.
RA partir de hoje, possui um conjunto imbatível de bibliotecas que permitem ao usuário fazer essencialmente o que quiser em uma ou duas linhas de código. Regressões funcionais ou polinomiais padrão são executadas em linhas únicas e produzem resultados cujos coeficientes são facilmente legíveis, acompanhados por seus correspondentes intervalos de confiança e distribuições de valores p. Da mesma forma para agrupamento, da mesma forma para modelos florestais aleatórios, da mesma forma para dendogramas, análise de componentes principais, decomposições de valores singulares, ajustes logísticos e muito mais. O resultado de cada uma das opções acima provavelmente vem com uma classe de plotagem específica que gera visualizações do que você acabou de fazer, com cores e bolhas para coeficientes e parâmetros. Testes de hipóteses, testes estatísticos, Shapiro,
Python está tentando acompanhar SciPy
e scikit-learn
. A maioria das análises e modelos padrão também está disponível, mas eles são um pouco mais longos para codificar e menos intuitivos para ler (na minha opinião). Faltam máquinas mais complicadas, embora algumas possam ser rastreadas até algumas combinações das bibliotecas já existentes. Uma coisa que eu prefiro fazer no Python do que no R é a análise de texto com palavras de ordem gramatical, bi-gramas, tri-gramas e ordens superiores.
Apresentando os resultados
Ambas as linguagens possuem belas ferramentas de plotagem, R ggplot2
acima de tudo e o equivalente equivalente em Python. Não há muito o que competir, eles fazem o trabalho são e salvo, embora eu acredite que, se você estiver apresentando os resultados, poderá usar outras ferramentas - existem ferramentas de design coloridas sofisticadas por aí e nem o Python nem o R pretendem surpreender o público. público com arrasto vermelho e verde chique e gotas. Ultimamente, o R publicou muitas melhorias em seus shiny app
recursos, que basicamente permitem produzir resultados interativos . Eu nunca quis aprender, mas sei que existe e as pessoas o usam bem.
Nota
Como observação lateral, eu gostaria de enfatizar que a principal diferença entre as duas linguagens é que o Python é um idioma de programação de uso geral, criado por e para ciência da computação, portabilidade, implantações e assim por diante. É incrível no que faz e é fácil de aprender; não há ninguém que não goste de python. Mas é uma linguagem de programação para fazer programação.
R, por outro lado, foi inventado por e para matemáticos, físicos, estatísticos e cientistas de dados. Se você vem desse contexto, tudo faz todo sentido, porque reflete e reproduz perfeitamente os conceitos usados em estatística e matemática. Mas se, em vez disso, você vem de um conhecimento em ciência da computação e deseja simular Java ou C em R, ficará desapontado; não possui "objetos" no sentido padrão (bem, sim, mas não o que normalmente se pensa que são ...), não possui classes no sentido padrão (bem, sim, mas não o que normalmente pensa que são ...), ele não tem "ponteiros" ou todas as outras estruturas de ciência da computação - mas apenas porque não precisa deles. Por último mas não menos importante: documentação e pacotes são fáceis de criar e ler (se você estiver usando o Rstudio); existe uma comunidade grande e apaixonada por aí, e leva literalmente cinco segundos para o Google "como inserir problema aleatório em R" cuja primeira entrada o redireciona para uma solução para o problema (feito por outra pessoa) com o código correspondente , em nenhum momento.
A maioria das empresas industriais possui sua infraestrutura construída em Python (ou em um ambiente compatível com Python) que permite a fácil integração do código Python (em import myAnalysis
qualquer lugar e basicamente você está pronto). No entanto, qualquer tecnologia ou servidor ou plataforma moderna executa facilmente o código R em segundo plano sem nenhum problema.