Em muitos tutoriais ou manuais, a narrativa parece implicar que R e python coexistem como componentes complementares do processo de análise. Para meus olhos destreinados, no entanto, parece que os dois idiomas fazem o mesmo.
Então, minha pergunta é se existem nichos realmente especializados para os dois idiomas ou se é apenas uma preferência pessoal usar um ou outro?
Respostas:
Eles são complementares. É verdade que ambos podem fazer as mesmas coisas, mas isso pode ser dito da maioria dos idiomas. Cada um tem seus pontos fortes e fracos. A perspectiva comum parece ser que o Python é melhor para coleta e preparação de dados, bem como para análise textual. R é considerado melhor para a análise dos dados, pois é uma linguagem estatística em primeiro lugar.
O R tem uma variedade enorme de pacotes para tudo o que você pode imaginar, mas seu ponto principal é a análise estatística - do qui-quadrado básico à análise fatorial e modelos de risco, é fácil e robusto. Alguns dos maiores nomes das estatísticas criam pacotes R e possui uma comunidade animada para ajudar com todas as suas necessidades.
ggplot2
é um padrão na visualização de dados (gráficos etc.). R é uma linguagem vetorizada e construída para fazer um loop através dos dados de maneira eficiente. Ele também armazena todos os dados na RAM, que é uma faca de dois gumes - é ágil em conjuntos de dados menores (embora alguns possam argumentar comigo), mas não consegue lidar bem com grandes dados (embora tenha pacotes para contornar isso) , comoff
).O Python é consideravelmente mais fácil de aprender do que o R - especialmente para aqueles que têm experiência anterior em programação. R é apenas ... estranho. O Python é ótimo na recuperação de dados e é a linguagem a ser usada na raspagem da Web (com o incrível
beautifulsoup
). O Python é conhecido por sua força na análise de cadeias e manipulação de texto.pandas
é uma ótima biblioteca para manipulação de dados, mesclagem, transformação, etc., e é rápida (e provavelmente inspirada em R).Python é ótimo quando você precisa fazer alguma programação. Isso não é surpreendente, pois é uma linguagem de uso geral. R, no entanto, com todas as suas extensões, foi construído por estatísticos para estatísticos. Portanto, embora o Python possa ser mais fácil, melhor e mais rápido em muitos aplicativos, R seria a plataforma preferida para análise estatística.
fonte
data.table
pacote em R destina-se especificamente a um trabalho eficiente em torno de grandes conjuntos de dados e se conecta perfeitamente ao processamento distribuído.data.table
; Eu também estou feliz em dizerrvest
é uma excelente ferramenta para lidar com tarefas mais raspagem, e muito mais fácil de se levantar e correr do quebeautifulsoup
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 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 eMySQLdb
para o Python funcionar sem problemas, não há muito a acrescentar). Quando se trata de ler arquivos .csv externos, odata.table
pacote para R fornece a funçãofread
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 R
data.table
oferece maneiras imbatíveis de rotular, renomear, excluir e acessar os dados. A sintaxe padrão é muito parecida com o SQLdt[i, j, fun_by]
, onde deve estardt[where_condition, select_column, grouped_by (or the like)]
; funções personalizadas definidas pelo usuário podem ser inseridas, assim como naj
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ãoapply, 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 estruturapd.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 algunsnumpy 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 Pythonapply
oulambda
. Pessoalmente, não gosto da gramáticadf[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
escikit-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 seusshiny 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.fonte
Python é uma linguagem de programação geral: portanto, é bom para executar muitas outras tarefas além da análise de dados. Por exemplo, se queremos automatizar a execução do nosso modelo no servidor de produção, o python é uma ótima opção. Outros exemplos incluem conectar-se a hardware / sensores para ler dados, interagir com bancos de dados (dados relacionais ou não estruturados como JSON), analisar dados, programação de rede (TCP / IP), interface gráfica do usuário, interagir com shell etc. (Bem, por que um cientista de dados quer fazer tantos desses tipos de tarefas, que pouco têm a ver com modelos preditivos? Acho que as pessoas têm definições diferentes O que é um cientista de dados?Em algumas organizações, analisar os dados e fazer a análise descritiva com o painel é bom o suficiente para os negócios e os dados não são maduros o suficiente para a criação de modelos preditivos. Por outro lado, em muitas pequenas empresas, as pessoas podem esperar que os cientistas de dados façam muita engenharia de software. Conhecer python o tornará independente de outros engenheiros de software.)
O R possui muitos pacotes estatísticos muito melhores que o python ou o MATLAB. Usando R, pode-se realmente pensar no nível do modelo, em vez do nível de detalhe da implementação. Essa é uma grande vantagem no desenvolvimento de modelos estatísticos. Por exemplo, muitas pessoas estão implementando manualmente redes neurais em python; fazer esse trabalho pode não ajudar a entender por que as redes neurais funcionam, mas apenas seguir a receita para duplicar o trabalho de outras pessoas e verificar se funciona. Se estivermos trabalhando no R, podemos focar facilmente na matemática por trás do modelo, em vez dos detalhes da implementação.
Em muitos casos, as pessoas as usam juntas. Construir software é fácil de fazer em python, e construir modelos é melhor em R. Se queremos entregar um modelo em produção, mas não um artigo, podemos precisar de ambos. Se sua empresa possui muitos engenheiros de software, você pode precisar de mais R. E se sua empresa possui muitos pesquisadores, talvez precise de mais python.
fonte
scikit-learn
? scikit-learn.org/stableProgramadores de todas as faixas subestimam o quanto as opções de idioma são culturais . Desenvolvedores da Web como Node.js. Cientistas como Python. Como engenheiro de software poliglota que consegue lidar com a fluidez de Javascript e a rigidez de Java da mesma forma, percebi que não há nenhuma razão intrínseca para essas linguagens serem ruins nos trabalhos umas das outras - apenas a enorme quantidade de pacotes, documentação, comunidades, livros, etc. em torno deles.
(Por razões intrínsecas, um idioma aleatório é melhor que outro idioma, consulte os próximos comentários a esta resposta.)
Minha previsão pessoal é de que o Python é o caminho do futuro, porque ele pode fazer tudo o que R pode - ou melhor, o suficiente do que R os programadores dedicados estão trabalhando para preencher as lacunas - e é uma linguagem de engenharia de software muito melhor. Engenharia de software é uma disciplina que lida com:
Além disso, francamente, Python é mais fácil de aprender.
Cientistas e estatísticos perceberão que são partes interessadas em boas práticas de engenharia de software, não uma profissão independente e despreocupada. Apenas minha opinião, mas os documentos que comprovam a fragilidade do código acadêmico apoiarão isso.
Esta resposta é toda a minha opinião - mas você fez uma pergunta muito opinativa e, como foi bem recebida até agora, senti que você merecia uma opinião despretensiosa e razoavelmente informada (espero!). Existe um argumento sério para Python sobre R em geral, e eu seria negligente tentar postar respostas não partidárias quando a realidade pode ser partidária.
fonte
Eu sou um usuário R, mas acho que o Python é o futuro (não acho que seja a sintaxe)
Python é o futuro
O benefício do Python é que outras pessoas já mencionaram o suporte muito mais amplo e, para os programadores, uma sintaxe mais lógica.
Além disso, a capacidade de traduzir as descobertas da sua análise em um sistema de produção é muito mais direta.
Talvez seja por causa do Python ser de uso geral e R não ser, mas eu levanto as sobrancelhas quando vejo um pipeline R produzido.
Mas não é só isso, mesmo para aplicativos avançados, o Python está se recuperando rapidamente (Scikit-learn, PyBrain, Tensorflow etc.) e enquanto R ainda é a língua franca nos acadêmicos sobre como implementar métodos estatísticos, o Python ficou enorme no setor profissional devido a o advento de bibliotecas especializadas avançadas.
Mas R não é ruim
Parece que muitas pessoas gostam de pular na onda "R tem sintaxe ruim".
Desejo propor que a sintaxe de R seja uma coisa boa!
Funções de atribuição, avaliação lenta, avaliação fora do padrão e fórmulas são enormes benefícios ao usar R.
Poupa muito tempo para não ter que se preocupar em escapar de nomes de variáveis referenciados no seu resumo ou em como construir a lógica do que é modelado com relação ao que ou olhando nomes com
names()
e, em seguida, atribuindo novos nomes adicionando<- c("A", "B", "C")
.Quando as pessoas reclamam da estranha sintaxe de R, elas a encaram como uma linguagem de programação, não como uma ferramenta de ciência de dados.
Como alguém vindo de R e amando dplyr, acho a sintaxe dos pandas um pouco desajeitada em comparação.
Sim, é um pouco mais flexível, mas para a maioria das tarefas, você precisa de muito mais pressionamentos de tecla para executar um comando simples do que no R, que existe apenas para satisfazer o analisador do Python, não para expressar sua ideia.
Em resumo
É claro que é aconselhável conhecer os dois e enquanto o Python está chegando lá, as opções de design específicas do domínio da R apenas simplificam o trabalho ad hoc. A grande desvantagem do R é que é difícil deixar seu domínio, o que você basicamente precisa fazer quando tenta implementar suas descobertas de maneira sustentável.
fonte
Se você considera R mais uma ferramenta estatística e não uma linguagem de programação, é realmente ótimo. Possui muito mais flexibilidade do que o Stata ou o SPSS, mas pode fazer tudo o que pode. Eu aprendi Stata durante a faculdade, e R era fácil de ver porque eu já tinha a perspectiva da ferramenta estatística e não uma pura experiência em linguagem de programação que outros possam ter.
Eu acho que a frustração com R entra em cena quando aqueles que são programadores tentam aprender e entender R; mas é uma ótima ferramenta para quem chega ao R por meio de um histórico estatístico.
O Python é ótimo se você já é um ótimo programador; mas para mim, como iniciante em programação e estatística, acabei de sair da faculdade, R era uma escolha muito melhor. É realmente apenas a preferência de qual deles se encaixa no seu conjunto de habilidades e interessa mais.
fonte
Adicionando a algumas das respostas anteriores:
Na minha experiência, não há nada mais fácil do que usar dplyr + tidyr, ggplot e Rmarkdown na obtenção de dados brutos para resultados apresentáveis. O Python oferece muito, e eu o uso cada vez mais, mas com certeza adoro o modo como os pacotes de Hadley se unem.
fonte
O Python tem uma ampla adoção fora da ciência, então você se beneficia com tudo isso. Como "An Angry Guide to R" aponta, o R foi desenvolvido por uma comunidade, que tinha que pedir a primeira desenvolvedores de software zero.
Eu diria que hoje o R tem dois pontos fortes principais: alguns pacotes altamente especializados realmente maduros em algumas áreas e o pacote de pesquisa reprodutível de ponta knitr.
Python parece ser mais adequado para todo o resto.
Esta é uma opinião, é claro, como quase tudo neste segmento. Estou meio surpreso que esse tópico ainda esteja vivo.
fonte
Como descrito em outras respostas, o Python é uma boa linguagem de programação de uso geral, enquanto o R apresenta falhas graves como linguagem de programação, mas possui um conjunto mais rico de bibliotecas de análise de dados. Nos últimos anos, o Python acompanhou o R com o desenvolvimento de bibliotecas maduras de análise de dados, como o scikit-learn, enquanto o R nunca será corrigido. Na prática, eu uso o Python (na verdade, Hy ) para quase tudo e apenas recorro ao R para métodos relativamente esotéricos, como a regressão quantílica (cuja implementação nos modelos estatísticos do Python parece estar quebrada). Existem várias maneiras de chamar R do Python; O PypeR é simples o suficiente para que eu trabalhe em ambientes hostis como um servidor Windows.
Edit : Encorajo qualquer pessoa que queira discutir mais sobre isso a falar com os autores do ensaio vinculado, em vez de comentar essa resposta.
fonte